
// print OK(m) if a = b or BAD(m) if a <> b

debug := false;

procedure printmess( a, b, m )
    if a ne b then
	print "BAD( ", m, " )";
    elif debug then
	print "OK( ", m, " )";
    end if;
end procedure;

// function used for testing 'jumpingness' of and, or, select

function f( v )
    return v;
end function;

/*
 *    BOOL test code starts
 */

// test eq and ne first since they are essential for printmess()'s
// correct functioning!

printmess( true eq false, false, "true eq false" );
printmess( true eq true, true, "true eq true" );
printmess( false eq false, true, "false eq false" );
printmess( false eq true, false, "false eq true" );

printmess( true ne false, true, "true ne false" );
printmess( true ne true, false, "true ne true" );
printmess( false ne false, false, "false ne false" );
printmess( false ne true, true, "false ne true" );

// simple tests for and, or, xor, not, select

printmess( true and false, false, "true and false" );
printmess( true and true, true, "true and true" );
printmess( false and false, false, "false and false" );
printmess( false and true, false, "false and true" );

printmess( true or false, true, "true or false" );
printmess( true or true, true, "true or true" );
printmess( false or false, false, "false or false" );
printmess( false or true, true, "false or true" );

printmess( true xor false, true, "true xor false" );
printmess( true xor true, false, "true xor true" );
printmess( false xor false, false, "false xor false" );
printmess( false xor true, true, "false xor true" );

printmess( not true, false, "not true" );
printmess( not false, true, "not false" );

printmess( true select true else false, true, "true select true else false" );
printmess( false select true else false, false, "true select true else false" );

// some random tests

s := [];
s[1] := true;
s[2] := false;
printmess( true and true and 7 gt 4, true, "true and true and 7 gt 4" );
printmess( true and true and 4 gt 7, false, "true and true and 4 gt 7" );
printmess( s[1] and s[1] and 4 gt 7, false, "s[1] and s[1] and 4 gt 7" );
printmess( s[2] and s[2] and 4 gt 7, false, "s[2] and s[2] and 4 gt 7" );
if s[1] and not s[2] then
	printmess( true, true, "if s[1] and not s[2]" );
end if;
if not s[1] and s[2] then
	printmess( true, true, "if not s[1] and s[2]" );
end if;

// test or, and, select for their 'jumpingness'

printmess( (false and false) and (false and false), false, "(false and false) and (false and false)" );
printmess( (false and (false and false)) and false, false, "(false and (false and false)) and false" );
printmess( false and ((false and false) and false), false, "false and ((false and false) and false)" );
printmess( (false and (false and false)) and false, false, "(false and (false and false)) and false" );
printmess( ((false and false) and false) and false, false, "((false and false) and false) and false" );
printmess( false and (false and (false and false)), false, "false and (false and (false and false))" );
printmess( false and ((false and false) and false), false, "false and ((false and false) and false)" );
printmess( (false and false) and (false and true), false, "(false and false) and (false and true)" );
printmess( (false and (false and false)) and true, false, "(false and (false and false)) and true" );
printmess( false and ((false and false) and true), false, "false and ((false and false) and true)" );
printmess( (false and (false and false)) and true, false, "(false and (false and false)) and true" );
printmess( ((false and false) and false) and true, false, "((false and false) and false) and true" );
printmess( false and (false and (false and true)), false, "false and (false and (false and true))" );
printmess( false and ((false and false) and true), false, "false and ((false and false) and true)" );
printmess( (false and false) and (false or false), false, "(false and false) and (false or false)" );
printmess( (false and (false and false)) or false, false, "(false and (false and false)) or false" );
printmess( false and ((false and false) or false), false, "false and ((false and false) or false)" );
printmess( (false and (false and false)) or false, false, "(false and (false and false)) or false" );
printmess( ((false and false) and false) or false, false, "((false and false) and false) or false" );
printmess( false and (false and (false or false)), false, "false and (false and (false or false))" );
printmess( false and ((false and false) or false), false, "false and ((false and false) or false)" );
printmess( (false and false) and (false or true), false, "(false and false) and (false or true)" );
printmess( (false and (false and false)) or true, true, "(false and (false and false)) or true" );
printmess( false and ((false and false) or true), false, "false and ((false and false) or true)" );
printmess( (false and (false and false)) or true, true, "(false and (false and false)) or true" );
printmess( ((false and false) and false) or true, true, "((false and false) and false) or true" );
printmess( false and (false and (false or true)), false, "false and (false and (false or true))" );
printmess( false and ((false and false) or true), false, "false and ((false and false) or true)" );
printmess( (false and false) and (true and false), false, "(false and false) and (true and false)" );
printmess( (false and (false and true)) and false, false, "(false and (false and true)) and false" );
printmess( false and ((false and true) and false), false, "false and ((false and true) and false)" );
printmess( (false and (false and true)) and false, false, "(false and (false and true)) and false" );
printmess( ((false and false) and true) and false, false, "((false and false) and true) and false" );
printmess( false and (false and (true and false)), false, "false and (false and (true and false))" );
printmess( false and ((false and true) and false), false, "false and ((false and true) and false)" );
printmess( (false and false) and (true and true), false, "(false and false) and (true and true)" );
printmess( (false and (false and true)) and true, false, "(false and (false and true)) and true" );
printmess( false and ((false and true) and true), false, "false and ((false and true) and true)" );
printmess( (false and (false and true)) and true, false, "(false and (false and true)) and true" );
printmess( ((false and false) and true) and true, false, "((false and false) and true) and true" );
printmess( false and (false and (true and true)), false, "false and (false and (true and true))" );
printmess( false and ((false and true) and true), false, "false and ((false and true) and true)" );
printmess( (false and false) and (true or false), false, "(false and false) and (true or false)" );
printmess( (false and (false and true)) or false, false, "(false and (false and true)) or false" );
printmess( false and ((false and true) or false), false, "false and ((false and true) or false)" );
printmess( (false and (false and true)) or false, false, "(false and (false and true)) or false" );
printmess( ((false and false) and true) or false, false, "((false and false) and true) or false" );
printmess( false and (false and (true or false)), false, "false and (false and (true or false))" );
printmess( false and ((false and true) or false), false, "false and ((false and true) or false)" );
printmess( (false and false) and (true or true), false, "(false and false) and (true or true)" );
printmess( (false and (false and true)) or true, true, "(false and (false and true)) or true" );
printmess( false and ((false and true) or true), false, "false and ((false and true) or true)" );
printmess( (false and (false and true)) or true, true, "(false and (false and true)) or true" );
printmess( ((false and false) and true) or true, true, "((false and false) and true) or true" );
printmess( false and (false and (true or true)), false, "false and (false and (true or true))" );
printmess( false and ((false and true) or true), false, "false and ((false and true) or true)" );
printmess( (false and false) or (false and false), false, "(false and false) or (false and false)" );
printmess( (false and (false or false)) and false, false, "(false and (false or false)) and false" );
printmess( false and ((false or false) and false), false, "false and ((false or false) and false)" );
printmess( (false and (false or false)) and false, false, "(false and (false or false)) and false" );
printmess( ((false and false) or false) and false, false, "((false and false) or false) and false" );
printmess( false and (false or (false and false)), false, "false and (false or (false and false))" );
printmess( false and ((false or false) and false), false, "false and ((false or false) and false)" );
printmess( (false and false) or (false and true), false, "(false and false) or (false and true)" );
printmess( (false and (false or false)) and true, false, "(false and (false or false)) and true" );
printmess( false and ((false or false) and true), false, "false and ((false or false) and true)" );
printmess( (false and (false or false)) and true, false, "(false and (false or false)) and true" );
printmess( ((false and false) or false) and true, false, "((false and false) or false) and true" );
printmess( false and (false or (false and true)), false, "false and (false or (false and true))" );
printmess( false and ((false or false) and true), false, "false and ((false or false) and true)" );
printmess( (false and false) or (false or false), false, "(false and false) or (false or false)" );
printmess( (false and (false or false)) or false, false, "(false and (false or false)) or false" );
printmess( false and ((false or false) or false), false, "false and ((false or false) or false)" );
printmess( (false and (false or false)) or false, false, "(false and (false or false)) or false" );
printmess( ((false and false) or false) or false, false, "((false and false) or false) or false" );
printmess( false and (false or (false or false)), false, "false and (false or (false or false))" );
printmess( false and ((false or false) or false), false, "false and ((false or false) or false)" );
printmess( (false and false) or (false or true), true, "(false and false) or (false or true)" );
printmess( (false and (false or false)) or true, true, "(false and (false or false)) or true" );
printmess( false and ((false or false) or true), false, "false and ((false or false) or true)" );
printmess( (false and (false or false)) or true, true, "(false and (false or false)) or true" );
printmess( ((false and false) or false) or true, true, "((false and false) or false) or true" );
printmess( false and (false or (false or true)), false, "false and (false or (false or true))" );
printmess( false and ((false or false) or true), false, "false and ((false or false) or true)" );
printmess( (false and false) or (true and false), false, "(false and false) or (true and false)" );
printmess( (false and (false or true)) and false, false, "(false and (false or true)) and false" );
printmess( false and ((false or true) and false), false, "false and ((false or true) and false)" );
printmess( (false and (false or true)) and false, false, "(false and (false or true)) and false" );
printmess( ((false and false) or true) and false, false, "((false and false) or true) and false" );
printmess( false and (false or (true and false)), false, "false and (false or (true and false))" );
printmess( false and ((false or true) and false), false, "false and ((false or true) and false)" );
printmess( (false and false) or (true and true), true, "(false and false) or (true and true)" );
printmess( (false and (false or true)) and true, false, "(false and (false or true)) and true" );
printmess( false and ((false or true) and true), false, "false and ((false or true) and true)" );
printmess( (false and (false or true)) and true, false, "(false and (false or true)) and true" );
printmess( ((false and false) or true) and true, true, "((false and false) or true) and true" );
printmess( false and (false or (true and true)), false, "false and (false or (true and true))" );
printmess( false and ((false or true) and true), false, "false and ((false or true) and true)" );
printmess( (false and false) or (true or false), true, "(false and false) or (true or false)" );
printmess( (false and (false or true)) or false, false, "(false and (false or true)) or false" );
printmess( false and ((false or true) or false), false, "false and ((false or true) or false)" );
printmess( (false and (false or true)) or false, false, "(false and (false or true)) or false" );
printmess( ((false and false) or true) or false, true, "((false and false) or true) or false" );
printmess( false and (false or (true or false)), false, "false and (false or (true or false))" );
printmess( false and ((false or true) or false), false, "false and ((false or true) or false)" );
printmess( (false and false) or (true or true), true, "(false and false) or (true or true)" );
printmess( (false and (false or true)) or true, true, "(false and (false or true)) or true" );
printmess( false and ((false or true) or true), false, "false and ((false or true) or true)" );
printmess( (false and (false or true)) or true, true, "(false and (false or true)) or true" );
printmess( ((false and false) or true) or true, true, "((false and false) or true) or true" );
printmess( false and (false or (true or true)), false, "false and (false or (true or true))" );
printmess( false and ((false or true) or true), false, "false and ((false or true) or true)" );
printmess( (false and true) and (false and false), false, "(false and true) and (false and false)" );
printmess( (false and (true and false)) and false, false, "(false and (true and false)) and false" );
printmess( false and ((true and false) and false), false, "false and ((true and false) and false)" );
printmess( (false and (true and false)) and false, false, "(false and (true and false)) and false" );
printmess( ((false and true) and false) and false, false, "((false and true) and false) and false" );
printmess( false and (true and (false and false)), false, "false and (true and (false and false))" );
printmess( false and ((true and false) and false), false, "false and ((true and false) and false)" );
printmess( (false and true) and (false and true), false, "(false and true) and (false and true)" );
printmess( (false and (true and false)) and true, false, "(false and (true and false)) and true" );
printmess( false and ((true and false) and true), false, "false and ((true and false) and true)" );
printmess( (false and (true and false)) and true, false, "(false and (true and false)) and true" );
printmess( ((false and true) and false) and true, false, "((false and true) and false) and true" );
printmess( false and (true and (false and true)), false, "false and (true and (false and true))" );
printmess( false and ((true and false) and true), false, "false and ((true and false) and true)" );
printmess( (false and true) and (false or false), false, "(false and true) and (false or false)" );
printmess( (false and (true and false)) or false, false, "(false and (true and false)) or false" );
printmess( false and ((true and false) or false), false, "false and ((true and false) or false)" );
printmess( (false and (true and false)) or false, false, "(false and (true and false)) or false" );
printmess( ((false and true) and false) or false, false, "((false and true) and false) or false" );
printmess( false and (true and (false or false)), false, "false and (true and (false or false))" );
printmess( false and ((true and false) or false), false, "false and ((true and false) or false)" );
printmess( (false and true) and (false or true), false, "(false and true) and (false or true)" );
printmess( (false and (true and false)) or true, true, "(false and (true and false)) or true" );
printmess( false and ((true and false) or true), false, "false and ((true and false) or true)" );
printmess( (false and (true and false)) or true, true, "(false and (true and false)) or true" );
printmess( ((false and true) and false) or true, true, "((false and true) and false) or true" );
printmess( false and (true and (false or true)), false, "false and (true and (false or true))" );
printmess( false and ((true and false) or true), false, "false and ((true and false) or true)" );
printmess( (false and true) and (true and false), false, "(false and true) and (true and false)" );
printmess( (false and (true and true)) and false, false, "(false and (true and true)) and false" );
printmess( false and ((true and true) and false), false, "false and ((true and true) and false)" );
printmess( (false and (true and true)) and false, false, "(false and (true and true)) and false" );
printmess( ((false and true) and true) and false, false, "((false and true) and true) and false" );
printmess( false and (true and (true and false)), false, "false and (true and (true and false))" );
printmess( false and ((true and true) and false), false, "false and ((true and true) and false)" );
printmess( (false and true) and (true and true), false, "(false and true) and (true and true)" );
printmess( (false and (true and true)) and true, false, "(false and (true and true)) and true" );
printmess( false and ((true and true) and true), false, "false and ((true and true) and true)" );
printmess( (false and (true and true)) and true, false, "(false and (true and true)) and true" );
printmess( ((false and true) and true) and true, false, "((false and true) and true) and true" );
printmess( false and (true and (true and true)), false, "false and (true and (true and true))" );
printmess( false and ((true and true) and true), false, "false and ((true and true) and true)" );
printmess( (false and true) and (true or false), false, "(false and true) and (true or false)" );
printmess( (false and (true and true)) or false, false, "(false and (true and true)) or false" );
printmess( false and ((true and true) or false), false, "false and ((true and true) or false)" );
printmess( (false and (true and true)) or false, false, "(false and (true and true)) or false" );
printmess( ((false and true) and true) or false, false, "((false and true) and true) or false" );
printmess( false and (true and (true or false)), false, "false and (true and (true or false))" );
printmess( false and ((true and true) or false), false, "false and ((true and true) or false)" );
printmess( (false and true) and (true or true), false, "(false and true) and (true or true)" );
printmess( (false and (true and true)) or true, true, "(false and (true and true)) or true" );
printmess( false and ((true and true) or true), false, "false and ((true and true) or true)" );
printmess( (false and (true and true)) or true, true, "(false and (true and true)) or true" );
printmess( ((false and true) and true) or true, true, "((false and true) and true) or true" );
printmess( false and (true and (true or true)), false, "false and (true and (true or true))" );
printmess( false and ((true and true) or true), false, "false and ((true and true) or true)" );
printmess( (false and true) or (false and false), false, "(false and true) or (false and false)" );
printmess( (false and (true or false)) and false, false, "(false and (true or false)) and false" );
printmess( false and ((true or false) and false), false, "false and ((true or false) and false)" );
printmess( (false and (true or false)) and false, false, "(false and (true or false)) and false" );
printmess( ((false and true) or false) and false, false, "((false and true) or false) and false" );
printmess( false and (true or (false and false)), false, "false and (true or (false and false))" );
printmess( false and ((true or false) and false), false, "false and ((true or false) and false)" );
printmess( (false and true) or (false and true), false, "(false and true) or (false and true)" );
printmess( (false and (true or false)) and true, false, "(false and (true or false)) and true" );
printmess( false and ((true or false) and true), false, "false and ((true or false) and true)" );
printmess( (false and (true or false)) and true, false, "(false and (true or false)) and true" );
printmess( ((false and true) or false) and true, false, "((false and true) or false) and true" );
printmess( false and (true or (false and true)), false, "false and (true or (false and true))" );
printmess( false and ((true or false) and true), false, "false and ((true or false) and true)" );
printmess( (false and true) or (false or false), false, "(false and true) or (false or false)" );
printmess( (false and (true or false)) or false, false, "(false and (true or false)) or false" );
printmess( false and ((true or false) or false), false, "false and ((true or false) or false)" );
printmess( (false and (true or false)) or false, false, "(false and (true or false)) or false" );
printmess( ((false and true) or false) or false, false, "((false and true) or false) or false" );
printmess( false and (true or (false or false)), false, "false and (true or (false or false))" );
printmess( false and ((true or false) or false), false, "false and ((true or false) or false)" );
printmess( (false and true) or (false or true), true, "(false and true) or (false or true)" );
printmess( (false and (true or false)) or true, true, "(false and (true or false)) or true" );
printmess( false and ((true or false) or true), false, "false and ((true or false) or true)" );
printmess( (false and (true or false)) or true, true, "(false and (true or false)) or true" );
printmess( ((false and true) or false) or true, true, "((false and true) or false) or true" );
printmess( false and (true or (false or true)), false, "false and (true or (false or true))" );
printmess( false and ((true or false) or true), false, "false and ((true or false) or true)" );
printmess( (false and true) or (true and false), false, "(false and true) or (true and false)" );
printmess( (false and (true or true)) and false, false, "(false and (true or true)) and false" );
printmess( false and ((true or true) and false), false, "false and ((true or true) and false)" );
printmess( (false and (true or true)) and false, false, "(false and (true or true)) and false" );
printmess( ((false and true) or true) and false, false, "((false and true) or true) and false" );
printmess( false and (true or (true and false)), false, "false and (true or (true and false))" );
printmess( false and ((true or true) and false), false, "false and ((true or true) and false)" );
printmess( (false and true) or (true and true), true, "(false and true) or (true and true)" );
printmess( (false and (true or true)) and true, false, "(false and (true or true)) and true" );
printmess( false and ((true or true) and true), false, "false and ((true or true) and true)" );
printmess( (false and (true or true)) and true, false, "(false and (true or true)) and true" );
printmess( ((false and true) or true) and true, true, "((false and true) or true) and true" );
printmess( false and (true or (true and true)), false, "false and (true or (true and true))" );
printmess( false and ((true or true) and true), false, "false and ((true or true) and true)" );
printmess( (false and true) or (true or false), true, "(false and true) or (true or false)" );
printmess( (false and (true or true)) or false, false, "(false and (true or true)) or false" );
printmess( false and ((true or true) or false), false, "false and ((true or true) or false)" );
printmess( (false and (true or true)) or false, false, "(false and (true or true)) or false" );
printmess( ((false and true) or true) or false, true, "((false and true) or true) or false" );
printmess( false and (true or (true or false)), false, "false and (true or (true or false))" );
printmess( false and ((true or true) or false), false, "false and ((true or true) or false)" );
printmess( (false and true) or (true or true), true, "(false and true) or (true or true)" );
printmess( (false and (true or true)) or true, true, "(false and (true or true)) or true" );
printmess( false and ((true or true) or true), false, "false and ((true or true) or true)" );
printmess( (false and (true or true)) or true, true, "(false and (true or true)) or true" );
printmess( ((false and true) or true) or true, true, "((false and true) or true) or true" );
printmess( false and (true or (true or true)), false, "false and (true or (true or true))" );
printmess( false and ((true or true) or true), false, "false and ((true or true) or true)" );
printmess( (false or false) and (false and false), false, "(false or false) and (false and false)" );
printmess( (false or (false and false)) and false, false, "(false or (false and false)) and false" );
printmess( false or ((false and false) and false), false, "false or ((false and false) and false)" );
printmess( (false or (false and false)) and false, false, "(false or (false and false)) and false" );
printmess( ((false or false) and false) and false, false, "((false or false) and false) and false" );
printmess( false or (false and (false and false)), false, "false or (false and (false and false))" );
printmess( false or ((false and false) and false), false, "false or ((false and false) and false)" );
printmess( (false or false) and (false and true), false, "(false or false) and (false and true)" );
printmess( (false or (false and false)) and true, false, "(false or (false and false)) and true" );
printmess( false or ((false and false) and true), false, "false or ((false and false) and true)" );
printmess( (false or (false and false)) and true, false, "(false or (false and false)) and true" );
printmess( ((false or false) and false) and true, false, "((false or false) and false) and true" );
printmess( false or (false and (false and true)), false, "false or (false and (false and true))" );
printmess( false or ((false and false) and true), false, "false or ((false and false) and true)" );
printmess( (false or false) and (false or false), false, "(false or false) and (false or false)" );
printmess( (false or (false and false)) or false, false, "(false or (false and false)) or false" );
printmess( false or ((false and false) or false), false, "false or ((false and false) or false)" );
printmess( (false or (false and false)) or false, false, "(false or (false and false)) or false" );
printmess( ((false or false) and false) or false, false, "((false or false) and false) or false" );
printmess( false or (false and (false or false)), false, "false or (false and (false or false))" );
printmess( false or ((false and false) or false), false, "false or ((false and false) or false)" );
printmess( (false or false) and (false or true), false, "(false or false) and (false or true)" );
printmess( (false or (false and false)) or true, true, "(false or (false and false)) or true" );
printmess( false or ((false and false) or true), true, "false or ((false and false) or true)" );
printmess( (false or (false and false)) or true, true, "(false or (false and false)) or true" );
printmess( ((false or false) and false) or true, true, "((false or false) and false) or true" );
printmess( false or (false and (false or true)), false, "false or (false and (false or true))" );
printmess( false or ((false and false) or true), true, "false or ((false and false) or true)" );
printmess( (false or false) and (true and false), false, "(false or false) and (true and false)" );
printmess( (false or (false and true)) and false, false, "(false or (false and true)) and false" );
printmess( false or ((false and true) and false), false, "false or ((false and true) and false)" );
printmess( (false or (false and true)) and false, false, "(false or (false and true)) and false" );
printmess( ((false or false) and true) and false, false, "((false or false) and true) and false" );
printmess( false or (false and (true and false)), false, "false or (false and (true and false))" );
printmess( false or ((false and true) and false), false, "false or ((false and true) and false)" );
printmess( (false or false) and (true and true), false, "(false or false) and (true and true)" );
printmess( (false or (false and true)) and true, false, "(false or (false and true)) and true" );
printmess( false or ((false and true) and true), false, "false or ((false and true) and true)" );
printmess( (false or (false and true)) and true, false, "(false or (false and true)) and true" );
printmess( ((false or false) and true) and true, false, "((false or false) and true) and true" );
printmess( false or (false and (true and true)), false, "false or (false and (true and true))" );
printmess( false or ((false and true) and true), false, "false or ((false and true) and true)" );
printmess( (false or false) and (true or false), false, "(false or false) and (true or false)" );
printmess( (false or (false and true)) or false, false, "(false or (false and true)) or false" );
printmess( false or ((false and true) or false), false, "false or ((false and true) or false)" );
printmess( (false or (false and true)) or false, false, "(false or (false and true)) or false" );
printmess( ((false or false) and true) or false, false, "((false or false) and true) or false" );
printmess( false or (false and (true or false)), false, "false or (false and (true or false))" );
printmess( false or ((false and true) or false), false, "false or ((false and true) or false)" );
printmess( (false or false) and (true or true), false, "(false or false) and (true or true)" );
printmess( (false or (false and true)) or true, true, "(false or (false and true)) or true" );
printmess( false or ((false and true) or true), true, "false or ((false and true) or true)" );
printmess( (false or (false and true)) or true, true, "(false or (false and true)) or true" );
printmess( ((false or false) and true) or true, true, "((false or false) and true) or true" );
printmess( false or (false and (true or true)), false, "false or (false and (true or true))" );
printmess( false or ((false and true) or true), true, "false or ((false and true) or true)" );
printmess( (false or false) or (false and false), false, "(false or false) or (false and false)" );
printmess( (false or (false or false)) and false, false, "(false or (false or false)) and false" );
printmess( false or ((false or false) and false), false, "false or ((false or false) and false)" );
printmess( (false or (false or false)) and false, false, "(false or (false or false)) and false" );
printmess( ((false or false) or false) and false, false, "((false or false) or false) and false" );
printmess( false or (false or (false and false)), false, "false or (false or (false and false))" );
printmess( false or ((false or false) and false), false, "false or ((false or false) and false)" );
printmess( (false or false) or (false and true), false, "(false or false) or (false and true)" );
printmess( (false or (false or false)) and true, false, "(false or (false or false)) and true" );
printmess( false or ((false or false) and true), false, "false or ((false or false) and true)" );
printmess( (false or (false or false)) and true, false, "(false or (false or false)) and true" );
printmess( ((false or false) or false) and true, false, "((false or false) or false) and true" );
printmess( false or (false or (false and true)), false, "false or (false or (false and true))" );
printmess( false or ((false or false) and true), false, "false or ((false or false) and true)" );
printmess( (false or false) or (false or false), false, "(false or false) or (false or false)" );
printmess( (false or (false or false)) or false, false, "(false or (false or false)) or false" );
printmess( false or ((false or false) or false), false, "false or ((false or false) or false)" );
printmess( (false or (false or false)) or false, false, "(false or (false or false)) or false" );
printmess( ((false or false) or false) or false, false, "((false or false) or false) or false" );
printmess( false or (false or (false or false)), false, "false or (false or (false or false))" );
printmess( false or ((false or false) or false), false, "false or ((false or false) or false)" );
printmess( (false or false) or (false or true), true, "(false or false) or (false or true)" );
printmess( (false or (false or false)) or true, true, "(false or (false or false)) or true" );
printmess( false or ((false or false) or true), true, "false or ((false or false) or true)" );
printmess( (false or (false or false)) or true, true, "(false or (false or false)) or true" );
printmess( ((false or false) or false) or true, true, "((false or false) or false) or true" );
printmess( false or (false or (false or true)), true, "false or (false or (false or true))" );
printmess( false or ((false or false) or true), true, "false or ((false or false) or true)" );
printmess( (false or false) or (true and false), false, "(false or false) or (true and false)" );
printmess( (false or (false or true)) and false, false, "(false or (false or true)) and false" );
printmess( false or ((false or true) and false), false, "false or ((false or true) and false)" );
printmess( (false or (false or true)) and false, false, "(false or (false or true)) and false" );
printmess( ((false or false) or true) and false, false, "((false or false) or true) and false" );
printmess( false or (false or (true and false)), false, "false or (false or (true and false))" );
printmess( false or ((false or true) and false), false, "false or ((false or true) and false)" );
printmess( (false or false) or (true and true), true, "(false or false) or (true and true)" );
printmess( (false or (false or true)) and true, true, "(false or (false or true)) and true" );
printmess( false or ((false or true) and true), true, "false or ((false or true) and true)" );
printmess( (false or (false or true)) and true, true, "(false or (false or true)) and true" );
printmess( ((false or false) or true) and true, true, "((false or false) or true) and true" );
printmess( false or (false or (true and true)), true, "false or (false or (true and true))" );
printmess( false or ((false or true) and true), true, "false or ((false or true) and true)" );
printmess( (false or false) or (true or false), true, "(false or false) or (true or false)" );
printmess( (false or (false or true)) or false, true, "(false or (false or true)) or false" );
printmess( false or ((false or true) or false), true, "false or ((false or true) or false)" );
printmess( (false or (false or true)) or false, true, "(false or (false or true)) or false" );
printmess( ((false or false) or true) or false, true, "((false or false) or true) or false" );
printmess( false or (false or (true or false)), true, "false or (false or (true or false))" );
printmess( false or ((false or true) or false), true, "false or ((false or true) or false)" );
printmess( (false or false) or (true or true), true, "(false or false) or (true or true)" );
printmess( (false or (false or true)) or true, true, "(false or (false or true)) or true" );
printmess( false or ((false or true) or true), true, "false or ((false or true) or true)" );
printmess( (false or (false or true)) or true, true, "(false or (false or true)) or true" );
printmess( ((false or false) or true) or true, true, "((false or false) or true) or true" );
printmess( false or (false or (true or true)), true, "false or (false or (true or true))" );
printmess( false or ((false or true) or true), true, "false or ((false or true) or true)" );
printmess( (false or true) and (false and false), false, "(false or true) and (false and false)" );
printmess( (false or (true and false)) and false, false, "(false or (true and false)) and false" );
printmess( false or ((true and false) and false), false, "false or ((true and false) and false)" );
printmess( (false or (true and false)) and false, false, "(false or (true and false)) and false" );
printmess( ((false or true) and false) and false, false, "((false or true) and false) and false" );
printmess( false or (true and (false and false)), false, "false or (true and (false and false))" );
printmess( false or ((true and false) and false), false, "false or ((true and false) and false)" );
printmess( (false or true) and (false and true), false, "(false or true) and (false and true)" );
printmess( (false or (true and false)) and true, false, "(false or (true and false)) and true" );
printmess( false or ((true and false) and true), false, "false or ((true and false) and true)" );
printmess( (false or (true and false)) and true, false, "(false or (true and false)) and true" );
printmess( ((false or true) and false) and true, false, "((false or true) and false) and true" );
printmess( false or (true and (false and true)), false, "false or (true and (false and true))" );
printmess( false or ((true and false) and true), false, "false or ((true and false) and true)" );
printmess( (false or true) and (false or false), false, "(false or true) and (false or false)" );
printmess( (false or (true and false)) or false, false, "(false or (true and false)) or false" );
printmess( false or ((true and false) or false), false, "false or ((true and false) or false)" );
printmess( (false or (true and false)) or false, false, "(false or (true and false)) or false" );
printmess( ((false or true) and false) or false, false, "((false or true) and false) or false" );
printmess( false or (true and (false or false)), false, "false or (true and (false or false))" );
printmess( false or ((true and false) or false), false, "false or ((true and false) or false)" );
printmess( (false or true) and (false or true), true, "(false or true) and (false or true)" );
printmess( (false or (true and false)) or true, true, "(false or (true and false)) or true" );
printmess( false or ((true and false) or true), true, "false or ((true and false) or true)" );
printmess( (false or (true and false)) or true, true, "(false or (true and false)) or true" );
printmess( ((false or true) and false) or true, true, "((false or true) and false) or true" );
printmess( false or (true and (false or true)), true, "false or (true and (false or true))" );
printmess( false or ((true and false) or true), true, "false or ((true and false) or true)" );
printmess( (false or true) and (true and false), false, "(false or true) and (true and false)" );
printmess( (false or (true and true)) and false, false, "(false or (true and true)) and false" );
printmess( false or ((true and true) and false), false, "false or ((true and true) and false)" );
printmess( (false or (true and true)) and false, false, "(false or (true and true)) and false" );
printmess( ((false or true) and true) and false, false, "((false or true) and true) and false" );
printmess( false or (true and (true and false)), false, "false or (true and (true and false))" );
printmess( false or ((true and true) and false), false, "false or ((true and true) and false)" );
printmess( (false or true) and (true and true), true, "(false or true) and (true and true)" );
printmess( (false or (true and true)) and true, true, "(false or (true and true)) and true" );
printmess( false or ((true and true) and true), true, "false or ((true and true) and true)" );
printmess( (false or (true and true)) and true, true, "(false or (true and true)) and true" );
printmess( ((false or true) and true) and true, true, "((false or true) and true) and true" );
printmess( false or (true and (true and true)), true, "false or (true and (true and true))" );
printmess( false or ((true and true) and true), true, "false or ((true and true) and true)" );
printmess( (false or true) and (true or false), true, "(false or true) and (true or false)" );
printmess( (false or (true and true)) or false, true, "(false or (true and true)) or false" );
printmess( false or ((true and true) or false), true, "false or ((true and true) or false)" );
printmess( (false or (true and true)) or false, true, "(false or (true and true)) or false" );
printmess( ((false or true) and true) or false, true, "((false or true) and true) or false" );
printmess( false or (true and (true or false)), true, "false or (true and (true or false))" );
printmess( false or ((true and true) or false), true, "false or ((true and true) or false)" );
printmess( (false or true) and (true or true), true, "(false or true) and (true or true)" );
printmess( (false or (true and true)) or true, true, "(false or (true and true)) or true" );
printmess( false or ((true and true) or true), true, "false or ((true and true) or true)" );
printmess( (false or (true and true)) or true, true, "(false or (true and true)) or true" );
printmess( ((false or true) and true) or true, true, "((false or true) and true) or true" );
printmess( false or (true and (true or true)), true, "false or (true and (true or true))" );
printmess( false or ((true and true) or true), true, "false or ((true and true) or true)" );
printmess( (false or true) or (false and false), true, "(false or true) or (false and false)" );
printmess( (false or (true or false)) and false, false, "(false or (true or false)) and false" );
printmess( false or ((true or false) and false), false, "false or ((true or false) and false)" );
printmess( (false or (true or false)) and false, false, "(false or (true or false)) and false" );
printmess( ((false or true) or false) and false, false, "((false or true) or false) and false" );
printmess( false or (true or (false and false)), true, "false or (true or (false and false))" );
printmess( false or ((true or false) and false), false, "false or ((true or false) and false)" );
printmess( (false or true) or (false and true), true, "(false or true) or (false and true)" );
printmess( (false or (true or false)) and true, true, "(false or (true or false)) and true" );
printmess( false or ((true or false) and true), true, "false or ((true or false) and true)" );
printmess( (false or (true or false)) and true, true, "(false or (true or false)) and true" );
printmess( ((false or true) or false) and true, true, "((false or true) or false) and true" );
printmess( false or (true or (false and true)), true, "false or (true or (false and true))" );
printmess( false or ((true or false) and true), true, "false or ((true or false) and true)" );
printmess( (false or true) or (false or false), true, "(false or true) or (false or false)" );
printmess( (false or (true or false)) or false, true, "(false or (true or false)) or false" );
printmess( false or ((true or false) or false), true, "false or ((true or false) or false)" );
printmess( (false or (true or false)) or false, true, "(false or (true or false)) or false" );
printmess( ((false or true) or false) or false, true, "((false or true) or false) or false" );
printmess( false or (true or (false or false)), true, "false or (true or (false or false))" );
printmess( false or ((true or false) or false), true, "false or ((true or false) or false)" );
printmess( (false or true) or (false or true), true, "(false or true) or (false or true)" );
printmess( (false or (true or false)) or true, true, "(false or (true or false)) or true" );
printmess( false or ((true or false) or true), true, "false or ((true or false) or true)" );
printmess( (false or (true or false)) or true, true, "(false or (true or false)) or true" );
printmess( ((false or true) or false) or true, true, "((false or true) or false) or true" );
printmess( false or (true or (false or true)), true, "false or (true or (false or true))" );
printmess( false or ((true or false) or true), true, "false or ((true or false) or true)" );
printmess( (false or true) or (true and false), true, "(false or true) or (true and false)" );
printmess( (false or (true or true)) and false, false, "(false or (true or true)) and false" );
printmess( false or ((true or true) and false), false, "false or ((true or true) and false)" );
printmess( (false or (true or true)) and false, false, "(false or (true or true)) and false" );
printmess( ((false or true) or true) and false, false, "((false or true) or true) and false" );
printmess( false or (true or (true and false)), true, "false or (true or (true and false))" );
printmess( false or ((true or true) and false), false, "false or ((true or true) and false)" );
printmess( (false or true) or (true and true), true, "(false or true) or (true and true)" );
printmess( (false or (true or true)) and true, true, "(false or (true or true)) and true" );
printmess( false or ((true or true) and true), true, "false or ((true or true) and true)" );
printmess( (false or (true or true)) and true, true, "(false or (true or true)) and true" );
printmess( ((false or true) or true) and true, true, "((false or true) or true) and true" );
printmess( false or (true or (true and true)), true, "false or (true or (true and true))" );
printmess( false or ((true or true) and true), true, "false or ((true or true) and true)" );
printmess( (false or true) or (true or false), true, "(false or true) or (true or false)" );
printmess( (false or (true or true)) or false, true, "(false or (true or true)) or false" );
printmess( false or ((true or true) or false), true, "false or ((true or true) or false)" );
printmess( (false or (true or true)) or false, true, "(false or (true or true)) or false" );
printmess( ((false or true) or true) or false, true, "((false or true) or true) or false" );
printmess( false or (true or (true or false)), true, "false or (true or (true or false))" );
printmess( false or ((true or true) or false), true, "false or ((true or true) or false)" );
printmess( (false or true) or (true or true), true, "(false or true) or (true or true)" );
printmess( (false or (true or true)) or true, true, "(false or (true or true)) or true" );
printmess( false or ((true or true) or true), true, "false or ((true or true) or true)" );
printmess( (false or (true or true)) or true, true, "(false or (true or true)) or true" );
printmess( ((false or true) or true) or true, true, "((false or true) or true) or true" );
printmess( false or (true or (true or true)), true, "false or (true or (true or true))" );
printmess( false or ((true or true) or true), true, "false or ((true or true) or true)" );
printmess( (true and false) and (false and false), false, "(true and false) and (false and false)" );
printmess( (true and (false and false)) and false, false, "(true and (false and false)) and false" );
printmess( true and ((false and false) and false), false, "true and ((false and false) and false)" );
printmess( (true and (false and false)) and false, false, "(true and (false and false)) and false" );
printmess( ((true and false) and false) and false, false, "((true and false) and false) and false" );
printmess( true and (false and (false and false)), false, "true and (false and (false and false))" );
printmess( true and ((false and false) and false), false, "true and ((false and false) and false)" );
printmess( (true and false) and (false and true), false, "(true and false) and (false and true)" );
printmess( (true and (false and false)) and true, false, "(true and (false and false)) and true" );
printmess( true and ((false and false) and true), false, "true and ((false and false) and true)" );
printmess( (true and (false and false)) and true, false, "(true and (false and false)) and true" );
printmess( ((true and false) and false) and true, false, "((true and false) and false) and true" );
printmess( true and (false and (false and true)), false, "true and (false and (false and true))" );
printmess( true and ((false and false) and true), false, "true and ((false and false) and true)" );
printmess( (true and false) and (false or false), false, "(true and false) and (false or false)" );
printmess( (true and (false and false)) or false, false, "(true and (false and false)) or false" );
printmess( true and ((false and false) or false), false, "true and ((false and false) or false)" );
printmess( (true and (false and false)) or false, false, "(true and (false and false)) or false" );
printmess( ((true and false) and false) or false, false, "((true and false) and false) or false" );
printmess( true and (false and (false or false)), false, "true and (false and (false or false))" );
printmess( true and ((false and false) or false), false, "true and ((false and false) or false)" );
printmess( (true and false) and (false or true), false, "(true and false) and (false or true)" );
printmess( (true and (false and false)) or true, true, "(true and (false and false)) or true" );
printmess( true and ((false and false) or true), true, "true and ((false and false) or true)" );
printmess( (true and (false and false)) or true, true, "(true and (false and false)) or true" );
printmess( ((true and false) and false) or true, true, "((true and false) and false) or true" );
printmess( true and (false and (false or true)), false, "true and (false and (false or true))" );
printmess( true and ((false and false) or true), true, "true and ((false and false) or true)" );
printmess( (true and false) and (true and false), false, "(true and false) and (true and false)" );
printmess( (true and (false and true)) and false, false, "(true and (false and true)) and false" );
printmess( true and ((false and true) and false), false, "true and ((false and true) and false)" );
printmess( (true and (false and true)) and false, false, "(true and (false and true)) and false" );
printmess( ((true and false) and true) and false, false, "((true and false) and true) and false" );
printmess( true and (false and (true and false)), false, "true and (false and (true and false))" );
printmess( true and ((false and true) and false), false, "true and ((false and true) and false)" );
printmess( (true and false) and (true and true), false, "(true and false) and (true and true)" );
printmess( (true and (false and true)) and true, false, "(true and (false and true)) and true" );
printmess( true and ((false and true) and true), false, "true and ((false and true) and true)" );
printmess( (true and (false and true)) and true, false, "(true and (false and true)) and true" );
printmess( ((true and false) and true) and true, false, "((true and false) and true) and true" );
printmess( true and (false and (true and true)), false, "true and (false and (true and true))" );
printmess( true and ((false and true) and true), false, "true and ((false and true) and true)" );
printmess( (true and false) and (true or false), false, "(true and false) and (true or false)" );
printmess( (true and (false and true)) or false, false, "(true and (false and true)) or false" );
printmess( true and ((false and true) or false), false, "true and ((false and true) or false)" );
printmess( (true and (false and true)) or false, false, "(true and (false and true)) or false" );
printmess( ((true and false) and true) or false, false, "((true and false) and true) or false" );
printmess( true and (false and (true or false)), false, "true and (false and (true or false))" );
printmess( true and ((false and true) or false), false, "true and ((false and true) or false)" );
printmess( (true and false) and (true or true), false, "(true and false) and (true or true)" );
printmess( (true and (false and true)) or true, true, "(true and (false and true)) or true" );
printmess( true and ((false and true) or true), true, "true and ((false and true) or true)" );
printmess( (true and (false and true)) or true, true, "(true and (false and true)) or true" );
printmess( ((true and false) and true) or true, true, "((true and false) and true) or true" );
printmess( true and (false and (true or true)), false, "true and (false and (true or true))" );
printmess( true and ((false and true) or true), true, "true and ((false and true) or true)" );
printmess( (true and false) or (false and false), false, "(true and false) or (false and false)" );
printmess( (true and (false or false)) and false, false, "(true and (false or false)) and false" );
printmess( true and ((false or false) and false), false, "true and ((false or false) and false)" );
printmess( (true and (false or false)) and false, false, "(true and (false or false)) and false" );
printmess( ((true and false) or false) and false, false, "((true and false) or false) and false" );
printmess( true and (false or (false and false)), false, "true and (false or (false and false))" );
printmess( true and ((false or false) and false), false, "true and ((false or false) and false)" );
printmess( (true and false) or (false and true), false, "(true and false) or (false and true)" );
printmess( (true and (false or false)) and true, false, "(true and (false or false)) and true" );
printmess( true and ((false or false) and true), false, "true and ((false or false) and true)" );
printmess( (true and (false or false)) and true, false, "(true and (false or false)) and true" );
printmess( ((true and false) or false) and true, false, "((true and false) or false) and true" );
printmess( true and (false or (false and true)), false, "true and (false or (false and true))" );
printmess( true and ((false or false) and true), false, "true and ((false or false) and true)" );
printmess( (true and false) or (false or false), false, "(true and false) or (false or false)" );
printmess( (true and (false or false)) or false, false, "(true and (false or false)) or false" );
printmess( true and ((false or false) or false), false, "true and ((false or false) or false)" );
printmess( (true and (false or false)) or false, false, "(true and (false or false)) or false" );
printmess( ((true and false) or false) or false, false, "((true and false) or false) or false" );
printmess( true and (false or (false or false)), false, "true and (false or (false or false))" );
printmess( true and ((false or false) or false), false, "true and ((false or false) or false)" );
printmess( (true and false) or (false or true), true, "(true and false) or (false or true)" );
printmess( (true and (false or false)) or true, true, "(true and (false or false)) or true" );
printmess( true and ((false or false) or true), true, "true and ((false or false) or true)" );
printmess( (true and (false or false)) or true, true, "(true and (false or false)) or true" );
printmess( ((true and false) or false) or true, true, "((true and false) or false) or true" );
printmess( true and (false or (false or true)), true, "true and (false or (false or true))" );
printmess( true and ((false or false) or true), true, "true and ((false or false) or true)" );
printmess( (true and false) or (true and false), false, "(true and false) or (true and false)" );
printmess( (true and (false or true)) and false, false, "(true and (false or true)) and false" );
printmess( true and ((false or true) and false), false, "true and ((false or true) and false)" );
printmess( (true and (false or true)) and false, false, "(true and (false or true)) and false" );
printmess( ((true and false) or true) and false, false, "((true and false) or true) and false" );
printmess( true and (false or (true and false)), false, "true and (false or (true and false))" );
printmess( true and ((false or true) and false), false, "true and ((false or true) and false)" );
printmess( (true and false) or (true and true), true, "(true and false) or (true and true)" );
printmess( (true and (false or true)) and true, true, "(true and (false or true)) and true" );
printmess( true and ((false or true) and true), true, "true and ((false or true) and true)" );
printmess( (true and (false or true)) and true, true, "(true and (false or true)) and true" );
printmess( ((true and false) or true) and true, true, "((true and false) or true) and true" );
printmess( true and (false or (true and true)), true, "true and (false or (true and true))" );
printmess( true and ((false or true) and true), true, "true and ((false or true) and true)" );
printmess( (true and false) or (true or false), true, "(true and false) or (true or false)" );
printmess( (true and (false or true)) or false, true, "(true and (false or true)) or false" );
printmess( true and ((false or true) or false), true, "true and ((false or true) or false)" );
printmess( (true and (false or true)) or false, true, "(true and (false or true)) or false" );
printmess( ((true and false) or true) or false, true, "((true and false) or true) or false" );
printmess( true and (false or (true or false)), true, "true and (false or (true or false))" );
printmess( true and ((false or true) or false), true, "true and ((false or true) or false)" );
printmess( (true and false) or (true or true), true, "(true and false) or (true or true)" );
printmess( (true and (false or true)) or true, true, "(true and (false or true)) or true" );
printmess( true and ((false or true) or true), true, "true and ((false or true) or true)" );
printmess( (true and (false or true)) or true, true, "(true and (false or true)) or true" );
printmess( ((true and false) or true) or true, true, "((true and false) or true) or true" );
printmess( true and (false or (true or true)), true, "true and (false or (true or true))" );
printmess( true and ((false or true) or true), true, "true and ((false or true) or true)" );
printmess( (true and true) and (false and false), false, "(true and true) and (false and false)" );
printmess( (true and (true and false)) and false, false, "(true and (true and false)) and false" );
printmess( true and ((true and false) and false), false, "true and ((true and false) and false)" );
printmess( (true and (true and false)) and false, false, "(true and (true and false)) and false" );
printmess( ((true and true) and false) and false, false, "((true and true) and false) and false" );
printmess( true and (true and (false and false)), false, "true and (true and (false and false))" );
printmess( true and ((true and false) and false), false, "true and ((true and false) and false)" );
printmess( (true and true) and (false and true), false, "(true and true) and (false and true)" );
printmess( (true and (true and false)) and true, false, "(true and (true and false)) and true" );
printmess( true and ((true and false) and true), false, "true and ((true and false) and true)" );
printmess( (true and (true and false)) and true, false, "(true and (true and false)) and true" );
printmess( ((true and true) and false) and true, false, "((true and true) and false) and true" );
printmess( true and (true and (false and true)), false, "true and (true and (false and true))" );
printmess( true and ((true and false) and true), false, "true and ((true and false) and true)" );
printmess( (true and true) and (false or false), false, "(true and true) and (false or false)" );
printmess( (true and (true and false)) or false, false, "(true and (true and false)) or false" );
printmess( true and ((true and false) or false), false, "true and ((true and false) or false)" );
printmess( (true and (true and false)) or false, false, "(true and (true and false)) or false" );
printmess( ((true and true) and false) or false, false, "((true and true) and false) or false" );
printmess( true and (true and (false or false)), false, "true and (true and (false or false))" );
printmess( true and ((true and false) or false), false, "true and ((true and false) or false)" );
printmess( (true and true) and (false or true), true, "(true and true) and (false or true)" );
printmess( (true and (true and false)) or true, true, "(true and (true and false)) or true" );
printmess( true and ((true and false) or true), true, "true and ((true and false) or true)" );
printmess( (true and (true and false)) or true, true, "(true and (true and false)) or true" );
printmess( ((true and true) and false) or true, true, "((true and true) and false) or true" );
printmess( true and (true and (false or true)), true, "true and (true and (false or true))" );
printmess( true and ((true and false) or true), true, "true and ((true and false) or true)" );
printmess( (true and true) and (true and false), false, "(true and true) and (true and false)" );
printmess( (true and (true and true)) and false, false, "(true and (true and true)) and false" );
printmess( true and ((true and true) and false), false, "true and ((true and true) and false)" );
printmess( (true and (true and true)) and false, false, "(true and (true and true)) and false" );
printmess( ((true and true) and true) and false, false, "((true and true) and true) and false" );
printmess( true and (true and (true and false)), false, "true and (true and (true and false))" );
printmess( true and ((true and true) and false), false, "true and ((true and true) and false)" );
printmess( (true and true) and (true and true), true, "(true and true) and (true and true)" );
printmess( (true and (true and true)) and true, true, "(true and (true and true)) and true" );
printmess( true and ((true and true) and true), true, "true and ((true and true) and true)" );
printmess( (true and (true and true)) and true, true, "(true and (true and true)) and true" );
printmess( ((true and true) and true) and true, true, "((true and true) and true) and true" );
printmess( true and (true and (true and true)), true, "true and (true and (true and true))" );
printmess( true and ((true and true) and true), true, "true and ((true and true) and true)" );
printmess( (true and true) and (true or false), true, "(true and true) and (true or false)" );
printmess( (true and (true and true)) or false, true, "(true and (true and true)) or false" );
printmess( true and ((true and true) or false), true, "true and ((true and true) or false)" );
printmess( (true and (true and true)) or false, true, "(true and (true and true)) or false" );
printmess( ((true and true) and true) or false, true, "((true and true) and true) or false" );
printmess( true and (true and (true or false)), true, "true and (true and (true or false))" );
printmess( true and ((true and true) or false), true, "true and ((true and true) or false)" );
printmess( (true and true) and (true or true), true, "(true and true) and (true or true)" );
printmess( (true and (true and true)) or true, true, "(true and (true and true)) or true" );
printmess( true and ((true and true) or true), true, "true and ((true and true) or true)" );
printmess( (true and (true and true)) or true, true, "(true and (true and true)) or true" );
printmess( ((true and true) and true) or true, true, "((true and true) and true) or true" );
printmess( true and (true and (true or true)), true, "true and (true and (true or true))" );
printmess( true and ((true and true) or true), true, "true and ((true and true) or true)" );
printmess( (true and true) or (false and false), true, "(true and true) or (false and false)" );
printmess( (true and (true or false)) and false, false, "(true and (true or false)) and false" );
printmess( true and ((true or false) and false), false, "true and ((true or false) and false)" );
printmess( (true and (true or false)) and false, false, "(true and (true or false)) and false" );
printmess( ((true and true) or false) and false, false, "((true and true) or false) and false" );
printmess( true and (true or (false and false)), true, "true and (true or (false and false))" );
printmess( true and ((true or false) and false), false, "true and ((true or false) and false)" );
printmess( (true and true) or (false and true), true, "(true and true) or (false and true)" );
printmess( (true and (true or false)) and true, true, "(true and (true or false)) and true" );
printmess( true and ((true or false) and true), true, "true and ((true or false) and true)" );
printmess( (true and (true or false)) and true, true, "(true and (true or false)) and true" );
printmess( ((true and true) or false) and true, true, "((true and true) or false) and true" );
printmess( true and (true or (false and true)), true, "true and (true or (false and true))" );
printmess( true and ((true or false) and true), true, "true and ((true or false) and true)" );
printmess( (true and true) or (false or false), true, "(true and true) or (false or false)" );
printmess( (true and (true or false)) or false, true, "(true and (true or false)) or false" );
printmess( true and ((true or false) or false), true, "true and ((true or false) or false)" );
printmess( (true and (true or false)) or false, true, "(true and (true or false)) or false" );
printmess( ((true and true) or false) or false, true, "((true and true) or false) or false" );
printmess( true and (true or (false or false)), true, "true and (true or (false or false))" );
printmess( true and ((true or false) or false), true, "true and ((true or false) or false)" );
printmess( (true and true) or (false or true), true, "(true and true) or (false or true)" );
printmess( (true and (true or false)) or true, true, "(true and (true or false)) or true" );
printmess( true and ((true or false) or true), true, "true and ((true or false) or true)" );
printmess( (true and (true or false)) or true, true, "(true and (true or false)) or true" );
printmess( ((true and true) or false) or true, true, "((true and true) or false) or true" );
printmess( true and (true or (false or true)), true, "true and (true or (false or true))" );
printmess( true and ((true or false) or true), true, "true and ((true or false) or true)" );
printmess( (true and true) or (true and false), true, "(true and true) or (true and false)" );
printmess( (true and (true or true)) and false, false, "(true and (true or true)) and false" );
printmess( true and ((true or true) and false), false, "true and ((true or true) and false)" );
printmess( (true and (true or true)) and false, false, "(true and (true or true)) and false" );
printmess( ((true and true) or true) and false, false, "((true and true) or true) and false" );
printmess( true and (true or (true and false)), true, "true and (true or (true and false))" );
printmess( true and ((true or true) and false), false, "true and ((true or true) and false)" );
printmess( (true and true) or (true and true), true, "(true and true) or (true and true)" );
printmess( (true and (true or true)) and true, true, "(true and (true or true)) and true" );
printmess( true and ((true or true) and true), true, "true and ((true or true) and true)" );
printmess( (true and (true or true)) and true, true, "(true and (true or true)) and true" );
printmess( ((true and true) or true) and true, true, "((true and true) or true) and true" );
printmess( true and (true or (true and true)), true, "true and (true or (true and true))" );
printmess( true and ((true or true) and true), true, "true and ((true or true) and true)" );
printmess( (true and true) or (true or false), true, "(true and true) or (true or false)" );
printmess( (true and (true or true)) or false, true, "(true and (true or true)) or false" );
printmess( true and ((true or true) or false), true, "true and ((true or true) or false)" );
printmess( (true and (true or true)) or false, true, "(true and (true or true)) or false" );
printmess( ((true and true) or true) or false, true, "((true and true) or true) or false" );
printmess( true and (true or (true or false)), true, "true and (true or (true or false))" );
printmess( true and ((true or true) or false), true, "true and ((true or true) or false)" );
printmess( (true and true) or (true or true), true, "(true and true) or (true or true)" );
printmess( (true and (true or true)) or true, true, "(true and (true or true)) or true" );
printmess( true and ((true or true) or true), true, "true and ((true or true) or true)" );
printmess( (true and (true or true)) or true, true, "(true and (true or true)) or true" );
printmess( ((true and true) or true) or true, true, "((true and true) or true) or true" );
printmess( true and (true or (true or true)), true, "true and (true or (true or true))" );
printmess( true and ((true or true) or true), true, "true and ((true or true) or true)" );
printmess( (true or false) and (false and false), false, "(true or false) and (false and false)" );
printmess( (true or (false and false)) and false, false, "(true or (false and false)) and false" );
printmess( true or ((false and false) and false), true, "true or ((false and false) and false)" );
printmess( (true or (false and false)) and false, false, "(true or (false and false)) and false" );
printmess( ((true or false) and false) and false, false, "((true or false) and false) and false" );
printmess( true or (false and (false and false)), true, "true or (false and (false and false))" );
printmess( true or ((false and false) and false), true, "true or ((false and false) and false)" );
printmess( (true or false) and (false and true), false, "(true or false) and (false and true)" );
printmess( (true or (false and false)) and true, true, "(true or (false and false)) and true" );
printmess( true or ((false and false) and true), true, "true or ((false and false) and true)" );
printmess( (true or (false and false)) and true, true, "(true or (false and false)) and true" );
printmess( ((true or false) and false) and true, false, "((true or false) and false) and true" );
printmess( true or (false and (false and true)), true, "true or (false and (false and true))" );
printmess( true or ((false and false) and true), true, "true or ((false and false) and true)" );
printmess( (true or false) and (false or false), false, "(true or false) and (false or false)" );
printmess( (true or (false and false)) or false, true, "(true or (false and false)) or false" );
printmess( true or ((false and false) or false), true, "true or ((false and false) or false)" );
printmess( (true or (false and false)) or false, true, "(true or (false and false)) or false" );
printmess( ((true or false) and false) or false, false, "((true or false) and false) or false" );
printmess( true or (false and (false or false)), true, "true or (false and (false or false))" );
printmess( true or ((false and false) or false), true, "true or ((false and false) or false)" );
printmess( (true or false) and (false or true), true, "(true or false) and (false or true)" );
printmess( (true or (false and false)) or true, true, "(true or (false and false)) or true" );
printmess( true or ((false and false) or true), true, "true or ((false and false) or true)" );
printmess( (true or (false and false)) or true, true, "(true or (false and false)) or true" );
printmess( ((true or false) and false) or true, true, "((true or false) and false) or true" );
printmess( true or (false and (false or true)), true, "true or (false and (false or true))" );
printmess( true or ((false and false) or true), true, "true or ((false and false) or true)" );
printmess( (true or false) and (true and false), false, "(true or false) and (true and false)" );
printmess( (true or (false and true)) and false, false, "(true or (false and true)) and false" );
printmess( true or ((false and true) and false), true, "true or ((false and true) and false)" );
printmess( (true or (false and true)) and false, false, "(true or (false and true)) and false" );
printmess( ((true or false) and true) and false, false, "((true or false) and true) and false" );
printmess( true or (false and (true and false)), true, "true or (false and (true and false))" );
printmess( true or ((false and true) and false), true, "true or ((false and true) and false)" );
printmess( (true or false) and (true and true), true, "(true or false) and (true and true)" );
printmess( (true or (false and true)) and true, true, "(true or (false and true)) and true" );
printmess( true or ((false and true) and true), true, "true or ((false and true) and true)" );
printmess( (true or (false and true)) and true, true, "(true or (false and true)) and true" );
printmess( ((true or false) and true) and true, true, "((true or false) and true) and true" );
printmess( true or (false and (true and true)), true, "true or (false and (true and true))" );
printmess( true or ((false and true) and true), true, "true or ((false and true) and true)" );
printmess( (true or false) and (true or false), true, "(true or false) and (true or false)" );
printmess( (true or (false and true)) or false, true, "(true or (false and true)) or false" );
printmess( true or ((false and true) or false), true, "true or ((false and true) or false)" );
printmess( (true or (false and true)) or false, true, "(true or (false and true)) or false" );
printmess( ((true or false) and true) or false, true, "((true or false) and true) or false" );
printmess( true or (false and (true or false)), true, "true or (false and (true or false))" );
printmess( true or ((false and true) or false), true, "true or ((false and true) or false)" );
printmess( (true or false) and (true or true), true, "(true or false) and (true or true)" );
printmess( (true or (false and true)) or true, true, "(true or (false and true)) or true" );
printmess( true or ((false and true) or true), true, "true or ((false and true) or true)" );
printmess( (true or (false and true)) or true, true, "(true or (false and true)) or true" );
printmess( ((true or false) and true) or true, true, "((true or false) and true) or true" );
printmess( true or (false and (true or true)), true, "true or (false and (true or true))" );
printmess( true or ((false and true) or true), true, "true or ((false and true) or true)" );
printmess( (true or false) or (false and false), true, "(true or false) or (false and false)" );
printmess( (true or (false or false)) and false, false, "(true or (false or false)) and false" );
printmess( true or ((false or false) and false), true, "true or ((false or false) and false)" );
printmess( (true or (false or false)) and false, false, "(true or (false or false)) and false" );
printmess( ((true or false) or false) and false, false, "((true or false) or false) and false" );
printmess( true or (false or (false and false)), true, "true or (false or (false and false))" );
printmess( true or ((false or false) and false), true, "true or ((false or false) and false)" );
printmess( (true or false) or (false and true), true, "(true or false) or (false and true)" );
printmess( (true or (false or false)) and true, true, "(true or (false or false)) and true" );
printmess( true or ((false or false) and true), true, "true or ((false or false) and true)" );
printmess( (true or (false or false)) and true, true, "(true or (false or false)) and true" );
printmess( ((true or false) or false) and true, true, "((true or false) or false) and true" );
printmess( true or (false or (false and true)), true, "true or (false or (false and true))" );
printmess( true or ((false or false) and true), true, "true or ((false or false) and true)" );
printmess( (true or false) or (false or false), true, "(true or false) or (false or false)" );
printmess( (true or (false or false)) or false, true, "(true or (false or false)) or false" );
printmess( true or ((false or false) or false), true, "true or ((false or false) or false)" );
printmess( (true or (false or false)) or false, true, "(true or (false or false)) or false" );
printmess( ((true or false) or false) or false, true, "((true or false) or false) or false" );
printmess( true or (false or (false or false)), true, "true or (false or (false or false))" );
printmess( true or ((false or false) or false), true, "true or ((false or false) or false)" );
printmess( (true or false) or (false or true), true, "(true or false) or (false or true)" );
printmess( (true or (false or false)) or true, true, "(true or (false or false)) or true" );
printmess( true or ((false or false) or true), true, "true or ((false or false) or true)" );
printmess( (true or (false or false)) or true, true, "(true or (false or false)) or true" );
printmess( ((true or false) or false) or true, true, "((true or false) or false) or true" );
printmess( true or (false or (false or true)), true, "true or (false or (false or true))" );
printmess( true or ((false or false) or true), true, "true or ((false or false) or true)" );
printmess( (true or false) or (true and false), true, "(true or false) or (true and false)" );
printmess( (true or (false or true)) and false, false, "(true or (false or true)) and false" );
printmess( true or ((false or true) and false), true, "true or ((false or true) and false)" );
printmess( (true or (false or true)) and false, false, "(true or (false or true)) and false" );
printmess( ((true or false) or true) and false, false, "((true or false) or true) and false" );
printmess( true or (false or (true and false)), true, "true or (false or (true and false))" );
printmess( true or ((false or true) and false), true, "true or ((false or true) and false)" );
printmess( (true or false) or (true and true), true, "(true or false) or (true and true)" );
printmess( (true or (false or true)) and true, true, "(true or (false or true)) and true" );
printmess( true or ((false or true) and true), true, "true or ((false or true) and true)" );
printmess( (true or (false or true)) and true, true, "(true or (false or true)) and true" );
printmess( ((true or false) or true) and true, true, "((true or false) or true) and true" );
printmess( true or (false or (true and true)), true, "true or (false or (true and true))" );
printmess( true or ((false or true) and true), true, "true or ((false or true) and true)" );
printmess( (true or false) or (true or false), true, "(true or false) or (true or false)" );
printmess( (true or (false or true)) or false, true, "(true or (false or true)) or false" );
printmess( true or ((false or true) or false), true, "true or ((false or true) or false)" );
printmess( (true or (false or true)) or false, true, "(true or (false or true)) or false" );
printmess( ((true or false) or true) or false, true, "((true or false) or true) or false" );
printmess( true or (false or (true or false)), true, "true or (false or (true or false))" );
printmess( true or ((false or true) or false), true, "true or ((false or true) or false)" );
printmess( (true or false) or (true or true), true, "(true or false) or (true or true)" );
printmess( (true or (false or true)) or true, true, "(true or (false or true)) or true" );
printmess( true or ((false or true) or true), true, "true or ((false or true) or true)" );
printmess( (true or (false or true)) or true, true, "(true or (false or true)) or true" );
printmess( ((true or false) or true) or true, true, "((true or false) or true) or true" );
printmess( true or (false or (true or true)), true, "true or (false or (true or true))" );
printmess( true or ((false or true) or true), true, "true or ((false or true) or true)" );
printmess( (true or true) and (false and false), false, "(true or true) and (false and false)" );
printmess( (true or (true and false)) and false, false, "(true or (true and false)) and false" );
printmess( true or ((true and false) and false), true, "true or ((true and false) and false)" );
printmess( (true or (true and false)) and false, false, "(true or (true and false)) and false" );
printmess( ((true or true) and false) and false, false, "((true or true) and false) and false" );
printmess( true or (true and (false and false)), true, "true or (true and (false and false))" );
printmess( true or ((true and false) and false), true, "true or ((true and false) and false)" );
printmess( (true or true) and (false and true), false, "(true or true) and (false and true)" );
printmess( (true or (true and false)) and true, true, "(true or (true and false)) and true" );
printmess( true or ((true and false) and true), true, "true or ((true and false) and true)" );
printmess( (true or (true and false)) and true, true, "(true or (true and false)) and true" );
printmess( ((true or true) and false) and true, false, "((true or true) and false) and true" );
printmess( true or (true and (false and true)), true, "true or (true and (false and true))" );
printmess( true or ((true and false) and true), true, "true or ((true and false) and true)" );
printmess( (true or true) and (false or false), false, "(true or true) and (false or false)" );
printmess( (true or (true and false)) or false, true, "(true or (true and false)) or false" );
printmess( true or ((true and false) or false), true, "true or ((true and false) or false)" );
printmess( (true or (true and false)) or false, true, "(true or (true and false)) or false" );
printmess( ((true or true) and false) or false, false, "((true or true) and false) or false" );
printmess( true or (true and (false or false)), true, "true or (true and (false or false))" );
printmess( true or ((true and false) or false), true, "true or ((true and false) or false)" );
printmess( (true or true) and (false or true), true, "(true or true) and (false or true)" );
printmess( (true or (true and false)) or true, true, "(true or (true and false)) or true" );
printmess( true or ((true and false) or true), true, "true or ((true and false) or true)" );
printmess( (true or (true and false)) or true, true, "(true or (true and false)) or true" );
printmess( ((true or true) and false) or true, true, "((true or true) and false) or true" );
printmess( true or (true and (false or true)), true, "true or (true and (false or true))" );
printmess( true or ((true and false) or true), true, "true or ((true and false) or true)" );
printmess( (true or true) and (true and false), false, "(true or true) and (true and false)" );
printmess( (true or (true and true)) and false, false, "(true or (true and true)) and false" );
printmess( true or ((true and true) and false), true, "true or ((true and true) and false)" );
printmess( (true or (true and true)) and false, false, "(true or (true and true)) and false" );
printmess( ((true or true) and true) and false, false, "((true or true) and true) and false" );
printmess( true or (true and (true and false)), true, "true or (true and (true and false))" );
printmess( true or ((true and true) and false), true, "true or ((true and true) and false)" );
printmess( (true or true) and (true and true), true, "(true or true) and (true and true)" );
printmess( (true or (true and true)) and true, true, "(true or (true and true)) and true" );
printmess( true or ((true and true) and true), true, "true or ((true and true) and true)" );
printmess( (true or (true and true)) and true, true, "(true or (true and true)) and true" );
printmess( ((true or true) and true) and true, true, "((true or true) and true) and true" );
printmess( true or (true and (true and true)), true, "true or (true and (true and true))" );
printmess( true or ((true and true) and true), true, "true or ((true and true) and true)" );
printmess( (true or true) and (true or false), true, "(true or true) and (true or false)" );
printmess( (true or (true and true)) or false, true, "(true or (true and true)) or false" );
printmess( true or ((true and true) or false), true, "true or ((true and true) or false)" );
printmess( (true or (true and true)) or false, true, "(true or (true and true)) or false" );
printmess( ((true or true) and true) or false, true, "((true or true) and true) or false" );
printmess( true or (true and (true or false)), true, "true or (true and (true or false))" );
printmess( true or ((true and true) or false), true, "true or ((true and true) or false)" );
printmess( (true or true) and (true or true), true, "(true or true) and (true or true)" );
printmess( (true or (true and true)) or true, true, "(true or (true and true)) or true" );
printmess( true or ((true and true) or true), true, "true or ((true and true) or true)" );
printmess( (true or (true and true)) or true, true, "(true or (true and true)) or true" );
printmess( ((true or true) and true) or true, true, "((true or true) and true) or true" );
printmess( true or (true and (true or true)), true, "true or (true and (true or true))" );
printmess( true or ((true and true) or true), true, "true or ((true and true) or true)" );
printmess( (true or true) or (false and false), true, "(true or true) or (false and false)" );
printmess( (true or (true or false)) and false, false, "(true or (true or false)) and false" );
printmess( true or ((true or false) and false), true, "true or ((true or false) and false)" );
printmess( (true or (true or false)) and false, false, "(true or (true or false)) and false" );
printmess( ((true or true) or false) and false, false, "((true or true) or false) and false" );
printmess( true or (true or (false and false)), true, "true or (true or (false and false))" );
printmess( true or ((true or false) and false), true, "true or ((true or false) and false)" );
printmess( (true or true) or (false and true), true, "(true or true) or (false and true)" );
printmess( (true or (true or false)) and true, true, "(true or (true or false)) and true" );
printmess( true or ((true or false) and true), true, "true or ((true or false) and true)" );
printmess( (true or (true or false)) and true, true, "(true or (true or false)) and true" );
printmess( ((true or true) or false) and true, true, "((true or true) or false) and true" );
printmess( true or (true or (false and true)), true, "true or (true or (false and true))" );
printmess( true or ((true or false) and true), true, "true or ((true or false) and true)" );
printmess( (true or true) or (false or false), true, "(true or true) or (false or false)" );
printmess( (true or (true or false)) or false, true, "(true or (true or false)) or false" );
printmess( true or ((true or false) or false), true, "true or ((true or false) or false)" );
printmess( (true or (true or false)) or false, true, "(true or (true or false)) or false" );
printmess( ((true or true) or false) or false, true, "((true or true) or false) or false" );
printmess( true or (true or (false or false)), true, "true or (true or (false or false))" );
printmess( true or ((true or false) or false), true, "true or ((true or false) or false)" );
printmess( (true or true) or (false or true), true, "(true or true) or (false or true)" );
printmess( (true or (true or false)) or true, true, "(true or (true or false)) or true" );
printmess( true or ((true or false) or true), true, "true or ((true or false) or true)" );
printmess( (true or (true or false)) or true, true, "(true or (true or false)) or true" );
printmess( ((true or true) or false) or true, true, "((true or true) or false) or true" );
printmess( true or (true or (false or true)), true, "true or (true or (false or true))" );
printmess( true or ((true or false) or true), true, "true or ((true or false) or true)" );
printmess( (true or true) or (true and false), true, "(true or true) or (true and false)" );
printmess( (true or (true or true)) and false, false, "(true or (true or true)) and false" );
printmess( true or ((true or true) and false), true, "true or ((true or true) and false)" );
printmess( (true or (true or true)) and false, false, "(true or (true or true)) and false" );
printmess( ((true or true) or true) and false, false, "((true or true) or true) and false" );
printmess( true or (true or (true and false)), true, "true or (true or (true and false))" );
printmess( true or ((true or true) and false), true, "true or ((true or true) and false)" );
printmess( (true or true) or (true and true), true, "(true or true) or (true and true)" );
printmess( (true or (true or true)) and true, true, "(true or (true or true)) and true" );
printmess( true or ((true or true) and true), true, "true or ((true or true) and true)" );
printmess( (true or (true or true)) and true, true, "(true or (true or true)) and true" );
printmess( ((true or true) or true) and true, true, "((true or true) or true) and true" );
printmess( true or (true or (true and true)), true, "true or (true or (true and true))" );
printmess( true or ((true or true) and true), true, "true or ((true or true) and true)" );
printmess( (true or true) or (true or false), true, "(true or true) or (true or false)" );
printmess( (true or (true or true)) or false, true, "(true or (true or true)) or false" );
printmess( true or ((true or true) or false), true, "true or ((true or true) or false)" );
printmess( (true or (true or true)) or false, true, "(true or (true or true)) or false" );
printmess( ((true or true) or true) or false, true, "((true or true) or true) or false" );
printmess( true or (true or (true or false)), true, "true or (true or (true or false))" );
printmess( true or ((true or true) or false), true, "true or ((true or true) or false)" );
printmess( (true or true) or (true or true), true, "(true or true) or (true or true)" );
printmess( (true or (true or true)) or true, true, "(true or (true or true)) or true" );
printmess( true or ((true or true) or true), true, "true or ((true or true) or true)" );
printmess( (true or (true or true)) or true, true, "(true or (true or true)) or true" );
printmess( ((true or true) or true) or true, true, "((true or true) or true) or true" );
printmess( true or (true or (true or true)), true, "true or (true or (true or true))" );
printmess( true or ((true or true) or true), true, "true or ((true or true) or true)" );

// test miscellaneous stuff

p := Parent(true);
q := Parent(false);
printmess( p eq q, true, "parent(true) eq parent(false)" );
printmess( p!true, true, "bools ! true" );
printmess( p!false, false, "bools ! false" );
printmess( true in p, true, "true in bools" );
printmess( false in p, true, "false in bools" );
printmess( Rep(p), true, "rep(bools)" );
r := Random(p);	    // prints one of true or false

for x in p do
    r := x;
end for;


/*
// test type checking
print p!1;		    		// raise a type error
print 1 in p;		    	// raise a type error

print true eq 1;	    	// raise a type error
print 1 eq true;            // raise a type error

print true ne 1;            // raise a type error
print 1 ne true;            // raise a type error

print true and 1;           // raise a type error
print 1 and true;           // raise a type error
print false and 1;          // prints false - (with jumping code AND is non-strict)
print 1 and false;          // raise a type error
print 1 and 1;              // raise a type error

print true or 1;            // prints true - (with jumping code OR is non-strict) 
print 1 or true;            // raise a type error
print false or 1;           // raise a type error
print 1 or false;           // raise a type error
print 1 or 1;               // raise a type error

print true xor 1;           // raise a type error
print 1 xor true;           // raise a type error
print false xor 1;          // raise a type error
print 1 xor false;          // raise a type error
print 1 xor 1;              // raise a type error

print not 1;                // raise a type error

print 1 select true else false;  // raise a type error
*/

//quit;
