xref: /netbsd-src/external/bsd/ntp/dist/tests/libntp/strtolfp.c (revision 7330f729ccf0bd976a06f95fad452fe774fc7fd1)
1 #include "config.h"
2 
3 #include "ntp_stdlib.h"
4 #include "ntp_calendar.h"
5 
6 #include "unity.h"
7 #include "lfptest.h"
8 
9 /* This file tests both atolfp and mstolfp */
10 
11 void setUp(void);
12 void test_PositiveInteger(void);
13 void test_NegativeInteger(void);
14 void test_PositiveFraction(void);
15 void test_NegativeFraction(void);
16 void test_PositiveMsFraction(void);
17 void test_NegativeMsFraction(void);
18 void test_InvalidChars(void);
19 
20 
21 void
22 setUp(void)
23 {
24 	init_lib();
25 
26 	return;
27 }
28 
29 
30 void test_PositiveInteger(void) {
31 	const char *str = "500";
32 	const char *str_ms = "500000";
33 
34 	l_fp expected = {{500},0};
35 	l_fp actual, actual_ms;
36 
37 	TEST_ASSERT_TRUE(atolfp(str, &actual));
38 	TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
39 
40 	TEST_ASSERT_TRUE(IsEqual(expected, actual));
41 	TEST_ASSERT_TRUE(IsEqual(expected, actual_ms));
42 }
43 
44 void test_NegativeInteger(void) {
45 	const char *str = "-300";
46 	const char *str_ms = "-300000";
47 
48 	l_fp expected;
49 	expected.l_i = -300;
50 	expected.l_uf = 0;
51 
52 	l_fp actual, actual_ms;
53 
54 	TEST_ASSERT_TRUE(atolfp(str, &actual));
55 	TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
56 
57 	TEST_ASSERT_TRUE(IsEqual(expected, actual));
58 	TEST_ASSERT_TRUE(IsEqual(expected, actual_ms));
59 }
60 
61 void test_PositiveFraction(void) {
62 	const char *str = "+500.5";
63 	const char *str_ms = "500500.0";
64 
65 	l_fp expected = {{500}, HALF};
66 	l_fp actual, actual_ms;
67 
68 	TEST_ASSERT_TRUE(atolfp(str, &actual));
69 	TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
70 
71 	TEST_ASSERT_TRUE(IsEqual(expected, actual));
72 	TEST_ASSERT_TRUE(IsEqual(expected, actual_ms));
73 }
74 
75 void test_NegativeFraction(void) {
76 	const char *str = "-300.75";
77 	const char *str_ms = "-300750";
78 
79 	l_fp expected;
80 	expected.l_i = -301;
81 	expected.l_uf = QUARTER;
82 
83 	l_fp actual, actual_ms;
84 
85 	TEST_ASSERT_TRUE(atolfp(str, &actual));
86 	TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
87 
88 	TEST_ASSERT_TRUE(IsEqual(expected, actual));
89 	TEST_ASSERT_TRUE(IsEqual(expected, actual_ms));
90 }
91 
92 void test_PositiveMsFraction(void) {
93 	const char *str = "300.00025";
94 	const char *str_ms = "300000.25";
95 
96 	l_fp expected = {{300}, QUARTER_PROMILLE_APPRX};
97 	l_fp actual, actual_ms;
98 
99 
100 	TEST_ASSERT_TRUE(atolfp(str, &actual));
101 	TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
102 
103 	TEST_ASSERT_TRUE(IsEqual(expected, actual));
104 	TEST_ASSERT_TRUE(IsEqual(expected, actual_ms));
105 
106 }
107 
108 void test_NegativeMsFraction(void) {
109 	const char *str = "-199.99975";
110 	const char *str_ms = "-199999.75";
111 
112 	l_fp expected;
113 	expected.l_i = -200;
114 	expected.l_uf = QUARTER_PROMILLE_APPRX;
115 
116 	l_fp actual, actual_ms;
117 
118 	TEST_ASSERT_TRUE(atolfp(str, &actual));
119 	TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
120 
121 	TEST_ASSERT_TRUE(IsEqual(expected, actual));
122 	TEST_ASSERT_TRUE(IsEqual(expected, actual_ms));
123 
124 }
125 
126 void test_InvalidChars(void) {
127 	const char *str = "500.4a2";
128 	l_fp actual, actual_ms;
129 
130 	TEST_ASSERT_FALSE(atolfp(str, &actual));
131 	TEST_ASSERT_FALSE(mstolfp(str, &actual_ms));
132 }
133 
134