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