MODULE StringTest;
FROM Strings IMPORT
  Assign, Insert, Delete, Pos, Copy, Concat, Length, CompareStr;
FROM Test IMPORT fail, finished;

(* Asserts condition or fails with code. *)
PROCEDURE A(cond: BOOLEAN; code: INTEGER);
BEGIN
  IF NOT cond THEN fail(code) END
END A;

VAR
  small: ARRAY [0..3] OF CHAR;
  big: ARRAY [0..99] OF CHAR;
BEGIN
  (* CompareStr *)
  A(CompareStr("ablaze", "ablaze") = 0, 1);
  A(CompareStr("ablaze", "abloom") < 0, 2);
  A(CompareStr("abloom", "ablaze") > 0, 3);
  A(CompareStr("abloom", "abloom") = 0, 4);

  (* Assign, Insert, Delete *)
  Assign("obsequiosity", small);
  A(CompareStr("obsequiosity", small) > 0, 11H);
  Assign("obsequiosity", big);
  A(CompareStr("obsequiosity", big) = 0, 12H);
  A(big[11] = 'y', 13H);
  A(big[11] # 0C, 14H);
  A(big[12] # 'y', 15H);
  A(big[12] = 0C, 16H);
  Insert(" omnihuman", big, 9);
  A(CompareStr("obsequios omnihumanity", big) = 0, 17H);
  Delete(big, 6, 15);
  A(CompareStr("obsequy", big) = 0, 18H);

  (* Pos, Concat *)
  Assign("Now is the time for all good men to come...", big);
  A(Pos("w", big) = 2, 21H);
  A(Pos("t", big) = 7, 22H);
  A(Pos("ti", big) = 11, 23H);
  A(Pos("men", big) = 29, 24H);
  A(Pos("women", big) > 42, 25H);
  Copy(big, 29, 2, small);
  A(CompareStr("me", small) = 0, 26H);

  (* Concat, Length *)
  Concat("pictorial", "ist", big);
  A(CompareStr("pictorialist", big) = 0, 31H);
  A(Length(big) = 12, 32H);
  Concat("zit", "her", small);
  A(CompareStr("zither", small) > 0, 33H);
  A(Length(small) < 5, 34H);

  finished;
END StringTest.