harec

[hare] Hare compiler, written in C11 for POSIX OSs
Log | Files | Refs | README | LICENSE

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 };