aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorske <contact@ske.land>2025-12-30 22:08:40 -0300
committerske <contact@ske.land>2025-12-30 22:08:40 -0300
commite4bf5476c3cc218b1265b2cb90c3b4fe3c9d3df8 (patch)
treecd5fbe9d54f31a8defc82182165a9e5d1bbf38fd /tests
parent107104ab4b199867bcf1c0404c82ec0d18cbc71d (diff)
Fix literal endianness (fix #6068)
Diffstat (limited to 'tests')
-rw-r--r--tests/issues/run.bat1
-rwxr-xr-xtests/issues/run.sh1
-rw-r--r--tests/issues/test_issue_6068.odin92
3 files changed, 94 insertions, 0 deletions
diff --git a/tests/issues/run.bat b/tests/issues/run.bat
index bbd7cbc90..0ceaf554c 100644
--- a/tests/issues/run.bat
+++ b/tests/issues/run.bat
@@ -26,6 +26,7 @@ set COMMON=-define:ODIN_TEST_FANCY=false -file -vet -strict-style -ignore-unused
..\..\..\odin build ..\test_issue_5097-2.odin %COMMON% || exit /b
..\..\..\odin build ..\test_issue_5265.odin %COMMON% || exit /b
..\..\..\odin test ..\test_issue_5699.odin %COMMON% || exit /b
+..\..\..\odin test ..\test_issue_6068.odin %COMMON% || exit /b
@echo off
diff --git a/tests/issues/run.sh b/tests/issues/run.sh
index a9a4bb88d..ce02ba20a 100755
--- a/tests/issues/run.sh
+++ b/tests/issues/run.sh
@@ -33,6 +33,7 @@ $ODIN build ../test_issue_5097.odin $COMMON
$ODIN build ../test_issue_5097-2.odin $COMMON
$ODIN build ../test_issue_5265.odin $COMMON
$ODIN test ../test_issue_5699.odin $COMMON
+$ODIN test ../test_issue_6068.odin $COMMON
set +x
diff --git a/tests/issues/test_issue_6068.odin b/tests/issues/test_issue_6068.odin
new file mode 100644
index 000000000..011c95442
--- /dev/null
+++ b/tests/issues/test_issue_6068.odin
@@ -0,0 +1,92 @@
+// Tests issue #6068 https://github.com/odin-lang/Odin/issues/6068
+package test_issues
+
+import "core:testing"
+
+@test
+test_issue_6068 :: proc(t: ^testing.T) {
+ {
+ check_be : i128be = -1
+ check_le : i128le = -1
+ value := -1
+ reverse := i128be(value)
+
+ // test variable
+ testing.expect(t, i128be(value) == check_be)
+ testing.expect(t, i128be(-1) == check_be)
+ testing.expect(t, cast(i128be)value == check_be)
+ testing.expect(t, cast(i128be)-1 == check_be)
+ testing.expect(t, i128be(int(-1)) == check_be)
+ testing.expect(t, cast(i128be)int(-1) == check_be)
+ testing.expect(t, i128le(value) == check_le)
+ testing.expect(t, i128le(-1) == check_le)
+ testing.expect(t, cast(i128le)value == check_le)
+ testing.expect(t, cast(i128le)-1 == check_le)
+ testing.expect(t, i128le(int(-1)) == check_le)
+ testing.expect(t, cast(i128le)int(-1) == check_le)
+ testing.expect(t, i128le(reverse) == check_le)
+ testing.expect(t, cast(i128le)reverse == check_le)
+
+ // test literal
+ testing.expect(t, i128be(value) == -1)
+ testing.expect(t, i128be(-1) == -1)
+ testing.expect(t, cast(i128be)value == -1)
+ testing.expect(t, cast(i128be)-1 == -1)
+ testing.expect(t, i128be(int(-1)) == -1)
+ testing.expect(t, cast(i128be)int(-1) == -1)
+ testing.expect(t, i128le(value) == -1)
+ testing.expect(t, i128le(-1) == -1)
+ testing.expect(t, cast(i128le)value == -1)
+ testing.expect(t, cast(i128le)-1 == -1)
+ testing.expect(t, i128le(int(-1)) == -1)
+ testing.expect(t, cast(i128le)int(-1) == -1)
+ testing.expect(t, i128le(reverse) == -1)
+ testing.expect(t, cast(i128le)reverse == -1)
+ }
+
+ // NOTE(ske): [llvm_backend_const.cpp:lb_big_int_to_llvm]
+ // floats behaved wonky when I tested because I forgot to sign extend whole
+ // rop so I added more tests here to be safe
+ {
+ check_be : f64be = -1.234
+ check_le : f64le = -1.234
+ value : f64 = -1.234
+ reverse := f64be(value)
+
+ // test variable
+ testing.expect(t, f64be(value) == check_be)
+ testing.expect(t, f64be(-1.234) == check_be)
+ testing.expect(t, cast(f64be)value == check_be)
+ testing.expect(t, cast(f64be)-1.234 == check_be)
+ testing.expect(t, f64be(int(-1.234)) == check_be)
+ testing.expect(t, cast(f64be)int(-1.234) == check_be)
+ testing.expect(t, f64le(value) == check_le)
+ testing.expect(t, f64le(-1.234) == check_le)
+ testing.expect(t, cast(f64le)value == check_le)
+ testing.expect(t, cast(f64le)-1.234 == check_le)
+ testing.expect(t, f64le(int(-1.234)) == check_le)
+ testing.expect(t, cast(f64le)int(-1.234) == check_le)
+ testing.expect(t, f64le(reverse) == check_le)
+ testing.expect(t, cast(f64le)reverse == check_le)
+
+ // test literal
+ testing.expect(t, f64be(value) == -1.234)
+ testing.expect(t, f64be(-1.234) == -1.234)
+ testing.expect(t, cast(f64be)value == -1.234)
+ testing.expect(t, cast(f64be)-1.234 == -1.234)
+ testing.expect(t, f64be(int(-1.234)) == -1.234)
+ testing.expect(t, cast(f64be)int(-1.234) == -1.234)
+ testing.expect(t, f64le(value) == -1.234)
+ testing.expect(t, f64le(-1.234) == -1.234)
+ testing.expect(t, cast(f64le)value == -1.234)
+ testing.expect(t, cast(f64le)-1.234 == -1.234)
+ testing.expect(t, f64le(int(-1.234)) == -1.234)
+ testing.expect(t, cast(f64le)int(-1.234) == -1.234)
+ testing.expect(t, f64le(reverse) == -1.234)
+ testing.expect(t, cast(f64le)reverse == -1.234)
+ }
+
+ testing.expect(t, i64be(-1) + i64be(1) == 0)
+ testing.expect(t, i64le(-1) + i64le(i64be(1)) == 0)
+ testing.expect(t, i64be(-7) * i64be(7) == -49)
+}