1284990Scy#include "config.h"
2284990Scy
3284990Scy#include "ntp_fp.h"
4284990Scy#include "timevalops.h"
5284990Scy
6284990Scy#include "unity.h"
7284990Scy
8289999Sglebiusvoid test_Seconds(void);
9289999Sglebiusvoid test_MicrosecondsExact(void);
10289999Sglebiusvoid test_MicrosecondsRounding(void);
11289999Sglebius
12289999Sglebius
13284990Scyvoid
14284990Scytest_Seconds(void) {
15289999Sglebius	const l_fp input = {{50}, 0}; /* 50.0 s */
16284990Scy	const struct timeval expected = {50, 0};
17284990Scy	struct timeval actual;
18284990Scy
19284990Scy	TSTOTV(&input, &actual);
20284990Scy
21284990Scy	TEST_ASSERT_EQUAL(expected.tv_sec, actual.tv_sec);
22284990Scy	TEST_ASSERT_EQUAL(expected.tv_usec, actual.tv_usec);
23284990Scy}
24284990Scy
25284990Scyvoid
26284990Scytest_MicrosecondsExact(void) {
27284990Scy	const u_long HALF = 2147483648UL;
28289999Sglebius	const l_fp input = {{50}, HALF}; /* 50.5 s */
29284990Scy	const struct timeval expected = {50, 500000};
30284990Scy	struct timeval actual;
31284990Scy
32284990Scy	TSTOTV(&input, &actual);
33284990Scy
34284990Scy	TEST_ASSERT_EQUAL(expected.tv_sec, actual.tv_sec);
35284990Scy	TEST_ASSERT_EQUAL(expected.tv_usec, actual.tv_usec);
36284990Scy
37284990Scy}
38284990Scy
39284990Scyvoid
40284990Scytest_MicrosecondsRounding(void) {
41289999Sglebius	const l_fp input = {{50}, 3865471UL}; /* Should round to 50.0009 */
42284990Scy	const struct timeval expected = {50, 900};
43284990Scy	struct timeval actual;
44284990Scy
45284990Scy	TSTOTV(&input, &actual);
46284990Scy
47284990Scy	TEST_ASSERT_EQUAL(expected.tv_sec, actual.tv_sec);
48284990Scy	TEST_ASSERT_EQUAL(expected.tv_usec, actual.tv_usec);
49284990Scy}
50