diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/std/meta/trait.zig | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/lib/std/meta/trait.zig b/lib/std/meta/trait.zig index eb294a857c..1656a93798 100644 --- a/lib/std/meta/trait.zig +++ b/lib/std/meta/trait.zig @@ -481,10 +481,13 @@ pub fn hasUniqueRepresentation(comptime T: type) bool { .Enum, .ErrorSet, .Fn, - .Int, // TODO check that it is still true .Pointer, => return true, + // The padding bits are undefined. + .Int => |info| return (info.bits % 8) == 0 and + (info.bits == 0 or std.math.isPowerOfTwo(info.bits)), + .Array => |info| return comptime hasUniqueRepresentation(info.child), .Struct => |info| { @@ -525,14 +528,10 @@ test "std.meta.trait.hasUniqueRepresentation" { testing.expect(hasUniqueRepresentation(TestStruct3)); - testing.expect(hasUniqueRepresentation(i1)); - testing.expect(hasUniqueRepresentation(u2)); - testing.expect(hasUniqueRepresentation(i3)); - testing.expect(hasUniqueRepresentation(u4)); - testing.expect(hasUniqueRepresentation(i5)); - testing.expect(hasUniqueRepresentation(u6)); - testing.expect(hasUniqueRepresentation(i7)); - testing.expect(hasUniqueRepresentation(u8)); - testing.expect(hasUniqueRepresentation(i9)); - testing.expect(hasUniqueRepresentation(u10)); + inline for ([_]type{ i0, u8, i16, u32, i64 }) |T| { + testing.expect(hasUniqueRepresentation(T)); + } + inline for ([_]type{ i1, u9, i17, u33, i24 }) |T| { + testing.expect(!hasUniqueRepresentation(T)); + } } |
