mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 13:54:21 +00:00
behavior,cases: add @branchHint test coverage
This commit is contained in:
parent
6808ce27bd
commit
f47f6d766e
2 changed files with 123 additions and 5 deletions
|
|
@ -107,13 +107,90 @@ test "non const ptr to aliased type" {
|
|||
try expect(?*int == ?*i32);
|
||||
}
|
||||
|
||||
test "cold function" {
|
||||
thisIsAColdFn();
|
||||
comptime thisIsAColdFn();
|
||||
test "function branch hints" {
|
||||
const S = struct {
|
||||
fn none() void {
|
||||
@branchHint(.none);
|
||||
}
|
||||
fn likely() void {
|
||||
@branchHint(.likely);
|
||||
}
|
||||
fn unlikely() void {
|
||||
@branchHint(.unlikely);
|
||||
}
|
||||
fn cold() void {
|
||||
@branchHint(.cold);
|
||||
}
|
||||
fn unpredictable() void {
|
||||
@branchHint(.unpredictable);
|
||||
}
|
||||
};
|
||||
S.none();
|
||||
S.likely();
|
||||
S.unlikely();
|
||||
S.cold();
|
||||
S.unpredictable();
|
||||
comptime S.none();
|
||||
comptime S.likely();
|
||||
comptime S.unlikely();
|
||||
comptime S.cold();
|
||||
comptime S.unpredictable();
|
||||
}
|
||||
|
||||
fn thisIsAColdFn() void {
|
||||
@branchHint(.cold);
|
||||
test "if branch hints" {
|
||||
var t: bool = undefined;
|
||||
t = true;
|
||||
if (t) {
|
||||
@branchHint(.likely);
|
||||
} else {
|
||||
@branchHint(.cold);
|
||||
}
|
||||
}
|
||||
|
||||
test "switch branch hints" {
|
||||
var t: bool = undefined;
|
||||
t = true;
|
||||
switch (t) {
|
||||
true => {
|
||||
@branchHint(.likely);
|
||||
},
|
||||
false => {
|
||||
@branchHint(.cold);
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
test "orelse branch hints" {
|
||||
var x: ?u32 = undefined;
|
||||
x = 123;
|
||||
const val = x orelse val: {
|
||||
@branchHint(.cold);
|
||||
break :val 456;
|
||||
};
|
||||
try expect(val == 123);
|
||||
}
|
||||
|
||||
test "catch branch hints" {
|
||||
var x: error{Bad}!u32 = undefined;
|
||||
x = 123;
|
||||
const val = x catch val: {
|
||||
@branchHint(.cold);
|
||||
break :val 456;
|
||||
};
|
||||
try expect(val == 123);
|
||||
}
|
||||
|
||||
test "and/or branch hints" {
|
||||
var t: bool = undefined;
|
||||
t = true;
|
||||
try expect(t or b: {
|
||||
@branchHint(.unlikely);
|
||||
break :b false;
|
||||
});
|
||||
try expect(t and b: {
|
||||
@branchHint(.likely);
|
||||
break :b true;
|
||||
});
|
||||
}
|
||||
|
||||
test "unicode escape in character literal" {
|
||||
|
|
|
|||
41
test/cases/compile_errors/invalid_branch_hint.zig
Normal file
41
test/cases/compile_errors/invalid_branch_hint.zig
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
const globl = g: {
|
||||
@branchHint(.none);
|
||||
break :g {};
|
||||
};
|
||||
|
||||
comptime {
|
||||
@branchHint(.none);
|
||||
}
|
||||
|
||||
test {
|
||||
@branchHint(.none);
|
||||
}
|
||||
|
||||
export fn foo() void {
|
||||
{
|
||||
@branchHint(.none);
|
||||
}
|
||||
}
|
||||
|
||||
export fn bar() void {
|
||||
_ = (b: {
|
||||
@branchHint(.none);
|
||||
break :b true;
|
||||
}) or true;
|
||||
}
|
||||
|
||||
export fn qux() void {
|
||||
(b: {
|
||||
@branchHint(.none);
|
||||
break :b @as(?void, {});
|
||||
}) orelse unreachable;
|
||||
}
|
||||
|
||||
// error
|
||||
//
|
||||
// :2:5: error: '@branchHint' outside function scope
|
||||
// :7:5: error: '@branchHint' outside function scope
|
||||
// :11:5: error: '@branchHint' must appear as the first statement in a function or conditional branch
|
||||
// :16:9: error: '@branchHint' must appear as the first statement in a function or conditional branch
|
||||
// :22:9: error: '@branchHint' must appear as the first statement in a function or conditional branch
|
||||
// :29:9: error: '@branchHint' must appear as the first statement in a function or conditional branch
|
||||
Loading…
Add table
Reference in a new issue