| ... | @@ -9,6 +9,10 @@ const mem = std.mem; | ... | @@ -9,6 +9,10 @@ const mem = std.mem; |
| 9 | const has_f80_rt = builtin.cpu.arch == .x86_64; | 9 | const has_f80_rt = builtin.cpu.arch == .x86_64; |
| 10 | | 10 | |
| 11 | test "assignment operators" { | 11 | test "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 | } |
| 58 | | 62 | |
| 59 | test "@clz" { | 63 | test "@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 | } |
| 76 | | 86 | |
| 77 | test "@clz vectors" { | 87 | test "@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 | } |
| 111 | | 127 | |
| 112 | test "@ctz" { | 128 | test "@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 | } |
| 127 | | 149 | |
| 128 | test "@ctz vectors" { | 150 | test "@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" { |
| 163 | const ten = 10; | 191 | const ten = 10; |
| 164 | | 192 | |
| 165 | test "float equality" { | 193 | test "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; |
| 168 | | 201 | |
| ... | @@ -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 | } |
| 181 | | 214 | |
| | 215 | test "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 | |
| 182 | test "quad hex float literal parsing in range" { | 224 | test "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 | } |
| 220 | | 262 | |
| 221 | test "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 | | | |
| 230 | test "comptime_int addition" { | 263 | test "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 | } |
| 278 | | 311 | |
| 279 | test "xor" { | 312 | test "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 | } |
| 320 | | 358 | |
| 321 | test "binary not" { | 359 | test "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 | } |
| 334 | | 377 | |
| 335 | test "division" { | 378 | test "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 | } |
| 428 | | 477 | |
| 429 | test "unsigned wrapping" { | 478 | test "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 | } |
| 439 | | 492 | |
| 440 | test "signed wrapping" { | 493 | test "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 | } |
| 450 | | 507 | |
| 451 | test "signed negation wrapping" { | 508 | test "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 | } |
| 460 | | 521 | |
| 461 | test "unsigned negation wrapping" { | 522 | test "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 | } |
| 470 | | 535 | |
| 471 | test "unsigned 64-bit division" { | 536 | test "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 | } |
| 496 | | 564 | |
| 497 | test "truncating shift right" { | 565 | test "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 | } |
| 505 | | 577 | |
| 506 | test "f128" { | 578 | test "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 | } |
| 528 | | 606 | |
| 529 | test "128-bit multiplication" { | 607 | test "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 | } |
| 535 | | 619 | |
| 536 | test "@addWithOverflow" { | 620 | test "@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 | } |
| 551 | | 641 | |
| 552 | test "small int addition" { | 642 | test "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); |
| 555 | | 651 | |
| ... | @@ -569,6 +665,12 @@ test "small int addition" { | ... | @@ -569,6 +665,12 @@ test "small int addition" { |
| 569 | } | 665 | } |
| 570 | | 666 | |
| 571 | test "@mulWithOverflow" { | 667 | test "@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 | } |
| 586 | | 688 | |
| 587 | test "@subWithOverflow" { | 689 | test "@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 | } |
| 602 | | 710 | |
| 603 | test "@shlWithOverflow" { | 711 | test "@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 | } |
| 618 | | 732 | |
| 619 | test "overflow arithmetic with u0 values" { | 733 | test "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 | } |
| 630 | | 750 | |
| 631 | test "allow signed integer division/remainder when values are comptime known and positive or exact" { | 751 | test "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); |
| 638 | | 760 | |
| 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 | } |
| 646 | | 766 | |
| 647 | test "quad hex float literal parsing accurate" { | 767 | test "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; |
| 649 | | 775 | |
| 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 | } |
| 736 | | 862 | |
| 737 | test "truncating shift left" { | 863 | test "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 | } |
| 745 | | 875 | |
| 746 | test "exact shift left" { | 876 | test "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 | } |
| 754 | | 888 | |
| 755 | test "exact shift right" { | 889 | test "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 | } |
| 763 | | 901 | |
| 764 | test "shift left/right on u0 operand" { | 902 | test "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 | } |
| 804 | | 946 | |
| 805 | test "float remainder division using @rem" { | 947 | test "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 | } |
| 833 | | 981 | |
| 834 | test "float modulo division using @mod" { | 982 | test "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 | } |
| 862 | | 1016 | |
| 863 | test "@sqrt" { | 1017 | test "@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 | } |
| 1047 | | 1207 | |
| 1048 | test "NaN comparison" { | 1208 | test "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); |
| 1057 | | 1223 | |
| 1058 | // TODO make this pass on all targets | 1224 | // 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 | } |