diff options
Diffstat (limited to 'test/behavior/basic.zig')
| -rw-r--r-- | test/behavior/basic.zig | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/test/behavior/basic.zig b/test/behavior/basic.zig index 93a1e676fe..cca2d63cd7 100644 --- a/test/behavior/basic.zig +++ b/test/behavior/basic.zig @@ -250,3 +250,45 @@ test "volatile load and store" { ptr.* += 1; try expect(ptr.* == 1235); } + +fn fA() []const u8 { + return "a"; +} +fn fB() []const u8 { + return "b"; +} + +test "call function pointer in struct" { + try expect(mem.eql(u8, f3(true), "a")); + try expect(mem.eql(u8, f3(false), "b")); +} + +fn f3(x: bool) []const u8 { + var wrapper: FnPtrWrapper = .{ + .fn_ptr = fB, + }; + + if (x) { + wrapper.fn_ptr = fA; + } + + return wrapper.fn_ptr(); +} + +const FnPtrWrapper = struct { + fn_ptr: fn () []const u8, +}; + +test "const ptr from var variable" { + var x: u64 = undefined; + var y: u64 = undefined; + + x = 78; + copy(&x, &y); + + try expect(x == y); +} + +fn copy(src: *const u64, dst: *u64) void { + dst.* = src.*; +} |
