From dd9121ec8d91784e6cea4e71cd1fe5c3735d81d8 Mon Sep 17 00:00:00 2001 From: Jed Barber Date: Fri, 25 Dec 2020 22:13:59 +1100 Subject: Parser tests, left recursion test --- test/rat_tests-parsers.adb | 106 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) (limited to 'test/rat_tests-parsers.adb') 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; -- cgit