1290001Sglebius#include "config.h"
2290001Sglebius
3290001Sglebius#include "ntp_stdlib.h"
4290001Sglebius#include "ntp_calendar.h"
5290001Sglebius
6290001Sglebius#include "unity.h"
7290001Sglebius#include "lfptest.h"
8290001Sglebius
9290001Sglebius/* This file tests both atolfp and mstolfp */
10290001Sglebius
11293896Sglebiusvoid setUp(void);
12290001Sglebiusvoid test_PositiveInteger(void);
13290001Sglebiusvoid test_NegativeInteger(void);
14290001Sglebiusvoid test_PositiveFraction(void);
15290001Sglebiusvoid test_NegativeFraction(void);
16290001Sglebiusvoid test_PositiveMsFraction(void);
17290001Sglebiusvoid test_NegativeMsFraction(void);
18290001Sglebiusvoid test_InvalidChars(void);
19290001Sglebius
20290001Sglebius
21293896Sglebiusvoid
22293896SglebiussetUp(void)
23293896Sglebius{
24293896Sglebius	init_lib();
25293896Sglebius
26293896Sglebius	return;
27293896Sglebius}
28293896Sglebius
29293896Sglebius
30290001Sglebiusvoid test_PositiveInteger(void) {
31290001Sglebius	const char *str = "500";
32290001Sglebius	const char *str_ms = "500000";
33290001Sglebius
34290001Sglebius	l_fp expected = {{500},0};
35290001Sglebius	l_fp actual, actual_ms;
36290001Sglebius
37290001Sglebius	TEST_ASSERT_TRUE(atolfp(str, &actual));
38290001Sglebius	TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
39290001Sglebius
40290001Sglebius	TEST_ASSERT_TRUE(IsEqual(expected, actual));
41290001Sglebius	TEST_ASSERT_TRUE(IsEqual(expected, actual_ms));
42290001Sglebius}
43290001Sglebius
44290001Sglebiusvoid test_NegativeInteger(void) {
45290001Sglebius	const char *str = "-300";
46290001Sglebius	const char *str_ms = "-300000";
47290001Sglebius
48290001Sglebius	l_fp expected;
49290001Sglebius	expected.l_i = -300;
50290001Sglebius	expected.l_uf = 0;
51290001Sglebius
52290001Sglebius	l_fp actual, actual_ms;
53290001Sglebius
54290001Sglebius	TEST_ASSERT_TRUE(atolfp(str, &actual));
55290001Sglebius	TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
56290001Sglebius
57290001Sglebius	TEST_ASSERT_TRUE(IsEqual(expected, actual));
58290001Sglebius	TEST_ASSERT_TRUE(IsEqual(expected, actual_ms));
59290001Sglebius}
60290001Sglebius
61290001Sglebiusvoid test_PositiveFraction(void) {
62290001Sglebius	const char *str = "+500.5";
63290001Sglebius	const char *str_ms = "500500.0";
64290001Sglebius
65290001Sglebius	l_fp expected = {{500}, HALF};
66290001Sglebius	l_fp actual, actual_ms;
67290001Sglebius
68290001Sglebius	TEST_ASSERT_TRUE(atolfp(str, &actual));
69290001Sglebius	TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
70290001Sglebius
71290001Sglebius	TEST_ASSERT_TRUE(IsEqual(expected, actual));
72290001Sglebius	TEST_ASSERT_TRUE(IsEqual(expected, actual_ms));
73290001Sglebius}
74290001Sglebius
75290001Sglebiusvoid test_NegativeFraction(void) {
76290001Sglebius	const char *str = "-300.75";
77290001Sglebius	const char *str_ms = "-300750";
78290001Sglebius
79290001Sglebius	l_fp expected;
80290001Sglebius	expected.l_i = -301;
81290001Sglebius	expected.l_uf = QUARTER;
82290001Sglebius
83290001Sglebius	l_fp actual, actual_ms;
84290001Sglebius
85290001Sglebius	TEST_ASSERT_TRUE(atolfp(str, &actual));
86290001Sglebius	TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
87290001Sglebius
88290001Sglebius	TEST_ASSERT_TRUE(IsEqual(expected, actual));
89290001Sglebius	TEST_ASSERT_TRUE(IsEqual(expected, actual_ms));
90290001Sglebius}
91290001Sglebius
92290001Sglebiusvoid test_PositiveMsFraction(void) {
93290001Sglebius	const char *str = "300.00025";
94290001Sglebius	const char *str_ms = "300000.25";
95290001Sglebius
96290001Sglebius	l_fp expected = {{300}, QUARTER_PROMILLE_APPRX};
97290001Sglebius	l_fp actual, actual_ms;
98290001Sglebius
99290001Sglebius
100290001Sglebius	TEST_ASSERT_TRUE(atolfp(str, &actual));
101290001Sglebius	TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
102290001Sglebius
103290001Sglebius	TEST_ASSERT_TRUE(IsEqual(expected, actual));
104290001Sglebius	TEST_ASSERT_TRUE(IsEqual(expected, actual_ms));
105290001Sglebius
106290001Sglebius}
107290001Sglebius
108290001Sglebiusvoid test_NegativeMsFraction(void) {
109290001Sglebius	const char *str = "-199.99975";
110290001Sglebius	const char *str_ms = "-199999.75";
111290001Sglebius
112290001Sglebius	l_fp expected;
113290001Sglebius	expected.l_i = -200;
114290001Sglebius	expected.l_uf = QUARTER_PROMILLE_APPRX;
115290001Sglebius
116290001Sglebius	l_fp actual, actual_ms;
117290001Sglebius
118290001Sglebius	TEST_ASSERT_TRUE(atolfp(str, &actual));
119290001Sglebius	TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
120290001Sglebius
121290001Sglebius	TEST_ASSERT_TRUE(IsEqual(expected, actual));
122290001Sglebius	TEST_ASSERT_TRUE(IsEqual(expected, actual_ms));
123290001Sglebius
124290001Sglebius}
125290001Sglebius
126290001Sglebiusvoid test_InvalidChars(void) {
127290001Sglebius	const char *str = "500.4a2";
128290001Sglebius	l_fp actual, actual_ms;
129290001Sglebius
130290001Sglebius	TEST_ASSERT_FALSE(atolfp(str, &actual));
131290001Sglebius	TEST_ASSERT_FALSE(mstolfp(str, &actual_ms));
132290001Sglebius}
133290001Sglebius
134