#include #include #include #include #include extern "C" { #include "time.c" } TEST(time, init) { di_time_init(); } TEST(tws_du_strike, in) { struct tv { bool in; di_time_t time; bool out; } tvs[] = { { true, 0, true }, // rising edge { false, 250, false }, // falling edge { true, 500, false }, // rising edge { false, 750, false }, // falling edge { false, 5750, false }, // false signal { false, 6000, false }, // false signal { true, 6250, true } // rising edge }; struct di_tws_du_strike s; di_tws_du_strike_init(&s); di_tws_du_strike_reset(&s, DI_RPC_DU_STRIKE_ROLE_STRIKE_IN, DI_TWS_DU_STRIKE_ULTRASONIC_HOLDOFF_TIME_MS); for (size_t n = 0; n < DI_ARRAY_SIZE(tvs); n++) { _di_time_uptime = tvs[n].time; ASSERT_EQ(tvs[n].out, di_tws_du_strike_update(&s, tvs[n].in)) << "n=" << n << " time=" << tvs[n].time << std::boolalpha << " in=" << tvs[n].in << " out=" << tvs[n].out; } ASSERT_EQ(2U, s.train_counter); } TEST(tws_du_strike, out) { struct tv { bool in; di_time_t time; bool out; } tvs[] = { { true, 0, false }, // rising edge { false, 250, false }, // falling edge { true, 500, false }, // rising edge { false, 750, false }, // falling edge { false, 5750, true }, // false signal { false, 6000, false }, // false signal { true, 6250, false } // rising edge }; struct di_tws_du_strike s; di_tws_du_strike_init(&s); di_tws_du_strike_reset(&s, DI_RPC_DU_STRIKE_ROLE_STRIKE_OUT, DI_TWS_DU_STRIKE_ULTRASONIC_HOLDOFF_TIME_MS); for (size_t n = 0; n < DI_ARRAY_SIZE(tvs); n++) { _di_time_uptime = tvs[n].time; ASSERT_EQ(tvs[n].out, di_tws_du_strike_update(&s, tvs[n].in)) << "n=" << n << " time=" << tvs[n].time << std::boolalpha << " in=" << tvs[n].in << " out=" << tvs[n].out; } ASSERT_EQ(1U, s.train_counter); }