Skip to content

Commit 239c98a

Browse files
committed
Add clock tests
The clock rolling sum is not trivial. Test it.
1 parent b660a24 commit 239c98a

File tree

2 files changed

+83
-0
lines changed

2 files changed

+83
-0
lines changed

app/meson.build

+4
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,10 @@ if get_option('buildtype') == 'debug'
168168
'src/cli.c',
169169
'src/util/str_util.c',
170170
]],
171+
['test_clock', [
172+
'tests/test_clock.c',
173+
'src/clock.c',
174+
]],
171175
['test_control_msg_serialize', [
172176
'tests/test_control_msg_serialize.c',
173177
'src/control_msg.c',

app/tests/test_clock.c

+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
#include "common.h"
2+
3+
#include <assert.h>
4+
5+
#include "clock.h"
6+
7+
void test_small_rolling_sum(void) {
8+
struct sc_clock clock;
9+
sc_clock_init(&clock);
10+
11+
assert(clock.count == 0);
12+
assert(clock.left_sum.system == 0);
13+
assert(clock.left_sum.stream == 0);
14+
assert(clock.right_sum.system == 0);
15+
assert(clock.right_sum.stream == 0);
16+
17+
sc_clock_update(&clock, 2, 3);
18+
assert(clock.count == 1);
19+
assert(clock.left_sum.system == 0);
20+
assert(clock.left_sum.stream == 0);
21+
assert(clock.right_sum.system == 2);
22+
assert(clock.right_sum.stream == 3);
23+
24+
sc_clock_update(&clock, 10, 20);
25+
assert(clock.count == 2);
26+
assert(clock.left_sum.system == 2);
27+
assert(clock.left_sum.stream == 3);
28+
assert(clock.right_sum.system == 10);
29+
assert(clock.right_sum.stream == 20);
30+
31+
sc_clock_update(&clock, 40, 80);
32+
assert(clock.count == 3);
33+
assert(clock.left_sum.system == 2);
34+
assert(clock.left_sum.stream == 3);
35+
assert(clock.right_sum.system == 50);
36+
assert(clock.right_sum.stream == 100);
37+
38+
sc_clock_update(&clock, 400, 800);
39+
assert(clock.count == 4);
40+
assert(clock.left_sum.system == 12);
41+
assert(clock.left_sum.stream == 23);
42+
assert(clock.right_sum.system == 440);
43+
assert(clock.right_sum.stream == 880);
44+
}
45+
46+
void test_large_rolling_sum(void) {
47+
const unsigned half_range = SC_CLOCK_RANGE / 2;
48+
49+
struct sc_clock clock1;
50+
sc_clock_init(&clock1);
51+
for (unsigned i = 0; i < 5 * half_range; ++i) {
52+
sc_clock_update(&clock1, i, 2 * i + 1);
53+
}
54+
55+
struct sc_clock clock2;
56+
sc_clock_init(&clock2);
57+
for (unsigned i = 3 * half_range; i < 5 * half_range; ++i) {
58+
sc_clock_update(&clock2, i, 2 * i + 1);
59+
}
60+
61+
assert(clock1.count == SC_CLOCK_RANGE);
62+
assert(clock2.count == SC_CLOCK_RANGE);
63+
64+
// The values before the last SC_CLOCK_RANGE points in clock1 should have
65+
// no impact
66+
assert(clock1.left_sum.system == clock2.left_sum.system);
67+
assert(clock1.left_sum.stream == clock2.left_sum.stream);
68+
assert(clock1.right_sum.system == clock2.right_sum.system);
69+
assert(clock1.right_sum.stream == clock2.right_sum.stream);
70+
}
71+
72+
int main(int argc, char *argv[]) {
73+
(void) argc;
74+
(void) argv;
75+
76+
test_small_rolling_sum();
77+
test_large_rolling_sum();
78+
return 0;
79+
};

0 commit comments

Comments
 (0)