123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- MODULE TestStrings; (** AUTHOR "staubesv"; PURPOSE "Testbed for Strings.Mod"; *)
- IMPORT
- SYSTEM,
- Commands, Strings, KernelLog;
- CONST
- Step = MAX(LONGINT) DIV 5;
- PROCEDURE TestIntegerConversion*(context : Commands.Context);
- VAR i, temp : LONGINT; string : ARRAY 16 OF CHAR;
- BEGIN
- context.out.String("Test integer <-> string conversion... "); context.out.Update;
- i := MIN(LONGINT);
- WHILE (i < MAX(LONGINT)) DO
- Strings.IntToStr(i, string);
- Strings.StrToInt(string, temp);
- ASSERT(i = temp);
- INC(i);
- IF (i MOD Step = 0) THEN
- IF (i < 0) THEN
- context.out.Int(ENTIER(100* ((MAX(LONGINT) + i) / MAX(LONGINT) / 2)), 0);
- ELSE
- context.out.Int(ENTIER(100* (i / MAX(LONGINT) / 2)) + 50, 0);
- END;
- context.out.String("% "); context.out.Update;
- END;
- END;
- Strings.IntToStr(MAX(LONGINT), string);
- Strings.StrToInt(string, temp);
- ASSERT(temp = MAX(LONGINT));
- context.out.String("100% done."); context.out.Ln;
- END TestIntegerConversion;
- PROCEDURE TestHexConversion*(context : Commands.Context);
- VAR i, val : LONGINT; res: WORD; string : ARRAY 16 OF CHAR;
- BEGIN
- context.out.String("Test hex <-> string conversion... "); context.out.Update;
- i := MIN(LONGINT);
- WHILE (i < MAX(LONGINT)) DO
- Strings.IntToHexStr(i, 8, string);
- Strings.HexStrToInt(string, val, res);
- IF (res # Strings.Ok) OR (i # val) THEN
- context.out.String("Error for string "); context.out.String(string); context.out.Ln;
- END;
- ASSERT((res = Strings.Ok) & (i = val));
- INC(i);
- IF (i MOD Step = 0) THEN
- IF (i < 0) THEN
- context.out.Int(ENTIER(100* ((MAX(LONGINT) + i) / MAX(LONGINT) / 2)), 0);
- ELSE
- context.out.Int(ENTIER(100* (i / MAX(LONGINT) / 2)) + 50, 0);
- END;
- context.out.String("% "); context.out.Update;
- END;
- END;
- Strings.IntToHexStr(i, 8, string);
- Strings.HexStrToInt(string, val, res);
- ASSERT((res = Strings.Ok) & (i = val));
- context.out.String("100% done."); context.out.Ln;
- END TestHexConversion;
- PROCEDURE TestNegativeHexConversion*(context : Commands.Context);
- VAR i : LONGINT;
- PROCEDURE Test(number : HUGEINT);
- VAR string, signedString : ARRAY 16 OF CHAR; val, idx, res : LONGINT;
- BEGIN
- Strings.IntToHexStr(number, 8, string);
- signedString[0] := "-";
- idx := 0; WHILE (string[idx] # 0X) DO signedString[idx + 1] := string[idx]; INC(idx); END;
- signedString[idx + 1] := 0X;
- Strings.HexStrToInt(signedString, val, res);
- IF (res # Strings.Ok) OR (-i # val) THEN
- context.out.String("Error for string "); context.out.String(string); context.out.Ln;
- END;
- ASSERT((res = Strings.Ok) & (-i = val));
- END Test;
- PROCEDURE TestMaxLongintPlus1;
- VAR string : ARRAY 16 OF CHAR; val : LONGINT; res: WORD;
- BEGIN
- string := "-80000000";
- Strings.HexStrToInt(string, val, res);
- ASSERT((res = Strings.Ok) & (val = MIN(LONGINT)));
- END TestMaxLongintPlus1;
- BEGIN
- context.out.String("Test negative hex <-> string conversion... "); context.out.Update;
- i := 0;
- WHILE (i < MAX(LONGINT)) DO
- Test(i);
- INC(i);
- IF (i MOD Step = 0) THEN
- IF (i < 0) THEN
- context.out.Int(ENTIER(100* ((MAX(LONGINT) + i) / MAX(LONGINT) / 2)), 0);
- ELSE
- context.out.Int(ENTIER(100* (i / MAX(LONGINT) / 2)) + 50, 0);
- END;
- context.out.String("% "); context.out.Update;
- END;
- END;
- Test(MAX(LONGINT));
- TestMaxLongintPlus1;
- context.out.String("100% done."); context.out.Ln;
- END TestNegativeHexConversion;
- PROCEDURE TestSetConversion*(context : Commands.Context);
- VAR i : LONGINT; temp : SET; string : ARRAY 64 OF CHAR;
- BEGIN
- context.out.String("Test set <-> string conversion... "); context.out.Update;
- i := MIN(LONGINT);
- WHILE (i < MAX(LONGINT)) DO
- Strings.SetToStr(SYSTEM.VAL(SET, i), string);
- Strings.StrToSet(string, temp);
- IF (SYSTEM.VAL(SET, i) # temp) THEN
- KernelLog.Bits(SYSTEM.VAL(SET, i), 0, 32); KernelLog.String(" # "); KernelLog.Bits(temp, 0, 32); KernelLog.Ln;
- END;
- ASSERT(SYSTEM.VAL(SET, i) = temp);
- INC(i);
- IF (i MOD Step = 0) THEN
- IF (i < 0) THEN
- context.out.Int(ENTIER(100* ((MAX(LONGINT) + i) / MAX(LONGINT) / 2)), 0);
- ELSE
- context.out.Int(ENTIER(100* (i / MAX(LONGINT) / 2)) + 50, 0);
- END;
- context.out.String("% "); context.out.Update;
- END;
- END;
- Strings.SetToStr(SYSTEM.VAL(SET, MAX(LONGINT)), string);
- Strings.StrToSet(string, temp);
- ASSERT(SYSTEM.VAL(SET, MAX(LONGINT)) = temp);
- context.out.String("100% done."); context.out.Ln;
- END TestSetConversion;
- PROCEDURE TestSplitJoin*(context : Commands.Context);
- VAR string : ARRAY 1024 OF CHAR; separator : CHAR; sa : Strings.StringArray; s : Strings.String; i : LONGINT;
- BEGIN
- separator := 0X;
- context.arg.SkipWhitespace; context.arg.String(string);
- context.arg.SkipWhitespace; context.arg.Char(separator);
- context.out.String("String: '"); context.out.String(string); context.out.String("', separator: ");
- IF (separator # 0X) THEN context.out.Char(separator); ELSE context.out.String("none"); END;
- context.out.Ln;
- sa := Strings.Split(string, separator);
- FOR i := 0 TO LEN(sa)-1 DO
- context.out.Int(i, 2); context.out.String(": ");
- context.out.String(sa[i]^);
- context.out.Ln;
- END;
- s := Strings.Join(sa, 0, LEN(sa)-1, separator);
- context.out.String("Joined string: '"); context.out.String(s^); context.out.String("'"); context.out.Ln;
- context.out.String("Success: ");
- IF (s^ = string) THEN context.out.String("Yes"); ELSE context.out.String("No"); END;
- context.out.Ln;
- END TestSplitJoin;
- PROCEDURE PerformTests*(context : Commands.Context);
- BEGIN
- TestIntegerConversion(context);
- TestHexConversion(context);
- TestNegativeHexConversion(context);
- TestSetConversion(context);
- END PerformTests;
- END TestStrings.
- TestStrings.TestIntegerConversion ~
- TestStrings.TestHexConversion ~
- TestStrings.TestNegativeHexConversion ~
- TestStrings.TestSetConversion ~
- TestStrings.TestSplitJoin A:/Test/HelloWord/Test.Mod / ~
- TestStrings.PerformTests ~
- System.Free TestStrings ~
|