summaryrefslogtreecommitdiff
path: root/tests/libntp/strtolfp.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/libntp/strtolfp.c')
-rw-r--r--tests/libntp/strtolfp.c123
1 files changed, 123 insertions, 0 deletions
diff --git a/tests/libntp/strtolfp.c b/tests/libntp/strtolfp.c
new file mode 100644
index 0000000000000..f40ab508a4afd
--- /dev/null
+++ b/tests/libntp/strtolfp.c
@@ -0,0 +1,123 @@
+#include "config.h"
+
+#include "ntp_stdlib.h"
+#include "ntp_calendar.h"
+
+#include "unity.h"
+#include "lfptest.h"
+
+/* This file tests both atolfp and mstolfp */
+
+void test_PositiveInteger(void);
+void test_NegativeInteger(void);
+void test_PositiveFraction(void);
+void test_NegativeFraction(void);
+void test_PositiveMsFraction(void);
+void test_NegativeMsFraction(void);
+void test_InvalidChars(void);
+
+
+void test_PositiveInteger(void) {
+ const char *str = "500";
+ const char *str_ms = "500000";
+
+ l_fp expected = {{500},0};
+ l_fp actual, actual_ms;
+
+ TEST_ASSERT_TRUE(atolfp(str, &actual));
+ TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
+
+ TEST_ASSERT_TRUE(IsEqual(expected, actual));
+ TEST_ASSERT_TRUE(IsEqual(expected, actual_ms));
+}
+
+void test_NegativeInteger(void) {
+ const char *str = "-300";
+ const char *str_ms = "-300000";
+
+ l_fp expected;
+ expected.l_i = -300;
+ expected.l_uf = 0;
+
+ l_fp actual, actual_ms;
+
+ TEST_ASSERT_TRUE(atolfp(str, &actual));
+ TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
+
+ TEST_ASSERT_TRUE(IsEqual(expected, actual));
+ TEST_ASSERT_TRUE(IsEqual(expected, actual_ms));
+}
+
+void test_PositiveFraction(void) {
+ const char *str = "+500.5";
+ const char *str_ms = "500500.0";
+
+ l_fp expected = {{500}, HALF};
+ l_fp actual, actual_ms;
+
+ TEST_ASSERT_TRUE(atolfp(str, &actual));
+ TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
+
+ TEST_ASSERT_TRUE(IsEqual(expected, actual));
+ TEST_ASSERT_TRUE(IsEqual(expected, actual_ms));
+}
+
+void test_NegativeFraction(void) {
+ const char *str = "-300.75";
+ const char *str_ms = "-300750";
+
+ l_fp expected;
+ expected.l_i = -301;
+ expected.l_uf = QUARTER;
+
+ l_fp actual, actual_ms;
+
+ TEST_ASSERT_TRUE(atolfp(str, &actual));
+ TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
+
+ TEST_ASSERT_TRUE(IsEqual(expected, actual));
+ TEST_ASSERT_TRUE(IsEqual(expected, actual_ms));
+}
+
+void test_PositiveMsFraction(void) {
+ const char *str = "300.00025";
+ const char *str_ms = "300000.25";
+
+ l_fp expected = {{300}, QUARTER_PROMILLE_APPRX};
+ l_fp actual, actual_ms;
+
+
+ TEST_ASSERT_TRUE(atolfp(str, &actual));
+ TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
+
+ TEST_ASSERT_TRUE(IsEqual(expected, actual));
+ TEST_ASSERT_TRUE(IsEqual(expected, actual_ms));
+
+}
+
+void test_NegativeMsFraction(void) {
+ const char *str = "-199.99975";
+ const char *str_ms = "-199999.75";
+
+ l_fp expected;
+ expected.l_i = -200;
+ expected.l_uf = QUARTER_PROMILLE_APPRX;
+
+ l_fp actual, actual_ms;
+
+ TEST_ASSERT_TRUE(atolfp(str, &actual));
+ TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
+
+ TEST_ASSERT_TRUE(IsEqual(expected, actual));
+ TEST_ASSERT_TRUE(IsEqual(expected, actual_ms));
+
+}
+
+void test_InvalidChars(void) {
+ const char *str = "500.4a2";
+ l_fp actual, actual_ms;
+
+ TEST_ASSERT_FALSE(atolfp(str, &actual));
+ TEST_ASSERT_FALSE(mstolfp(str, &actual_ms));
+}
+