strtolfp.c revision 293893
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
11void setUp(void);
12void test_PositiveInteger(void);
13void test_NegativeInteger(void);
14void test_PositiveFraction(void);
15void test_NegativeFraction(void);
16void test_PositiveMsFraction(void);
17void test_NegativeMsFraction(void);
18void test_InvalidChars(void);
19
20
21void
22setUp(void)
23{
24	init_lib();
25
26	return;
27}
28
29
30void 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
44void 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
61void 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
75void 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
92void 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
108void 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
126void 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