aboutsummaryrefslogtreecommitdiff
path: root/test/src
diff options
context:
space:
mode:
Diffstat (limited to 'test/src')
-rw-r--r--test/src/TestFloat.c (renamed from test/src/TestString.c)99
1 files changed, 75 insertions, 24 deletions
diff --git a/test/src/TestString.c b/test/src/TestFloat.c
index 53811cf..dac6171 100644
--- a/test/src/TestString.c
+++ b/test/src/TestFloat.c
@@ -1,6 +1,8 @@
#include <BH/String.h>
+#include <BH/Util.h>
#include <BH/Unit.h>
#include <float.h>
+#include <limits.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
@@ -18,7 +20,7 @@ static int compareString(double value,
result = strcmp(str, ref);
if (result)
printf("Value: %.17g\tReference: %s\tGot: %s\n", value, ref, str);
-
+
BH_StringFree(str);
return result;
@@ -32,10 +34,10 @@ static int roundtripString(double value,
char *str;
str = BH_StringFromDouble(value, format, -1);
- result = strtod(str, NULL);
+ result = BH_StringToDouble(str, NULL);
if (result != value)
printf("Value: %.17g\tGot: %.17g\tStr: %s\n", value, result, str);
-
+
BH_StringFree(str);
return result != value;
@@ -94,10 +96,6 @@ BH_UNIT_TEST(FixedRoundTrip)
{
BH_VERIFY(roundtripString(1.0, 'f') == 0);
BH_VERIFY(roundtripString(-1.0, 'f') == 0);
- BH_VERIFY(roundtripString(DBL_MIN, 'f') == 0);
- BH_VERIFY(roundtripString(-DBL_MIN, 'f') == 0);
- BH_VERIFY(roundtripString(DBL_MAX, 'f') == 0);
- BH_VERIFY(roundtripString(-DBL_MAX, 'f') == 0);
BH_VERIFY(roundtripString(0.0, 'f') == 0);
BH_VERIFY(roundtripString(-0.0, 'f') == 0);
BH_VERIFY(roundtripString(3.14159, 'f') == 0);
@@ -108,8 +106,12 @@ BH_UNIT_TEST(FixedRoundTrip)
BH_VERIFY(roundtripString(-0.81, 'f') == 0);
BH_VERIFY(roundtripString(0.81, 'f') == 0);
BH_VERIFY(roundtripString(-0.81, 'f') == 0);
- BH_VERIFY(roundtripString(144115188075855877, 'f') == 0);
- BH_VERIFY(roundtripString(-144115188075855877, 'f') == 0);
+ BH_VERIFY(roundtripString(144115188075855877.0, 'f') == 0);
+ BH_VERIFY(roundtripString(-144115188075855877.0, 'f') == 0);
+ BH_VERIFY(roundtripString(DBL_MIN, 'f') == 0);
+ BH_VERIFY(roundtripString(-DBL_MIN, 'f') == 0);
+ BH_VERIFY(roundtripString(DBL_MAX, 'f') == 0);
+ BH_VERIFY(roundtripString(-DBL_MAX, 'f') == 0);
return 0;
}
@@ -206,8 +208,8 @@ BH_UNIT_TEST(ShortestFormat)
BH_VERIFY(compareString(-1230000000.00123, 'g', 1, "-1e+09") == 0);
BH_VERIFY(compareString(-1230000000.00123, 'g', 2, "-1.2e+09") == 0);
BH_VERIFY(compareString(-1230000000.00123, 'g', 3, "-1.23e+09") == 0);
- BH_VERIFY(compareString(144115188075855877, 'g', 17, "1.4411518807585587e+17") == 0);
- BH_VERIFY(compareString(-144115188075855877, 'g', 17, "-1.4411518807585587e+17") == 0);
+ BH_VERIFY(compareString(144115188075855877.0, 'g', 17, "1.4411518807585587e+17") == 0);
+ BH_VERIFY(compareString(-144115188075855877.0, 'g', 17, "-1.4411518807585587e+17") == 0);
return 0;
}
@@ -217,10 +219,6 @@ BH_UNIT_TEST(ScientificRoundTrip)
{
BH_VERIFY(roundtripString(1.0, 'e') == 0);
BH_VERIFY(roundtripString(-1.0, 'e') == 0);
- BH_VERIFY(roundtripString(DBL_MIN, 'e') == 0);
- BH_VERIFY(roundtripString(-DBL_MIN, 'e') == 0);
- BH_VERIFY(roundtripString(DBL_MAX, 'e') == 0);
- BH_VERIFY(roundtripString(-DBL_MAX, 'e') == 0);
BH_VERIFY(roundtripString(0.0, 'e') == 0);
BH_VERIFY(roundtripString(-0.0, 'e') == 0);
BH_VERIFY(roundtripString(3.14159, 'e') == 0);
@@ -231,8 +229,12 @@ BH_UNIT_TEST(ScientificRoundTrip)
BH_VERIFY(roundtripString(-0.81, 'e') == 0);
BH_VERIFY(roundtripString(0.81, 'e') == 0);
BH_VERIFY(roundtripString(-0.81, 'e') == 0);
- BH_VERIFY(roundtripString(144115188075855877, 'e') == 0);
- BH_VERIFY(roundtripString(-144115188075855877, 'e') == 0);
+ BH_VERIFY(roundtripString(144115188075855877.0, 'e') == 0);
+ BH_VERIFY(roundtripString(-144115188075855877.0, 'e') == 0);
+ BH_VERIFY(roundtripString(DBL_MIN, 'e') == 0);
+ BH_VERIFY(roundtripString(-DBL_MIN, 'e') == 0);
+ BH_VERIFY(roundtripString(DBL_MAX, 'e') == 0);
+ BH_VERIFY(roundtripString(-DBL_MAX, 'e') == 0);
return 0;
}
@@ -242,10 +244,6 @@ BH_UNIT_TEST(ShortestRoundTrip)
{
BH_VERIFY(roundtripString(1.0, 'g') == 0);
BH_VERIFY(roundtripString(-1.0, 'g') == 0);
- BH_VERIFY(roundtripString(DBL_MIN, 'g') == 0);
- BH_VERIFY(roundtripString(-DBL_MIN, 'g') == 0);
- BH_VERIFY(roundtripString(DBL_MAX, 'g') == 0);
- BH_VERIFY(roundtripString(-DBL_MAX, 'g') == 0);
BH_VERIFY(roundtripString(0.0, 'g') == 0);
BH_VERIFY(roundtripString(-0.0, 'g') == 0);
BH_VERIFY(roundtripString(3.14159, 'g') == 0);
@@ -256,8 +254,12 @@ BH_UNIT_TEST(ShortestRoundTrip)
BH_VERIFY(roundtripString(-0.81, 'g') == 0);
BH_VERIFY(roundtripString(0.81, 'g') == 0);
BH_VERIFY(roundtripString(-0.81, 'g') == 0);
- BH_VERIFY(roundtripString(144115188075855877, 'g') == 0);
- BH_VERIFY(roundtripString(-144115188075855877, 'g') == 0);
+ BH_VERIFY(roundtripString(144115188075855877.0, 'g') == 0);
+ BH_VERIFY(roundtripString(-144115188075855877.0, 'g') == 0);
+ BH_VERIFY(roundtripString(DBL_MIN, 'g') == 0);
+ BH_VERIFY(roundtripString(-DBL_MIN, 'g') == 0);
+ BH_VERIFY(roundtripString(DBL_MAX, 'g') == 0);
+ BH_VERIFY(roundtripString(-DBL_MAX, 'g') == 0);
return 0;
}
@@ -292,7 +294,7 @@ BH_UNIT_TEST(Parity)
if (strcmp(str, output))
{
printf("(%.17g) (%d) %s vs %s\n", value, k, str, output);
- BH_FAIL("Not equal");
+ BH_FAIL("Strings aren't equal");
}
BH_StringFree(str);
}
@@ -303,6 +305,54 @@ BH_UNIT_TEST(Parity)
}
+BH_UNIT_TEST(ToDouble)
+{
+ size_t size;
+
+ BH_VERIFY(BH_ClassifyDouble(BH_StringToDouble(" INFa ", &size)) == BH_FP_INFINITE);
+ BH_VERIFY(size == 5);
+ BH_VERIFY(BH_ClassifyDouble(BH_StringToDouble(" INFINITYc ", &size)) == BH_FP_INFINITE);
+ BH_VERIFY(size == 10);
+
+ BH_VERIFY(BH_ClassifyDouble(BH_StringToDouble(" -INFb ", &size)) == (BH_FP_INFINITE | BH_FP_NEGATIVE));
+ BH_VERIFY(size == 6);
+ BH_VERIFY(BH_ClassifyDouble(BH_StringToDouble(" -INFINITYd ", &size)) == (BH_FP_INFINITE | BH_FP_NEGATIVE));
+ BH_VERIFY(size == 11);
+
+ BH_VERIFY(BH_ClassifyDouble(BH_StringToDouble(" NANe ", &size)) == BH_FP_NAN);
+ BH_VERIFY(size == 5);
+
+ BH_VERIFY_DELTA(BH_StringToDouble(" 1234.0312f ", &size), 1234.0312, 0.00001);
+ BH_VERIFY(size == 11);
+
+ BH_VERIFY_DELTA(BH_StringToDouble(" 3.14159g ", &size), 3.14159, 0.00001);
+ BH_VERIFY(size == 9);
+
+ BH_VERIFY(BH_StringToDouble(" h ", &size) == 0.0);
+ BH_VERIFY(size == 0);
+
+ BH_VERIFY(BH_StringToDouble(" 0 ", &size) == 0.0);
+ BH_VERIFY(size == 3);
+
+ BH_VERIFY(BH_StringToDouble(" 0.0 ", &size) == 0.0);
+ BH_VERIFY(size == 5);
+
+ BH_VERIFY(BH_StringToDouble(" 0. ", &size) == 0.0);
+ BH_VERIFY(size == 4);
+
+ BH_VERIFY(BH_StringToDouble(" .0 ", &size) == 0.0);
+ BH_VERIFY(size == 4);
+
+ BH_VERIFY(BH_StringToDouble(" .Hello ", &size) == 0.0);
+ BH_VERIFY(size == 0);
+
+ BH_VERIFY(BH_StringToDouble(" .E12 ", &size) == 0.0);
+ BH_VERIFY(size == 0);
+
+ return 0;
+}
+
+
int main(int argc, char **argv)
{
BH_UNUSED(argc);
@@ -315,6 +365,7 @@ int main(int argc, char **argv)
BH_UNIT_ADD(ShortestFormat);
BH_UNIT_ADD(ShortestRoundTrip);
BH_UNIT_ADD(Parity);
+ BH_UNIT_ADD(ToDouble);
return BH_UnitRun();
}