/* More constant expression tests */

proc main()
{
    "Long &  (1):     ", 1L & 3L, "\n";
    "Long |  (3):     ", 1L | 2L, "\n";
    "Long ^  (6):     ", 3L ^ 5L, "\n";
    "Long << (2):     ", 1L << 1L, "\n";
    "Long >> (1):     ", 2L >> 1L, "\n";
    "\n";
    "Int  &  (1):     ", 1 & 3, "\n";
    "Int  |  (3):     ", 1 | 2, "\n";
    "Int  ^  (6):     ", 3 ^ 5, "\n";
    "Int  << (2):     ", 1 << 1, "\n";
    "Int  >> (1):     ", 2 >> 1, "\n";
    "\n";
    "Bool &  (true):  ", true & true, "\n";
    "Bool |  (true):  ", true | false, "\n";
    "Bool ^  (true):  ", false ^ true, "\n";
    "\n";
    "Str  == (true):  ", "true" == "true", "\n";
    "Arr  == (true):  ", {1} == {1}, "\n";
    "Flt  == (true):  ", 1.0 == 1.0, "\n";
    "MixF == (true):  ", 1.0 == 1, "\n";
    "MixL == (true):  ", 1.0 == 1L, "\n";
    "Str  != (true):  ", "false" != "true", "\n";
    "\n";
    "Int  <= (true):  ", 1 <= 2, "\n";
    "Int  >= (false): ", 1 >= 2, "\n";
    "Int  <  (true):  ", 1 < 2, "\n";
    "Int  >  (false): ", 1 > 2, "\n";
    "\n";
    "Long <= (true):  ", 1L <= 2L, "\n";
    "Long >= (false): ", 1L >= 2L, "\n";
    "Long <  (true):  ", 1L < 2L, "\n";
    "Long >  (false): ", 1L > 2L, "\n";
    "\n";
    "Str  <= (true):  ", "1L" <= "2L", "\n";
    "Str  >= (false): ", "1L" >= "2L", "\n";
    "Str  <  (true):  ", "1L" < "2L", "\n";
    "Str  <  (false): ", "1L" > "2L", "\n";
    "\n";
    "Bool ~  (true):  ", ~false, "\n";
    "Int  ~  (-1):    ", ~0, "\n";
    "Long ~  (-1):    ", ~0L, "\n";
    "\n";
    "Bool !  (true):  ", !false, "\n";
    "Int  !  (true):  ", !0, "\n";
    "Flt  !  (true):  ", !0.0, "\n";
    "Flt  !  (true):  ", ! -0.0, "\n";
    "Long !  (true):  ", !0L, "\n";
    "Doub !  (true):  ", !0.0D, "\n";
    "Doub !  (true):  ", ! -0.0D, "\n";
    "Null !  (true):  ", !nil, "\n";
    "\n";
    "Int  -  (-1):    ", -(1), "\n";
    "Flt  -  (-1):    ", -(1.0), "\n";
    "Long -  (-1):    ", -(1L), "\n";
    "Doub -  (-1):    ", -(1.0D), "\n";
}