| ... | ... | @@ -675,55 +675,74 @@ test "peer resolution of string literals" { |
| 675 | 675 | comptime try S.doTheTest(.b); |
| 676 | 676 | } |
| 677 | 677 | |
| 678 | | test "type coercion related to sentinel-termination" { |
| 679 | | if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO |
| 678 | test "peer cast [:x]T to []T" { |
| 679 | const S = struct { |
| 680 | fn doTheTest() !void { |
| 681 | var array = [4:0]i32{ 1, 2, 3, 4 }; |
| 682 | var slice: [:0]i32 = &array; |
| 683 | var dest: []i32 = slice; |
| 684 | try expect(mem.eql(i32, dest, &[_]i32{ 1, 2, 3, 4 })); |
| 685 | } |
| 686 | }; |
| 687 | try S.doTheTest(); |
| 688 | comptime try S.doTheTest(); |
| 689 | } |
| 680 | 690 | |
| 691 | test "peer cast [N:x]T to [N]T" { |
| 681 | 692 | const S = struct { |
| 682 | 693 | fn doTheTest() !void { |
| 683 | | // [:x]T to []T |
| 684 | | { |
| 685 | | var array = [4:0]i32{ 1, 2, 3, 4 }; |
| 686 | | var slice: [:0]i32 = &array; |
| 687 | | var dest: []i32 = slice; |
| 688 | | try expect(mem.eql(i32, dest, &[_]i32{ 1, 2, 3, 4 })); |
| 689 | | } |
| 694 | var array = [4:0]i32{ 1, 2, 3, 4 }; |
| 695 | var dest: [4]i32 = array; |
| 696 | try expect(mem.eql(i32, &dest, &[_]i32{ 1, 2, 3, 4 })); |
| 697 | } |
| 698 | }; |
| 699 | try S.doTheTest(); |
| 700 | comptime try S.doTheTest(); |
| 701 | } |
| 690 | 702 | |
| 691 | | // [*:x]T to [*]T |
| 692 | | { |
| 693 | | var array = [4:99]i32{ 1, 2, 3, 4 }; |
| 694 | | var dest: [*]i32 = &array; |
| 695 | | try expect(dest[0] == 1); |
| 696 | | try expect(dest[1] == 2); |
| 697 | | try expect(dest[2] == 3); |
| 698 | | try expect(dest[3] == 4); |
| 699 | | try expect(dest[4] == 99); |
| 700 | | } |
| 703 | test "peer cast *[N:x]T to *[N]T" { |
| 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 | } |
| 701 | 714 | |
| 702 | | // [N:x]T to [N]T |
| 703 | | { |
| 704 | | var array = [4:0]i32{ 1, 2, 3, 4 }; |
| 705 | | var dest: [4]i32 = array; |
| 706 | | try expect(mem.eql(i32, &dest, &[_]i32{ 1, 2, 3, 4 })); |
| 707 | | } |
| 715 | test "peer cast [*:x]T to [*]T" { |
| 716 | if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO |
| 708 | 717 | |
| 709 | | // *[N:x]T to *[N]T |
| 710 | | { |
| 711 | | var array = [4:0]i32{ 1, 2, 3, 4 }; |
| 712 | | var dest: *[4]i32 = &array; |
| 713 | | try expect(mem.eql(i32, dest, &[_]i32{ 1, 2, 3, 4 })); |
| 714 | | } |
| 718 | const S = struct { |
| 719 | fn doTheTest() !void { |
| 720 | var array = [4:99]i32{ 1, 2, 3, 4 }; |
| 721 | var dest: [*]i32 = &array; |
| 722 | try expect(dest[0] == 1); |
| 723 | try expect(dest[1] == 2); |
| 724 | try expect(dest[2] == 3); |
| 725 | try expect(dest[3] == 4); |
| 726 | try expect(dest[4] == 99); |
| 727 | } |
| 728 | }; |
| 729 | try S.doTheTest(); |
| 730 | comptime try S.doTheTest(); |
| 731 | } |
| 715 | 732 | |
| 716 | | // [:x]T to [*:x]T |
| 717 | | { |
| 718 | | var array = [4:0]i32{ 1, 2, 3, 4 }; |
| 719 | | var slice: [:0]i32 = &array; |
| 720 | | var dest: [*:0]i32 = slice; |
| 721 | | try expect(dest[0] == 1); |
| 722 | | try expect(dest[1] == 2); |
| 723 | | try expect(dest[2] == 3); |
| 724 | | try expect(dest[3] == 4); |
| 725 | | try expect(dest[4] == 0); |
| 726 | | } |
| 733 | test "peer cast [:x]T to [*:x]T" { |
| 734 | if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO |
| 735 | |
| 736 | const S = struct { |
| 737 | fn doTheTest() !void { |
| 738 | var array = [4:0]i32{ 1, 2, 3, 4 }; |
| 739 | var slice: [:0]i32 = &array; |
| 740 | var dest: [*:0]i32 = slice; |
| 741 | try expect(dest[0] == 1); |
| 742 | try expect(dest[1] == 2); |
| 743 | try expect(dest[2] == 3); |
| 744 | try expect(dest[3] == 4); |
| 745 | try expect(dest[4] == 0); |
| 727 | 746 | } |
| 728 | 747 | }; |
| 729 | 748 | try S.doTheTest(); |