| ... | ... | @@ -358,7 +358,10 @@ fn testCastIntToErr(err: anyerror) !void { |
| 358 | 358 | } |
| 359 | 359 | |
| 360 | 360 | test "peer resolve array and const slice" { |
| 361 | | if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO |
| 361 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 362 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO |
| 363 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 364 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 362 | 365 | |
| 363 | 366 | try testPeerResolveArrayConstSlice(true); |
| 364 | 367 | comptime try testPeerResolveArrayConstSlice(true); |
| ... | ... | @@ -415,7 +418,10 @@ fn gimmeErrOrSlice() anyerror![]u8 { |
| 415 | 418 | } |
| 416 | 419 | |
| 417 | 420 | test "peer type resolution: [0]u8, []const u8, and anyerror![]u8" { |
| 418 | | if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO |
| 421 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 422 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO |
| 423 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 424 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 419 | 425 | |
| 420 | 426 | const S = struct { |
| 421 | 427 | fn doTheTest() anyerror!void { |
| ... | ... | @@ -494,7 +500,10 @@ fn testPeerErrorAndArray2(x: u8) anyerror![]const u8 { |
| 494 | 500 | } |
| 495 | 501 | |
| 496 | 502 | test "single-item pointer of array to slice to unknown length pointer" { |
| 497 | | if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO |
| 503 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 504 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO |
| 505 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 506 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 498 | 507 | |
| 499 | 508 | try testCastPtrOfArrayToSliceAndPtr(); |
| 500 | 509 | comptime try testCastPtrOfArrayToSliceAndPtr(); |
| ... | ... | @@ -609,17 +618,25 @@ test "peer type resolution: unreachable, error set, unreachable" { |
| 609 | 618 | } |
| 610 | 619 | |
| 611 | 620 | test "peer cast *[0]T to E![]const T" { |
| 612 | | if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO |
| 621 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 622 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO |
| 623 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 624 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 613 | 625 | |
| 614 | 626 | var buffer: [5]u8 = "abcde".*; |
| 615 | 627 | var buf: anyerror![]const u8 = buffer[0..]; |
| 616 | 628 | var b = false; |
| 617 | 629 | var y = if (b) &[0]u8{} else buf; |
| 630 | var z = if (!b) buf else &[0]u8{}; |
| 618 | 631 | try expect(mem.eql(u8, "abcde", y catch unreachable)); |
| 632 | try expect(mem.eql(u8, "abcde", z catch unreachable)); |
| 619 | 633 | } |
| 620 | 634 | |
| 621 | 635 | test "peer cast *[0]T to []const T" { |
| 622 | | if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO |
| 636 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 637 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO |
| 638 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 639 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 623 | 640 | |
| 624 | 641 | var buffer: [5]u8 = "abcde".*; |
| 625 | 642 | var buf: []const u8 = buffer[0..]; |
| ... | ... | @@ -628,6 +645,18 @@ test "peer cast *[0]T to []const T" { |
| 628 | 645 | try expect(mem.eql(u8, "abcde", y)); |
| 629 | 646 | } |
| 630 | 647 | |
| 648 | test "peer cast *[N]T to [*]T" { |
| 649 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 650 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO |
| 651 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 652 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 653 | |
| 654 | var array = [4:99]i32{ 1, 2, 3, 4 }; |
| 655 | var dest: [*]i32 = undefined; |
| 656 | try expect(@TypeOf(&array, dest) == [*]i32); |
| 657 | try expect(@TypeOf(dest, &array) == [*]i32); |
| 658 | } |
| 659 | |
| 631 | 660 | test "peer resolution of string literals" { |
| 632 | 661 | if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO |
| 633 | 662 | |
| ... | ... | @@ -648,55 +677,89 @@ test "peer resolution of string literals" { |
| 648 | 677 | comptime try S.doTheTest(.b); |
| 649 | 678 | } |
| 650 | 679 | |
| 651 | | test "type coercion related to sentinel-termination" { |
| 652 | | if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO |
| 680 | test "peer cast [:x]T to []T" { |
| 681 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 682 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO |
| 683 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 684 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 653 | 685 | |
| 654 | 686 | const S = struct { |
| 655 | 687 | fn doTheTest() !void { |
| 656 | | // [:x]T to []T |
| 657 | | { |
| 658 | | var array = [4:0]i32{ 1, 2, 3, 4 }; |
| 659 | | var slice: [:0]i32 = &array; |
| 660 | | var dest: []i32 = slice; |
| 661 | | try expect(mem.eql(i32, dest, &[_]i32{ 1, 2, 3, 4 })); |
| 662 | | } |
| 688 | var array = [4:0]i32{ 1, 2, 3, 4 }; |
| 689 | var slice: [:0]i32 = &array; |
| 690 | var dest: []i32 = slice; |
| 691 | try expect(mem.eql(i32, dest, &[_]i32{ 1, 2, 3, 4 })); |
| 692 | } |
| 693 | }; |
| 694 | try S.doTheTest(); |
| 695 | comptime try S.doTheTest(); |
| 696 | } |
| 663 | 697 | |
| 664 | | // [*:x]T to [*]T |
| 665 | | { |
| 666 | | var array = [4:99]i32{ 1, 2, 3, 4 }; |
| 667 | | var dest: [*]i32 = &array; |
| 668 | | try expect(dest[0] == 1); |
| 669 | | try expect(dest[1] == 2); |
| 670 | | try expect(dest[2] == 3); |
| 671 | | try expect(dest[3] == 4); |
| 672 | | try expect(dest[4] == 99); |
| 673 | | } |
| 698 | test "peer cast [N:x]T to [N]T" { |
| 699 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 700 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO |
| 701 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 702 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 674 | 703 | |
| 675 | | // [N:x]T to [N]T |
| 676 | | { |
| 677 | | var array = [4:0]i32{ 1, 2, 3, 4 }; |
| 678 | | var dest: [4]i32 = array; |
| 679 | | try expect(mem.eql(i32, &dest, &[_]i32{ 1, 2, 3, 4 })); |
| 680 | | } |
| 704 | const S = struct { |
| 705 | fn doTheTest() !void { |
| 706 | var array = [4:0]i32{ 1, 2, 3, 4 }; |
| 707 | var dest: [4]i32 = array; |
| 708 | try expect(mem.eql(i32, &dest, &[_]i32{ 1, 2, 3, 4 })); |
| 709 | } |
| 710 | }; |
| 711 | try S.doTheTest(); |
| 712 | comptime try S.doTheTest(); |
| 713 | } |
| 681 | 714 | |
| 682 | | // *[N:x]T to *[N]T |
| 683 | | { |
| 684 | | var array = [4:0]i32{ 1, 2, 3, 4 }; |
| 685 | | var dest: *[4]i32 = &array; |
| 686 | | try expect(mem.eql(i32, dest, &[_]i32{ 1, 2, 3, 4 })); |
| 687 | | } |
| 715 | test "peer cast *[N:x]T to *[N]T" { |
| 716 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 717 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO |
| 718 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 719 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 688 | 720 | |
| 689 | | // [:x]T to [*:x]T |
| 690 | | { |
| 691 | | var array = [4:0]i32{ 1, 2, 3, 4 }; |
| 692 | | var slice: [:0]i32 = &array; |
| 693 | | var dest: [*:0]i32 = slice; |
| 694 | | try expect(dest[0] == 1); |
| 695 | | try expect(dest[1] == 2); |
| 696 | | try expect(dest[2] == 3); |
| 697 | | try expect(dest[3] == 4); |
| 698 | | try expect(dest[4] == 0); |
| 699 | | } |
| 721 | const S = struct { |
| 722 | fn doTheTest() !void { |
| 723 | var array = [4:0]i32{ 1, 2, 3, 4 }; |
| 724 | var dest: *[4]i32 = &array; |
| 725 | try expect(mem.eql(i32, dest, &[_]i32{ 1, 2, 3, 4 })); |
| 726 | } |
| 727 | }; |
| 728 | try S.doTheTest(); |
| 729 | comptime try S.doTheTest(); |
| 730 | } |
| 731 | |
| 732 | test "peer cast [*:x]T to [*]T" { |
| 733 | if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO |
| 734 | |
| 735 | const S = struct { |
| 736 | fn doTheTest() !void { |
| 737 | var array = [4:99]i32{ 1, 2, 3, 4 }; |
| 738 | var dest: [*]i32 = &array; |
| 739 | try expect(dest[0] == 1); |
| 740 | try expect(dest[1] == 2); |
| 741 | try expect(dest[2] == 3); |
| 742 | try expect(dest[3] == 4); |
| 743 | try expect(dest[4] == 99); |
| 744 | } |
| 745 | }; |
| 746 | try S.doTheTest(); |
| 747 | comptime try S.doTheTest(); |
| 748 | } |
| 749 | |
| 750 | test "peer cast [:x]T to [*:x]T" { |
| 751 | if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO |
| 752 | |
| 753 | const S = struct { |
| 754 | fn doTheTest() !void { |
| 755 | var array = [4:0]i32{ 1, 2, 3, 4 }; |
| 756 | var slice: [:0]i32 = &array; |
| 757 | var dest: [*:0]i32 = slice; |
| 758 | try expect(dest[0] == 1); |
| 759 | try expect(dest[1] == 2); |
| 760 | try expect(dest[2] == 3); |
| 761 | try expect(dest[3] == 4); |
| 762 | try expect(dest[4] == 0); |
| 700 | 763 | } |
| 701 | 764 | }; |
| 702 | 765 | try S.doTheTest(); |
| ... | ... | @@ -746,8 +809,6 @@ test "peer type resolution implicit cast to variable type" { |
| 746 | 809 | } |
| 747 | 810 | |
| 748 | 811 | test "variable initialization uses result locations properly with regards to the type" { |
| 749 | | if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO |
| 750 | | |
| 751 | 812 | var b = true; |
| 752 | 813 | const x: i32 = if (b) 1 else 2; |
| 753 | 814 | try expect(x == 1); |