add type coercion: [:x]T to [*:x]T

This commit is contained in:
Andrew Kelley 2019-11-24 15:17:55 -05:00
parent 4c7b52503b
commit 44b1dc6db8
No known key found for this signature in database
GPG Key ID: 7C5F548F728501A9
3 changed files with 260 additions and 159 deletions

View File

@ -36,7 +36,7 @@ pub fn main() anyerror!void {
}
root_node.end();
if (ok_count == test_fn_list.len) {
std.debug.warn("All tests passed.\n");
std.debug.warn("All {} tests passed.\n", ok_count);
} else {
std.debug.warn("{} passed; {} skipped.\n", ok_count, skip_count);
}

File diff suppressed because it is too large Load Diff

View File

@ -621,3 +621,56 @@ test "peer resolution of string literals" {
S.doTheTest(.b);
comptime S.doTheTest(.b);
}
test "type coercion related to sentinel-termination" {
const S = struct {
fn doTheTest() void {
// [:x]T to []T
{
var array = [4:0]i32{1,2,3,4};
var slice: [:0]i32 = &array;
var dest: []i32 = slice;
expect(mem.eql(i32, dest, &[_]i32{1,2,3,4}));
}
// [*:x]T to [*]T
{
var array = [4:99]i32{1,2,3,4};
var dest: [*]i32 = &array;
expect(dest[0] == 1);
expect(dest[1] == 2);
expect(dest[2] == 3);
expect(dest[3] == 4);
expect(dest[4] == 99);
}
// [N:x]T to [N]T
{
var array = [4:0]i32{1,2,3,4};
var dest: [4]i32 = array;
expect(mem.eql(i32, dest, &[_]i32{1,2,3,4}));
}
// *[N:x]T to *[N]T
{
var array = [4:0]i32{1,2,3,4};
var dest: *[4]i32 = &array;
expect(mem.eql(i32, dest, &[_]i32{1,2,3,4}));
}
// [:x]T to [*:x]T
{
var array = [4:0]i32{1,2,3,4};
var slice: [:0]i32 = &array;
var dest: [*:0]i32 = slice;
expect(dest[0] == 1);
expect(dest[1] == 2);
expect(dest[2] == 3);
expect(dest[3] == 4);
expect(dest[4] == 0);
}
}
};
S.doTheTest();
comptime S.doTheTest();
}