strtolfp.c revision 290001
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 test_PositiveInteger(void);
12void test_NegativeInteger(void);
13void test_PositiveFraction(void);
14void test_NegativeFraction(void);
15void test_PositiveMsFraction(void);
16void test_NegativeMsFraction(void);
17void test_InvalidChars(void);
18
19
20void test_PositiveInteger(void) {
21	const char *str = "500";
22	const char *str_ms = "500000";
23
24	l_fp expected = {{500},0};
25	l_fp actual, actual_ms;
26
27	TEST_ASSERT_TRUE(atolfp(str, &actual));
28	TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
29
30	TEST_ASSERT_TRUE(IsEqual(expected, actual));
31	TEST_ASSERT_TRUE(IsEqual(expected, actual_ms));
32}
33
34void test_NegativeInteger(void) {
35	const char *str = "-300";
36	const char *str_ms = "-300000";
37
38	l_fp expected;
39	expected.l_i = -300;
40	expected.l_uf = 0;
41
42	l_fp actual, actual_ms;
43
44	TEST_ASSERT_TRUE(atolfp(str, &actual));
45	TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
46
47	TEST_ASSERT_TRUE(IsEqual(expected, actual));
48	TEST_ASSERT_TRUE(IsEqual(expected, actual_ms));
49}
50
51void test_PositiveFraction(void) {
52	const char *str = "+500.5";
53	const char *str_ms = "500500.0";
54
55	l_fp expected = {{500}, HALF};
56	l_fp actual, actual_ms;
57
58	TEST_ASSERT_TRUE(atolfp(str, &actual));
59	TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
60
61	TEST_ASSERT_TRUE(IsEqual(expected, actual));
62	TEST_ASSERT_TRUE(IsEqual(expected, actual_ms));
63}
64
65void test_NegativeFraction(void) {
66	const char *str = "-300.75";
67	const char *str_ms = "-300750";
68
69	l_fp expected;
70	expected.l_i = -301;
71	expected.l_uf = QUARTER;
72
73	l_fp actual, actual_ms;
74
75	TEST_ASSERT_TRUE(atolfp(str, &actual));
76	TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
77
78	TEST_ASSERT_TRUE(IsEqual(expected, actual));
79	TEST_ASSERT_TRUE(IsEqual(expected, actual_ms));
80}
81
82void test_PositiveMsFraction(void) {
83	const char *str = "300.00025";
84	const char *str_ms = "300000.25";
85
86	l_fp expected = {{300}, QUARTER_PROMILLE_APPRX};
87	l_fp actual, actual_ms;
88
89
90	TEST_ASSERT_TRUE(atolfp(str, &actual));
91	TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
92
93	TEST_ASSERT_TRUE(IsEqual(expected, actual));
94	TEST_ASSERT_TRUE(IsEqual(expected, actual_ms));
95
96}
97
98void test_NegativeMsFraction(void) {
99	const char *str = "-199.99975";
100	const char *str_ms = "-199999.75";
101
102	l_fp expected;
103	expected.l_i = -200;
104	expected.l_uf = QUARTER_PROMILLE_APPRX;
105
106	l_fp actual, actual_ms;
107
108	TEST_ASSERT_TRUE(atolfp(str, &actual));
109	TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
110
111	TEST_ASSERT_TRUE(IsEqual(expected, actual));
112	TEST_ASSERT_TRUE(IsEqual(expected, actual_ms));
113
114}
115
116void test_InvalidChars(void) {
117	const char *str = "500.4a2";
118	l_fp actual, actual_ms;
119
120	TEST_ASSERT_FALSE(atolfp(str, &actual));
121	TEST_ASSERT_FALSE(mstolfp(str, &actual_ms));
122}
123
124