1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
use rt;
fn equality() void = {
assert((if (2 == 2) true else false));
};
fn inequality() void = {
assert((if (2 == 1) false else true));
};
fn else_() void = {
assert((if (2 == 1) false else true));
};
fn elseif() void = {
assert((if (2 == 1) false
else if (2 == 2) true
else false));
};
fn justif() void = {
let x: int = 1;
if (true) {
// asserts that the side-effects work
x = 0;
};
assert(x == 0);
};
fn gt() void = {
assert((if (1 > 2) false else true));
};
fn gte() void = {
assert((if (2 >= 2) true else false));
};
fn lt() void = {
assert((if (1 < 2) true else false));
};
fn lte() void = {
assert((if (2 <= 2) true else false));
};
fn and2(left: bool) bool = {
return if (left && 1 / 0 == 0) false else true;
};
fn and() void = {
assert((if (true && and2(1 == 1 && false)) true else false));
};
fn or() void = {
assert((if (true || 1 / 0 == 0) true else false));
};
fn tagged() void = {
assert((if (true) 1u8 else 0i8) as u8 == 1);
assert((if (false) 1u8 else 0i8) as i8 == 0);
};
type abool = bool;
fn alias() void = {
if (true: abool) {
return;
};
abort("unreachable");
};
fn _never() never = {
if (true) {
rt::exit(0);
} else {
abort();
};
};
export fn main() void = {
equality();
inequality();
else_();
elseif();
justif();
gt();
gte();
lt();
lte();
and();
or();
tagged();
alias();
_never();
};
|