diff --git a/tests/test_stream.cpp b/tests/test_stream.cpp --- a/tests/test_stream.cpp +++ b/tests/test_stream.cpp @@ -48,7 +48,50 @@ TEST_CASE("construction of stream with p } } -TEST_CASE("adding data to a stream with no X", "[memory, stream, data]") +TEST_CASE("changing stream number of channels via sink", "[memory, stream, sink]") +{ + Stream s; + TestSource so(3, false); + so.connect(&s); + + // nc=3, x= false + REQUIRE(s.numChannels() == 3); + REQUIRE(!s.hasX()); + for (unsigned i = 0; i < 3; i++) + { + const StreamChannel* c = s.channel(i); + REQUIRE(c != NULL); + REQUIRE(c->index() == i); + } + + // increase nc value, add X + so._setNumChannels(5, true); + + REQUIRE(s.numChannels() == 5); + REQUIRE(s.hasX()); + + for (unsigned i = 0; i < 5; i++) + { + const StreamChannel* c = s.channel(i); + REQUIRE(c != NULL); + REQUIRE(c->index() == i); + } + + // reduce nc value, remove X + so._setNumChannels(1, false); + + REQUIRE(s.numChannels() == 1); + REQUIRE(!s.hasX()); + + for (unsigned i = 0; i < 1; i++) + { + const StreamChannel* c = s.channel(i); + REQUIRE(c != NULL); + REQUIRE(c->index() == i); + } +} + +TEST_CASE("adding data to a stream with no X", "[memory, stream, data, sink]") { Stream s(3, false, 10); @@ -83,3 +126,55 @@ TEST_CASE("adding data to a stream with } } } + +TEST_CASE("adding data to a stream with X", "[memory, stream, data, sink]") +{ + Stream s(3, true, 10); + + // prepare data + SamplePack pack(5, 3, true); + for (unsigned ci = 0; ci < 3; ci++) + { + for (unsigned i = 0; i < 5; i++) + { + pack.data(ci)[i] = i; + } + } + // x data + for (unsigned i = 0; i < 5; i++) + { + pack.xData()[i] = i+10; + } + + TestSource so(3, true); + so.connect(&s); + + // test + so._feed(pack); + + for (unsigned ci = 0; ci < 3; ci++) + { + const StreamChannel* c = s.channel(ci); + const FrameBuffer* y = c->yData(); + + for (unsigned i = 0; i < 5; i++) + { + REQUIRE(y->sample(i) == 0); + } + for (unsigned i = 5; i < 10; i++) + { + REQUIRE(y->sample(i) == i-5); + } + } + + // check x + const FrameBuffer* x = s.channel(0)->xData(); + for (unsigned i = 0; i < 5; i++) + { + REQUIRE(x->sample(i) == 0); + } + for (unsigned i = 5; i < 10; i++) + { + REQUIRE(x->sample(i) == (i-5)+10); + } +}