master
1const std = @import("std");
2const builtin = @import("builtin");
3const expect = std.testing.expect;
4
5test "@byteSwap integers" {
6 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
7 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
8 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest;
9 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
10
11 const ByteSwapIntTest = struct {
12 fn run() !void {
13 try t(u0, 0, 0);
14 try t(u8, 0x12, 0x12);
15 try t(u16, 0x1234, 0x3412);
16 try t(u24, 0x123456, 0x563412);
17 try t(i24, @as(i24, @bitCast(@as(u24, 0xf23456))), 0x5634f2);
18 try t(i24, 0x1234f6, @as(i24, @bitCast(@as(u24, 0xf63412))));
19 try t(u32, 0x12345678, 0x78563412);
20 try t(i32, @as(i32, @bitCast(@as(u32, 0xf2345678))), 0x785634f2);
21 try t(i32, 0x123456f8, @as(i32, @bitCast(@as(u32, 0xf8563412))));
22 try t(u64, 0x123456789abcdef1, 0xf1debc9a78563412);
23
24 try t(u0, @as(u0, 0), 0);
25 try t(i8, @as(i8, -50), -50);
26 try t(i16, @as(i16, @bitCast(@as(u16, 0x1234))), @as(i16, @bitCast(@as(u16, 0x3412))));
27 try t(i24, @as(i24, @bitCast(@as(u24, 0x123456))), @as(i24, @bitCast(@as(u24, 0x563412))));
28 try t(i32, @as(i32, @bitCast(@as(u32, 0x12345678))), @as(i32, @bitCast(@as(u32, 0x78563412))));
29 try t(i64, @as(i64, @bitCast(@as(u64, 0x123456789abcdef1))), @as(i64, @bitCast(@as(u64, 0xf1debc9a78563412))));
30 }
31 fn t(comptime I: type, input: I, expected_output: I) !void {
32 try std.testing.expect(expected_output == @byteSwap(input));
33 }
34 };
35 try comptime ByteSwapIntTest.run();
36 try ByteSwapIntTest.run();
37}
38
39test "@byteSwap exotic integers" {
40 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
41 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
42 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
43 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest;
44 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
45 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
46
47 const ByteSwapIntTest = struct {
48 fn run() !void {
49 try t(u0, 0, 0);
50 try t(u40, 0x123456789a, 0x9a78563412);
51 try t(i48, 0x123456789abc, @as(i48, @bitCast(@as(u48, 0xbc9a78563412))));
52 try t(u56, 0x123456789abcde, 0xdebc9a78563412);
53 try t(u88, 0x123456789abcdef1112131, 0x312111f1debc9a78563412);
54 try t(u96, 0x123456789abcdef111213141, 0x41312111f1debc9a78563412);
55 try t(u128, 0x123456789abcdef11121314151617181, 0x8171615141312111f1debc9a78563412);
56
57 try t(u40, @as(i40, @bitCast(@as(u40, 0x123456789a))), @as(u40, 0x9a78563412));
58 try t(i48, @as(i48, @bitCast(@as(u48, 0x123456789abc))), @as(i48, @bitCast(@as(u48, 0xbc9a78563412))));
59 try t(i56, @as(i56, @bitCast(@as(u56, 0x123456789abcde))), @as(i56, @bitCast(@as(u56, 0xdebc9a78563412))));
60 try t(i88, @as(i88, @bitCast(@as(u88, 0x123456789abcdef1112131))), @as(i88, @bitCast(@as(u88, 0x312111f1debc9a78563412))));
61 try t(i96, @as(i96, @bitCast(@as(u96, 0x123456789abcdef111213141))), @as(i96, @bitCast(@as(u96, 0x41312111f1debc9a78563412))));
62 try t(
63 i128,
64 @as(i128, @bitCast(@as(u128, 0x123456789abcdef11121314151617181))),
65 @as(i128, @bitCast(@as(u128, 0x8171615141312111f1debc9a78563412))),
66 );
67 }
68 fn t(comptime I: type, input: I, expected_output: I) !void {
69 try std.testing.expect(expected_output == @byteSwap(input));
70 }
71 };
72 try comptime ByteSwapIntTest.run();
73 try ByteSwapIntTest.run();
74}
75
76fn vector8() !void {
77 var v = @Vector(2, u8){ 0x12, 0x13 };
78 _ = &v;
79 const result = @byteSwap(v);
80 try expect(result[0] == 0x12);
81 try expect(result[1] == 0x13);
82}
83
84test "@byteSwap vectors u8" {
85 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
86 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
87 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
88 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
89 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
90 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
91
92 try comptime vector8();
93 try vector8();
94}
95
96fn vector16() !void {
97 var v = @Vector(2, u16){ 0x1234, 0x2345 };
98 _ = &v;
99 const result = @byteSwap(v);
100 try expect(result[0] == 0x3412);
101 try expect(result[1] == 0x4523);
102}
103
104test "@byteSwap vectors u16" {
105 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
106 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
107 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
108 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
109 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
110 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
111
112 try comptime vector16();
113 try vector16();
114}
115
116fn vector24() !void {
117 var v = @Vector(2, u24){ 0x123456, 0x234567 };
118 _ = &v;
119 const result = @byteSwap(v);
120 try expect(result[0] == 0x563412);
121 try expect(result[1] == 0x674523);
122}
123
124test "@byteSwap vectors u24" {
125 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
126 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
127 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
128 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
129 if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;
130 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
131
132 try comptime vector24();
133 try vector24();
134}
135
136fn vector0() !void {
137 var v = @Vector(2, u0){ 0, 0 };
138 _ = &v;
139 const result = @byteSwap(v);
140 try expect(result[0] == 0);
141 try expect(result[1] == 0);
142}
143
144test "@byteSwap vectors u0" {
145 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
146
147 try comptime vector0();
148 try vector0();
149}