/* Short-circuit constant expression tests */

proc main()
{
    "Bool (t || x) == ", true  || "fail", "\n";
    "Int  (1 || x) == ", 1     || "fail", "\n";
    "Flt  (1 || x) == ", 1.    || "fail", "\n";
    "Long (1 || x) == ", 1L    || "fail", "\n";
    "Dbl  (1 || x) == ", 1.D   || "fail", "\n";
    "Str  (1 || x) == ", "1"   || "fail", "\n";

    "Bool (f || x) == ", false || "pass", "\n";
    "Int  (0 || x) == ", 0     || "pass", "\n";
    "Flt  (0 || x) == ", 0.    || "pass", "\n";
    "Long (0 || x) == ", 0L    || "pass", "\n";
    "Dbl  (0 || x) == ", 0.D   || "pass", "\n";
    "Nil  (0 || x) == ", nil   || "pass", "\n";

    "Bool (t && x) == ", true  && "pass", "\n";
    "Int  (1 && x) == ", 1     && "pass", "\n";
    "Flt  (1 && x) == ", 1.    && "pass", "\n";
    "Long (1 && x) == ", 1L    && "pass", "\n";
    "Dbl  (1 && x) == ", 1.D   && "pass", "\n";
    "Str  (1 && x) == ", "1"   && "pass", "\n";

    "Bool (f && x) == ", false && "fail", "\n";
    "Int  (0 && x) == ", 0     && "fail", "\n";
    "Flt  (0 && x) == ", 0.    && "fail", "\n";
    "Long (0 && x) == ", 0L    && "fail", "\n";
    "Dbl  (0 && x) == ", 0.D   && "fail", "\n";
    "Nil  (0 && x) == ", nil   && "fail", "\n";

    "Bool (t ? x : y) == ", true  ? "pass" : "fail", "\n";
    "Int  (1 ? x : y) == ", 1     ? "pass" : "fail", "\n";
    "Flt  (1 ? x : y) == ", 1.    ? "pass" : "fail", "\n";
    "Long (1 ? x : y) == ", 1L    ? "pass" : "fail", "\n";
    "Dbl  (1 ? x : y) == ", 1.D   ? "pass" : "fail", "\n";
    "Str  (1 ? x : y) == ", "1"   ? "pass" : "fail", "\n";

    "Bool (f ? x : y) == ", false ? "fail" : "pass", "\n";
    "Int  (0 ? x : y) == ", 0     ? "fail" : "pass", "\n";
    "Flt  (0 ? x : y) == ", 0.    ? "fail" : "pass", "\n";
    "Long (0 ? x : y) == ", 0L    ? "fail" : "pass", "\n";
    "Dbl  (0 ? x : y) == ", 0.D   ? "fail" : "pass", "\n";
    "Nil  (0 ? x : y) == ", nil   ? "fail" : "pass", "\n";
}