^char bool2string( bool b; ) 
begin
	if b == true
	then
		return "true";
	else
		return "false";
	end
end

void assert( ^char expr; bool result, expect; )
begin
	if result == expect
	then
		printf( "[   OK   ] %s = %s\n", expr, bool2string(result) ); 
	else
		printf( "[ FAILED ] %s = %s\n", expr, bool2string(result) ); 
	end
end
			
assert("true == false", true == false, false);

assert("true != false", true != false, true);

assert("1 == 1", 1 == 1, true);
assert("1 == 0", 1 == 0, false);

assert("1 != 1", 1 != 1, false);
assert("1 != 0", 1 != 0, true);

assert("1 > 1", 1 > 1, false);
assert("0 > 1", 0 > 1, false);
assert("1 > 0", 1 > 0, true);

assert("1 >= 1", 1 >= 1, true);
assert("1 >= 0", 1 >= 0, true);
assert("0 >= 1", 0 >= 1, false);

assert("true || true", true || true, true);
assert("true || false", true || false, true);
assert("false || true", false || true, true);
assert("false || false", false || false, false);

assert("true && true", true && true, true);
assert("true && false", true && false, false);
assert("false && true", false && true, false);
assert("false && false", false && false, false);

assert("! true", ! true, false);
assert("! false", ! false, true);
