summaryrefslogtreecommitdiff
path: root/test/ratnest-tests.adb
diff options
context:
space:
mode:
Diffstat (limited to 'test/ratnest-tests.adb')
-rw-r--r--test/ratnest-tests.adb219
1 files changed, 118 insertions, 101 deletions
diff --git a/test/ratnest-tests.adb b/test/ratnest-tests.adb
index 9a493da..d5c150e 100644
--- a/test/ratnest-tests.adb
+++ b/test/ratnest-tests.adb
@@ -6,7 +6,7 @@ with
Ada.Strings.Maps,
Ada.Exceptions,
Packrat.Lexer.Debug,
- Packrat.Util;
+ Packrat.Util, Ada.Text_IO;
package body Ratnest.Tests is
@@ -251,36 +251,38 @@ package body Ratnest.Tests is
function Join_Check
return Test_Result
is
- One : Slexy.Combinator_Result :=
- Slebug.Create_Result (1, Packrat.Success, "a");
- Two : Slexy.Combinator_Result :=
- Slebug.Create_Result (2, Packrat.Success, "bc");
- Three : Slexy.Combinator_Result :=
- Slebug.Create_Result (3, Packrat.Success, "abc");
-
- Four : Slexy.Combinator_Result :=
- Slebug.Create_Result (3, Packrat.Failure, "xyz");
- Five : Slexy.Combinator_Result :=
- Slebug.Create_Result (4, Packrat.Failure, "axyz");
-
- Six : Slexy.Combinator_Result :=
- Slebug.Create_Result (4, Packrat.Needs_More, "cd");
- Seven : Slexy.Combinator_Result :=
- Slebug.Create_Result (5, Packrat.Needs_More, "acd");
-
- Eight : Slexy.Combinator_Result :=
- Slebug.Create_Result (4, Packrat.Failure, "cd");
-
- Nine : Slexy.Combinator_Result :=
- Slebug.Create_Result (3, Packrat.Optional_More, "abc");
- Ten : Slexy.Combinator_Result :=
- Slebug.Create_Result (5, Packrat.Success, "abcbc");
+ One : Slexy.Combinator_Result :=
+ Slebug.Create_Result (1, Packrat.Success);
+ Two : Slexy.Combinator_Result :=
+ Slebug.Create_Result (3, Packrat.Success);
+ Three : Slexy.Combinator_Result :=
+ Slebug.Create_Result (3, Packrat.Success);
+
+ Four : Slexy.Combinator_Result :=
+ Slebug.Create_Result (4, Packrat.Failure);
+ Five : Slexy.Combinator_Result :=
+ Slebug.Create_Result (4, Packrat.Failure);
+
+ Six : Slexy.Combinator_Result :=
+ Slebug.Create_Result (3, Packrat.Needs_More);
+ Seven : Slexy.Combinator_Result :=
+ Slebug.Create_Result (3, Packrat.Needs_More);
+
+ Eight : Slexy.Combinator_Result :=
+ Slebug.Create_Result (3, Packrat.Failure);
+
+ Nine : Slexy.Combinator_Result :=
+ Slebug.Create_Result (3, Packrat.Optional_More);
+ Ten : Slexy.Combinator_Result :=
+ Slebug.Create_Result (5, Packrat.Success);
+ Eleven : Slexy.Combinator_Result :=
+ Slebug.Create_Result (5, Packrat.Success);
begin
if Slebug.Join (One, Two) /= Three or Slebug.Join (One, Four) /= Five or
Slebug.Join (One, Six) /= Seven or Slebug.Join (Four, Six) /= Four or
Slebug.Join (Five, Two) /= Five or Slebug.Join (Six, Three) /= Eight or
Slebug.Join (Slebug.Empty_Fail, One) /= Slebug.Empty_Fail or
- Slebug.Join (Nine, Two) /= Ten
+ Slebug.Join (Nine, Ten) /= Eleven
then
return Fail;
end if;
@@ -292,9 +294,9 @@ package body Ratnest.Tests is
return Test_Result
is
One : Slexy.Combinator_Result :=
- Slebug.Create_Result (3, Packrat.Success, "abc");
+ Slebug.Create_Result (3, Packrat.Success);
Two : Slexy.Combinator_Result :=
- Slebug.Create_Result (0, Packrat.Failure, "");
+ Slebug.Create_Result (0, Packrat.Failure);
begin
if One = Two or Two /= Slebug.Empty_Fail then
return Fail;
@@ -320,14 +322,14 @@ package body Ratnest.Tests is
Test_Str : String := "aababcabcab";
Result1 : Slexy.Combinator_Result :=
- Slebug.Create_Result (1, Packrat.Failure, "a");
+ Slebug.Create_Result (1, Packrat.Failure);
Result2 : Slexy.Combinator_Result :=
- Slebug.Create_Result (2, Packrat.Needs_More, "ab");
+ Slebug.Create_Result (11, Packrat.Needs_More);
Result3 : Slexy.Combinator_Result :=
- Slebug.Create_Result (3, Packrat.Success, "abc");
+ Slebug.Create_Result (6, Packrat.Success);
Result4 : Slexy.Combinator_Result := Slebug.Empty_Fail;
Result5 : Slexy.Combinator_Result :=
- Slebug.Create_Result (2, Packrat.Failure, "ab");
+ Slebug.Create_Result (3, Packrat.Failure);
begin
if Seq_Abc (Test_Str, 1) /= Result1 or Seq_Abc (Test_Str, 2) /= Result5 or
Seq_Abc (Test_Str, 4) /= Result3 or Seq_Abc (Test_Str, 10) /= Result2 or
@@ -351,15 +353,15 @@ package body Ratnest.Tests is
Test_Str : String := "abaabbaaabbbaaaabbbb";
Result1 : Slexy.Combinator_Result :=
- Slebug.Create_Result (1, Packrat.Failure, "a");
+ Slebug.Create_Result (1, Packrat.Failure);
Result2 : Slexy.Combinator_Result :=
- Slebug.Create_Result (2, Packrat.Success, "aa");
+ Slebug.Create_Result (4, Packrat.Success);
Result3 : Slexy.Combinator_Result :=
- Slebug.Create_Result (1, Packrat.Failure, "b");
+ Slebug.Create_Result (2, Packrat.Failure);
Result4 : Slexy.Combinator_Result :=
- Slebug.Create_Result (2, Packrat.Needs_More, "bb");
+ Slebug.Create_Result (20, Packrat.Needs_More);
Result5 : Slexy.Combinator_Result :=
- Slebug.Create_Result (3, Packrat.Success, "bbb");
+ Slebug.Create_Result (12, Packrat.Success);
Result6 : Slexy.Combinator_Result := Slebug.Empty_Fail;
begin
if Count_2A (Test_Str, 1) /= Result1 or Count_2A (Test_Str, 3) /= Result2 or
@@ -394,22 +396,22 @@ package body Ratnest.Tests is
Test_Str2 : String := "aababcabcab";
Result1 : Slexy.Combinator_Result :=
- Slebug.Create_Result (3, Packrat.Success, "aaa");
+ Slebug.Create_Result (3, Packrat.Success);
Result2 : Slexy.Combinator_Result :=
- Slebug.Create_Result (2, Packrat.Optional_More, "aa");
+ Slebug.Create_Result (13, Packrat.Optional_More);
Result3 : Slexy.Combinator_Result :=
- Slebug.Create_Result (5, Packrat.Success, "aaaaa");
+ Slebug.Create_Result (10, Packrat.Success);
Result4 : Slexy.Combinator_Result :=
- Slebug.Create_Result (3, Packrat.Failure, "aaa");
+ Slebug.Create_Result (3, Packrat.Failure);
Result5 : Slexy.Combinator_Result := Slebug.Empty_Fail;
Result6 : Slexy.Combinator_Result :=
- Slebug.Create_Result (2, Packrat.Needs_More, "aa");
+ Slebug.Create_Result (13, Packrat.Needs_More);
Result7 : Slexy.Combinator_Result :=
- Slebug.Create_Result (0, Packrat.Success, "");
+ Slebug.Create_Result (0, Packrat.Success);
Result8 : Slexy.Combinator_Result :=
- Slebug.Create_Result (6, Packrat.Optional_More, "abcabc");
+ Slebug.Create_Result (9, Packrat.Optional_More);
Result9 : Slexy.Combinator_Result :=
- Slebug.Create_Result (6, Packrat.Needs_More, "abcabc");
+ Slebug.Create_Result (9, Packrat.Needs_More);
begin
if Many_0 (Test_Str, 1) /= Result1 or Many_4 (Test_Str, 1) /= Result4 or
Many_4 (Test_Str, 6) /= Result3 or Many_0 (Test_Str, 4) /= Result7 or
@@ -433,11 +435,11 @@ package body Ratnest.Tests is
Test_Str : String := "aaaabbaaa123aaa";
Result1 : Slexy.Combinator_Result :=
- Slebug.Create_Result (4, Packrat.Failure, "aaaa");
+ Slebug.Create_Result (4, Packrat.Failure);
Result2 : Slexy.Combinator_Result :=
- Slebug.Create_Result (3, Packrat.Success, "aaa");
+ Slebug.Create_Result (9, Packrat.Success);
Result3 : Slexy.Combinator_Result :=
- Slebug.Create_Result (3, Packrat.Needs_More, "aaa");
+ Slebug.Create_Result (15, Packrat.Needs_More);
Result4 : Slexy.Combinator_Result := Slebug.Empty_Fail;
begin
if Many_Until_0 (Test_Str, 1) /= Result1 or
@@ -476,9 +478,9 @@ package body Ratnest.Tests is
Test_Str : String := "abc123456def";
Result1 : Slexy.Combinator_Result :=
- Slebug.Create_Result (1, Packrat.Success, "b");
+ Slebug.Create_Result (2, Packrat.Success);
Result2 : Slexy.Combinator_Result :=
- Slebug.Create_Result (1, Packrat.Success, "3");
+ Slebug.Create_Result (6, Packrat.Success);
Result3 : Slexy.Combinator_Result := Slebug.Empty_Fail;
begin
if Satisfy_123 (Test_Str, 6) /= Result2 or
@@ -520,9 +522,9 @@ package body Ratnest.Tests is
Test_Str : String := "abcde12345";
Result1 : Slexy.Combinator_Result :=
- Slebug.Create_Result (1, Packrat.Success, "c");
+ Slebug.Create_Result (3, Packrat.Success);
Result2 : Slexy.Combinator_Result :=
- Slebug.Create_Result (1, Packrat.Success, "2");
+ Slebug.Create_Result (7, Packrat.Success);
Result3 : Slexy.Combinator_Result := Slebug.Empty_Fail;
begin
if Satisfy_Bcd (Test_Str, 3) /= Result1 or
@@ -546,11 +548,11 @@ package body Ratnest.Tests is
Test_Str : String := "abc1234./5";
Result1 : Slexy.Combinator_Result :=
- Slebug.Create_Result (1, Packrat.Success, "a");
+ Slebug.Create_Result (1, Packrat.Success);
Result2 : Slexy.Combinator_Result :=
- Slebug.Create_Result (1, Packrat.Success, "/");
+ Slebug.Create_Result (9, Packrat.Success);
Result3 : Slexy.Combinator_Result :=
- Slebug.Create_Result (1, Packrat.Success, "4");
+ Slebug.Create_Result (7, Packrat.Success);
Result4 : Slexy.Combinator_Result := Slebug.Empty_Fail;
begin
if Match_A (Test_Str, 1) /= Result1 or
@@ -581,9 +583,9 @@ package body Ratnest.Tests is
Test_Str : String := "abc5678";
Result1 : Slexy.Combinator_Result :=
- Slebug.Create_Result (1, Packrat.Success, "a");
+ Slebug.Create_Result (1, Packrat.Success);
Result2 : Slexy.Combinator_Result :=
- Slebug.Create_Result (1, Packrat.Success, "6");
+ Slebug.Create_Result (5, Packrat.Success);
Result3 : Slexy.Combinator_Result := Slebug.Empty_Fail;
begin
if Match_A (Test_Str, 1) /= Result1 or
@@ -606,13 +608,13 @@ package body Ratnest.Tests is
Test_Str : String := "abcdefabhelloworldab";
Result1 : Slexy.Combinator_Result :=
- Slebug.Create_Result (3, Packrat.Success, "abc");
+ Slebug.Create_Result (3, Packrat.Success);
Result2 : Slexy.Combinator_Result :=
- Slebug.Create_Result (2, Packrat.Needs_More, "ab");
+ Slebug.Create_Result (20, Packrat.Needs_More);
Result3 : Slexy.Combinator_Result :=
- Slebug.Create_Result (5, Packrat.Success, "hello");
+ Slebug.Create_Result (13, Packrat.Success);
Result4 : Slexy.Combinator_Result :=
- Slebug.Create_Result (2, Packrat.Failure, "ab");
+ Slebug.Create_Result (8, Packrat.Failure);
Result5 : Slexy.Combinator_Result := Slebug.Empty_Fail;
begin
if Match_String1 (Test_Str, 1) /= Result1 or
@@ -637,11 +639,11 @@ package body Ratnest.Tests is
Test_Str : String := "abcdefghi";
Result1 : Slexy.Combinator_Result :=
- Slebug.Create_Result (1, Packrat.Success, "b");
+ Slebug.Create_Result (2, Packrat.Success);
Result2 : Slexy.Combinator_Result :=
- Slebug.Create_Result (3, Packrat.Needs_More, "ghi");
+ Slebug.Create_Result (9, Packrat.Needs_More);
Result3 : Slexy.Combinator_Result :=
- Slebug.Create_Result (5, Packrat.Success, "cdefg");
+ Slebug.Create_Result (7, Packrat.Success);
Result4 : Slexy.Combinator_Result := Slebug.Empty_Fail;
begin
if Take_1 (Test_Str, 2) /= Result1 or Take_5 (Test_Str, 7) /= Result2 or
@@ -664,16 +666,16 @@ package body Ratnest.Tests is
Test_Str : String := "abcde,./;'fghi[]=-^563";
Result1 : Slexy.Combinator_Result :=
- Slebug.Create_Result (4, Packrat.Success, "bcde");
+ Slebug.Create_Result (5, Packrat.Success);
Result2 : Slexy.Combinator_Result :=
- Slebug.Create_Result (2, Packrat.Success, "hi");
+ Slebug.Create_Result (14, Packrat.Success);
Result3 : Slexy.Combinator_Result :=
- Slebug.Create_Result (5, Packrat.Success, ",./;'");
+ Slebug.Create_Result (10, Packrat.Success);
Result4 : Slexy.Combinator_Result :=
- Slebug.Create_Result (3, Packrat.Success, "=-^");
+ Slebug.Create_Result (19, Packrat.Success);
Result5 : Slexy.Combinator_Result := Slebug.Empty_Fail;
Result6 : Slexy.Combinator_Result :=
- Slebug.Create_Result (3, Packrat.Optional_More, "563");
+ Slebug.Create_Result (22, Packrat.Optional_More);
begin
if Take_Letters (Test_Str, 2) /= Result1 or
Take_Letters (Test_Str, 13) /= Result2 or
@@ -698,13 +700,13 @@ package body Ratnest.Tests is
Test_Str : String := "abcde12345;;;fghi67";
Result1 : Slexy.Combinator_Result :=
- Slebug.Create_Result (7, Packrat.Success, "de12345");
+ Slebug.Create_Result (10, Packrat.Success);
Result2 : Slexy.Combinator_Result :=
- Slebug.Create_Result (4, Packrat.Optional_More, "hi67");
+ Slebug.Create_Result (19, Packrat.Optional_More);
Result3 : Slexy.Combinator_Result :=
- Slebug.Create_Result (5, Packrat.Success, "abcde");
+ Slebug.Create_Result (5, Packrat.Success);
Result4 : Slexy.Combinator_Result :=
- Slebug.Create_Result (6, Packrat.Success, ";;fghi");
+ Slebug.Create_Result (17, Packrat.Success);
Result5 : Slexy.Combinator_Result := Slebug.Empty_Fail;
begin
if Take_Till_Punch (Test_Str, 4) /= Result1 or
@@ -729,9 +731,9 @@ package body Ratnest.Tests is
Test_Str : String := "abcd" & Latin.LF & "e";
Result1 : Slexy.Combinator_Result :=
- Slebug.Create_Result (1, Packrat.Success, (1 => Latin.LF));
+ Slebug.Create_Result (5, Packrat.Success);
Result2 : Slexy.Combinator_Result :=
- Slebug.Create_Result (1, Packrat.Success, "c");
+ Slebug.Create_Result (3, Packrat.Success);
Result3 : Slexy.Combinator_Result := Slebug.Empty_Fail;
begin
if LF_End (Test_Str, 5) /= Result1 or C_End (Test_Str, 3) /= Result2 or
@@ -752,9 +754,9 @@ package body Ratnest.Tests is
Test_Str : String := "abcde";
Result1 : Slexy.Combinator_Result :=
- Slebug.Create_Result (1, Packrat.Success, "e");
+ Slebug.Create_Result (5, Packrat.Success);
Result2 : Slexy.Combinator_Result :=
- Slebug.Create_Result (1, Packrat.Success, "c");
+ Slebug.Create_Result (3, Packrat.Success);
Result3 : Slexy.Combinator_Result := Slebug.Empty_Fail;
begin
if C_End (Test_Str, 3) /= Result2 or E_End (Test_Str, 5) /= Result1 or
@@ -775,6 +777,7 @@ package body Ratnest.Tests is
is
use type String_Tokens.Token;
use type Packrat.Result_Status;
+ use type Slexy.Component_Result;
function Match_A is new Slexy.Match ('a');
function Match_B is new Slexy.Match ('b');
@@ -783,15 +786,17 @@ package body Ratnest.Tests is
((Match_A'Unrestricted_Access,
Match_B'Unrestricted_Access,
Match_C'Unrestricted_Access));
- procedure My_Stamp is new Slexy.Stamp (One, Seq_Abc);
+ function My_Stamp is new Slexy.Stamp (One, Seq_Abc);
Test_Str1 : String := "abcdefghi";
Test_Str2 : String := "ab";
Context1 : Slexy.Lexer_Context := Slexy.Empty_Context;
Context2 : Slexy.Lexer_Context := Slexy.Empty_Context;
+
+ Comp_Code : Slexy.Component_Result;
begin
- My_Stamp (Test_Str1, Context1);
+ Comp_Code := My_Stamp (Test_Str1, Context1);
if (Slebug.So_Far (Context1).Length /= 1 or else
Slebug.So_Far (Context1).Element (1) /= String_Tokens.Create (One, 1, 3, "abc")) or
Slebug.Position (Context1) /= 4 or Slebug.Status (Context1) /= Packrat.Success or
@@ -799,15 +804,15 @@ package body Ratnest.Tests is
then
return Fail;
end if;
- My_Stamp (Test_Str1, Context1);
+ Comp_Code := My_Stamp (Test_Str1, Context1);
if (Slebug.So_Far (Context1).Length /= 1 or else
Slebug.So_Far (Context1).Element (1) /= String_Tokens.Create (One, 1, 3, "abc")) or
- Slebug.Position (Context1) /= 4 or Slebug.Status (Context1) /= Packrat.Failure or
+ Slebug.Position (Context1) /= 4 or not Slebug.Is_Failure (Comp_Code) or
Slebug.Pass (Context1) /= null
then
return Fail;
end if;
- My_Stamp (Test_Str2, Context2);
+ Comp_Code := My_Stamp (Test_Str2, Context2);
if Slebug.So_Far (Context2).Length /= 0 or
Slebug.Position (Context2) /= 1 or
Slebug.Status (Context2) /= Packrat.Needs_More or
@@ -825,29 +830,31 @@ package body Ratnest.Tests is
use type Packrat.Result_Status;
function Match_Abc is new Slexy.Multimatch ("abc");
- procedure My_Ignore is new Slexy.Ignore (Two, Match_Abc);
+ function My_Ignore is new Slexy.Ignore (Two, Match_Abc);
Test_Str1 : String := "abcdefghi";
Test_Str2 : String := "ab";
Context1 : Slexy.Lexer_Context := Slexy.Empty_Context;
Context2 : Slexy.Lexer_Context := Slexy.Empty_Context;
+
+ Comp_Code : Slexy.Component_Result;
begin
- My_Ignore (Test_Str1, Context1);
+ Comp_Code := My_Ignore (Test_Str1, Context1);
if Slebug.So_Far (Context1).Length /= 0 or
Slebug.Position (Context1) /= 4 or Slebug.Status (Context1) /= Packrat.Success or
Slebug.Pass (Context1) /= null
then
return Fail;
end if;
- My_Ignore (Test_Str1, Context1);
+ Comp_Code := My_Ignore (Test_Str1, Context1);
if Slebug.So_Far (Context1).Length /= 0 or
- Slebug.Position (Context1) /= 4 or Slebug.Status (Context1) /= Packrat.Failure or
+ Slebug.Position (Context1) /= 4 or not Slebug.Is_Failure (Comp_Code) or
Slebug.Pass (Context1) /= null
then
return Fail;
end if;
- My_Ignore (Test_Str2, Context2);
+ Comp_Code := My_Ignore (Test_Str2, Context2);
if Slebug.So_Far (Context2).Length /= 0 or
Slebug.Position (Context2) /= 1 or Slebug.Status (Context2) /= Packrat.Needs_More or
(Slebug.Pass (Context2) = null or else Slebug.Pass (Context2).all /= "ab")
@@ -875,8 +882,8 @@ package body Ratnest.Tests is
function Satisfy_Whitespace is new Swordy.Satisfy (PU.Is_Whitespace);
function Many_Whitespace is new Swordy.Many (Satisfy_Whitespace, 1);
- procedure Stamp_Word is new Swordy.Stamp (Word, Many_Letter);
- procedure Ignore_Whitespace is new Swordy.Ignore (Whitespace, Many_Whitespace);
+ function Stamp_Word is new Swordy.Stamp (Word, Many_Letter);
+ function Ignore_Whitespace is new Swordy.Ignore (Whitespace, Many_Whitespace);
function Scan_Check
@@ -900,6 +907,12 @@ package body Ratnest.Tests is
My_Scan ("", Test_Context);
begin
if Actual_Result1 /= Intended_Result1 or Actual_Result2 /= Intended_Result2 then
+ for T of Actual_Result1 loop
+ Ada.Text_IO.Put_Line (T.Debug_String);
+ end loop;
+ for T of Actual_Result2 loop
+ Ada.Text_IO.Put_Line (T.Debug_String);
+ end loop;
return Fail;
end if;
return Pass;
@@ -1075,13 +1088,14 @@ package body Ratnest.Tests is
Test_Str : String := "()()";
Test_Context : Swordy.Lexer_Context := Swordy.Empty_Context;
- Result : Word_Tokens.Token_Array :=
- My_Scan (Test_Str, Test_Context);
-
Expected_Errors : Packrat.Errors.Error_Info_Array :=
((+"WORD", 1), (+"WHITESPACE", 1));
begin
- return Fail;
+ declare
+ Result : Word_Tokens.Token_Array := My_Scan (Test_Str, Test_Context);
+ begin
+ return Fail;
+ end;
exception
when Msg : Packrat.Lexer_Error =>
if Packrat.Errors.Decode (Except.Exception_Message (Msg)) /= Expected_Errors then
@@ -1102,13 +1116,14 @@ package body Ratnest.Tests is
Test_Str : String := "()()";
Test_Context : Swordy.Lexer_Context := Swordy.Empty_Context;
- Result : Word_Tokens.Token_Array :=
- My_Scan (Test_Str, Test_Context);
-
Expected_Errors : Packrat.Errors.Error_Info_Array :=
((+"WORD", 1), (+"WHITESPACE", 1));
begin
- return Fail;
+ declare
+ Result : Word_Tokens.Token_Array := My_Scan (Test_Str, Test_Context);
+ begin
+ return Fail;
+ end;
exception
when Msg : Packrat.Lexer_Error =>
if Packrat.Errors.Decode (Except.Exception_Message (Msg)) /= Expected_Errors then
@@ -1140,13 +1155,15 @@ package body Ratnest.Tests is
Test_Context : Swordy.Lexer_Context := Swordy.Empty_Context;
- Result : Word_Tokens.Token_Array :=
- My_Scan (Get_Input'Unrestricted_Access, Test_Context);
-
Expected_Errors : Packrat.Errors.Error_Info_Array :=
((+"WORD", 1), (+"WHITESPACE", 1));
begin
- return Fail;
+ declare
+ Result : Word_Tokens.Token_Array :=
+ My_Scan (Get_Input'Unrestricted_Access, Test_Context);
+ begin
+ return Fail;
+ end;
exception
when Msg : Packrat.Lexer_Error =>
if Packrat.Errors.Decode (Except.Exception_Message (Msg)) /= Expected_Errors then