File: 20-if.ha

package info (click to toggle)
harec 0.26.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,480 kB
  • sloc: ansic: 20,054; asm: 335; makefile: 116; lisp: 80; sh: 45
file content (95 lines) | stat: -rw-r--r-- 1,374 bytes parent folder | download | duplicates (2)
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();
};