authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-02-22 13:52:40+01:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-02-22 21:56:34+01:00
log1bbb886694b96fdfbba0857dcba56a1ec5c8fbd4
tree010bf3724d2679ff05db113437b75d0044d25558
parent150006d2163a050d68deec2a3bfae81304cc5a3e

Port bitcast.zig tests


2 files changed, 39 insertions(+), 1 deletions(-)

test/behavior.zig+1-1
......@@ -6,6 +6,7 @@ test {
66 _ = @import("behavior/array.zig");
77 _ = @import("behavior/basic.zig");
88 _ = @import("behavior/bit_shifting.zig");
9 _ = @import("behavior/bitcast.zig");
910 _ = @import("behavior/bitreverse.zig");
1011 _ = @import("behavior/byteswap.zig");
1112 _ = @import("behavior/bool.zig");
......@@ -59,7 +60,6 @@ test {
5960
6061 if (builtin.zig_backend != .stage2_arm and builtin.zig_backend != .stage2_x86_64 and builtin.zig_backend != .stage2_aarch64) {
6162 // Tests that pass (partly) for stage1, llvm backend, C backend, wasm backend.
62 _ = @import("behavior/bitcast.zig");
6363 _ = @import("behavior/bugs/624.zig");
6464 _ = @import("behavior/bugs/704.zig");
6565 _ = @import("behavior/bugs/1076.zig");
test/behavior/bitcast.zig+38
......@@ -7,6 +7,9 @@ const minInt = std.math.minInt;
77const native_endian = builtin.target.cpu.arch.endian();
88
99test "@bitCast iX -> uX (32, 64)" {
10 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
11 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
12
1013 const bit_values = [_]usize{ 32, 64 };
1114
1215 inline for (bit_values) |bits| {
......@@ -17,6 +20,10 @@ test "@bitCast iX -> uX (32, 64)" {
1720
1821test "@bitCast iX -> uX (8, 16, 128)" {
1922 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
23 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
24 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
25 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
26
2027 const bit_values = [_]usize{ 8, 16, 128 };
2128
2229 inline for (bit_values) |bits| {
......@@ -29,6 +36,8 @@ test "@bitCast iX -> uX exotic integers" {
2936 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
3037 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
3138 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
39 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
40 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
3241
3342 const bit_values = [_]usize{ 1, 48, 27, 512, 493, 293, 125, 204, 112 };
3443
......@@ -66,6 +75,9 @@ fn conv_uN(comptime N: usize, x: std.meta.Int(.unsigned, N)) std.meta.Int(.signe
6675}
6776
6877test "nested bitcast" {
78 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
79 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
80
6981 const S = struct {
7082 fn moo(x: isize) !void {
7183 try expect(@intCast(isize, 42) == x);
......@@ -83,6 +95,9 @@ test "nested bitcast" {
8395}
8496
8597test "@bitCast enum to its integer type" {
98 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
99 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
100
86101 const SOCK = enum(c_int) {
87102 A,
88103 B,
......@@ -100,11 +115,17 @@ test "@bitCast enum to its integer type" {
100115
101116// issue #3010: compiler segfault
102117test "bitcast literal [4]u8 param to u32" {
118 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
119 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
120
103121 const ip = @bitCast(u32, [_]u8{ 255, 255, 255, 255 });
104122 try expect(ip == maxInt(u32));
105123}
106124
107125test "bitcast generates a temporary value" {
126 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
127 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
128
108129 var y = @as(u16, 0x55AA);
109130 const x = @bitCast(u16, @bitCast([2]u8, y));
110131 try expect(y == x);
......@@ -115,6 +136,8 @@ test "@bitCast packed structs at runtime and comptime" {
115136 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
116137 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
117138 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
139 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
140 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
118141
119142 const Full = packed struct {
120143 number: u16,
......@@ -151,6 +174,8 @@ test "@bitCast extern structs at runtime and comptime" {
151174 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
152175 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
153176 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
177 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
178 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
154179
155180 const Full = extern struct {
156181 number: u16,
......@@ -184,6 +209,8 @@ test "bitcast packed struct to integer and back" {
184209 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
185210 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
186211 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
212 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
213 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
187214
188215 const LevelUpMove = packed struct {
189216 move_id: u9,
......@@ -203,6 +230,9 @@ test "bitcast packed struct to integer and back" {
203230}
204231
205232test "implicit cast to error union by returning" {
233 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
234 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
235
206236 const S = struct {
207237 fn entry() !void {
208238 try expect((func(-1) catch unreachable) == maxInt(u64));
......@@ -220,6 +250,8 @@ test "bitcast packed struct literal to byte" {
220250 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
221251 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
222252 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
253 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
254 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
223255
224256 const Foo = packed struct {
225257 value: u8,
......@@ -233,6 +265,8 @@ test "comptime bitcast used in expression has the correct type" {
233265 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
234266 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
235267 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
268 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
269 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
236270
237271 const Foo = packed struct {
238272 value: u8,
......@@ -245,6 +279,8 @@ test "bitcast passed as tuple element" {
245279 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
246280 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
247281 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
282 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
283 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
248284
249285 const S = struct {
250286 fn foo(args: anytype) !void {
......@@ -257,6 +293,8 @@ test "bitcast passed as tuple element" {
257293
258294test "triple level result location with bitcast sandwich passed as tuple element" {
259295 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
296 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
297 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
260298
261299 const S = struct {
262300 fn foo(args: anytype) !void {