authorgravatar for xavierb@gmail.comXavier Bouchoux <xavierb@gmail.com> 2023-10-08 11:36:53+02:00
committergravatar for xavierb@gmail.comXavier Bouchoux <xavierb@gmail.com> 2023-10-08 11:36:53+02:00
logc86ba0f9d0d6d1421c93fa09a5172c796110258b
tree09a37085442adc1cfce253b904de44a5959d24a0
parenta9b37ac63724a79805f00b4e6966ebb8329151a2

test: add behaviour test for casting accross 32-bits boundary


1 files changed, 93 insertions(+), 0 deletions(-)

test/behavior/cast_int.zig+93
...@@ -1,6 +1,7 @@...@@ -1,6 +1,7 @@
1const builtin = @import("builtin");1const builtin = @import("builtin");
2const std = @import("std");2const std = @import("std");
3const expect = std.testing.expect;3const expect = std.testing.expect;
4const expectEqual = std.testing.expectEqual;
4const maxInt = std.math.maxInt;5const maxInt = std.math.maxInt;
56
6test "@intCast i32 to u7" {7test "@intCast i32 to u7" {
...@@ -28,3 +29,95 @@ test "coerce i8 to i32 and @intCast back" {...@@ -28,3 +29,95 @@ test "coerce i8 to i32 and @intCast back" {
28 var y2: i8 = -5;29 var y2: i8 = -5;
29 try expect(y2 == @as(i8, @intCast(x2)));30 try expect(y2 == @as(i8, @intCast(x2)));
30}31}
32
33test "coerce non byte-sized integers accross 32bits boundary" {
34 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
35 {
36 var v: u21 = 6417;
37 const a: u32 = v;
38 const b: u64 = v;
39 const c: u64 = a;
40 var w: u64 = 0x1234567812345678;
41 const d: u21 = @truncate(w);
42 const e: u60 = d;
43 try expectEqual(@as(u32, 6417), a);
44 try expectEqual(@as(u64, 6417), b);
45 try expectEqual(@as(u64, 6417), c);
46 try expectEqual(@as(u21, 0x145678), d);
47 try expectEqual(@as(u60, 0x145678), e);
48 }
49
50 {
51 var v: u10 = 234;
52 const a: u32 = v;
53 const b: u64 = v;
54 const c: u64 = a;
55 var w: u64 = 0x1234567812345678;
56 const d: u10 = @truncate(w);
57 const e: u60 = d;
58 try expectEqual(@as(u32, 234), a);
59 try expectEqual(@as(u64, 234), b);
60 try expectEqual(@as(u64, 234), c);
61 try expectEqual(@as(u21, 0x278), d);
62 try expectEqual(@as(u60, 0x278), e);
63 }
64 {
65 var v: u7 = 11;
66 const a: u32 = v;
67 const b: u64 = v;
68 const c: u64 = a;
69 var w: u64 = 0x1234567812345678;
70 const d: u7 = @truncate(w);
71 const e: u60 = d;
72 try expectEqual(@as(u32, 11), a);
73 try expectEqual(@as(u64, 11), b);
74 try expectEqual(@as(u64, 11), c);
75 try expectEqual(@as(u21, 0x78), d);
76 try expectEqual(@as(u60, 0x78), e);
77 }
78
79 {
80 var v: i21 = -6417;
81 const a: i32 = v;
82 const b: i64 = v;
83 const c: i64 = a;
84 var w: i64 = -12345;
85 const d: i21 = @intCast(w);
86 const e: i60 = d;
87 try expectEqual(@as(i32, -6417), a);
88 try expectEqual(@as(i64, -6417), b);
89 try expectEqual(@as(i64, -6417), c);
90 try expectEqual(@as(i21, -12345), d);
91 try expectEqual(@as(i60, -12345), e);
92 }
93
94 {
95 var v: i10 = -234;
96 const a: i32 = v;
97 const b: i64 = v;
98 const c: i64 = a;
99 var w: i64 = -456;
100 const d: i10 = @intCast(w);
101 const e: i60 = d;
102 try expectEqual(@as(i32, -234), a);
103 try expectEqual(@as(i64, -234), b);
104 try expectEqual(@as(i64, -234), c);
105 try expectEqual(@as(i10, -456), d);
106 try expectEqual(@as(i60, -456), e);
107 }
108 {
109 var v: i7 = -11;
110 const a: i32 = v;
111 const b: i64 = v;
112 const c: i64 = a;
113 var w: i64 = -42;
114 const d: i7 = @intCast(w);
115 const e: i60 = d;
116 try expectEqual(@as(i32, -11), a);
117 try expectEqual(@as(i64, -11), b);
118 try expectEqual(@as(i64, -11), c);
119 try expectEqual(@as(i7, -42), d);
120 try expectEqual(@as(i60, -42), e);
121 }
122}
123