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