zig/test/behavior/void.zig
joachimschmidt557 d6e6162081
stage2 AArch64: unify callee-preserved regs on all targets
also enables many passing behavior tests
2022-12-27 21:17:52 +08:00

55 lines
1.2 KiB
Zig

const expect = @import("std").testing.expect;
const builtin = @import("builtin");
const Foo = struct {
a: void,
b: i32,
c: void,
};
test "compare void with void compile time known" {
comptime {
const foo = Foo{
.a = {},
.b = 1,
.c = {},
};
try expect(foo.a == {});
}
}
test "iterate over a void slice" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
var j: usize = 0;
for (times(10)) |_, i| {
try expect(i == j);
j += 1;
}
}
fn times(n: usize) []const void {
return @as([*]void, undefined)[0..n];
}
test "void optional" {
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
var x: ?void = {};
try expect(x != null);
}
test "void array as a local variable initializer" {
var x = [_]void{{}} ** 1004;
_ = x[0];
}
const void_constant = {};
test "reference to void constants" {
var a = void_constant;
_ = a;
}