From 72f6b5479dd77a69be78faac2afaee7c3a1c2a6d Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Thu, 6 Jun 2024 14:42:19 +0200 Subject: Fix `fls_uint` --- tests/core/mem/test_core_mem.odin | 41 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 tests/core/mem/test_core_mem.odin (limited to 'tests') diff --git a/tests/core/mem/test_core_mem.odin b/tests/core/mem/test_core_mem.odin new file mode 100644 index 000000000..d282ae1fd --- /dev/null +++ b/tests/core/mem/test_core_mem.odin @@ -0,0 +1,41 @@ +package test_core_mem + +import "core:mem/tlsf" +import "core:testing" + +@test +test_tlsf_bitscan :: proc(t: ^testing.T) { + Vector :: struct { + op: enum{ffs, fls, fls_uint}, + v: union{u32, uint}, + exp: i32, + } + Tests := []Vector{ + {.ffs, u32 (0x0000_0000_0000_0000), -1}, + {.ffs, u32 (0x0000_0000_0000_0000), -1}, + {.fls, u32 (0x0000_0000_0000_0000), -1}, + {.ffs, u32 (0x0000_0000_0000_0001), 0}, + {.fls, u32 (0x0000_0000_0000_0001), 0}, + {.ffs, u32 (0x0000_0000_8000_0000), 31}, + {.ffs, u32 (0x0000_0000_8000_8000), 15}, + {.fls, u32 (0x0000_0000_8000_0008), 31}, + {.fls, u32 (0x0000_0000_7FFF_FFFF), 30}, + {.fls_uint, uint(0x0000_0000_8000_0000), 31}, + {.fls_uint, uint(0x0000_0001_0000_0000), 32}, + {.fls_uint, uint(0xffff_ffff_ffff_ffff), 63}, + } + + for test in Tests { + switch test.op { + case .ffs: + res := tlsf.ffs(test.v.?) + testing.expectf(t, res == test.exp, "Expected tlsf.ffs(0x%08x) == %v, got %v", test.v, test.exp, res) + case .fls: + res := tlsf.fls(test.v.?) + testing.expectf(t, res == test.exp, "Expected tlsf.fls(0x%08x) == %v, got %v", test.v, test.exp, res) + case .fls_uint: + res := tlsf.fls_uint(test.v.?) + testing.expectf(t, res == test.exp, "Expected tlsf.fls_uint(0x%16x) == %v, got %v", test.v, test.exp, res) + } + } +} \ No newline at end of file -- cgit v1.2.3 From 28ea9425fdd1dca0179873a3fe2c2d64df2e3299 Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Thu, 6 Jun 2024 14:59:19 +0200 Subject: Add `core:mem` tests. --- core/mem/tlsf/tlsf_internal.odin | 14 ++++++-------- tests/core/Makefile | 4 ++++ tests/core/build.bat | 5 +++++ 3 files changed, 15 insertions(+), 8 deletions(-) (limited to 'tests') diff --git a/core/mem/tlsf/tlsf_internal.odin b/core/mem/tlsf/tlsf_internal.odin index 9c8f5c6d8..6f33e516c 100644 --- a/core/mem/tlsf/tlsf_internal.odin +++ b/core/mem/tlsf/tlsf_internal.odin @@ -124,16 +124,14 @@ ffs :: proc "contextless" (word: u32) -> (bit: i32) { @(require_results) fls :: proc "contextless" (word: u32) -> (bit: i32) { - return i32(31 - intrinsics.count_leading_zeros(word)) + N :: (size_of(u32) * 8) - 1 + return i32(N - intrinsics.count_leading_zeros(word)) } -when size_of(uintptr) == 8 { - @(require_results) - fls_uint :: proc "contextless" (size: uint) -> (bit: i32) { - return i32(63 - intrinsics.count_leading_zeros(size)) - } -} else { - fls_uint :: fls_u32 +@(require_results) +fls_uint :: proc "contextless" (size: uint) -> (bit: i32) { + N :: (size_of(uint) * 8) - 1 + return i32(N - intrinsics.count_leading_zeros(size)) } @(require_results) diff --git a/tests/core/Makefile b/tests/core/Makefile index 85f3783b4..48683250f 100644 --- a/tests/core/Makefile +++ b/tests/core/Makefile @@ -19,6 +19,7 @@ all_bsd: download_test_assets \ linalg_glsl_math_test \ match_test \ math_test \ + mem_test \ noise_test \ odin_test \ os_exit_test \ @@ -80,6 +81,9 @@ linalg_glsl_math_test: noise_test: $(ODIN) test math/noise $(COMMON) -out:test_noise +mem_test: + $(ODIN) test mem $(COMMON) -out:test_core_mem + net_test: $(ODIN) test net $(COMMON) -out:test_core_net diff --git a/tests/core/build.bat b/tests/core/build.bat index 67ac10f86..aa68975f8 100644 --- a/tests/core/build.bat +++ b/tests/core/build.bat @@ -78,6 +78,11 @@ echo Running core:math/noise tests echo --- %PATH_TO_ODIN% test math/noise %COMMON% -out:test_noise.exe || exit /b +echo --- +echo Running core:mem tests +echo --- +%PATH_TO_ODIN% test mem %COMMON% -out:test_core_mem.exe || exit /b + echo --- echo Running core:net echo --- -- cgit v1.2.3