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 {...@@ -6,6 +6,7 @@ test {
6 _ = @import("behavior/array.zig");6 _ = @import("behavior/array.zig");
7 _ = @import("behavior/basic.zig");7 _ = @import("behavior/basic.zig");
8 _ = @import("behavior/bit_shifting.zig");8 _ = @import("behavior/bit_shifting.zig");
9 _ = @import("behavior/bitcast.zig");
9 _ = @import("behavior/bitreverse.zig");10 _ = @import("behavior/bitreverse.zig");
10 _ = @import("behavior/byteswap.zig");11 _ = @import("behavior/byteswap.zig");
11 _ = @import("behavior/bool.zig");12 _ = @import("behavior/bool.zig");
...@@ -59,7 +60,6 @@ test {...@@ -59,7 +60,6 @@ test {
5960
60 if (builtin.zig_backend != .stage2_arm and builtin.zig_backend != .stage2_x86_64 and builtin.zig_backend != .stage2_aarch64) {61 if (builtin.zig_backend != .stage2_arm and builtin.zig_backend != .stage2_x86_64 and builtin.zig_backend != .stage2_aarch64) {
61 // Tests that pass (partly) for stage1, llvm backend, C backend, wasm backend.62 // Tests that pass (partly) for stage1, llvm backend, C backend, wasm backend.
62 _ = @import("behavior/bitcast.zig");
63 _ = @import("behavior/bugs/624.zig");63 _ = @import("behavior/bugs/624.zig");
64 _ = @import("behavior/bugs/704.zig");64 _ = @import("behavior/bugs/704.zig");
65 _ = @import("behavior/bugs/1076.zig");65 _ = @import("behavior/bugs/1076.zig");
test/behavior/bitcast.zig+38
...@@ -7,6 +7,9 @@ const minInt = std.math.minInt;...@@ -7,6 +7,9 @@ const minInt = std.math.minInt;
7const native_endian = builtin.target.cpu.arch.endian();7const native_endian = builtin.target.cpu.arch.endian();
88
9test "@bitCast iX -> uX (32, 64)" {9test "@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
10 const bit_values = [_]usize{ 32, 64 };13 const bit_values = [_]usize{ 32, 64 };
1114
12 inline for (bit_values) |bits| {15 inline for (bit_values) |bits| {
...@@ -17,6 +20,10 @@ test "@bitCast iX -> uX (32, 64)" {...@@ -17,6 +20,10 @@ test "@bitCast iX -> uX (32, 64)" {
1720
18test "@bitCast iX -> uX (8, 16, 128)" {21test "@bitCast iX -> uX (8, 16, 128)" {
19 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;22 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
20 const bit_values = [_]usize{ 8, 16, 128 };27 const bit_values = [_]usize{ 8, 16, 128 };
2128
22 inline for (bit_values) |bits| {29 inline for (bit_values) |bits| {
...@@ -29,6 +36,8 @@ test "@bitCast iX -> uX exotic integers" {...@@ -29,6 +36,8 @@ test "@bitCast iX -> uX exotic integers" {
29 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;36 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
30 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;37 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
31 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;38 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
33 const bit_values = [_]usize{ 1, 48, 27, 512, 493, 293, 125, 204, 112 };42 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...@@ -66,6 +75,9 @@ fn conv_uN(comptime N: usize, x: std.meta.Int(.unsigned, N)) std.meta.Int(.signe
66}75}
6776
68test "nested bitcast" {77test "nested bitcast" {
78 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
79 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
80
69 const S = struct {81 const S = struct {
70 fn moo(x: isize) !void {82 fn moo(x: isize) !void {
71 try expect(@intCast(isize, 42) == x);83 try expect(@intCast(isize, 42) == x);
...@@ -83,6 +95,9 @@ test "nested bitcast" {...@@ -83,6 +95,9 @@ test "nested bitcast" {
83}95}
8496
85test "@bitCast enum to its integer type" {97test "@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
86 const SOCK = enum(c_int) {101 const SOCK = enum(c_int) {
87 A,102 A,
88 B,103 B,
...@@ -100,11 +115,17 @@ test "@bitCast enum to its integer type" {...@@ -100,11 +115,17 @@ test "@bitCast enum to its integer type" {
100115
101// issue #3010: compiler segfault116// issue #3010: compiler segfault
102test "bitcast literal [4]u8 param to u32" {117test "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
103 const ip = @bitCast(u32, [_]u8{ 255, 255, 255, 255 });121 const ip = @bitCast(u32, [_]u8{ 255, 255, 255, 255 });
104 try expect(ip == maxInt(u32));122 try expect(ip == maxInt(u32));
105}123}
106124
107test "bitcast generates a temporary value" {125test "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
108 var y = @as(u16, 0x55AA);129 var y = @as(u16, 0x55AA);
109 const x = @bitCast(u16, @bitCast([2]u8, y));130 const x = @bitCast(u16, @bitCast([2]u8, y));
110 try expect(y == x);131 try expect(y == x);
...@@ -115,6 +136,8 @@ test "@bitCast packed structs at runtime and comptime" {...@@ -115,6 +136,8 @@ test "@bitCast packed structs at runtime and comptime" {
115 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;136 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
116 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;137 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
117 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;138 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
119 const Full = packed struct {142 const Full = packed struct {
120 number: u16,143 number: u16,
...@@ -151,6 +174,8 @@ test "@bitCast extern structs at runtime and comptime" {...@@ -151,6 +174,8 @@ test "@bitCast extern structs at runtime and comptime" {
151 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;174 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
152 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;175 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
153 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;176 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
155 const Full = extern struct {180 const Full = extern struct {
156 number: u16,181 number: u16,
...@@ -184,6 +209,8 @@ test "bitcast packed struct to integer and back" {...@@ -184,6 +209,8 @@ test "bitcast packed struct to integer and back" {
184 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;209 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
185 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;210 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
186 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;211 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
188 const LevelUpMove = packed struct {215 const LevelUpMove = packed struct {
189 move_id: u9,216 move_id: u9,
...@@ -203,6 +230,9 @@ test "bitcast packed struct to integer and back" {...@@ -203,6 +230,9 @@ test "bitcast packed struct to integer and back" {
203}230}
204231
205test "implicit cast to error union by returning" {232test "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
206 const S = struct {236 const S = struct {
207 fn entry() !void {237 fn entry() !void {
208 try expect((func(-1) catch unreachable) == maxInt(u64));238 try expect((func(-1) catch unreachable) == maxInt(u64));
...@@ -220,6 +250,8 @@ test "bitcast packed struct literal to byte" {...@@ -220,6 +250,8 @@ test "bitcast packed struct literal to byte" {
220 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;250 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
221 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;251 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
222 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;252 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
224 const Foo = packed struct {256 const Foo = packed struct {
225 value: u8,257 value: u8,
...@@ -233,6 +265,8 @@ test "comptime bitcast used in expression has the correct type" {...@@ -233,6 +265,8 @@ test "comptime bitcast used in expression has the correct type" {
233 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;265 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
234 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;266 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
235 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;267 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
237 const Foo = packed struct {271 const Foo = packed struct {
238 value: u8,272 value: u8,
...@@ -245,6 +279,8 @@ test "bitcast passed as tuple element" {...@@ -245,6 +279,8 @@ test "bitcast passed as tuple element" {
245 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;279 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
246 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;280 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
247 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;281 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
249 const S = struct {285 const S = struct {
250 fn foo(args: anytype) !void {286 fn foo(args: anytype) !void {
...@@ -257,6 +293,8 @@ test "bitcast passed as tuple element" {...@@ -257,6 +293,8 @@ test "bitcast passed as tuple element" {
257293
258test "triple level result location with bitcast sandwich passed as tuple element" {294test "triple level result location with bitcast sandwich passed as tuple element" {
259 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;295 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
261 const S = struct {299 const S = struct {
262 fn foo(args: anytype) !void {300 fn foo(args: anytype) !void {