aboutsummaryrefslogtreecommitdiff
path: root/tests/core
diff options
context:
space:
mode:
authorJeroen van Rijn <Kelimion@users.noreply.github.com>2025-06-10 16:46:12 +0200
committerJeroen van Rijn <Kelimion@users.noreply.github.com>2025-06-10 16:46:12 +0200
commit4f4839ecc5a8ab0cfea0f38e86784ee1fff04bdb (patch)
tree6af8405b317a363af2dffe37e040e42cc536014e /tests/core
parent14d2541529074f5b0462671e93881f58097b06e3 (diff)
Add initial tests for big rationals
Diffstat (limited to 'tests/core')
-rw-r--r--tests/core/math/big/build.bat4
-rw-r--r--tests/core/math/big/test_core_math_big.odin48
2 files changed, 51 insertions, 1 deletions
diff --git a/tests/core/math/big/build.bat b/tests/core/math/big/build.bat
index ad199d775..a15e48488 100644
--- a/tests/core/math/big/build.bat
+++ b/tests/core/math/big/build.bat
@@ -11,4 +11,6 @@ echo Running core:math/big tests
echo ---
%PATH_TO_ODIN% build . %COMMON% -o:speed -out:%OUT_NAME%
-python3 test.py %TEST_ARGS% \ No newline at end of file
+python3 test.py %TEST_ARGS%
+
+odin test test_core_math_big.odin -file \ No newline at end of file
diff --git a/tests/core/math/big/test_core_math_big.odin b/tests/core/math/big/test_core_math_big.odin
index 9a1e7b01b..14b6e978c 100644
--- a/tests/core/math/big/test_core_math_big.odin
+++ b/tests/core/math/big/test_core_math_big.odin
@@ -35,3 +35,51 @@ test_permutations_and_combinations :: proc(t: ^testing.T) {
testing.expect_value(t, error, nil)
}
}
+
+Rational_Vectors :: struct {
+ numerator: int,
+ denominator: int,
+ expected_f64: f64,
+ expected_f32: f32,
+ expected_f16: f16,
+ exact_f64: bool,
+ exact_f32: bool,
+ exact_f16: bool,
+}
+rational_vectors := []Rational_Vectors{
+ {-1, 1, -1.00, -1.00, -1.00, true, true, true},
+ { 1, 4, 0.25, 0.25, 0.25, true, true, true},
+ { 3, 4, 0.75, 0.75, 0.75, true, true, true},
+ {-3, 4, -0.75, -0.75, -0.75, true, true, true},
+}
+
+@(test)
+test_rational_to_float :: proc(t: ^testing.T) {
+ for vec in rational_vectors {
+ r: big.Rat
+ defer big.destroy(&r)
+ big.set(&r.a, vec.numerator)
+ big.set(&r.b, vec.denominator)
+
+ {
+ float, exact, err := big.rat_to_f64(&r)
+ testing.expect_value(t, float, vec.expected_f64)
+ testing.expect(t, exact == vec.exact_f64)
+ testing.expect(t, err == nil)
+ }
+
+ {
+ float, exact, err := big.rat_to_f32(&r)
+ testing.expect_value(t, float, vec.expected_f32)
+ testing.expect(t, exact == vec.exact_f32)
+ testing.expect(t, err == nil)
+ }
+
+ {
+ float, exact, err := big.rat_to_f16(&r)
+ testing.expect_value(t, float, vec.expected_f16)
+ testing.expect(t, exact == vec.exact_f16)
+ testing.expect(t, err == nil)
+ }
+ }
+} \ No newline at end of file