diff options
| -rw-r--r-- | src/kompsos.adb | 8 | ||||
| -rw-r--r-- | test/membero.adb | 6 | ||||
| -rw-r--r-- | test/rembero.adb | 42 | ||||
| -rw-r--r-- | tests.gpr | 4 |
4 files changed, 53 insertions, 7 deletions
diff --git a/src/kompsos.adb b/src/kompsos.adb index 2093406..d0005cb 100644 --- a/src/kompsos.adb +++ b/src/kompsos.adb @@ -355,10 +355,12 @@ package body Kompsos is Ptr (This.Engine.Con_World).Rollover; if Ptr (This.Engine.Con_World).Possibles.Length > 0 then declare - Next : constant World := - Call_Lazy (Ptr (This.Engine.Con_World).all, This.Engine.Con_Data); + So_Far : constant World := + ((Possibles => Ptr (This.Engine.Con_World).Possibles, + Engine => (Kind => No_Gen))); begin - This := Next; + Ptr (This.Engine.Con_World).Possibles.Clear; + This := Disjunct (Call_Lazy (So_Far, This.Engine.Con_Data), This); end; elsif Ptr (This.Engine.Con_World).Engine.Kind = No_Gen then This.Engine := (Kind => No_Gen); diff --git a/test/membero.adb b/test/membero.adb index bc51c33..89e7f2e 100644 --- a/test/membero.adb +++ b/test/membero.adb @@ -24,10 +24,10 @@ procedure Membero is renames SU.To_Unbounded_String; - package InKomp is new Kompsos (SU.Unbounded_String); - use InKomp; + package SKomp is new Kompsos (SU.Unbounded_String); + use SKomp; - package Printer is new InKomp.Pretty_Print (SU.To_String); + package Printer is new SKomp.Pretty_Print (SU.To_String); Verse : World := Empty_World; diff --git a/test/rembero.adb b/test/rembero.adb new file mode 100644 index 0000000..e2f9a87 --- /dev/null +++ b/test/rembero.adb @@ -0,0 +1,42 @@ + + +-- Programmed by Jedidiah Barber +-- Licensed under the Sunset License v1.0 + +-- See license.txt for further details + + +with + + Ada.Text_IO, + Kompsos.Pretty_Print; + + +procedure Rembero is + + package TIO renames Ada.Text_IO; + + + package InKomp is new Kompsos (Integer); + use InKomp; + + package Printer is new InKomp.Pretty_Print (Integer'Image); + + Verse : World := Empty_World; + +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.New_Line; + + Verse.Remove (Verse.Fresh ("item") & Verse.Fresh ("list") & Verse.Fresh ("out")); + + TIO.Put_Line (Printer.Image (Verse.Take (10))); + +end Rembero; + + @@ -19,13 +19,15 @@ project Tests is ("ab.adb", "fivesix.adb", "membero.adb", - "pprint.adb"); + "pprint.adb", + "rembero.adb"); package Builder is for Executable ("ab.adb") use "ab"; for Executable ("fivesix.adb") use "fivesix"; for Executable ("membero.adb") use "membero"; for Executable ("pprint.adb") use "pprint"; + for Executable ("rembero.adb") use "rembero"; for Default_Switches ("Ada") use Common.Builder'Default_Switches ("Ada"); |
