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