diff options
| author | vegecode <justin.b.alexander1@gmail.com> | 2020-07-04 10:04:15 -0500 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2020-10-16 20:04:42 -0700 |
| commit | 0456b2145de52bf0da3a18cfa3313ca42d7afd29 (patch) | |
| tree | e623e22a62324c65606d49945554c35c34108227 /test | |
| parent | 79ef96b6a4af3fff751d5d7ad679634643c4fc6e (diff) | |
| download | zig-0456b2145de52bf0da3a18cfa3313ca42d7afd29.tar.gz zig-0456b2145de52bf0da3a18cfa3313ca42d7afd29.zip | |
byteOffsetOf rounds up using bit offset in host integer
Diffstat (limited to 'test')
| -rw-r--r-- | test/stage1/behavior/sizeof_and_typeof.zig | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/test/stage1/behavior/sizeof_and_typeof.zig b/test/stage1/behavior/sizeof_and_typeof.zig index 13078f5dd1..4223bf3373 100644 --- a/test/stage1/behavior/sizeof_and_typeof.zig +++ b/test/stage1/behavior/sizeof_and_typeof.zig @@ -28,6 +28,8 @@ const P = packed struct { e: u5, f: u16, g: u16, + h: u9, + i: u7, }; test "@byteOffsetOf" { @@ -39,6 +41,8 @@ test "@byteOffsetOf" { expect(@byteOffsetOf(P, "e") == 6); expect(@byteOffsetOf(P, "f") == 7); expect(@byteOffsetOf(P, "g") == 9); + expect(@byteOffsetOf(P, "h") == 11); + expect(@byteOffsetOf(P, "i") == 12); // Normal struct fields can be moved/padded var a: A = undefined; @@ -51,6 +55,50 @@ test "@byteOffsetOf" { expect(@ptrToInt(&a.g) - @ptrToInt(&a) == @byteOffsetOf(A, "g")); } +test "@byteOffsetOf packed struct, array length not power of 2 or multiple of native pointer width in bytes" { + const p3a_len = 3; + const P3 = packed struct { + a: [p3a_len]u8, + b: usize, + }; + std.testing.expectEqual(0, @byteOffsetOf(P3, "a")); + std.testing.expectEqual(p3a_len, @byteOffsetOf(P3, "b")); + + const p5a_len = 5; + const P5 = packed struct { + a: [p5a_len]u8, + b: usize, + }; + std.testing.expectEqual(0, @byteOffsetOf(P5, "a")); + std.testing.expectEqual(p5a_len, @byteOffsetOf(P5, "b")); + + const p6a_len = 6; + const P6 = packed struct { + a: [p6a_len]u8, + b: usize, + }; + std.testing.expectEqual(0, @byteOffsetOf(P6, "a")); + std.testing.expectEqual(p6a_len, @byteOffsetOf(P6, "b")); + + const p7a_len = 7; + const P7 = packed struct { + a: [p7a_len]u8, + b: usize, + }; + std.testing.expectEqual(0, @byteOffsetOf(P7, "a")); + std.testing.expectEqual(p7a_len, @byteOffsetOf(P7, "b")); + + const p9a_len = 9; + const P9 = packed struct { + a: [p9a_len]u8, + b: usize, + }; + std.testing.expectEqual(0, @byteOffsetOf(P9, "a")); + std.testing.expectEqual(p9a_len, @byteOffsetOf(P9, "b")); + + // 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 25 etc. are further cases +} + test "@bitOffsetOf" { // Packed structs have fixed memory layout expect(@bitOffsetOf(P, "a") == 0); |
