aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorSuperAuguste <19855629+SuperAuguste@users.noreply.github.com>2024-03-17 20:19:52 -0400
committerLuuk de Gram <luuk@degram.dev>2024-03-18 12:40:41 +0100
commit8e7d9afdacef9d3a9443fc4b70cfe6aa229ecee5 (patch)
tree51141a201a9169704d792929f3d5a78dbd410bd5 /test
parentcbeab678a50e48ba55f39b391fcfe98823fe3c8c (diff)
downloadzig-8e7d9afdacef9d3a9443fc4b70cfe6aa229ecee5.tar.gz
zig-8e7d9afdacef9d3a9443fc4b70cfe6aa229ecee5.zip
Add 64bit byteswap case, use fewer locals
Diffstat (limited to 'test')
-rw-r--r--test/behavior/byteswap.zig31
1 files changed, 30 insertions, 1 deletions
diff --git a/test/behavior/byteswap.zig b/test/behavior/byteswap.zig
index 83e6c4a462..182948416c 100644
--- a/test/behavior/byteswap.zig
+++ b/test/behavior/byteswap.zig
@@ -3,7 +3,36 @@ const builtin = @import("builtin");
const expect = std.testing.expect;
test "@byteSwap integers" {
- if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_wasm) {
+ // TODO: Remove when self-hosted wasm supports more types for byteswap
+ const ByteSwapIntTest = struct {
+ fn run() !void {
+ try t(u8, 0x12, 0x12);
+ try t(u16, 0x1234, 0x3412);
+ try t(u24, 0x123456, 0x563412);
+ try t(i24, @as(i24, @bitCast(@as(u24, 0xf23456))), 0x5634f2);
+ try t(i24, 0x1234f6, @as(i24, @bitCast(@as(u24, 0xf63412))));
+ try t(u32, 0x12345678, 0x78563412);
+ try t(i32, @as(i32, @bitCast(@as(u32, 0xf2345678))), 0x785634f2);
+ try t(i32, 0x123456f8, @as(i32, @bitCast(@as(u32, 0xf8563412))));
+ try t(u64, 0x123456789abcdef1, 0xf1debc9a78563412);
+
+ try t(u0, @as(u0, 0), 0);
+ try t(i8, @as(i8, -50), -50);
+ try t(i16, @as(i16, @bitCast(@as(u16, 0x1234))), @as(i16, @bitCast(@as(u16, 0x3412))));
+ try t(i24, @as(i24, @bitCast(@as(u24, 0x123456))), @as(i24, @bitCast(@as(u24, 0x563412))));
+ try t(i32, @as(i32, @bitCast(@as(u32, 0x12345678))), @as(i32, @bitCast(@as(u32, 0x78563412))));
+ try t(i64, @as(i64, @bitCast(@as(u64, 0x123456789abcdef1))), @as(i64, @bitCast(@as(u64, 0xf1debc9a78563412))));
+ }
+ fn t(comptime I: type, input: I, expected_output: I) !void {
+ try std.testing.expect(expected_output == @byteSwap(input));
+ }
+ };
+ try comptime ByteSwapIntTest.run();
+ try ByteSwapIntTest.run();
+ return;
+ }
+
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest;