summaryrefslogtreecommitdiff
path: root/test/rat_tests-parsers.adb
diff options
context:
space:
mode:
Diffstat (limited to 'test/rat_tests-parsers.adb')
-rw-r--r--test/rat_tests-parsers.adb106
1 files changed, 106 insertions, 0 deletions
diff --git a/test/rat_tests-parsers.adb b/test/rat_tests-parsers.adb
index 2178097..8d54168 100644
--- a/test/rat_tests-parsers.adb
+++ b/test/rat_tests-parsers.adb
@@ -1000,6 +1000,66 @@ package body Rat_Tests.Parsers is
+ function Parse_Once_Check
+ return Test_Result
+ is
+ pragma Polling (On);
+
+ Input : String := "1+2+3";
+
+ use Left_Sums;
+ Sum_P : Parser_Tokens.Token_Type := Parser_Tokens.Create (Sum, 1, "+");
+ Sum_E : Parser_Tokens.Token_Type := Parser_Tokens.Create (Sum, 1, "");
+ Number_1 : Parser_Tokens.Token_Type := Parser_Tokens.Create (Number, 1, "1");
+ Number_2 : Parser_Tokens.Token_Type := Parser_Tokens.Create (Number, 3, "2");
+ Number_3 : Parser_Tokens.Token_Type := Parser_Tokens.Create (Number, 5, "3");
+
+ Expected_Graph, Actual_Graph : Parser_Result;
+ begin
+ Expected_Graph.Connect ((Sum_E, 1),
+ (1 => (Number_1, 1)));
+ Expected_Graph.Connect ((Sum_P, 3),
+ ((Sum_E, 1), (Number_2, 3)));
+ Expected_Graph.Connect ((Sum_P, 5),
+ ((Sum_P, 3), (Number_3, 5)));
+
+ Expected_Graph.Set_Root ((1 => (Sum_P, 5)));
+ Add_Parse_Once.Reset;
+
+ Actual_Graph := Add_Parse_Once.Parse (Input);
+ if Actual_Graph.Isomorphic (Expected_Graph) then
+ return Pass;
+ else
+ return Fail;
+ end if;
+ end Parse_Once_Check;
+
+
+ function Parse_Once_Exception_Check
+ return Test_Result
+ is
+ pragma Polling (On);
+ use type Packrat.Errors.Error_Info_Array;
+ Input : String := "1 + 2";
+ Expected_Errors : Packrat.Errors.Error_Info_Array :=
+ ((+"PLUS_ERR", 2), (+"EOF_ERR", 2));
+ Result_Graph : Add_Errors.Parser_Result;
+ begin
+ Adder_Parse_Once.Reset;
+ Result_Graph := Adder_Parse_Once.Parse (Input);
+ return Fail;
+ exception
+ when Msg : Packrat.Parser_Error =>
+ if Packrat.Errors.Decode (Except.Exception_Message (Msg)) /= Expected_Errors then
+ return Fail;
+ end if;
+ return Pass;
+ end Parse_Once_Exception_Check;
+
+
+
+
+
function Default_Result_Check
return Test_Result
is
@@ -1015,6 +1075,52 @@ package body Rat_Tests.Parsers is
end Default_Result_Check;
+ function Left_Recursion_Check
+ return Test_Result
+ is
+ pragma Polling (On);
+
+ Input : String := "1-2-3";
+
+ use Left_Sums;
+ Sum_M : Parser_Tokens.Token_Type := Parser_Tokens.Create (Sum, 1, "-");
+ Sum_E : Parser_Tokens.Token_Type := Parser_Tokens.Create (Sum, 1, "");
+ Number_1 : Parser_Tokens.Token_Type := Parser_Tokens.Create (Number, 1, "1");
+ Number_2 : Parser_Tokens.Token_Type := Parser_Tokens.Create (Number, 3, "2");
+ Number_3 : Parser_Tokens.Token_Type := Parser_Tokens.Create (Number, 5, "3");
+
+ Expected_Graph, Actual_Graph : Parser_Result;
+ begin
+ Expected_Graph.Connect ((Sum_E, 1),
+ (1 => (Number_1, 1)));
+ Expected_Graph.Connect ((Sum_M, 3),
+ ((Sum_E, 1), (Number_2, 3)));
+ Expected_Graph.Connect ((Sum_M, 5),
+ ((Sum_M, 3), (Number_3, 5)));
+
+ Expected_Graph.Set_Root ((1 => (Sum_M, 5)));
+ Sum_Parse_Once.Reset;
+
+ Actual_Graph := Sum_Parse_Once.Parse (Input);
+ if Actual_Graph.Isomorphic (Expected_Graph) then
+ return Pass;
+ else
+ return Fail;
+ end if;
+ end Left_Recursion_Check;
+
+
+
+
+
+begin
+
+
+ Sum_Redir.Set (Sum'Access);
+ Add_Redir.Set (Add'Access);
+ Adder_Redir.Set (Sumer'Access);
+
+
end Rat_Tests.Parsers;