aboutsummaryrefslogtreecommitdiff
path: root/test/timer_test.cpp
diff options
context:
space:
mode:
authorflu0r1ne <flu0r1ne@flu0r1ne.net>2023-07-13 12:20:29 -0500
committerflu0r1ne <flu0r1ne@flu0r1ne.net>2023-07-13 12:20:29 -0500
commit2cb9b6fdc38a5df00ade737f90a9daf685ab89c3 (patch)
tree0a01a5fff4785520ae1a8d400b36f6bcdf84c532 /test/timer_test.cpp
downloadfreqtimer-web-2cb9b6fdc38a5df00ade737f90a9daf685ab89c3.tar.xz
freqtimer-web-2cb9b6fdc38a5df00ade737f90a9daf685ab89c3.zip
Init commit
Diffstat (limited to 'test/timer_test.cpp')
-rw-r--r--test/timer_test.cpp155
1 files changed, 155 insertions, 0 deletions
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();