Skip to content

Commit f949274

Browse files
committed
Fix signal simulator unit test issues.
1 parent b9593bc commit f949274

File tree

5 files changed

+45
-37
lines changed

5 files changed

+45
-37
lines changed

src/FrameStreamPipe.h

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include "DataSource.h"
77
#include "IStreamPipe.h"
88
#include "NeuroonSignalFrames.h"
9+
#include "logger.h"
910

1011
#include <iostream>
1112
#include <memory>
@@ -39,22 +40,23 @@ template <class T> class FrameStreamPipe : public IFrameStreamPipe {
3940
ssink->consume(frame);
4041
success = true;
4142
_frame_transmitted++;
42-
if (ssource->isDepleted()) {
43-
_depleted = true;
44-
just_depleted = true;
45-
}
43+
}
44+
if (ssource->isDepleted()) {
45+
_depleted = true;
46+
just_depleted = true;
4647
}
4748
} else {
48-
std::cerr << "\nelse sink lock";
49-
std::fflush(stdout);
49+
LOG(WARNING) << "Pipe passing frame: sink shared pointer empty";
5050
}
5151
} else {
52-
std::cerr << "\nelse source lock";
53-
std::fflush(stdout);
52+
LOG(WARNING) << "Pipe passing frame: source shared pointer empty";
5453
}
5554
} else {
56-
std::cerr << "\ndepleted or broken";
57-
std::fflush(stdout);
55+
if (this->isDepleted()) {
56+
LOG(DEBUG) << "Source depleted";
57+
} else {
58+
LOG(WARNING) << "Pipe broken: shared pointer expired";
59+
}
5860
}
5961
_log_warnings(just_depleted);
6062
return success;
@@ -81,6 +83,7 @@ template <class T> class FrameStreamPipe : public IFrameStreamPipe {
8183
if (auto ssource = _source.lock()) {
8284
if (auto ssink = _sink.lock()) {
8385
if (ssource->isDepleted()) {
86+
LOG(WARNING) << "Creating pipe with depleted source.";
8487
_depleted = true;
8588
}
8689
}

src/SignalSimulator.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -206,14 +206,14 @@ bool SignalSimulator::pass_time(ullong ms_to_simulate,
206206
(ullong)max_time_to_wait);
207207
}
208208

209-
bool all_exhausted = false;
209+
bool all_exhausted = true;
210210
while (ms_left > 0 || ms_to_simulate == 0) {
211-
all_exhausted = false;
211+
all_exhausted = true;
212212
for (const auto &t : _pipes) {
213213
if (!PIPE_UP(t)->isDepleted())
214-
all_exhausted = true;
214+
all_exhausted = false;
215215
}
216-
if (!all_exhausted && !force_wait) {
216+
if (all_exhausted && !force_wait) {
217217
break;
218218
}
219219

src/SignalSimulator.h

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,17 @@ class EegFramesSource : public IPullBasedOfflineSourceSp<EegFrame> {
4444
// ~EegFramesSource () {}
4545

4646
VectorView<std::shared_ptr<EegFrame>> getValues(std::size_t count = 0) override {
47-
if (count == 0 || count >= _frames.size())
48-
return VectorView<std::shared_ptr<EegFrame>>(_frames);
49-
return VectorView<std::shared_ptr<EegFrame>>(_frames.begin(), _frames.begin() + count);
47+
if(count == 0){
48+
count = count = _frames.size();
49+
}
50+
count = std::min(count,_frames.size()-_current);
51+
auto ret = VectorView<std::shared_ptr<EegFrame>>(_frames.begin()+_current, _frames.begin() + _current + count);
52+
_current = _frames.size();
53+
return ret;
5054
}
5155

5256
void reset() override { _current = 0; }
53-
bool isDepleted() const override { return _current < _frames.size(); }
57+
bool isDepleted() const override { return _current >= _frames.size(); }
5458

5559
std::shared_ptr<EegFrame> getNextValue() override {
5660
return !this->isDepleted() ? _frames[_current++] : nullptr;

src/SignalSource.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,8 @@ template <typename T> class SignalSource : public IPullBasedOfflineSource<T> {
187187

188188
VectorView<T> getValuesInternal(std::size_t count = 0, bool clear = false) {
189189
if (!clear && _data.size()) {
190-
return VectorView<T>(_data.begin(), _data.end());
190+
auto b = std::min(_data.begin()+_current, _data.end());
191+
return VectorView<T>(b, _data.end());
191192
}
192193
_data.clear();
193194
typedef typename invalue_dispatch_type_tag<T>::type tag;

test/unit/streaming_pipeline_and_csvsimulator_tests.cpp

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ TEST_F(StreamingPipelineAndCsvSimulatorTests, frame_from_bytes_tests) {
114114

115115
TEST_F(StreamingPipelineAndCsvSimulatorTests, SimpleEegFrameSource1) {
116116

117+
eeg_source_sample1->reset();
117118
auto frames = eeg_source_sample1->getValues();
118119
auto frame_length = EegFrame::Length;
119120

@@ -181,15 +182,14 @@ TEST_F(StreamingPipelineAndCsvSimulatorTests, TrivialSinkTest) {
181182
TEST_F(StreamingPipelineAndCsvSimulatorTests, SimpleFrameStreamPipe) {
182183

183184
auto frames = eeg_source_sample1->getValues();
184-
// auto source = std::make_shared<IPullingDataSourceSp<EegFrame>>(
185-
// eeg_source_sample1->getPullingDataSource());
186185
auto frame_length = EegFrame::Length;
187186

188187
std::vector<std::shared_ptr<EegFrame>> v = {};
189188
auto sink_sp =
190189
std::make_shared<LambdaSignalFrameDataSink<std::shared_ptr<EegFrame>>>(
191190
accumulate_to_vector_sink(v));
192191

192+
eeg_source_sample1->reset();
193193
auto pipe = FrameStreamPipe<EegFrame>(eeg_source_sample1, sink_sp);
194194

195195
for (uint16_t i = 0; i < 250 / frame_length; i++) {
@@ -218,10 +218,13 @@ TEST_F(StreamingPipelineAndCsvSimulatorTests,
218218

219219
std::vector<std::shared_ptr<EegFrame>> v = {};
220220

221-
auto sink = accumulate_to_vector_sink(v);
222221
auto sink_sp =
223222
std::make_shared<LambdaSignalFrameDataSink<std::shared_ptr<EegFrame>>>(
224-
sink);
223+
accumulate_to_vector_sink(v));
224+
225+
eeg_source_sample1->reset();
226+
auto frames = eeg_source_sample1->getValues();
227+
eeg_source_sample1->reset();
225228

226229
auto pipe_up = std::unique_ptr<IFrameStreamPipe>(
227230
new FrameStreamPipe<EegFrame>(eeg_source_sample1, sink_sp));
@@ -246,7 +249,7 @@ TEST_F(StreamingPipelineAndCsvSimulatorTests,
246249
for (uint16_t i = 0; i < 120 / frame_length; i++) {
247250
// only full frames are created
248251
if (120 - i * frame_length >= frame_length) {
249-
auto passed = eeg_source_sample1->getValues()[i];
252+
auto &passed = frames[i];
250253
auto received = v[i];
251254
// EXPECT_EQ(i, passed.timestamp);
252255
for (uint16_t j = 0; j < frame_length; j++) {
@@ -260,7 +263,7 @@ TEST_F(StreamingPipelineAndCsvSimulatorTests,
260263
for (uint16_t i = 120 / frame_length; i < 250 / frame_length; i++) {
261264
// only full frames are created
262265
if (250 - i * frame_length >= frame_length) {
263-
auto passed = eeg_source_sample1->getValues()[i];
266+
auto &passed = frames[i];
264267
auto &received = v[i];
265268
// EXPECT_EQ(i, passed.timestamp);
266269
for (uint16_t j = 0; j < frame_length; j++) {
@@ -279,10 +282,9 @@ TEST_F(StreamingPipelineAndCsvSimulatorTests,
279282
CsvSimTwoEegPipeSingleSink_instant) {
280283

281284
std::vector<std::shared_ptr<EegFrame>> v = {};
282-
auto sink = accumulate_to_vector_sink(v);
283285
auto sink_sp =
284286
std::make_shared<LambdaSignalFrameDataSink<std::shared_ptr<EegFrame>>>(
285-
sink);
287+
accumulate_to_vector_sink(v));
286288

287289
auto pipe_up = std::unique_ptr<IFrameStreamPipe>(
288290
new FrameStreamPipe<EegFrame>(eeg_source_sample1, sink_sp));
@@ -318,7 +320,9 @@ TEST_F(StreamingPipelineAndCsvSimulatorTests,
318320
auto counting_sink_sp =
319321
std::make_shared<LambdaSignalFrameDataSinkSp<EegFrame>>(
320322
LambdaSignalFrameDataSinkSp<EegFrame>(
321-
[&frame_count](std::shared_ptr<EegFrame>) { frame_count += 1; }));
323+
[&frame_count](std::shared_ptr<EegFrame>) {
324+
frame_count += 1;
325+
}));
322326

323327
auto suming_sink_sp = std::make_shared<LambdaSignalFrameDataSinkSp<EegFrame>>(
324328
LambdaSignalFrameDataSinkSp<EegFrame>(
@@ -327,6 +331,8 @@ TEST_F(StreamingPipelineAndCsvSimulatorTests,
327331
frame_sum += v;
328332
}
329333
}));
334+
335+
eeg_source_sample1->reset();
330336
auto pipe_up = std::unique_ptr<IFrameStreamPipe>(
331337
new FrameStreamPipe<EegFrame>(eeg_source_sample1, counting_sink_sp));
332338
auto pipe2_up = std::unique_ptr<IFrameStreamPipe>(
@@ -337,20 +343,14 @@ TEST_F(StreamingPipelineAndCsvSimulatorTests,
337343

338344
auto sim = SignalSimulator();
339345
sim.add_streaming_pipe(std::move(pipe_up),
340-
EegFrame::DefaultEmissionInterval_ms);
346+
EegFrame::DefaultEmissionInterval_ms / 2);
341347
sim.add_streaming_pipe(std::move(pipe2_up),
342348
EegFrame::DefaultEmissionInterval_ms);
343349

344350
sim.pass_time(0, 0);
345351

346-
EXPECT_EQ(250 / EegFrame::Length, frame_count);
347-
348-
llong expected_sum = 0;
349-
for (ullong i = 0; i < EegFrame::Length * (250 / EegFrame::Length); i++) {
350-
expected_sum += i;
351-
}
352-
EXPECT_EQ(expected_sum, frame_sum);
353-
352+
EXPECT_EQ(21, frame_count);
353+
EXPECT_EQ(10200, frame_sum);
354354
EXPECT_EQ(true, pipe_cheat_rp->isDepleted());
355355
EXPECT_EQ(true, pipe2_cheat_rp->isDepleted());
356356
}

0 commit comments

Comments
 (0)