#ifdef WITH_TESTS #include #include "../Tests.h" #include "../../math/FixedFrequencyInterpolator.h" #include TEST(FixedFrequencyInterpolator, test) { FixedFrequencyInterpolator ffi(Timestamp::fromMS(10)); std::ofstream out("/tmp/test.dat"); std::vector data; auto callback = [&] (const Timestamp ts, const float val) { out << ts.ms() << " " << val << "\n"; data.push_back(val); }; float x = 10; // output should be a straight line ffi.add(Timestamp::fromMS(55), x*55, callback); ffi.add(Timestamp::fromMS(93), x*93, callback); ffi.add(Timestamp::fromMS(102), x*102, callback); ffi.add(Timestamp::fromMS(134), x*134, callback); ffi.add(Timestamp::fromMS(212), x*212, callback); ffi.add(Timestamp::fromMS(214), x*214, callback); ffi.add(Timestamp::fromMS(216), x*216, callback); ffi.add(Timestamp::fromMS(219), x*219, callback); ffi.add(Timestamp::fromMS(220), x*220, callback); ffi.add(Timestamp::fromMS(240), x*240, callback); out.close(); const float d = 0.001; ASSERT_NEAR(data[0], x*60, d); ASSERT_NEAR(data[1], x*70, d); ASSERT_NEAR(data[2], x*80, d); ASSERT_NEAR(data[3], x*90, d); ASSERT_NEAR(data[4], x*100, d); ASSERT_NEAR(data[5], x*110, d); ASSERT_NEAR(data[6], x*120, d); ASSERT_NEAR(data[7], x*130, d); ASSERT_NEAR(data[8], x*140, d); ASSERT_NEAR(data[9], x*150, d); ASSERT_NEAR(data[10], x*160, d); ASSERT_NEAR(data[11], x*170, d); ASSERT_NEAR(data[12], x*180, d); ASSERT_NEAR(data[13], x*190, d); ASSERT_NEAR(data[14], x*200, d); ASSERT_NEAR(data[15], x*210, d); ASSERT_NEAR(data[16], x*220, d); ASSERT_NEAR(data[17], x*230, d); ASSERT_NEAR(data[18], x*240, d); } #endif