authorgravatar for mitchell.hashimoto@gmail.comMitchell Hashimoto <mitchell.hashimoto@gmail.com> 2022-02-25 18:56:27-08:00
committergravatar for mitchell.hashimoto@gmail.comMitchell Hashimoto <mitchell.hashimoto@gmail.com> 2022-02-25 18:56:27-08:00
logf0232fc07d3c8695de351d3000bc7eb3e3f1da5c
treeae7ffdcf2caa34e0069db592ab1ab4ab9f937bcb
parent91af552f87817f3a5fa23d812cecc79649c7e506
signaturelock-open Commit is signed but in an unrecognized format.

stage2: split up the big sentinel peer cast test to multiple

This way we can fix them one at a time.

1 files changed, 61 insertions(+), 42 deletions(-)

test/behavior/cast.zig+61-42
...@@ -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}
677677
678test "type coercion related to sentinel-termination" {678test "peer cast [:x]T to []T" {
679 if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO679 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}
680690
691test "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 []T694 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}
690702
691 // [*:x]T to [*]T703test "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}
701714
702 // [N:x]T to [N]T715test "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 }
708717
709 // *[N:x]T to *[N]T718 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}
715732
716 // [:x]T to [*:x]T733test "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();