#include <perms.h>
int _imp_mainep(int _imp_argc, char **_imp_argv) {
  static const _imp_string Null = _imp_str_literal("");
  static const _imp_string Ten = _imp_str_literal("1234567890");
  static const _imp_string Alphabet =
      _imp_str_literal("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
  static const _imp_string Triple1 = _imp_str_literal("ABC");
  static const _imp_string Triple2 = _imp_str_literal("DEF");
  static const _imp_string Triple3 = _imp_str_literal("GHI");
  _imp_string Param;
  _imp_string Alpha;
  _imp_string Beta;
  _imp_string Gamma;
  _imp_string Delta;
  static int Failures = 0;
  void Pass(void) {
    Printstring(_imp_str_literal("Pass"));
    Newline();
  }
  void Fail(void) {
    Printstring(_imp_str_literal("FAIL"));
    Newline();
    Failures++;
  }
  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("%String Procedure Validation"));
  Newline();
  Printstring(_imp_str_literal("----------------------------"));
  Newlines(2);
  Printstring(_imp_str_literal("Test for %String Equality"));
  Newline();
  Printstring(_imp_str_literal("-------------------------"));
  Newline();
  if (_imp_str_literal("ABC") == _imp_str_literal("ABC"))
    Pass();
  else
    Fail();
  if (Triple1 == _imp_str_literal("ABC"))
    Pass();
  else
    Fail();
  if (_imp_str_literal("ABC") == Triple1)
    Pass();
  else
    Fail();
  if (Triple1 == Triple1)
    Pass();
  else
    Fail();
  Alpha = Triple1;
  Beta = Triple1;
  if (Alpha == Triple1)
    Pass();
  else
    Fail();
  if (Triple1 == Alpha)
    Pass();
  else
    Fail();
  if (Alpha == Beta)
    Pass();
  else
    Fail();
  if (Alpha == Alpha)
    Pass();
  else
    Fail();
  if (Alpha == _imp_str_literal("ABC"))
    Pass();
  else
    Fail();
  if (_imp_str_literal("ABC") == Alpha)
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(_imp_str_literal("Test for %String Inequality"));
  Newline();
  Printstring(_imp_str_literal("---------------------------"));
  Newline();
  if (_imp_str_literal("ABC") != _imp_str_literal("ABC"))
    Fail();
  else
    Pass();
  if (Triple1 != _imp_str_literal("ABC"))
    Fail();
  else
    Pass();
  if (_imp_str_literal("ABC") != Triple1)
    Fail();
  else
    Pass();
  if (Triple1 != Triple1)
    Fail();
  else
    Pass();
  if (Alpha != Triple1)
    Fail();
  else
    Pass();
  if (Triple1 != Alpha)
    Fail();
  else
    Pass();
  if (Alpha != Beta)
    Fail();
  else
    Pass();
  if (Alpha != Alpha)
    Fail();
  else
    Pass();
  if (Alpha != _imp_str_literal("ABC"))
    Fail();
  else
    Pass();
  if (_imp_str_literal("ABC") != Alpha)
    Fail();
  else
    Pass();
  Newlines(2);
  Printstring(_imp_str_literal("Test for LESS THAN in Strings"));
  Newline();
  Printstring(_imp_str_literal("-----------------------------"));
  Newline();
  Alpha = Triple1;
  if (_imp_str_literal("ABC") < _imp_str_literal("ABC"))
    Fail();
  else
    Pass();
  if (_imp_str_literal("ABC") < Alpha)
    Fail();
  else
    Pass();
  if (Alpha < _imp_str_literal("ABC"))
    Fail();
  else
    Pass();
  if (_imp_str_literal("ABC") < Triple1)
    Fail();
  else
    Pass();
  if (Triple1 < _imp_str_literal("ABC"))
    Fail();
  else
    Pass();
  if (Alpha < Triple1)
    Fail();
  else
    Pass();
  if (Triple1 < Alpha)
    Fail();
  else
    Pass();
  if (Triple1 < Triple1)
    Fail();
  else
    Pass();
  if (Alpha < Alpha)
    Fail();
  else
    Pass();
  Newlines(2);
  Printstring(_imp_str_literal("Test for LESS THAN OR EQUALS in Strings"));
  Newline();
  Printstring(_imp_str_literal("---------------------------------------"));
  Newline();
  Alpha = Triple1;
  if (_imp_str_literal("ABC") <= _imp_str_literal("ABC"))
    Pass();
  else
    Fail();
  if (_imp_str_literal("ABC") <= Alpha)
    Pass();
  else
    Fail();
  if (Alpha <= _imp_str_literal("ABC"))
    Pass();
  else
    Fail();
  if (_imp_str_literal("ABC") <= Triple1)
    Pass();
  else
    Fail();
  if (Triple1 <= _imp_str_literal("ABC"))
    Pass();
  else
    Fail();
  if (Alpha <= Triple1)
    Pass();
  else
    Fail();
  if (Triple1 <= Alpha)
    Pass();
  else
    Fail();
  if (Triple1 <= Triple1)
    Pass();
  else
    Fail();
  if (Alpha <= Alpha)
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(_imp_str_literal("Test for GREATER THAN in Strings"));
  Newline();
  Printstring(_imp_str_literal("--------------------------------"));
  Newline();
  Alpha = Triple1;
  if (_imp_str_literal("ABC") > _imp_str_literal("ABC"))
    Fail();
  else
    Pass();
  if (_imp_str_literal("ABC") > Alpha)
    Fail();
  else
    Pass();
  if (Alpha > _imp_str_literal("ABC"))
    Fail();
  else
    Pass();
  if (_imp_str_literal("ABC") > Triple1)
    Fail();
  else
    Pass();
  if (Triple1 > _imp_str_literal("ABC"))
    Fail();
  else
    Pass();
  if (Alpha > Triple1)
    Fail();
  else
    Pass();
  if (Triple1 > Alpha)
    Fail();
  else
    Pass();
  if (Triple1 > Triple1)
    Fail();
  else
    Pass();
  if (Alpha > Alpha)
    Fail();
  else
    Pass();
  Newlines(2);
  Printstring(_imp_str_literal("Test for GREATER THAN OR EQUALS in Strings"));
  Newline();
  Printstring(_imp_str_literal("------------------------------------------"));
  Newline();
  Alpha = Triple1;
  if (_imp_str_literal("ABC") >= _imp_str_literal("ABC"))
    Pass();
  else
    Fail();
  if (_imp_str_literal("ABC") >= Alpha)
    Pass();
  else
    Fail();
  if (Alpha >= _imp_str_literal("ABC"))
    Pass();
  else
    Fail();
  if (_imp_str_literal("ABC") >= Triple1)
    Pass();
  else
    Fail();
  if (Triple1 >= _imp_str_literal("ABC"))
    Pass();
  else
    Fail();
  if (Alpha >= Triple1)
    Pass();
  else
    Fail();
  if (Triple1 >= Alpha)
    Pass();
  else
    Fail();
  if (Triple1 >= Triple1)
    Pass();
  else
    Fail();
  if (Alpha >= Alpha)
    Pass();
  else
    Fail();
  Newlines(3);
  Printstring(_imp_str_literal("Second Test for %String Equality"));
  Newline();
  Printstring(_imp_str_literal("--------------------------------"));
  Newline();
  if (_imp_str_literal("ABC") == _imp_str_literal("DEF"))
    Fail();
  else
    Pass();
  if (Triple1 == _imp_str_literal("DEF"))
    Fail();
  else
    Pass();
  if (_imp_str_literal("DEF") == Triple1)
    Fail();
  else
    Pass();
  if (Triple1 == Triple2)
    Fail();
  else
    Pass();
  Alpha = Triple1;
  Beta = Triple2;
  if (Alpha == Triple2)
    Fail();
  else
    Pass();
  if (Triple2 == Alpha)
    Fail();
  else
    Pass();
  if (Alpha == Beta)
    Fail();
  else
    Pass();
  if (Alpha == _imp_str_literal("DEF"))
    Fail();
  else
    Pass();
  if (_imp_str_literal("DEF") == Alpha)
    Fail();
  else
    Pass();
  Newlines(2);
  Printstring(_imp_str_literal("Second Test for %String Inequality"));
  Newline();
  Printstring(_imp_str_literal("----------------------------------"));
  Newline();
  if (_imp_str_literal("ABC") != _imp_str_literal("DEF"))
    Pass();
  else
    Fail();
  if (Triple1 != _imp_str_literal("DEF"))
    Pass();
  else
    Fail();
  if (_imp_str_literal("DEF") != Triple1)
    Pass();
  else
    Fail();
  if (Triple1 != Triple2)
    Pass();
  else
    Fail();
  if (Alpha != Triple2)
    Pass();
  else
    Fail();
  if (Triple2 != Alpha)
    Pass();
  else
    Fail();
  if (Alpha != Beta)
    Pass();
  else
    Fail();
  if (Alpha != _imp_str_literal("DEF"))
    Pass();
  else
    Fail();
  if (_imp_str_literal("DEF") != Alpha)
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(_imp_str_literal("Second Test for LESS THAN in Strings"));
  Newline();
  Printstring(_imp_str_literal("------------------------------------"));
  Newline();
  if (_imp_str_literal("ABC") < _imp_str_literal("DEF"))
    Pass();
  else
    Fail();
  if (_imp_str_literal("DEF") < Alpha)
    Fail();
  else
    Pass();
  if (Alpha < _imp_str_literal("DEF"))
    Pass();
  else
    Fail();
  if (_imp_str_literal("DEF") < Triple1)
    Fail();
  else
    Pass();
  if (Triple1 < _imp_str_literal("DEF"))
    Pass();
  else
    Fail();
  if (Alpha < Triple2)
    Pass();
  else
    Fail();
  if (Triple2 < Alpha)
    Fail();
  else
    Pass();
  if (Triple1 < Triple2)
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(
      _imp_str_literal("Second Test for LESS THAN or EQUALS  in Strings"));
  Newline();
  Printstring(
      _imp_str_literal("-----------------------------------------------"));
  Newline();
  if (_imp_str_literal("ABC") <= _imp_str_literal("DEF"))
    Pass();
  else
    Fail();
  if (_imp_str_literal("DEF") <= Alpha)
    Fail();
  else
    Pass();
  if (Alpha <= _imp_str_literal("DEF"))
    Pass();
  else
    Fail();
  if (_imp_str_literal("DEF") <= Triple1)
    Fail();
  else
    Pass();
  if (Triple1 <= _imp_str_literal("DEF"))
    Pass();
  else
    Fail();
  if (Alpha <= Triple2)
    Pass();
  else
    Fail();
  if (Triple2 <= Alpha)
    Fail();
  else
    Pass();
  if (Triple1 <= Triple2)
    Pass();
  else
    Fail();
  if (Alpha <= Alpha)
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(_imp_str_literal("Second Test for GREATER THAN in Strings"));
  Newline();
  Printstring(_imp_str_literal("---------------------------------------"));
  Newline();
  if (_imp_str_literal("ABC") > _imp_str_literal("DEF"))
    Fail();
  else
    Pass();
  if (_imp_str_literal("DEF") > Alpha)
    Pass();
  else
    Fail();
  if (Alpha > _imp_str_literal("DEF"))
    Fail();
  else
    Pass();
  if (_imp_str_literal("ABC") > Triple2)
    Fail();
  else
    Pass();
  if (Triple1 > _imp_str_literal("DEF"))
    Fail();
  else
    Pass();
  if (Alpha > Triple2)
    Fail();
  else
    Pass();
  if (Triple2 > Alpha)
    Pass();
  else
    Fail();
  if (Triple1 > Triple2)
    Fail();
  else
    Pass();
  Newlines(2);
  Printstring(
      _imp_str_literal("Second Test for GREATER THAN OR EQUALS in Strings"));
  Newline();
  Printstring(
      _imp_str_literal("-------------------------------------------------"));
  Newline();
  if (_imp_str_literal("DEF") >= _imp_str_literal("ABC"))
    Pass();
  else
    Fail();
  if (_imp_str_literal("DEF") >= Alpha)
    Pass();
  else
    Fail();
  if (Alpha >= _imp_str_literal("DEF"))
    Fail();
  else
    Pass();
  if (_imp_str_literal("DEF") >= Triple1)
    Pass();
  else
    Fail();
  if (Triple2 >= _imp_str_literal("ABC"))
    Pass();
  else
    Fail();
  if (Alpha >= Triple2)
    Fail();
  else
    Pass();
  if (Triple2 >= Alpha)
    Pass();
  else
    Fail();
  if (Triple2 >= Triple1)
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(_imp_str_literal("Testing the CHAR NO Function"));
  Newline();
  Printstring(_imp_str_literal("----------------------------"));
  Newline();
  Beta = Ten;
  if (*Charno(Alphabet, 1) == 'A')
    Pass();
  else
    Fail();
  if (*Charno(Alphabet, 26) == 'Z')
    Pass();
  else
    Fail();
  if (*Charno(Beta, 1) == '1')
    Pass();
  else
    Fail();
  if (*Charno(Beta, 10) == '0')
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(_imp_str_literal("Test the TO STRING Function"));
  Newline();
  Printstring(_imp_str_literal("---------------------------"));
  Newline();
  if (Tostring('A') == _imp_str_literal("A"))
    Pass();
  else
    Fail();
  if (Tostring(32) == _imp_str_literal(" "))
    Pass();
  else
    Fail();
  if (_imp_str_literal("1") == Tostring('1'))
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(
      _imp_str_literal("Test CHAR NO and TO STRING with Non-printing Chars"));
  Newline();
  Printstring(
      _imp_str_literal("--------------------------------------------------"));
  Newline();
  Alpha = Tostring(0);
  Beta = Tostring(255);
  Gamma = Tostring('?');
  if (!*Charno(Alpha, 1))
    Pass();
  else
    Fail();
  if (*Charno(Beta, 1) == 255)
    Pass();
  else
    Fail();
  if ('?' == *Charno(Gamma, 1))
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(_imp_str_literal("Test the SUB STRING Function."));
  Newline();
  Printstring(_imp_str_literal("-----------------------------"));
  Newline();
  Beta = Ten;
  if (Substring(Ten, 4, 7) == _imp_str_literal("4567"))
    Pass();
  else
    Fail();
  if (Substring(Beta, 4, 7) == _imp_str_literal("4567"))
    Pass();
  else
    Fail();
  if (Substring(Ten, 4, 3) == _imp_str_literal(""))
    Pass();
  else
    Fail();
  if (Substring(Alphabet, 1, 3) == Triple1)
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(_imp_str_literal("Test the LENGTH Function."));
  Newline();
  Printstring(_imp_str_literal("-------------------------"));
  Newline();
  Alpha = Null;
  Beta = Triple2;
  Gamma = Alphabet;
  if (*Length(Triple2) == 3 && *Length(Beta) == 3)
    Pass();
  else
    Fail();
  if (*Length(Alphabet) == 26 && *Length(Gamma) == 26)
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(_imp_str_literal("Test the Concatenation of Strings."));
  Newline();
  Printstring(_imp_str_literal("----------------------------------"));
  Newline();
  Alpha = Triple1;
  Beta = Triple2;
  Gamma = _imp_str_literal("TUVWXYZ");
  if (_imp_join(Null, Null) == Null)
    Pass();
  else
    Fail();
  if (_imp_join(Null, Null) == _imp_join(Null, _imp_join(Null, Null)))
    Pass();
  else
    Fail();
  if (_imp_join(Null, Alpha) == _imp_join(Triple1, Null))
    Pass();
  else
    Fail();
  if (_imp_join(Triple1, Beta) == _imp_str_literal("ABCDEF"))
    Pass();
  else
    Fail();
  if (_imp_join(_imp_str_literal("ABC"), Beta) == _imp_str_literal("ABCDEF"))
    Pass();
  else
    Fail();
  if (_imp_join(Alpha, Beta) == _imp_str_literal("ABCDEF"))
    Pass();
  else
    Fail();
  if (_imp_join(Triple1, Triple2) == _imp_str_literal("ABCDEF"))
    Pass();
  else
    Fail();
  if (_imp_str_literal("ABCDEF") == _imp_join(Alpha, Triple2))
    Pass();
  else
    Fail();
  if (_imp_str_literal("ABCDEF") == _imp_join(Alpha, _imp_str_literal("DEF")))
    Pass();
  else
    Fail();
  if (_imp_str_literal("ABCDEF") == _imp_join(Alpha, Beta))
    Pass();
  else
    Fail();
  if (_imp_str_literal("ABCDEF") == _imp_join(Triple1, Triple2))
    Pass();
  else
    Fail();
  if (_imp_str_literal("ABCDEF") == _imp_join(_imp_str_literal("ABC"), Triple2))
    Pass();
  else
    Fail();
  if (_imp_str_literal("ABCDEF") ==
      _imp_join(_imp_str_literal("ABC"), _imp_str_literal("DEF")))
    Pass();
  else
    Fail();
  if (_imp_join(Tostring('A'), Triple1) == _imp_str_literal("AABC"))
    Pass();
  else
    Fail();
  if (Triple1 == _imp_join(Tostring('A'), _imp_str_literal("BC")))
    Pass();
  else
    Fail();
  if (_imp_join(
          Tostring('A'),
          _imp_join(Alpha, _imp_join(_imp_str_literal("DEF"), Triple3))) ==
      _imp_join(_imp_str_literal("AA"),
                _imp_join(Substring(Alpha, 2, 3),
                          _imp_join(Beta, _imp_str_literal("GHI")))))
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(_imp_str_literal("Combined Testing of String Functions."));
  Newline();
  Printstring(_imp_str_literal("-------------------------------------"));
  Newline();
  Beta = Triple1;
  Gamma = _imp_join(Alphabet, _imp_join(Null, _imp_join(Tostring(32), Beta)));
  if (*Length(Gamma) == 30)
    Pass();
  else
    Fail();
  Delta = Ten;
  if (Tostring(*Charno(Delta, 5)) == Substring(Ten, 5, 5))
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(_imp_str_literal("Testing of the String 'Jam' Operator."));
  Newline();
  Printstring(_imp_str_literal("-------------------------------------"));
  Newline();
  Beta = Alphabet;
  Alpha = Alphabet;
  if (Alpha == _imp_str_literal("ABCD"))
    Pass();
  else
    Fail();
  Alpha = Beta;
  if (Alpha == _imp_str_literal("ABCD"))
    Pass();
  else
    Fail();
  Alpha = _imp_str_literal("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
  if (Alpha == _imp_str_literal("ABCD"))
    Pass();
  else
    Fail();
  Alpha = _imp_str_literal("");
  if (Alpha == _imp_str_literal(""))
    Pass();
  else
    Fail();
  Alpha = _imp_str_literal("ABC");
  if (Alpha == _imp_str_literal("ABC"))
    Pass();
  else
    Fail();
  Alpha = Triple1;
  if (Alpha == _imp_str_literal("ABC"))
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(_imp_str_literal("Testing the String Resolution."));
  Newline();
  Printstring(_imp_str_literal("------------------------------"));
  Newline();
  Alpha = _imp_str_literal("456");
  Delta = Ten;
  if (!_imp_resolve(Delta, Beta, _imp_str_literal("456"), Gamma))
    _imp_signal(7, 0, 0);
  if (Beta == _imp_str_literal("123") && Gamma == _imp_str_literal("7890"))
    Pass();
  else
    Fail();
  if (!_imp_resolve(Delta, Beta, _imp_str_literal("456"), NULL))
    _imp_signal(7, 0, 0);
  if (Beta == _imp_str_literal("123"))
    Pass();
  else
    Fail();
  if (!_imp_resolve(Delta, NULL, _imp_str_literal("456"), Gamma))
    _imp_signal(7, 0, 0);
  if (Gamma == _imp_str_literal("7890"))
    Pass();
  else
    Fail();
  if (Delta == Ten)
    Pass();
  else
    Fail();
  if (!_imp_resolve(Delta, Beta, Alpha, Gamma)) _imp_signal(7, 0, 0);
  if (Beta == _imp_str_literal("123") && Gamma == _imp_str_literal("7890"))
    Pass();
  else
    Fail();
  if (!_imp_resolve(Delta, Beta, Alpha, NULL)) _imp_signal(7, 0, 0);
  if (Beta == _imp_str_literal("123"))
    Pass();
  else
    Fail();
  if (!_imp_resolve(Delta, NULL, Alpha, Gamma)) _imp_signal(7, 0, 0);
  if (Gamma == _imp_str_literal("7890"))
    Pass();
  else
    Fail();
  if (Delta == Ten)
    Pass();
  else
    Fail();
  if (Alpha == _imp_str_literal("456"))
    Pass();
  else
    Fail();
  if (!_imp_resolve(Delta, Beta, Substring(Ten, 4, 6), Gamma))
    _imp_signal(7, 0, 0);
  if (Beta == _imp_str_literal("123") && Gamma == _imp_str_literal("7890"))
    Pass();
  else
    Fail();
  if (!_imp_resolve(Delta, Beta, Substring(Ten, 4, 6), NULL))
    _imp_signal(7, 0, 0);
  if (Beta == _imp_str_literal("123"))
    Pass();
  else
    Fail();
  if (!_imp_resolve(Delta, NULL, Substring(Ten, 4, 6), Gamma))
    _imp_signal(7, 0, 0);
  if (Gamma == _imp_str_literal("7890"))
    Pass();
  else
    Fail();
  if (Delta == Ten)
    Pass();
  else
    Fail();
  if (!_imp_resolve(Delta, Delta, _imp_str_literal("456"), Beta))
    _imp_signal(7, 0, 0);
  if (Delta == _imp_str_literal("123") && Beta == _imp_str_literal("7890"))
    Pass();
  else
    Fail();
  Delta = Ten;
  if (!_imp_resolve(Delta, Delta, Alpha, Beta)) _imp_signal(7, 0, 0);
  if (Delta == _imp_str_literal("123") && Beta == _imp_str_literal("7890"))
    Pass();
  else
    Fail();
  Newlines(2);
  Printstring(
      _imp_str_literal("Test the String Resolution conditional ability."));
  Newline();
  Printstring(
      _imp_str_literal("-----------------------------------------------"));
  Newline();
  Delta = Ten;
  if (_imp_resolve(Delta, NULL, _imp_str_literal("456"), NULL))
    Pass();
  else
    Fail();
  if (_imp_resolve(Delta, NULL, Alpha, NULL))
    Pass();
  else
    Fail();
  if (_imp_resolve(Delta, Beta, Alpha, Gamma))
    Pass();
  else
    Fail();
  if (Beta == _imp_str_literal("123") && Gamma == _imp_str_literal("7890"))
    Pass();
  else
    Fail();
  Selectoutput(0);
  Write(Failures, 1);
  Printstring(_imp_str_literal(" failure(s)"));
  Newline();
  exit(0);
  return (1);
}
