zig/test/behavior/field_parent_ptr.zig
2022-12-27 21:26:18 +08:00

47 lines
1.2 KiB
Zig

const expect = @import("std").testing.expect;
const builtin = @import("builtin");
test "@fieldParentPtr non-first field" {
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
try testParentFieldPtr(&foo.c);
comptime try testParentFieldPtr(&foo.c);
}
test "@fieldParentPtr first field" {
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
try testParentFieldPtrFirst(&foo.a);
comptime try testParentFieldPtrFirst(&foo.a);
}
const Foo = struct {
a: bool,
b: f32,
c: i32,
d: i32,
};
const foo = Foo{
.a = true,
.b = 0.123,
.c = 1234,
.d = -10,
};
fn testParentFieldPtr(c: *const i32) !void {
try expect(c == &foo.c);
const base = @fieldParentPtr(Foo, "c", c);
try expect(base == &foo);
try expect(&base.c == c);
}
fn testParentFieldPtrFirst(a: *const bool) !void {
try expect(a == &foo.a);
const base = @fieldParentPtr(Foo, "a", a);
try expect(base == &foo);
try expect(&base.a == a);
}