diff options
| author | Jedidiah Barber <contact@jedbarber.id.au> | 2025-11-19 16:51:08 +1300 |
|---|---|---|
| committer | Jedidiah Barber <contact@jedbarber.id.au> | 2025-11-19 16:51:08 +1300 |
| commit | 39a112952e328ce52e5f7b08bf18bbadd3fca03f (patch) | |
| tree | a3ac33e45e4ca643da28930979d38454bda949ff /test | |
| parent | 5c077a81964096daf997949da695500c8ab4a7d3 (diff) | |
Reification, including Term flattening and Treeification
Diffstat (limited to 'test')
| -rw-r--r-- | test/membero.adb | 8 | ||||
| -rw-r--r-- | test/rembero.adb | 26 | ||||
| -rw-r--r-- | test/trees.adb | 71 |
3 files changed, 102 insertions, 3 deletions
diff --git a/test/membero.adb b/test/membero.adb index 89e7f2e..827e6ab 100644 --- a/test/membero.adb +++ b/test/membero.adb @@ -44,8 +44,16 @@ begin Verse.Member (Verse.Fresh ("result") & Test_Item); + TIO.Put_Line ("Raw results:"); TIO.Put_Line (Printer.Image (Verse)); + TIO.New_Line; + + TIO.Put_Line ("Reified results:"); + for Subst of Verse.Take_All loop + TIO.Put_Line (Printer.Image (Resolve_First (Subst, "result"))); + end loop; + end Membero; diff --git a/test/rembero.adb b/test/rembero.adb index e2f9a87..669d42a 100644 --- a/test/rembero.adb +++ b/test/rembero.adb @@ -8,13 +8,15 @@ with + Ada.Characters.Latin_1, Ada.Text_IO, Kompsos.Pretty_Print; procedure Rembero is - package TIO renames Ada.Text_IO; + package Latin renames Ada.Characters.Latin_1; + package TIO renames Ada.Text_IO; package InKomp is new Kompsos (Integer); @@ -29,13 +31,31 @@ begin TIO.Put_Line ("Test program to check if calculating an infinite number of results works."); TIO.New_Line; TIO.Put_Line ("It will call rembero with variables as all arguments."); - TIO.Put_Line ("The first 10 results will be displayed."); + TIO.Put_Line ("The first 5 results will be displayed."); TIO.New_Line; Verse.Remove (Verse.Fresh ("item") & Verse.Fresh ("list") & Verse.Fresh ("out")); - TIO.Put_Line (Printer.Image (Verse.Take (10))); + declare + First_Five : constant State_Array := Verse.Take (5); + begin + TIO.Put_Line ("Raw results:"); + TIO.Put_Line (Printer.Image (First_Five)); + + TIO.New_Line; + + TIO.Put_Line ("Reified results:"); + for Index in First_Five'Range loop + TIO.Put_Line ("#" & Printer.Image (Index) & ":"); + TIO.Put_Line (Latin.HT & "item: " & + Printer.Image (Resolve_First (First_Five (Index), "item"))); + TIO.Put_Line (Latin.HT & "list: " & + Printer.Image (Resolve_First (First_Five (Index), "list"))); + TIO.Put_Line (Latin.HT & "out: " & + Printer.Image (Resolve_First (First_Five (Index), "out"))); + end loop; + end; end Rembero; diff --git a/test/trees.adb b/test/trees.adb new file mode 100644 index 0000000..7f199ad --- /dev/null +++ b/test/trees.adb @@ -0,0 +1,71 @@ + + +-- Programmed by Jedidiah Barber +-- Licensed under the Sunset License v1.0 + +-- See license.txt for further details + + +with + + Ada.Containers.Multiway_Trees, + Ada.Text_IO, + Kompsos.Advanced_Reify, + Kompsos.Pretty_Print; + + +procedure Trees is + + package TIO renames Ada.Text_IO; + + + package InKomp is new Kompsos (Integer); + use InKomp; + + + type Integer_Array is array (Positive range <>) of Integer; + + function Var_Minus_One + (Item : in Term) + return Integer is + begin + return -1; + end Var_Minus_One; + + package Int_Trees is new Ada.Containers.Multiway_Trees (Integer); + + package Reify is new InKomp.Advanced_Reify + (Element_Array => Integer_Array, + Null_Element => 0, + Variable_Convert => Var_Minus_One, + Element_Trees => Int_Trees); + + + package Printer is new InKomp.Pretty_Print (Integer'Image); + + + Test_Item : constant Term := T (T (T (1) & T (2) & T (3)) & T (T (10) & T (20))); + + Result : constant Int_Trees.Tree := Reify.To_Tree (Test_Item); + +begin + + TIO.Put_Line ("Test term is " & Printer.Image (Test_Item)); + + TIO.New_Line; + + TIO.Put_Line ("Root has " & + Printer.Image (Integer (Int_Trees.Child_Count (Result.Root))) & " children."); + + for Child in Result.Iterate_Children (Result.Root) loop + TIO.Put ("Child has " & + Printer.Image (Integer (Int_Trees.Child_Count (Child))) & " children:"); + for Child_Child in Result.Iterate_Children (Child) loop + TIO.Put (" " & Printer.Image (Int_Trees.Element (Child_Child))); + end loop; + TIO.New_Line; + end loop; + +end Trees; + + |
