xref: /netbsd-src/external/bsd/ntp/dist/tests/libntp/strtolfp.c (revision 37afb7eb6895c833050f8bfb1d1bb2f99f332539)
1 /*	$NetBSD: strtolfp.c,v 1.1.1.2 2015/07/10 13:11:14 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 test_PositiveInteger(void) {
14 	const char *str = "500";
15 	const char *str_ms = "500000";
16 
17 	l_fp expected = {500,0};
18 	l_fp actual, actual_ms;
19 
20 	TEST_ASSERT_TRUE(atolfp(str, &actual));
21 	TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
22 
23 	TEST_ASSERT_TRUE(IsEqual(expected, actual));
24 	TEST_ASSERT_TRUE(IsEqual(expected, actual_ms));
25 }
26 
27 void test_NegativeInteger(void) {
28 	const char *str = "-300";
29 	const char *str_ms = "-300000";
30 
31 	l_fp expected;
32 	expected.l_i = -300;
33 	expected.l_uf = 0;
34 
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_PositiveFraction(void) {
45 	const char *str = "+500.5";
46 	const char *str_ms = "500500.0";
47 
48 	l_fp expected = {500, HALF};
49 	l_fp actual, actual_ms;
50 
51 	TEST_ASSERT_TRUE(atolfp(str, &actual));
52 	TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
53 
54 	TEST_ASSERT_TRUE(IsEqual(expected, actual));
55 	TEST_ASSERT_TRUE(IsEqual(expected, actual_ms));
56 }
57 
58 void test_NegativeFraction(void) {
59 	const char *str = "-300.75";
60 	const char *str_ms = "-300750";
61 
62 	l_fp expected;
63 	expected.l_i = -301;
64 	expected.l_uf = QUARTER;
65 
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_PositiveMsFraction(void) {
76 	const char *str = "300.00025";
77 	const char *str_ms = "300000.25";
78 
79 	l_fp expected = {300, QUARTER_PROMILLE_APPRX};
80 	l_fp actual, actual_ms;
81 
82 
83 	TEST_ASSERT_TRUE(atolfp(str, &actual));
84 	TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
85 
86 	TEST_ASSERT_TRUE(IsEqual(expected, actual));
87 	TEST_ASSERT_TRUE(IsEqual(expected, actual_ms));
88 
89 }
90 
91 void test_NegativeMsFraction(void) {
92 	const char *str = "-199.99975";
93 	const char *str_ms = "-199999.75";
94 
95 	l_fp expected;
96 	expected.l_i = -200;
97 	expected.l_uf = QUARTER_PROMILLE_APPRX;
98 
99 	l_fp actual, actual_ms;
100 
101 	TEST_ASSERT_TRUE(atolfp(str, &actual));
102 	TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
103 
104 	TEST_ASSERT_TRUE(IsEqual(expected, actual));
105 	TEST_ASSERT_TRUE(IsEqual(expected, actual_ms));
106 
107 }
108 
109 void test_InvalidChars(void) {
110 	const char *str = "500.4a2";
111 	l_fp actual, actual_ms;
112 
113 	TEST_ASSERT_FALSE(atolfp(str, &actual));
114 	TEST_ASSERT_FALSE(mstolfp(str, &actual_ms));
115 }
116 
117