diff --git a/tests/test.cpp b/tests/test.cpp --- a/tests/test.cpp +++ b/tests/test.cpp @@ -21,6 +21,7 @@ #include "catch.hpp" #include "samplepack.h" +#include "source.h" TEST_CASE("samplepack with no X", "[memory]") { @@ -47,3 +48,74 @@ TEST_CASE("samplepack with X", "[memory] REQUIRE(pack.numSamples() == 100); REQUIRE(pack.xData() != nullptr); } + +class TestSink : public Sink +{ +public: + int totalFed; + int _numChannels; + bool _hasX; + + TestSink() + { + totalFed = 0; + _numChannels = 0; + _hasX = false; + }; + +public: + void feedIn(const SamplePack& data) + { + REQUIRE(data.numChannels() == numChannels()); + + totalFed += data.numSamples(); + + Sink::feedIn(data); + }; + + void setNumChannels(unsigned nc, bool x) + { + _numChannels = nc; + _hasX = x; + + Sink::setNumChannels(nc, x); + }; + + virtual unsigned numChannels() const + { + return _numChannels; + }; + + virtual bool hasX() const + { + return _hasX; + }; +}; + +TEST_CASE("sink", "[memory, stream]") +{ + TestSink sink; + SamplePack pack(100, 3, false); + + sink.setNumChannels(3, false); + REQUIRE(sink.numChannels() == 3); + + sink.feedIn(pack); + REQUIRE(sink.totalFed == 100); + sink.feedIn(pack); + REQUIRE(sink.totalFed == 200); + + TestSink follower; + + sink.connectFollower(&follower); + REQUIRE(follower.numChannels() == 3); + REQUIRE(follower.hasX() == false); + + sink.feedIn(pack); + REQUIRE(sink.totalFed == 300); + REQUIRE(follower.totalFed == 100); + + sink.setNumChannels(2, true); + REQUIRE(follower.numChannels() == 2); + REQUIRE(follower.hasX() == true); +}