src.dualinventive.com/dinet/sec-multi-proxy/libdi/tests/tws_du_strike.cpp

73 lines
1.9 KiB
C++

#include <di/time.h>
#include <di/tws/du/strike.h>
#include <stdio.h>
#include <di/array.h>
#include <gtest/gtest.h>
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);
}