authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-03-03 01:23:50-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-03-03 01:24:26-07:00
log0a4f58490f518a8d139a7c69773276bcc2441825
tree9ce2fc18de2228c91f4e7cd8946e49168058ff16
parent67ba4c5679cf84a81dc92980ef033ef69f442ed4

behavior tests cleanup: promote math.zig


2 files changed, 182 insertions(+), 16 deletions(-)

test/behavior.zig+1-1
...@@ -65,6 +65,7 @@ test {...@@ -65,6 +65,7 @@ test {
65 _ = @import("behavior/int_div.zig");65 _ = @import("behavior/int_div.zig");
66 _ = @import("behavior/inttoptr.zig");66 _ = @import("behavior/inttoptr.zig");
67 _ = @import("behavior/ir_block_deps.zig");67 _ = @import("behavior/ir_block_deps.zig");
68 _ = @import("behavior/math.zig");
68 _ = @import("behavior/member_func.zig");69 _ = @import("behavior/member_func.zig");
69 _ = @import("behavior/muladd.zig");70 _ = @import("behavior/muladd.zig");
70 _ = @import("behavior/namespace_depends_on_compile_var.zig");71 _ = @import("behavior/namespace_depends_on_compile_var.zig");
...@@ -117,7 +118,6 @@ test {...@@ -117,7 +118,6 @@ test {
117 if (builtin.zig_backend != .stage2_c) {118 if (builtin.zig_backend != .stage2_c) {
118 // Tests that pass for stage1 and the llvm backend.119 // Tests that pass for stage1 and the llvm backend.
119 _ = @import("behavior/atomics.zig");120 _ = @import("behavior/atomics.zig");
120 _ = @import("behavior/math.zig");
121 _ = @import("behavior/maximum_minimum.zig");121 _ = @import("behavior/maximum_minimum.zig");
122 _ = @import("behavior/popcount.zig");122 _ = @import("behavior/popcount.zig");
123 _ = @import("behavior/saturating_arithmetic.zig");123 _ = @import("behavior/saturating_arithmetic.zig");
test/behavior/math.zig+181-15
...@@ -9,6 +9,10 @@ const mem = std.mem;...@@ -9,6 +9,10 @@ const mem = std.mem;
9const has_f80_rt = builtin.cpu.arch == .x86_64;9const has_f80_rt = builtin.cpu.arch == .x86_64;
1010
11test "assignment operators" {11test "assignment operators" {
12 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
13 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
14 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
15
12 var i: u32 = 0;16 var i: u32 = 0;
13 i += 5;17 i += 5;
14 try expect(i == 5);18 try expect(i == 5);
...@@ -57,6 +61,12 @@ fn assertFalse(b: bool) !void {...@@ -57,6 +61,12 @@ fn assertFalse(b: bool) !void {
57}61}
5862
59test "@clz" {63test "@clz" {
64 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
65 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
66 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
67 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
68 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
69
60 try testClz();70 try testClz();
61 comptime try testClz();71 comptime try testClz();
62}72}
...@@ -75,6 +85,12 @@ fn testOneClz(comptime T: type, x: T) u32 {...@@ -75,6 +85,12 @@ fn testOneClz(comptime T: type, x: T) u32 {
75}85}
7686
77test "@clz vectors" {87test "@clz vectors" {
88 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
89 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
90 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
91 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
92 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
93
78 try testClzVectors();94 try testClzVectors();
79 comptime try testClzVectors();95 comptime try testClzVectors();
80}96}
...@@ -110,6 +126,12 @@ fn expectVectorsEqual(a: anytype, b: anytype) !void {...@@ -110,6 +126,12 @@ fn expectVectorsEqual(a: anytype, b: anytype) !void {
110}126}
111127
112test "@ctz" {128test "@ctz" {
129 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
130 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
131 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
132 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
133 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
134
113 try testCtz();135 try testCtz();
114 comptime try testCtz();136 comptime try testCtz();
115}137}
...@@ -126,6 +148,12 @@ fn testOneCtz(comptime T: type, x: T) u32 {...@@ -126,6 +148,12 @@ fn testOneCtz(comptime T: type, x: T) u32 {
126}148}
127149
128test "@ctz vectors" {150test "@ctz vectors" {
151 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
152 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
153 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
154 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
155 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
156
129 if (builtin.zig_backend == .stage2_llvm and builtin.cpu.arch == .aarch64) {157 if (builtin.zig_backend == .stage2_llvm and builtin.cpu.arch == .aarch64) {
130 // TODO this is tripping an LLVM assert:158 // TODO this is tripping an LLVM assert:
131 // zig: /home/andy/Downloads/llvm-project-13/llvm/lib/CodeGen/GlobalISel/LegalizerInfo.cpp:198: llvm::LegalizeActionStep llvm::LegalizeRuleSet::apply(const llvm::LegalityQuery&) const: Assertion `mutationIsSane(Rule, Query, Mutation) && "legality mutation invalid for match"' failed.159 // zig: /home/andy/Downloads/llvm-project-13/llvm/lib/CodeGen/GlobalISel/LegalizerInfo.cpp:198: llvm::LegalizeActionStep llvm::LegalizeRuleSet::apply(const llvm::LegalityQuery&) const: Assertion `mutationIsSane(Rule, Query, Mutation) && "legality mutation invalid for match"' failed.
...@@ -163,6 +191,11 @@ test "const number literal" {...@@ -163,6 +191,11 @@ test "const number literal" {
163const ten = 10;191const ten = 10;
164192
165test "float equality" {193test "float equality" {
194 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
195 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
196 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
197 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
198
166 const x: f64 = 0.012;199 const x: f64 = 0.012;
167 const y: f64 = x + 1.0;200 const y: f64 = x + 1.0;
168201
...@@ -179,6 +212,15 @@ test "hex float literal parsing" {...@@ -179,6 +212,15 @@ test "hex float literal parsing" {
179 comptime try expect(0x1.0 == 1.0);212 comptime try expect(0x1.0 == 1.0);
180}213}
181214
215test "hex float literal within range" {
216 const a = 0x1.0p16383;
217 const b = 0x0.1p16387;
218 const c = 0x1.0p-16382;
219 _ = a;
220 _ = b;
221 _ = c;
222}
223
182test "quad hex float literal parsing in range" {224test "quad hex float literal parsing in range" {
183 const a = 0x1.af23456789bbaaab347645365cdep+5;225 const a = 0x1.af23456789bbaaab347645365cdep+5;
184 const b = 0x1.dedafcff354b6ae9758763545432p-9;226 const b = 0x1.dedafcff354b6ae9758763545432p-9;
...@@ -218,15 +260,6 @@ test "underscore separator parsing" {...@@ -218,15 +260,6 @@ test "underscore separator parsing" {
218 try expect(0x1_2_3_4_5_6_7_8.9_A_B_C_D_E_F_0p-0_0_0_1_0 == 0x12345678.9ABCDEF0p-10);260 try expect(0x1_2_3_4_5_6_7_8.9_A_B_C_D_E_F_0p-0_0_0_1_0 == 0x12345678.9ABCDEF0p-10);
219}261}
220262
221test "hex float literal within range" {
222 const a = 0x1.0p16383;
223 const b = 0x0.1p16387;
224 const c = 0x1.0p-16382;
225 _ = a;
226 _ = b;
227 _ = c;
228}
229
230test "comptime_int addition" {263test "comptime_int addition" {
231 comptime {264 comptime {
232 try expect(35361831660712422535336160538497375248 + 101752735581729509668353361206450473702 == 137114567242441932203689521744947848950);265 try expect(35361831660712422535336160538497375248 + 101752735581729509668353361206450473702 == 137114567242441932203689521744947848950);
...@@ -277,6 +310,11 @@ test "comptime_int multi-limb partial shift right" {...@@ -277,6 +310,11 @@ test "comptime_int multi-limb partial shift right" {
277}310}
278311
279test "xor" {312test "xor" {
313 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
314 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
315 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
316 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
317
280 try test_xor();318 try test_xor();
281 comptime try test_xor();319 comptime try test_xor();
282}320}
...@@ -319,6 +357,11 @@ fn comptimeAdd(comptime a: comptime_int, comptime b: comptime_int) comptime_int...@@ -319,6 +357,11 @@ fn comptimeAdd(comptime a: comptime_int, comptime b: comptime_int) comptime_int
319}357}
320358
321test "binary not" {359test "binary not" {
360 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
361 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
362 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
363 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
364
322 try expect(comptime x: {365 try expect(comptime x: {
323 break :x ~@as(u16, 0b1010101010101010) == 0b0101010101010101;366 break :x ~@as(u16, 0b1010101010101010) == 0b0101010101010101;
324 });367 });
...@@ -333,6 +376,12 @@ fn testBinaryNot(x: u16) !void {...@@ -333,6 +376,12 @@ fn testBinaryNot(x: u16) !void {
333}376}
334377
335test "division" {378test "division" {
379 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
380 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
381 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
382 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
383 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
384
336 try testDivision();385 try testDivision();
337 comptime try testDivision();386 comptime try testDivision();
338}387}
...@@ -427,6 +476,10 @@ fn mod(comptime T: type, a: T, b: T) T {...@@ -427,6 +476,10 @@ fn mod(comptime T: type, a: T, b: T) T {
427}476}
428477
429test "unsigned wrapping" {478test "unsigned wrapping" {
479 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
480 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
481 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
482
430 try testUnsignedWrappingEval(maxInt(u32));483 try testUnsignedWrappingEval(maxInt(u32));
431 comptime try testUnsignedWrappingEval(maxInt(u32));484 comptime try testUnsignedWrappingEval(maxInt(u32));
432}485}
...@@ -438,6 +491,10 @@ fn testUnsignedWrappingEval(x: u32) !void {...@@ -438,6 +491,10 @@ fn testUnsignedWrappingEval(x: u32) !void {
438}491}
439492
440test "signed wrapping" {493test "signed wrapping" {
494 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
495 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
496 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
497
441 try testSignedWrappingEval(maxInt(i32));498 try testSignedWrappingEval(maxInt(i32));
442 comptime try testSignedWrappingEval(maxInt(i32));499 comptime try testSignedWrappingEval(maxInt(i32));
443}500}
...@@ -449,6 +506,10 @@ fn testSignedWrappingEval(x: i32) !void {...@@ -449,6 +506,10 @@ fn testSignedWrappingEval(x: i32) !void {
449}506}
450507
451test "signed negation wrapping" {508test "signed negation wrapping" {
509 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
510 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
511 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
512
452 try testSignedNegationWrappingEval(minInt(i16));513 try testSignedNegationWrappingEval(minInt(i16));
453 comptime try testSignedNegationWrappingEval(minInt(i16));514 comptime try testSignedNegationWrappingEval(minInt(i16));
454}515}
...@@ -459,6 +520,10 @@ fn testSignedNegationWrappingEval(x: i16) !void {...@@ -459,6 +520,10 @@ fn testSignedNegationWrappingEval(x: i16) !void {
459}520}
460521
461test "unsigned negation wrapping" {522test "unsigned negation wrapping" {
523 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
524 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
525 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
526
462 try testUnsignedNegationWrappingEval(1);527 try testUnsignedNegationWrappingEval(1);
463 comptime try testUnsignedNegationWrappingEval(1);528 comptime try testUnsignedNegationWrappingEval(1);
464}529}
...@@ -469,6 +534,9 @@ fn testUnsignedNegationWrappingEval(x: u16) !void {...@@ -469,6 +534,9 @@ fn testUnsignedNegationWrappingEval(x: u16) !void {
469}534}
470535
471test "unsigned 64-bit division" {536test "unsigned 64-bit division" {
537 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
538 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
539
472 try test_u64_div();540 try test_u64_div();
473 comptime try test_u64_div();541 comptime try test_u64_div();
474}542}
...@@ -495,6 +563,10 @@ test "bit shift a u1" {...@@ -495,6 +563,10 @@ test "bit shift a u1" {
495}563}
496564
497test "truncating shift right" {565test "truncating shift right" {
566 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
567 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
568 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
569
498 try testShrTrunc(maxInt(u16));570 try testShrTrunc(maxInt(u16));
499 comptime try testShrTrunc(maxInt(u16));571 comptime try testShrTrunc(maxInt(u16));
500}572}
...@@ -504,6 +576,12 @@ fn testShrTrunc(x: u16) !void {...@@ -504,6 +576,12 @@ fn testShrTrunc(x: u16) !void {
504}576}
505577
506test "f128" {578test "f128" {
579 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
580 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
581 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
582 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
583 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
584
507 try test_f128();585 try test_f128();
508 comptime try test_f128();586 comptime try test_f128();
509}587}
...@@ -527,6 +605,12 @@ fn should_not_be_zero(x: f128) !void {...@@ -527,6 +605,12 @@ fn should_not_be_zero(x: f128) !void {
527}605}
528606
529test "128-bit multiplication" {607test "128-bit multiplication" {
608 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
609 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
610 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
611 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
612 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
613
530 var a: i128 = 3;614 var a: i128 = 3;
531 var b: i128 = 2;615 var b: i128 = 2;
532 var c = a * b;616 var c = a * b;
...@@ -534,6 +618,12 @@ test "128-bit multiplication" {...@@ -534,6 +618,12 @@ test "128-bit multiplication" {
534}618}
535619
536test "@addWithOverflow" {620test "@addWithOverflow" {
621 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
622 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
623 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
624 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
625 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
626
537 var result: u8 = undefined;627 var result: u8 = undefined;
538 try expect(@addWithOverflow(u8, 250, 100, &result));628 try expect(@addWithOverflow(u8, 250, 100, &result));
539 try expect(result == 94);629 try expect(result == 94);
...@@ -550,6 +640,12 @@ test "@addWithOverflow" {...@@ -550,6 +640,12 @@ test "@addWithOverflow" {
550}640}
551641
552test "small int addition" {642test "small int addition" {
643 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
644 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
645 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
646 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
647 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
648
553 var x: u2 = 0;649 var x: u2 = 0;
554 try expect(x == 0);650 try expect(x == 0);
555651
...@@ -569,6 +665,12 @@ test "small int addition" {...@@ -569,6 +665,12 @@ test "small int addition" {
569}665}
570666
571test "@mulWithOverflow" {667test "@mulWithOverflow" {
668 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
669 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
670 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
671 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
672 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
673
572 var result: u8 = undefined;674 var result: u8 = undefined;
573 try expect(@mulWithOverflow(u8, 86, 3, &result));675 try expect(@mulWithOverflow(u8, 86, 3, &result));
574 try expect(result == 2);676 try expect(result == 2);
...@@ -585,6 +687,12 @@ test "@mulWithOverflow" {...@@ -585,6 +687,12 @@ test "@mulWithOverflow" {
585}687}
586688
587test "@subWithOverflow" {689test "@subWithOverflow" {
690 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
691 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
692 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
693 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
694 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
695
588 var result: u8 = undefined;696 var result: u8 = undefined;
589 try expect(@subWithOverflow(u8, 1, 2, &result));697 try expect(@subWithOverflow(u8, 1, 2, &result));
590 try expect(result == 255);698 try expect(result == 255);
...@@ -601,6 +709,12 @@ test "@subWithOverflow" {...@@ -601,6 +709,12 @@ test "@subWithOverflow" {
601}709}
602710
603test "@shlWithOverflow" {711test "@shlWithOverflow" {
712 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
713 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
714 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
715 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
716 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
717
604 var result: u16 = undefined;718 var result: u16 = undefined;
605 try expect(@shlWithOverflow(u16, 0b0010111111111111, 3, &result));719 try expect(@shlWithOverflow(u16, 0b0010111111111111, 3, &result));
606 try expect(result == 0b0111111111111000);720 try expect(result == 0b0111111111111000);
...@@ -617,6 +731,12 @@ test "@shlWithOverflow" {...@@ -617,6 +731,12 @@ test "@shlWithOverflow" {
617}731}
618732
619test "overflow arithmetic with u0 values" {733test "overflow arithmetic with u0 values" {
734 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
735 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
736 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
737 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
738 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
739
620 var result: u0 = undefined;740 var result: u0 = undefined;
621 try expect(!@addWithOverflow(u0, 0, 0, &result));741 try expect(!@addWithOverflow(u0, 0, 0, &result));
622 try expect(result == 0);742 try expect(result == 0);
...@@ -629,6 +749,8 @@ test "overflow arithmetic with u0 values" {...@@ -629,6 +749,8 @@ test "overflow arithmetic with u0 values" {
629}749}
630750
631test "allow signed integer division/remainder when values are comptime known and positive or exact" {751test "allow signed integer division/remainder when values are comptime known and positive or exact" {
752 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
753
632 try expect(5 / 3 == 1);754 try expect(5 / 3 == 1);
633 try expect(-5 / -3 == 1);755 try expect(-5 / -3 == 1);
634 try expect(-6 / 3 == -2);756 try expect(-6 / 3 == -2);
...@@ -636,15 +758,19 @@ test "allow signed integer division/remainder when values are comptime known and...@@ -636,15 +758,19 @@ test "allow signed integer division/remainder when values are comptime known and
636 try expect(5 % 3 == 2);758 try expect(5 % 3 == 2);
637 try expect(-6 % 3 == 0);759 try expect(-6 % 3 == 0);
638760
639 if (builtin.zig_backend != .stage1) {761 var undef: i32 = undefined;
640 var undef: i32 = undefined;762 if (0 % undef != 0) {
641 if (0 % undef != 0) {763 @compileError("0 as numerator should return comptime zero independent of denominator");
642 @compileError("0 as numerator should return comptime zero independent of denominator");
643 }
644 }764 }
645}765}
646766
647test "quad hex float literal parsing accurate" {767test "quad hex float literal parsing accurate" {
768 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
769 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
770 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
771 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
772 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
773
648 const a: f128 = 0x1.1111222233334444555566667777p+0;774 const a: f128 = 0x1.1111222233334444555566667777p+0;
649775
650 // implied 1 is dropped, with an exponent of 0 (0x3fff) after biasing.776 // implied 1 is dropped, with an exponent of 0 (0x3fff) after biasing.
...@@ -735,6 +861,10 @@ test "quad hex float literal parsing accurate" {...@@ -735,6 +861,10 @@ test "quad hex float literal parsing accurate" {
735}861}
736862
737test "truncating shift left" {863test "truncating shift left" {
864 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
865 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
866 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
867
738 try testShlTrunc(maxInt(u16));868 try testShlTrunc(maxInt(u16));
739 comptime try testShlTrunc(maxInt(u16));869 comptime try testShlTrunc(maxInt(u16));
740}870}
...@@ -744,6 +874,10 @@ fn testShlTrunc(x: u16) !void {...@@ -744,6 +874,10 @@ fn testShlTrunc(x: u16) !void {
744}874}
745875
746test "exact shift left" {876test "exact shift left" {
877 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
878 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
879 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
880
747 try testShlExact(0b00110101);881 try testShlExact(0b00110101);
748 comptime try testShlExact(0b00110101);882 comptime try testShlExact(0b00110101);
749}883}
...@@ -753,6 +887,10 @@ fn testShlExact(x: u8) !void {...@@ -753,6 +887,10 @@ fn testShlExact(x: u8) !void {
753}887}
754888
755test "exact shift right" {889test "exact shift right" {
890 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
891 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
892 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
893
756 try testShrExact(0b10110100);894 try testShrExact(0b10110100);
757 comptime try testShrExact(0b10110100);895 comptime try testShrExact(0b10110100);
758}896}
...@@ -762,6 +900,10 @@ fn testShrExact(x: u8) !void {...@@ -762,6 +900,10 @@ fn testShrExact(x: u8) !void {
762}900}
763901
764test "shift left/right on u0 operand" {902test "shift left/right on u0 operand" {
903 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
904 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
905 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
906
765 const S = struct {907 const S = struct {
766 fn doTheTest() !void {908 fn doTheTest() !void {
767 var x: u0 = 0;909 var x: u0 = 0;
...@@ -803,6 +945,12 @@ fn remdiv(comptime T: type) !void {...@@ -803,6 +945,12 @@ fn remdiv(comptime T: type) !void {
803}945}
804946
805test "float remainder division using @rem" {947test "float remainder division using @rem" {
948 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
949 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
950 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
951 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
952 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
953
806 comptime try frem(f16);954 comptime try frem(f16);
807 comptime try frem(f32);955 comptime try frem(f32);
808 comptime try frem(f64);956 comptime try frem(f64);
...@@ -832,6 +980,12 @@ fn frem(comptime T: type) !void {...@@ -832,6 +980,12 @@ fn frem(comptime T: type) !void {
832}980}
833981
834test "float modulo division using @mod" {982test "float modulo division using @mod" {
983 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
984 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
985 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
986 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
987 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
988
835 comptime try fmod(f16);989 comptime try fmod(f16);
836 comptime try fmod(f32);990 comptime try fmod(f32);
837 comptime try fmod(f64);991 comptime try fmod(f64);
...@@ -861,6 +1015,12 @@ fn fmod(comptime T: type) !void {...@@ -861,6 +1015,12 @@ fn fmod(comptime T: type) !void {
861}1015}
8621016
863test "@sqrt" {1017test "@sqrt" {
1018 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1019 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1020 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1021 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
1022 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
1023
864 try testSqrt(f64, 12.0);1024 try testSqrt(f64, 12.0);
865 comptime try testSqrt(f64, 12.0);1025 comptime try testSqrt(f64, 12.0);
866 try testSqrt(f32, 13.0);1026 try testSqrt(f32, 13.0);
...@@ -1046,6 +1206,12 @@ test "vector integer addition" {...@@ -1046,6 +1206,12 @@ test "vector integer addition" {
1046}1206}
10471207
1048test "NaN comparison" {1208test "NaN comparison" {
1209 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
1210 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1211 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1212 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1213 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
1214
1049 try testNanEqNan(f16);1215 try testNanEqNan(f16);
1050 try testNanEqNan(f32);1216 try testNanEqNan(f32);
1051 try testNanEqNan(f64);1217 try testNanEqNan(f64);
...@@ -1055,7 +1221,7 @@ test "NaN comparison" {...@@ -1055,7 +1221,7 @@ test "NaN comparison" {
1055 comptime try testNanEqNan(f64);1221 comptime try testNanEqNan(f64);
1056 comptime try testNanEqNan(f128);1222 comptime try testNanEqNan(f128);
10571223
1058 // TODO make this pass on all targets1224 // TODO https://github.com/ziglang/zig/issues/11030
1059 // try testNanEqNan(f80);1225 // try testNanEqNan(f80);
1060 // comptime try testNanEqNan(f80);1226 // comptime try testNanEqNan(f80);
1061}1227}