mirror of
https://github.com/ziglang/zig.git
synced 2026-01-21 06:45:24 +00:00
38 lines
1.6 KiB
Zig
38 lines
1.6 KiB
Zig
fn access(comptime array: anytype) !void {
|
|
var slice: []const @typeInfo(@TypeOf(array)).array.child = undefined;
|
|
slice = &array;
|
|
inline for (0.., &array) |ct_index, *elem| {
|
|
var rt_index: usize = undefined;
|
|
rt_index = ct_index;
|
|
if (&(slice.ptr + ct_index)[0] != elem) return error.Unexpected;
|
|
if (&(slice.ptr + rt_index)[0] != elem) return error.Unexpected;
|
|
if (&slice.ptr[ct_index..][0] != elem) return error.Unexpected;
|
|
if (&slice.ptr[rt_index..][0] != elem) return error.Unexpected;
|
|
if (&slice.ptr[ct_index] != elem) return error.Unexpected;
|
|
if (&slice.ptr[rt_index] != elem) return error.Unexpected;
|
|
if (&slice[ct_index..].ptr[0] != elem) return error.Unexpected;
|
|
if (&slice[rt_index..].ptr[0] != elem) return error.Unexpected;
|
|
if (&slice[ct_index] != elem) return error.Unexpected;
|
|
if (&slice[rt_index] != elem) return error.Unexpected;
|
|
if (slice.ptr[ct_index] != elem.*) return error.Unexpected;
|
|
if (slice.ptr[rt_index] != elem.*) return error.Unexpected;
|
|
if (slice[ct_index] != elem.*) return error.Unexpected;
|
|
if (slice[rt_index] != elem.*) return error.Unexpected;
|
|
}
|
|
}
|
|
test access {
|
|
try access([3]u8{ 0xdb, 0xef, 0xbd });
|
|
try access([3]u16{ 0x340e, 0x3654, 0x88d7 });
|
|
try access([3]u32{ 0xd424c2c0, 0x2d6ac466, 0x5a0cfaba });
|
|
try access([3]u64{
|
|
0x9327a4f5221666a6,
|
|
0x5c34d3ddd84a8b12,
|
|
0xbae087f39f649260,
|
|
});
|
|
try access([3]u128{
|
|
0x601cf010065444d4d42d5536dd9b95db,
|
|
0xa03f592fcaa22d40af23a0c735531e3c,
|
|
0x5da44907b31602b95c2d93f0b582ceab,
|
|
});
|
|
}
|