xref: /netbsd-src/external/bsd/ntp/dist/tests/libntp/buftvtots.c (revision cdfa2a7ef92791ba9db70a584a1d904730e6fb46)
1 /*	$NetBSD: buftvtots.c,v 1.2 2020/05/25 20:47:36 christos Exp $	*/
2 
3 #include "config.h"
4 #include "ntp_types.h"
5 #include "ntp_stdlib.h"
6 
7 #include "lfptest.h"
8 
9 #include "ntp_unixtime.h"
10 
11 #include "unity.h"
12 
13 /* Required for Solaris. */
14 #include <math.h>
15 
16 void test_ZeroBuffer(void);
17 void test_IntegerAndFractionalBuffer(void);
18 void test_IllegalMicroseconds(void);
19 void test_AlwaysFalseOnWindows(void);
20 
21 
22 void
test_ZeroBuffer(void)23 test_ZeroBuffer(void)
24 {
25 #ifndef SYS_WINNT
26 	const struct timeval input = {0, 0};
27 	const l_fp expected = {{0 + JAN_1970}, 0};
28 
29 	l_fp actual;
30 
31 	TEST_ASSERT_TRUE(buftvtots((const char*)(&input), &actual));
32 	TEST_ASSERT_TRUE(IsEqual(expected, actual));
33 #else
34 	TEST_IGNORE_MESSAGE("Test only for Windows, skipping...");
35 #endif
36 
37 	return;
38 }
39 
40 
41 void
test_IntegerAndFractionalBuffer(void)42 test_IntegerAndFractionalBuffer(void)
43 {
44 #ifndef SYS_WINNT
45 	const struct timeval input = {5, 500000}; /* 5.5 */
46 	const l_fp expected = {{5 + JAN_1970}, HALF};
47 	double expectedDouble, actualDouble;
48 	l_fp actual;
49 
50 	TEST_ASSERT_TRUE(buftvtots((const char*)(&input), &actual));
51 
52 	/* Compare the fractional part with an absolute error given. */
53 	TEST_ASSERT_EQUAL(expected.l_ui, actual.l_ui);
54 
55 	M_LFPTOD(0, expected.l_uf, expectedDouble);
56 	M_LFPTOD(0, actual.l_uf, actualDouble);
57 
58 	/* The error should be less than 0.5 us */
59 	TEST_ASSERT_DOUBLE_WITHIN(0.0000005, expectedDouble, actualDouble);
60 #else
61 	TEST_IGNORE_MESSAGE("Test only for Windows, skipping...");
62 #endif
63 
64 	return;
65 }
66 
67 void
test_IllegalMicroseconds(void)68 test_IllegalMicroseconds(void)
69 {
70 #ifndef SYS_WINNT
71 	const struct timeval input = {0, 1100000}; /* > 999 999 microseconds. */
72 
73 	l_fp actual;
74 
75 	TEST_ASSERT_FALSE(buftvtots((const char*)(&input), &actual));
76 #else
77 	TEST_IGNORE_MESSAGE("Test only for Windows, skipping...");
78 #endif
79 
80 	return;
81 }
82 
83 
84 void
test_AlwaysFalseOnWindows(void)85 test_AlwaysFalseOnWindows(void)
86 {
87 #ifdef SYS_WINNT
88 	/*
89 	 * Under Windows, buftvtots will just return
90 	 * 0 (false).
91 	 */
92 	l_fp actual;
93 	TEST_ASSERT_FALSE(buftvtots("", &actual));
94 #else
95 	TEST_IGNORE_MESSAGE("Non-Windows test, skipping...");
96 #endif
97 
98 	return;
99 }
100