From 2cb9b6fdc38a5df00ade737f90a9daf685ab89c3 Mon Sep 17 00:00:00 2001 From: flu0r1ne Date: Thu, 13 Jul 2023 12:20:29 -0500 Subject: Init commit --- test/timer_test.cpp | 155 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 test/timer_test.cpp (limited to 'test/timer_test.cpp') diff --git a/test/timer_test.cpp b/test/timer_test.cpp new file mode 100644 index 0000000..f2aac9f --- /dev/null +++ b/test/timer_test.cpp @@ -0,0 +1,155 @@ +#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(); -- cgit v1.2.3