1*cdfa2a7eSchristos /* $NetBSD: tstotv.c,v 1.2 2020/05/25 20:47:36 christos Exp $ */
2067f5680Schristos
3f17b710fSchristos #include "config.h"
4f17b710fSchristos
5f17b710fSchristos #include "ntp_fp.h"
6f17b710fSchristos #include "timevalops.h"
7f17b710fSchristos
8f17b710fSchristos #include "unity.h"
9f17b710fSchristos
10a6f3f22fSchristos void test_Seconds(void);
11a6f3f22fSchristos void test_MicrosecondsExact(void);
12a6f3f22fSchristos void test_MicrosecondsRounding(void);
13a6f3f22fSchristos
14a6f3f22fSchristos
15f17b710fSchristos void
test_Seconds(void)16f17b710fSchristos test_Seconds(void) {
17a6f3f22fSchristos const l_fp input = {{50}, 0}; /* 50.0 s */
18f17b710fSchristos const struct timeval expected = {50, 0};
19f17b710fSchristos struct timeval actual;
20f17b710fSchristos
21f17b710fSchristos TSTOTV(&input, &actual);
22f17b710fSchristos
23f17b710fSchristos TEST_ASSERT_EQUAL(expected.tv_sec, actual.tv_sec);
24f17b710fSchristos TEST_ASSERT_EQUAL(expected.tv_usec, actual.tv_usec);
25f17b710fSchristos }
26f17b710fSchristos
27f17b710fSchristos void
test_MicrosecondsExact(void)28f17b710fSchristos test_MicrosecondsExact(void) {
29f17b710fSchristos const u_long HALF = 2147483648UL;
30a6f3f22fSchristos const l_fp input = {{50}, HALF}; /* 50.5 s */
31f17b710fSchristos const struct timeval expected = {50, 500000};
32f17b710fSchristos struct timeval actual;
33f17b710fSchristos
34f17b710fSchristos TSTOTV(&input, &actual);
35f17b710fSchristos
36f17b710fSchristos TEST_ASSERT_EQUAL(expected.tv_sec, actual.tv_sec);
37f17b710fSchristos TEST_ASSERT_EQUAL(expected.tv_usec, actual.tv_usec);
38f17b710fSchristos
39f17b710fSchristos }
40f17b710fSchristos
41f17b710fSchristos void
test_MicrosecondsRounding(void)42f17b710fSchristos test_MicrosecondsRounding(void) {
43a6f3f22fSchristos const l_fp input = {{50}, 3865471UL}; /* Should round to 50.0009 */
44f17b710fSchristos const struct timeval expected = {50, 900};
45f17b710fSchristos struct timeval actual;
46f17b710fSchristos
47f17b710fSchristos TSTOTV(&input, &actual);
48f17b710fSchristos
49f17b710fSchristos TEST_ASSERT_EQUAL(expected.tv_sec, actual.tv_sec);
50f17b710fSchristos TEST_ASSERT_EQUAL(expected.tv_usec, actual.tv_usec);
51f17b710fSchristos }
52