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
13void setUp(void);
14void test_PositiveInteger(void);
15void test_NegativeInteger(void);
16void test_PositiveFraction(void);
17void test_NegativeFraction(void);
18void test_PositiveMsFraction(void);
19void test_NegativeMsFraction(void);
20void test_InvalidChars(void);
21
22
23void
24setUp(void)
25{
26	init_lib();
27
28	return;
29}
30
31
32void 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
46void 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
63void 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
77void 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
94void 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
110void 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
128void 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