#include "utest.h" #include "models/timer.hpp" uint64_t _timestamp_ms_value = 0; uint64_t monotonic_timestamp_ms() { return _timestamp_ms_value; } #define MILISEC 1 #define SEC (1000 * MILISEC) #define MIN (60 * SEC) #define HOUR (60 * MIN) #define DAY (60 * HOUR) UTEST(timer, stopwatch_mode) { FreqTimer timer; _timestamp_ms_value = SEC; timer.toggleStart(); ASSERT_TRUE(timer.running()); _timestamp_ms_value += 2 * SEC; ASSERT_EQ(2 * SEC, timer.time_ms()); ASSERT_NEAR(30.0, timer.record_floor(), 1e-7); _timestamp_ms_value += SEC; timer.toggleStart(); // stop ASSERT_FALSE(timer.running()); _timestamp_ms_value += 10 * SEC; timer.toggleStart(); // start _timestamp_ms_value += SEC; ASSERT_EQ(4 * SEC, timer.time_ms()); } UTEST(timer, timer_mode) { FreqTimer timer; _timestamp_ms_value = SEC; // set preset ASSERT_FALSE(timer.has_preset()); timer.increment_preset_ms(1 * SEC); timer.increment_preset_ms(9 * SEC); ASSERT_NEAR(6.0, timer.record_floor(), 1e-7); ASSERT_FALSE(timer.running()); ASSERT_TRUE(timer.has_preset()); // counts down ASSERT_EQ(10 * SEC, timer.preset_ms()); timer.toggleStart(); _timestamp_ms_value += 5 * SEC; ASSERT_EQ(5 * SEC, timer.time_ms()); _timestamp_ms_value += 6 * SEC; ASSERT_EQ(-SEC, timer.time_ms()); // reset returns to preset timer.reset(); ASSERT_FALSE(timer.running()); ASSERT_EQ(10 * SEC, timer.time_ms()); timer.increment_preset_ms(SEC); ASSERT_EQ(SEC, timer.preset_ms()); // increment causes reset timer.toggleStart(); ASSERT_TRUE(timer.running()); timer.increment_preset_ms(2 * SEC); ASSERT_FALSE(timer.running()); ASSERT_EQ(2 * SEC, timer.preset_ms()); } UTEST(timer, display_value) { // The display value should count up in stopwatch mode FreqTimer timer; _timestamp_ms_value = 0; timer.toggleStart(); _timestamp_ms_value = 10 * SEC + 100; std::string display_val = timer.counter_display_value(); ASSERT_STREQ("00 : 00 : 10.1", display_val.c_str()); timer.reset(); timer.toggleStart(); _timestamp_ms_value += 95 * HOUR + 59 * MIN + 48 * SEC + 800 * MILISEC; display_val = timer.counter_display_value(); ASSERT_STREQ("95 : 59 : 48.8", display_val.c_str()); timer.reset(); timer.toggleStart(); _timestamp_ms_value += 99 * HOUR + MILISEC; display_val = timer.counter_display_value(); ASSERT_STREQ("MAX TIME EXCEEDED", display_val.c_str()); // The display value should countdown if the timer has a preset timer.increment_preset_ms(10 * SEC); display_val = timer.counter_display_value(); ASSERT_STREQ("00 : 00 : 10.0", display_val.c_str()); timer.toggleStart(); _timestamp_ms_value += 6 * SEC; display_val = timer.counter_display_value(); ASSERT_STREQ("00 : 00 : 04.0", display_val.c_str()); _timestamp_ms_value += 5 * SEC; display_val = timer.counter_display_value(); ASSERT_STREQ("+ 00 : 00 : 01.0", display_val.c_str()); } UTEST_MAIN();