#include <perms.h>
int _imp_mainep(int _imp_argc, char **_imp_argv) {
  _imp_string Param;
  static const float Cr1 = 0.4 + 6.8 * 3.1415;
  static const float Cr2 = Cr1 - 8.46;
  static const float Cr3 = 1000.00 @-2;
  static const float Cr4 = 0.31415 @1;
  static const int Cint = 3;
  int J;
  int K;
  int Error;
  float Nl;
  float U;
  float V;
  float W;
  float X = 3.3 + 4.4 - 2.2;
  float Z;
  double L;
  float Y;
  Y = 12.95 - X;
  static int Failures = 0;
  void Pass(void) {
    Printstring(_imp_str_literal("Pass"));
    Newline();
  }
  void Fail(void) {
    Printstring(_imp_str_literal("FAIL"));
    Newline();
    Failures++;
  }
  float F(void) { return (3.1415); }
  int /* boolean */ Realnear(float X, float Y) {
    static const float Epsilon = 0.0001;
    if (abs(X - Y) <= Epsilon) return (1);
    return (0);
  }
  Param = Cliparam();
  if (Param == _imp_str_literal(""))
    Selectoutput(2);
  else if (Param == _imp_str_literal("s") || Param == _imp_str_literal("S"))
    Selectoutput(0);
  else if (Param == _imp_str_literal("j") || Param == _imp_str_literal("J")) {
    Openoutput(2, _imp_str_literal("journal"));
    Selectoutput(2);
  } else {
    Openoutput(2, Param);
    Selectoutput(2);
  }
  Newline();
  Printstring(_imp_str_literal("REAL Arithmetic Validation"));
  Newline();
  Printstring(_imp_str_literal("=========================="));
  Newline();
  Error = 0;
  if (!Realnear(X, 5.5)) Error++;
  if (!Realnear(7.45, Y)) Error++;
  if (!Realnear(Cr1, 21.7622)) Error++;
  if (!Realnear(13.3022, Cr2)) Error++;
  if (!Realnear(Cr3, 10.0000)) Error++;
  if (!Realnear(3.1415, Cr4)) Error++;
  if (!Error)
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(_imp_str_literal("Test the  SIZE OF  Functions."));
  Newline();
  Printstring(_imp_str_literal("-----------------------------"));
  Newline();
  Printstring(_imp_str_literal("Size of %LONG ="));
  Write(Sizeof(L), 1);
  Newline();
  Printstring(_imp_str_literal("Size of %REAL ="));
  Write(Sizeof(X), 1);
  Newline();
  Newlines(2);
  Printstring(_imp_str_literal("Test the Six Simple Relational Comparators"));
  Newline();
  Printstring(_imp_str_literal("------------------------------------------"));
  Newlines(2);
  Printstring(_imp_str_literal("Test for %Real Equality "));
  Newline();
  Printstring(_imp_str_literal("======================= "));
  Newline();
  if (3.1415 == 3.1415)
    Pass();
  else
    Fail();
  if (Cr4 == 3.1415)
    Pass();
  else
    Fail();
  if (3.1415 == Cr4)
    Pass();
  else
    Fail();
  if (Cr4 == Cr4)
    Pass();
  else
    Fail();
  X = Cr4;
  Y = Cr4;
  if (X == Cr4)
    Pass();
  else
    Fail();
  if (Cr4 == X)
    Pass();
  else
    Fail();
  if (X == Y)
    Pass();
  else
    Fail();
  if (X == X)
    Pass();
  else
    Fail();
  if (X == 3.1415)
    Pass();
  else
    Fail();
  if (3.1415 == X)
    Pass();
  else
    Fail();
  if (3.1415 == F())
    Pass();
  else
    Fail();
  if (F() == 3.1415)
    Pass();
  else
    Fail();
  if (F() * 3.1415 + 10 == F() * F() + 5 * 2)
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(_imp_str_literal("Test for Real Inequality "));
  Newline();
  Printstring(_imp_str_literal("------------------------ "));
  Newline();
  if (3.1415 != 3.1415)
    Fail();
  else
    Pass();
  if (Cr4 != 3.1415)
    Fail();
  else
    Pass();
  if (3.1415 != Cr4)
    Fail();
  else
    Pass();
  if (Cr4 != Cr4)
    Fail();
  else
    Pass();
  if (X != Cr4)
    Fail();
  else
    Pass();
  if (Cr4 != X)
    Fail();
  else
    Pass();
  if (X != Y)
    Fail();
  else
    Pass();
  if (X != X)
    Fail();
  else
    Pass();
  if (X != 3.1415)
    Fail();
  else
    Pass();
  if (3.1415 != X)
    Fail();
  else
    Pass();
  if (3.1415 != F())
    Fail();
  else
    Pass();
  if (F() != 3.1415)
    Fail();
  else
    Pass();
  Newlines(2);
  Printstring(_imp_str_literal("Test for LESS THAN in Reals"));
  Newline();
  Printstring(_imp_str_literal("---------------------------"));
  Newline();
  X = Cr4;
  if (3.1415 < 3.1415)
    Fail();
  else
    Pass();
  if (3.1415 < X)
    Fail();
  else
    Pass();
  if (X < 3.1415)
    Fail();
  else
    Pass();
  if (3.1415 < Cr4)
    Fail();
  else
    Pass();
  if (Cr4 < 3.1415)
    Fail();
  else
    Pass();
  if (X < Cr4)
    Fail();
  else
    Pass();
  if (Cr4 < X)
    Fail();
  else
    Pass();
  if (Cr4 < Cr4)
    Fail();
  else
    Pass();
  if (X < X)
    Fail();
  else
    Pass();
  if (F() < 3.1415)
    Fail();
  else
    Pass();
  Newlines(2);
  Printstring(_imp_str_literal("Test for LESS THAN OR EQUALS in Reals"));
  Newline();
  Printstring(_imp_str_literal("-------------------------------------"));
  Newline();
  X = Cr4;
  if (3.1415 <= 3.1415)
    Pass();
  else
    Fail();
  if (3.1415 <= X)
    Pass();
  else
    Fail();
  if (X <= 3.1415)
    Pass();
  else
    Fail();
  if (3.1415 <= Cr4)
    Pass();
  else
    Fail();
  if (Cr4 <= 3.1415)
    Pass();
  else
    Fail();
  if (X <= Cr4)
    Pass();
  else
    Fail();
  if (Cr4 <= X)
    Pass();
  else
    Fail();
  if (Cr4 <= Cr4)
    Pass();
  else
    Fail();
  if (X <= X)
    Pass();
  else
    Fail();
  if (F() <= 3.1415)
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(_imp_str_literal("Test for GREATER THAN in Reals"));
  Newline();
  Printstring(_imp_str_literal("------------------------------"));
  Newline();
  X = Cr4;
  if (3.1415 > 3.1415)
    Fail();
  else
    Pass();
  if (3.1415 > X)
    Fail();
  else
    Pass();
  if (X > 3.1415)
    Fail();
  else
    Pass();
  if (3.1415 > Cr4)
    Fail();
  else
    Pass();
  if (Cr4 > 3.1415)
    Fail();
  else
    Pass();
  if (X > Cr4)
    Fail();
  else
    Pass();
  if (Cr4 > X)
    Fail();
  else
    Pass();
  if (Cr4 > Cr4)
    Fail();
  else
    Pass();
  if (X > X)
    Fail();
  else
    Pass();
  if (F() > 3.1415)
    Fail();
  else
    Pass();
  Newlines(2);
  Printstring(_imp_str_literal("Test for GREATER THAN OR EQUALS in Reals"));
  Newline();
  Printstring(_imp_str_literal("----------------------------------------"));
  Newline();
  X = Cr4;
  if (3.1415 >= 3.1415)
    Pass();
  else
    Fail();
  if (3.1415 >= X)
    Pass();
  else
    Fail();
  if (X >= 3.1415)
    Pass();
  else
    Fail();
  if (3.1415 >= Cr4)
    Pass();
  else
    Fail();
  if (Cr4 >= 3.1415)
    Pass();
  else
    Fail();
  if (X >= Cr4)
    Pass();
  else
    Fail();
  if (Cr4 >= X)
    Pass();
  else
    Fail();
  if (Cr4 >= Cr4)
    Pass();
  else
    Fail();
  if (X >= X)
    Pass();
  else
    Fail();
  if (F() >= 3.1415)
    Pass();
  else
    Fail();
  Newlines(4);
  Printstring(_imp_str_literal("Second Test for Real Equality"));
  Newline();
  Printstring(_imp_str_literal("-----------------------------"));
  Newline();
  if (3.1415 == 10.0000)
    Fail();
  else
    Pass();
  if (Cr4 == 10.0000)
    Fail();
  else
    Pass();
  if (10.0000 == Cr4)
    Fail();
  else
    Pass();
  if (Cr4 == Cr3)
    Fail();
  else
    Pass();
  X = Cr4;
  Y = Cr3;
  if (X == Cr3)
    Fail();
  else
    Pass();
  if (Cr3 == X)
    Fail();
  else
    Pass();
  if (X == Y)
    Fail();
  else
    Pass();
  if (X == 10.0000)
    Fail();
  else
    Pass();
  if (10.0000 == X)
    Fail();
  else
    Pass();
  Newlines(2);
  Printstring(_imp_str_literal("Second Test for Real Inequality"));
  Newline();
  Printstring(_imp_str_literal("-------------------------------"));
  Newline();
  if (3.1415 != 10.0000)
    Pass();
  else
    Fail();
  if (Cr4 != 10.0000)
    Pass();
  else
    Fail();
  if (10.0000 != Cr4)
    Pass();
  else
    Fail();
  if (Cr4 != Cr3)
    Pass();
  else
    Fail();
  if (X != Cr3)
    Pass();
  else
    Fail();
  if (Cr3 != X)
    Pass();
  else
    Fail();
  if (X != Y)
    Pass();
  else
    Fail();
  if (X != 10.0000)
    Pass();
  else
    Fail();
  if (10.0000 != X)
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(_imp_str_literal("Second Test for LESS THAN in Reals"));
  Newline();
  Printstring(_imp_str_literal("----------------------------------"));
  Newline();
  if (3.1415 < 10.0000)
    Pass();
  else
    Fail();
  if (10.0000 < X)
    Fail();
  else
    Pass();
  if (X < 10.0000)
    Pass();
  else
    Fail();
  if (10.0000 < Cr4)
    Fail();
  else
    Pass();
  if (Cr4 < 10.0000)
    Pass();
  else
    Fail();
  if (X < Cr3)
    Pass();
  else
    Fail();
  if (Cr3 < X)
    Fail();
  else
    Pass();
  if (Cr4 < Cr3)
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(_imp_str_literal("Second Test for LESS THAN OR EQUALS in Reals"));
  Newline();
  Printstring(_imp_str_literal("--------------------------------------------"));
  Newline();
  if (3.1415 <= 10.0000)
    Pass();
  else
    Fail();
  if (10.0000 <= X)
    Fail();
  else
    Pass();
  if (X <= 10.0000)
    Pass();
  else
    Fail();
  if (10.0000 <= Cr4)
    Fail();
  else
    Pass();
  if (Cr4 <= 10.0000)
    Pass();
  else
    Fail();
  if (X <= Cr3)
    Pass();
  else
    Fail();
  if (Cr3 <= X)
    Fail();
  else
    Pass();
  if (Cr4 <= Cr3)
    Pass();
  else
    Fail();
  if (X <= X)
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(_imp_str_literal("Second Test for GREATER THAN in Reals"));
  Newline();
  Printstring(_imp_str_literal("-------------------------------------"));
  Newline();
  if (3.1415 > 10.0000)
    Fail();
  else
    Pass();
  if (10.0000 > X)
    Pass();
  else
    Fail();
  if (X > 10.0000)
    Fail();
  else
    Pass();
  if (3.1415 > Cr3)
    Fail();
  else
    Pass();
  if (Cr4 > 10.0000)
    Fail();
  else
    Pass();
  if (X > Cr3)
    Fail();
  else
    Pass();
  if (Cr3 > X)
    Pass();
  else
    Fail();
  if (Cr4 > Cr3)
    Fail();
  else
    Pass();
  Newlines(2);
  Printstring(
      _imp_str_literal("Second Test for GREATER THAN OR EQUALS in Reals"));
  Newline();
  Printstring(
      _imp_str_literal("-----------------------------------------------"));
  Newline();
  if (10.0000 >= 3.1415)
    Pass();
  else
    Fail();
  if (10.0000 >= X)
    Pass();
  else
    Fail();
  if (X >= 10.0000)
    Fail();
  else
    Pass();
  if (10.0000 >= Cr4)
    Pass();
  else
    Fail();
  if (Cr3 >= 3.1415)
    Pass();
  else
    Fail();
  if (X >= Cr3)
    Fail();
  else
    Pass();
  if (Cr3 >= X)
    Pass();
  else
    Fail();
  if (Cr3 >= Cr4)
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(_imp_str_literal("Test Simple Assignment of Real Values"));
  Newline();
  Printstring(_imp_str_literal("-------------------------------------"));
  Newline();
  X = 50;
  Z = 10.00000;
  if (Z == 10.00000)
    Pass();
  else
    Fail();
  Z = Cr3;
  if (Z == 10.0000)
    Pass();
  else
    Fail();
  Z = X;
  if (Z == 50)
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(_imp_str_literal("Test Re-Assignment of Predeclared Procedures"));
  Newline();
  Printstring(_imp_str_literal("--------------------------------------------"));
  Newline();
  Nl = 10.00000;
  if (Nl == 10.00000)
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(_imp_str_literal("Test the REAL Arithmetic Operators"));
  Newline();
  Printstring(_imp_str_literal("----------------------------------"));
  Newlines(2);
  Printstring(_imp_str_literal("Test REAL ADDITION."));
  Newline();
  Printstring(_imp_str_literal("-------------------"));
  Newline();
  X = 1.2345;
  Y = 10.0000;
  X += 10.0000;
  if (Realnear(X, 11.2345))
    Pass();
  else
    Fail();
  X = 1.2345;
  Y = 10.0000;
  X += 10.0000;
  if (Realnear(X, 11.2345))
    Pass();
  else
    Fail();
  X = 1.2345;
  Y = 10.0000;
  X += Cr3;
  if (Realnear(X, 11.2345))
    Pass();
  else
    Fail();
  X = 1.2345;
  Y = 10.0000;
  X += Cr3;
  if (Realnear(X, 11.2345))
    Pass();
  else
    Fail();
  X = 1.2345;
  Y = 10.0000;
  X += Y;
  if (Realnear(X, 11.2345))
    Pass();
  else
    Fail();
  X = 1.2345;
  Y = 10.0000;
  X += Y;
  if (Realnear(X, 11.2345))
    Pass();
  else
    Fail();
  X = 1.2345;
  Y = 10.0000;
  Z = X + Y;
  if (Realnear(Z, 11.2345))
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(_imp_str_literal("Test REAL SUBTRACTION."));
  Newline();
  Printstring(_imp_str_literal("----------------------"));
  Newline();
  X = 110.2468;
  Y = 10.0000;
  X -= 10.0000;
  if (Realnear(X, 100.2468))
    Pass();
  else
    Fail();
  X = 110.2468;
  Y = 10.0000;
  X -= 10.0000;
  if (Realnear(X, -100.2468))
    Pass();
  else
    Fail();
  X = 110.2468;
  Y = 10.0000;
  X -= Cr3;
  if (Realnear(X, 100.2468))
    Pass();
  else
    Fail();
  X = 110.2468;
  Y = 10.0000;
  X -= Cr3;
  if (Realnear(X, -100.2468))
    Pass();
  else
    Fail();
  X = 110.2468;
  Y = 10.0000;
  X -= Y;
  if (Realnear(X, 100.2468))
    Pass();
  else
    Fail();
  X = 110.2468;
  Y = 10.0000;
  X -= Y;
  if (Realnear(X, -100.2468))
    Pass();
  else
    Fail();
  X = 110.2468;
  Y = 10.0000;
  Z = X - Y;
  if (Realnear(Z, 100.2468))
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(_imp_str_literal("Test the UNARY MINUS"));
  Newline();
  Printstring(_imp_str_literal("--------------------"));
  Newline();
  X = 3.456;
  Y = 100.931;
  U = -Cr4;
  Z = -X;
  Y = -Y;
  X = -(-(-Z));
  if (Realnear(Z, -3.456))
    Pass();
  else
    Fail();
  if (Realnear(Y, -100.931))
    Pass();
  else
    Fail();
  if (Realnear(X, 3.456))
    Pass();
  else
    Fail();
  if (Realnear(U, -3.1415))
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(_imp_str_literal("Test REAL MULTIPLICATION."));
  Newline();
  Printstring(_imp_str_literal("-------------------------"));
  Newline();
  X = 5.6319;
  Y = 10.0000;
  X = X * 10.0000;
  if (Realnear(X, 56.319))
    Pass();
  else
    Fail();
  X = 5.6319;
  Y = 10.0000;
  X = 10.0000 * X;
  if (Realnear(X, 56.319))
    Pass();
  else
    Fail();
  X = 5.6319;
  Y = 10.0000;
  X = X * Cr3;
  if (Realnear(X, 56.319))
    Pass();
  else
    Fail();
  X = 5.6319;
  Y = 10.0000;
  X = Cr3 * X;
  if (Realnear(X, 56.319))
    Pass();
  else
    Fail();
  X = 5.6319;
  Y = 10.0000;
  X = X * Y;
  if (Realnear(X, 56.319))
    Pass();
  else
    Fail();
  X = 5.6319;
  Y = 10.0000;
  X = Y * X;
  if (Realnear(X, 56.319))
    Pass();
  else
    Fail();
  X = 5.6319;
  Y = 10.0000;
  Z = X * Y;
  if (Realnear(Z, 56.319))
    Pass();
  else
    Fail();
  Newlines(3);
  Printstring(_imp_str_literal("Test REAL EXPONENTIATION."));
  Newline();
  Printstring(_imp_str_literal("-------------------------"));
  Newline();
  Y = 2.431;
  X = 3.1415;
  J = 3;
  X = REXP(Y, 0);
  if (Realnear(X, 1.00))
    Pass();
  else
    Fail();
  X = REXP(Y, J);
  if (Realnear(X, 14.3666))
    Pass();
  else
    Fail();
  X = REXP(Y, Cint);
  if (Realnear(X, 14.3666))
    Pass();
  else
    Fail();
  X = REXP(3.1415, 0);
  if (Realnear(X, 1.00))
    Pass();
  else
    Fail();
  X = REXP(3.1415, J);
  if (Realnear(X, 31.0035))
    Pass();
  else
    Fail();
  X = REXP(3.1415, Cint);
  if (Realnear(X, 31.0035))
    Pass();
  else
    Fail();
  X = REXP(Cr4, 0);
  if (Realnear(X, 1.00))
    Pass();
  else
    Fail();
  X = REXP(Cr4, J);
  if (Realnear(X, 31.0035))
    Pass();
  else
    Fail();
  X = REXP(Cr4, Cint);
  if (Realnear(X, 31.0035))
    Pass();
  else
    Fail();
  X = 3.1415;
  X = REXP(X, 0);
  if (Realnear(X, 1.00))
    Pass();
  else
    Fail();
  X = 3.1415;
  X = REXP(X, J);
  if (Realnear(X, 31.0035))
    Pass();
  else
    Fail();
  X = 3.1415;
  X = REXP(X, Cint);
  if (Realnear(X, 31.0035))
    Pass();
  else
    Fail();
  X = REXP(J, J);
  if (Realnear(X, 27.00))
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(_imp_str_literal("Test REAL Division."));
  Newline();
  Printstring(_imp_str_literal("-------------------"));
  Newline();
  X = 30.3418;
  Y = 30.3418;
  Z = 5.0143;
  X = Y / Z;
  if (Realnear(X, 6.05105))
    Pass();
  else
    Fail();
  X = Y / Cr4;
  if (Realnear(X, 9.65838))
    Pass();
  else
    Fail();
  X = 30.3418 / Z;
  if (Realnear(X, 6.05105))
    Pass();
  else
    Fail();
  X = 30.3418 / Cr4;
  if (Realnear(X, 9.65838))
    Pass();
  else
    Fail();
  X = Cr3 / Z;
  if (Realnear(X, 1.99430))
    Pass();
  else
    Fail();
  X = Cr3 / Cr4;
  if (Realnear(X, 3.18319))
    Pass();
  else
    Fail();
  X = 30.3418;
  X = X / Z;
  if (Realnear(X, 6.05105))
    Pass();
  else
    Fail();
  X = 30.3418;
  X = X / Cr4;
  if (Realnear(X, 9.65838))
    Pass();
  else
    Fail();
  X = 30.3418;
  X = X / X;
  if (Realnear(X, 1.00))
    Pass();
  else
    Fail();
  X = Z / Z;
  if (Realnear(X, 1.00))
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(_imp_str_literal("Test the Modulus Operator"));
  Newline();
  Printstring(_imp_str_literal("-------------------------"));
  Newline();
  Y = 0;
  Z = -3.1415;
  W = 3.1415;
  X = abs(-3.1415);
  U = abs(3.1415);
  if (Realnear(X, 3.1415))
    Pass();
  else
    Fail();
  if (Realnear(U, 3.1415))
    Pass();
  else
    Fail();
  X = abs(-Cr4);
  if (Realnear(X, 3.1415))
    Pass();
  else
    Fail();
  X = abs(Y);
  if (Realnear(X, 0.0))
    Pass();
  else
    Fail();
  X = abs(Z);
  if (Realnear(X, 3.1415))
    Pass();
  else
    Fail();
  X = abs(W);
  if (Realnear(X, 3.1415))
    Pass();
  else
    Fail();
  W = abs(W);
  if (Realnear(W, 3.1415))
    Pass();
  else
    Fail();
  X = abs(F());
  if (Realnear(X, 3.1415))
    Pass();
  else
    Fail();
  X = abs((abs(Z)));
  if (Realnear(X, 3.1415))
    Pass();
  else
    Fail();
  X = abs((-W) + Y - (abs(F() * Z)));
  if (Realnear(X, 13.01052))
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(_imp_str_literal("Test the %REAL Permanent Procedures."));
  Newline();
  Printstring(_imp_str_literal("------------------------------------"));
  Newline();
  J = -3;
  X = Cr4;
  Error = 0;
  X = Cr4;
  J = Intpt(X);
  V = Fracpt(X);
  if (J != 3) Error++;
  if (!Realnear(V, 0.1415)) Error++;
  if (!Realnear(X, J + V)) Error++;
  if (!Error)
    Pass();
  else
    Fail();
  X = -Cr4;
  J = Intpt(X);
  V = Fracpt(X);
  Error = 0;
  if (J != -4) Error++;
  if (!Realnear(V, 0.8585)) Error++;
  if (!Error)
    Pass();
  else
    Fail();
  X = Cr4;
  Y = 3.815;
  Error = 0;
  if (Int(X) != 3) Error++;
  if (Int(Y) != 4) Error++;
  if (!Error)
    Pass();
  else
    Fail();
  Error = 0;
  X = -X;
  Y = -Y;
  if (Int(X) != -3) Error++;
  if (Int(Y) != -4) Error++;
  if (!Error)
    Pass();
  else
    Fail();
  Selectoutput(0);
  Write(Failures, 1);
  Printstring(_imp_str_literal(" failure(s)"));
  Newline();
  exit(0);
  return (1);
}
