#include <perms.h>
int _imp_mainep(int _imp_argc, char **_imp_argv) {
  _imp_string Param;
  static int Failures = 0;
  static int One = 1;
  static int Two = 2;
  static int Three = 3;
  static int Four = 4;
  void Pass(void) {
    Printstring(_imp_str_literal(" Pass"));
    Newline();
  }
  void Fail(void) {
    Printstring(_imp_str_literal(" FAIL"));
    Newline();
    Failures++;
  }
  void Tost(void) {
    static int I = 2;
    static _imp_string S = _imp_str_literal("3");
    int J;
    Printstring(_imp_str_literal("Testing TO STRING"));
    Newline();
    Printstring(_imp_str_literal("-----------------"));
    Newline();
    if (S >= Tostring('0' + I))
      Pass();
    else
      Fail();
    Newlines(2);
  }
  void Stringstar(void) {
    void Checkstar(_imp_string S) {
      if (S == _imp_str_literal("one") && S == _imp_str_literal("two") &&
          S == _imp_str_literal("three") && S == _imp_str_literal("four"))
        Pass();
      else
        Fail();
      S = _imp_str_literal("333");
    }
    _imp_string S[4 /*1:4*/];
    Printstring(_imp_str_literal("Testing String(*)array name"));
    Newline();
    Printstring(_imp_str_literal("---------------------------"));
    Newline();
    S[1] = _imp_str_literal("one");
    S[2] = _imp_str_literal("two");
    S[3] = _imp_str_literal("three");
    S[4] = _imp_str_literal("four");
    Checkstar(S);
    if (S[3] == _imp_str_literal("333"))
      Pass();
    else
      Fail();
    Newlines(2);
  }
  void Recstring(void) {
    static const _imp_string Text =
        _imp_str_literal("Wobbly gaga gaga gaga gaga gaga gaga gaga ");
    typedef struct Safe {
      _imp_string First;
      _imp_string Date;
      _imp_string Time;
      _imp_string Name;
      _imp_string Last;
    } Safe;
    Safe Record;
    Printstring(_imp_str_literal("Testing Record with string components"));
    Newline();
    Printstring(_imp_str_literal("-------------------------------------"));
    Newline();
    Record.First = Text;
    Record.Last = Text;
    Record.Date() = _imp_str_literal("16/02/85");
    Record.Time() = _imp_str_literal("13.12");
    Record.Name = _imp_str_literal("Hopeful");
    if (Record.First == Text && Record.Last == Text &&
        Record.Date() == _imp_str_literal("16/02/85") &&
        Record.Time() == _imp_str_literal("13.12") &&
        Record.Name == _imp_str_literal("Hopeful"))
      Pass();
    else
      Fail();
    Newlines(2);
  }
  void Longstrings(void) {
    _imp_string X;
    _imp_string Y;
    _imp_string Z;
    _imp_string A[10 /*1:10*/];
    _imp_string S1;
    _imp_string S2;
    int I;
    Printstring(_imp_str_literal("Testing Long resolution"));
    Newline();
    Printstring(_imp_str_literal("-----------------------"));
    Newline();
    X = _imp_str_literal("");
    for (I = 1; I <= 130; I++) X = _imp_join(X, _imp_str_literal("*"));
    X = _imp_join(X, _imp_str_literal(","));
    for (I = 1; I <= 100; I++) X = _imp_join(X, _imp_str_literal("*"));
    if (_imp_resolve(X, Y, _imp_str_literal(","), Z))
      Pass();
    else
      Fail();
    static const _imp_string Snl = _imp_str_literal("\n");
    static const _imp_string Mess1 = _imp_str_literal(
        "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
        "bbbbbbbbbbbb\ncccccccccccccccccccccccccccccccccccccccc\ndddddddddddddd"
        "dddddddddddddddddddddddddd\neeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\n"
        "ffffffffffffffffffffffffffffffffffffffff\n7890123");
    static const _imp_string All1 = _imp_str_literal(
        "\naaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nbbbbbbbbbbbbbbbbbbbbbbbbbb"
        "bbbbbbbbbbbbbb\ncccccccccccccccccccccccccccccccccccccccc\ndddddddddddd"
        "dddddddddddddddddddddddddddd\neeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
        "\nffffffffffffffffffffffffffffffffffffffff\n7890123\n");
    static const _imp_string Mess2 = _imp_str_literal(
        "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
        "bbbbbbbbbbbb\ncccccccccccccccccccccccccccccccccccccccc\ndddddddddddddd"
        "dddddddddddddddddddddddddd\neeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\n"
        "7890123");
    static const _imp_string All2 = _imp_str_literal(
        "\naaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nbbbbbbbbbbbbbbbbbbbbbbbbbb"
        "bbbbbbbbbbbbbb\ncccccccccccccccccccccccccccccccccccccccc\ndddddddddddd"
        "dddddddddddddddddddddddddddd\neeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
        "\n7890123\n");
    Newlines(2);
    Printstring(_imp_str_literal("Testing Long Concatenation"));
    Newline();
    Printstring(_imp_str_literal("--------------------------"));
    Newline();
    if (_imp_join(Snl, _imp_join(Mess1, Snl)) == All1)
      Pass();
    else
      Fail();
    if (_imp_join(Snl, _imp_join(Mess2, Snl)) == All2)
      Pass();
    else
      Fail();
    Newlines(2);
    Printstring(_imp_str_literal(
        "Testing Concatanation to string array with literal index"));
    Newline();
    Printstring(_imp_str_literal(
        "--------------------------------------------------------"));
    Newline();
    A[1] = _imp_str_literal("BUG BUG BUG");
    S1 = _imp_str_literal("Junk");
    S2 = _imp_str_literal(" more junk");
    A[1] = _imp_join(S1, S2);
    if (A[One] == _imp_str_literal("Junk more junk"))
      Pass();
    else
      Fail();
    Newlines(2);
  }
  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);
  }
  Tost();
  Stringstar();
  Recstring();
  Longstrings();
  Selectoutput(0);
  Write(Failures, 1);
  Printstring(_imp_str_literal(" failure(s)"));
  Newline();
  exit(0);
  return (1);
}
