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