fn print_number(n int) {
	if n == 0 {
		println('print_number')
	}
}

fn get_bool() bool {
	return true
}

fn test_add() {
	n := 3
	print_number(0)
	print_number(1)
	if n > 1 {
		println('var(3) > 1')
	}
	if 1 < n {
		println('1 < var(3)')
	}
	if 1 > n {
		println('1 > 3 ERROR')
	}
	if 1 < 3 {
		println('1 < 3')
	}
	if 1 == 1 {
		println('1 == 1')
		// TODO assert here
	}
	if 1 != 3 {
		println('1 != 3')
		// TODO assert here
	}
	if 3 != 3 {
		println('3 != 3 ERROR')
		// TODO assert here
	}
	if 1 > 3 {
		println('1 > 3 ERROR')
		// TODO assert here
	}
	if get_bool() {
		println('bool is true')
	}
}

fn do_not_call() bool {
	println('must not be called ERROR')
	return false
}

fn test_elses() {
	println('start else')
	if 1 < 2 {
		println('ok')
	} else {
		println('1<2else ERROR')
	}
	if 1 > 2 {
		println('1<2else ERROR')
	} else {
		println('ok')
	}
	println('end else')
}

fn test_logic_op() {
	a := true
	b := false
	if a && a {
		println('true && true')
	}
	if a && b {
		println('true && false ERROR')
	}
	if b && a {
		println('false && true ERROR')
	}
	if b && b {
		println('false && false ERROR')
	}
	if a || a {
		println('true || true')
	}
	if a || b {
		println('true || false')
	}
	if b || a {
		println('false || true')
	}
	if b || b {
		println('false || false ERROR')
	}
	if b && do_not_call() {
		println('call ERROR')
	}
	if a || do_not_call() {
		println('short circuit evaluation')
	}
}

fn main() {
	println('start')
	test_add()
	test_elses()
	test_logic_op()
	println('end')
}
