#include <perms.h>
int _imp_mainep(int _imp_argc, char **_imp_argv) {
  _imp_string Param;
  short J;
  short K;
  short M;
  short P;
  short Q;
  static const short Cint3 = 10;
  static const short Cint4 = 3;
  static int Failures = 0;
  void Pass(void) {
    Printstring(_imp_str_literal("Pass"));
    Newline();
  }
  void Fail(void) {
    Printstring(_imp_str_literal("FAIL"));
    Newline();
    Failures++;
  }
  short F(void) { return (3); }
  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);
  }
  Newlines(2);
  Printstring(_imp_str_literal("SHORT INTEGER Arithmetic Validation"));
  Newline();
  Printstring(_imp_str_literal("==================================="));
  Newlines(3);
  Printstring(_imp_str_literal("Test the SHORT INTEGER Arithmetic Operators"));
  Newline();
  Printstring(_imp_str_literal("-------------------------------------------"));
  Newline();
  Newlines(2);
  Printstring(_imp_str_literal("Test SHORT INTEGER MULTIPLICATION."));
  Newline();
  Printstring(_imp_str_literal("----------------------------------"));
  Newline();
  J = 50;
  K = 10;
  J = J * 10;
  if (J == 500)
    Pass();
  else
    Fail();
  J = 10 * J;
  if (J == 5000)
    Pass();
  else
    Fail();
  J = 5;
  J = J * Cint3;
  if (J == 50)
    Pass();
  else
    Fail();
  J = Cint3 * J;
  if (J == 500)
    Pass();
  else
    Fail();
  J = J * K;
  if (J == 5000)
    Pass();
  else
    Fail();
  J = 5;
  M = J * K;
  if (M == 50)
    Pass();
  else
    Fail();
  if (J == 5 && K == 10)
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(_imp_str_literal("Test SHORT INTEGER EXPONENTIATION."));
  Newline();
  Printstring(_imp_str_literal("----------------------------------"));
  Newline();
  K = 3;
  M = 5;
  J = IEXP(K, 0);
  if (J == 1)
    Pass();
  else
    Fail();
  J = IEXP(K, M);
  if (J == 243)
    Pass();
  else
    Fail();
  J = IEXP(K, Cint4);
  if (J == 27)
    Pass();
  else
    Fail();
  J = IEXP(3, 0);
  if (J == 1)
    Pass();
  else
    Fail();
  J = IEXP(3, M);
  if (J == 243)
    Pass();
  else
    Fail();
  J = IEXP(3, Cint4);
  if (J == 27)
    Pass();
  else
    Fail();
  J = IEXP(Cint4, 0);
  if (J == 1)
    Pass();
  else
    Fail();
  J = IEXP(Cint4, M);
  if (J == 243)
    Pass();
  else
    Fail();
  J = IEXP(Cint3, Cint4);
  if (J == 1000)
    Pass();
  else
    Fail();
  Newline();
  Printstring(
      _imp_str_literal("Let:  J = 3  before every test with J as argument."));
  Newline();
  Printstring(_imp_str_literal("---"));
  Newline();
  J = 3;
  J = IEXP(J, 0);
  if (J == 1)
    Pass();
  else
    Fail();
  J = 3;
  J = IEXP(J, M);
  if (J == 243)
    Pass();
  else
    Fail();
  J = 3;
  J = IEXP(J, Cint4);
  if (J == 27)
    Pass();
  else
    Fail();
  J = 3;
  J = IEXP(J, J);
  if (J == 27)
    Pass();
  else
    Fail();
  J = IEXP(M, M);
  if (J == 3125)
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(_imp_str_literal("Test SHORT INTEGER Division."));
  Newline();
  Printstring(_imp_str_literal("----------------------------"));
  Newline();
  K = 30;
  M = 5;
  J = K / M;
  if (J == 6)
    Pass();
  else
    Fail();
  J = K / Cint4;
  if (J == 10)
    Pass();
  else
    Fail();
  J = 30 / M;
  if (J == 6)
    Pass();
  else
    Fail();
  J = 30 / Cint4;
  if (J == 10)
    Pass();
  else
    Fail();
  J = Cint3 / M;
  if (J == 2)
    Pass();
  else
    Fail();
  J = Cint3 / Cint4;
  if (J == 3)
    Pass();
  else
    Fail();
  Newline();
  Printstring(
      _imp_str_literal("Let:  J = 30  before every test with J as argument."));
  Newline();
  Printstring(_imp_str_literal("---"));
  Newline();
  J = 30;
  J = J / M;
  if (J == 6)
    Pass();
  else
    Fail();
  J = 30;
  J = J / Cint4;
  if (J == 10)
    Pass();
  else
    Fail();
  J = 30;
  J = J / J;
  if (J == 1)
    Pass();
  else
    Fail();
  J = M / M;
  if (J == 1)
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(_imp_str_literal("Test the Modulus Operator"));
  Newline();
  Printstring(_imp_str_literal("-------------------------"));
  Newline();
  K = 0;
  M = -3;
  P = 3;
  J = abs(-3);
  Q = abs(3);
  if (J == 3)
    Pass();
  else
    Fail();
  if (Q == 3)
    Pass();
  else
    Fail();
  J = abs(Cint4);
  if (J == 3)
    Pass();
  else
    Fail();
  J = abs(K);
  if (!J)
    Pass();
  else
    Fail();
  J = abs(M);
  if (J == 3)
    Pass();
  else
    Fail();
  J = abs(P);
  if (J == 3)
    Pass();
  else
    Fail();
  P = abs(P);
  if (P == 3)
    Pass();
  else
    Fail();
  J = abs(F());
  if (J == 3)
    Pass();
  else
    Fail();
  J = abs((abs(M)));
  if (J == 3)
    Pass();
  else
    Fail();
  J = abs((-P) + K - (abs(F() * M)));
  if (J == 12)
    Pass();
  else
    Fail();
  Selectoutput(0);
  Write(Failures, 1);
  Printstring(_imp_str_literal(" failure(s)"));
  Newline();
  exit(0);
  return (1);
}
