diff --git a/test/behavior/type.zig b/test/behavior/type.zig index 1430a153e9..cb72f86b8b 100644 --- a/test/behavior/type.zig +++ b/test/behavior/type.zig @@ -57,3 +57,48 @@ test "Type.EnumLiteral" { @TypeOf(.Dummy), }); } + +test "Type.Pointer" { + try testTypes(&[_]type{ + // One Value Pointer Types + *u8, *const u8, + *volatile u8, *const volatile u8, + *align(4) u8, *align(4) const u8, + *align(4) volatile u8, *align(4) const volatile u8, + *align(8) u8, *align(8) const u8, + *align(8) volatile u8, *align(8) const volatile u8, + *allowzero u8, *allowzero const u8, + *allowzero volatile u8, *allowzero const volatile u8, + *allowzero align(4) u8, *allowzero align(4) const u8, + *allowzero align(4) volatile u8, *allowzero align(4) const volatile u8, + // Many Values Pointer Types + [*]u8, [*]const u8, + [*]volatile u8, [*]const volatile u8, + [*]align(4) u8, [*]align(4) const u8, + [*]align(4) volatile u8, [*]align(4) const volatile u8, + [*]align(8) u8, [*]align(8) const u8, + [*]align(8) volatile u8, [*]align(8) const volatile u8, + [*]allowzero u8, [*]allowzero const u8, + [*]allowzero volatile u8, [*]allowzero const volatile u8, + [*]allowzero align(4) u8, [*]allowzero align(4) const u8, + [*]allowzero align(4) volatile u8, [*]allowzero align(4) const volatile u8, + // Slice Types + []u8, []const u8, + []volatile u8, []const volatile u8, + []align(4) u8, []align(4) const u8, + []align(4) volatile u8, []align(4) const volatile u8, + []align(8) u8, []align(8) const u8, + []align(8) volatile u8, []align(8) const volatile u8, + []allowzero u8, []allowzero const u8, + []allowzero volatile u8, []allowzero const volatile u8, + []allowzero align(4) u8, []allowzero align(4) const u8, + []allowzero align(4) volatile u8, []allowzero align(4) const volatile u8, + // C Pointer Types + [*c]u8, [*c]const u8, + [*c]volatile u8, [*c]const volatile u8, + [*c]align(4) u8, [*c]align(4) const u8, + [*c]align(4) volatile u8, [*c]align(4) const volatile u8, + [*c]align(8) u8, [*c]align(8) const u8, + [*c]align(8) volatile u8, [*c]align(8) const volatile u8, + }); +} diff --git a/test/behavior/type_info.zig b/test/behavior/type_info.zig index 1c67edf34f..14d09ac6f5 100644 --- a/test/behavior/type_info.zig +++ b/test/behavior/type_info.zig @@ -34,3 +34,26 @@ fn testOptional() !void { try expect(null_info == .Optional); try expect(null_info.Optional.child == void); } + +test "type info: C pointer type info" { + try testCPtr(); + comptime try testCPtr(); +} + +fn testCPtr() !void { + const ptr_info = @typeInfo([*c]align(4) const i8); + try expect(ptr_info == .Pointer); + try expect(ptr_info.Pointer.size == .C); + try expect(ptr_info.Pointer.is_const); + try expect(!ptr_info.Pointer.is_volatile); + try expect(ptr_info.Pointer.alignment == 4); + try expect(ptr_info.Pointer.child == i8); +} + +test "type info: value is correctly copied" { + comptime { + var ptrInfo = @typeInfo([]u32); + ptrInfo.Pointer.size = .One; + try expect(@typeInfo([]u32).Pointer.size == .Slice); + } +} diff --git a/test/behavior/type_info_stage1.zig b/test/behavior/type_info_stage1.zig index 625536f1fa..90cbf10268 100644 --- a/test/behavior/type_info_stage1.zig +++ b/test/behavior/type_info_stage1.zig @@ -68,21 +68,6 @@ fn testNullTerminatedPtr() !void { try expect(@typeInfo([:0]u8).Pointer.sentinel != null); } -test "type info: C pointer type info" { - try testCPtr(); - comptime try testCPtr(); -} - -fn testCPtr() !void { - const ptr_info = @typeInfo([*c]align(4) const i8); - try expect(ptr_info == .Pointer); - try expect(ptr_info.Pointer.size == .C); - try expect(ptr_info.Pointer.is_const); - try expect(!ptr_info.Pointer.is_volatile); - try expect(ptr_info.Pointer.alignment == 4); - try expect(ptr_info.Pointer.child == i8); -} - test "type info: slice type info" { try testSlice(); comptime try testSlice(); @@ -395,7 +380,7 @@ test "@typeInfo does not force declarations into existence" { comptime try expect(@typeInfo(S).Struct.fields.len == 1); } -test "defaut value for a var-typed field" { +test "default value for a var-typed field" { const S = struct { x: anytype }; try expect(@typeInfo(S).Struct.fields[0].default_value == null); } @@ -413,14 +398,6 @@ test "type info for async frames" { } } -test "type info: value is correctly copied" { - comptime { - var ptrInfo = @typeInfo([]u32); - ptrInfo.Pointer.size = .One; - try expect(@typeInfo([]u32).Pointer.size == .Slice); - } -} - test "Declarations are returned in declaration order" { const S = struct { const a = 1; diff --git a/test/behavior/type_stage1.zig b/test/behavior/type_stage1.zig index 914bf166d6..a87cba08d4 100644 --- a/test/behavior/type_stage1.zig +++ b/test/behavior/type_stage1.zig @@ -17,51 +17,6 @@ test "Type.Float" { try testTypes(&[_]type{ f16, f32, f64, f128 }); } -test "Type.Pointer" { - try testTypes(&[_]type{ - // One Value Pointer Types - *u8, *const u8, - *volatile u8, *const volatile u8, - *align(4) u8, *align(4) const u8, - *align(4) volatile u8, *align(4) const volatile u8, - *align(8) u8, *align(8) const u8, - *align(8) volatile u8, *align(8) const volatile u8, - *allowzero u8, *allowzero const u8, - *allowzero volatile u8, *allowzero const volatile u8, - *allowzero align(4) u8, *allowzero align(4) const u8, - *allowzero align(4) volatile u8, *allowzero align(4) const volatile u8, - // Many Values Pointer Types - [*]u8, [*]const u8, - [*]volatile u8, [*]const volatile u8, - [*]align(4) u8, [*]align(4) const u8, - [*]align(4) volatile u8, [*]align(4) const volatile u8, - [*]align(8) u8, [*]align(8) const u8, - [*]align(8) volatile u8, [*]align(8) const volatile u8, - [*]allowzero u8, [*]allowzero const u8, - [*]allowzero volatile u8, [*]allowzero const volatile u8, - [*]allowzero align(4) u8, [*]allowzero align(4) const u8, - [*]allowzero align(4) volatile u8, [*]allowzero align(4) const volatile u8, - // Slice Types - []u8, []const u8, - []volatile u8, []const volatile u8, - []align(4) u8, []align(4) const u8, - []align(4) volatile u8, []align(4) const volatile u8, - []align(8) u8, []align(8) const u8, - []align(8) volatile u8, []align(8) const volatile u8, - []allowzero u8, []allowzero const u8, - []allowzero volatile u8, []allowzero const volatile u8, - []allowzero align(4) u8, []allowzero align(4) const u8, - []allowzero align(4) volatile u8, []allowzero align(4) const volatile u8, - // C Pointer Types - [*c]u8, [*c]const u8, - [*c]volatile u8, [*c]const volatile u8, - [*c]align(4) u8, [*c]align(4) const u8, - [*c]align(4) volatile u8, [*c]align(4) const volatile u8, - [*c]align(8) u8, [*c]align(8) const u8, - [*c]align(8) volatile u8, [*c]align(8) const volatile u8, - }); -} - test "Type.Array" { try testing.expect([123]u8 == @Type(TypeInfo{ .Array = TypeInfo.Array{ @@ -102,6 +57,7 @@ test "@Type create slice with null sentinel" { }); try testing.expect(Slice == []align(8) const *i32); } + test "@Type picks up the sentinel value from TypeInfo" { try testTypes(&[_]type{ [11:0]u8, [4:10]u8,