From 7f56d08907ffdd192f4b4898bfb22c1dce8f1cd0 Mon Sep 17 00:00:00 2001 From: Jed Barber Date: Sat, 23 May 2020 15:31:27 +1000 Subject: Added Iterate_By function for custom iteration --- test/graph_tests-search.adb | 69 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) (limited to 'test/graph_tests-search.adb') diff --git a/test/graph_tests-search.adb b/test/graph_tests-search.adb index 17c2cbb..d72ce67 100644 --- a/test/graph_tests-search.adb +++ b/test/graph_tests-search.adb @@ -230,6 +230,75 @@ package body Graph_Tests.Search is end Iterate_Subgraph_Check; + function Iterate_By_Check + return Test_Result + is + function Max + (Nodes : in Graphs.Node_Array) + return Node_ID + is + Current : Node_ID := 1; + begin + for N of Nodes loop + if N > Current then + Current := N; + end if; + end loop; + return Current; + end Max; + + function My_Choices + (Position : in Graphs.Cursor) + return Graphs.Cursor + is + Pick_From : Graphs.Node_Array := Graphs.Children (Position); + begin + if Pick_From'Length = 0 then + return Graphs.No_Element; + end if; + return Graphs.Cursor_To (Position, Max (Pick_From)); + end My_Choices; + + function My_Filter + (Position : in Graphs.Cursor) + return Boolean is + begin + return not Graphs.Has_Element (Position) or else + Graphs.Element (Position) mod 2 = 0; + end My_Filter; + + Index : Positive := 1; + Check_1 : Graphs.Node_Array := (1, 5, 7, 10); + Check_2 : Graphs.Node_Array := (1 => 10); + + Start : Graphs.Cursor := My_Complex_Graph.To_Cursor (1); + begin + for C in My_Complex_Graph.Iterate_By (Start, My_Choices'Unrestricted_Access) loop + if Index not in Check_1'Range or else + Graphs.Element (C) /= Check_1 (Index) + then + return Fail; + else + Index := Index + 1; + end if; + end loop; + + Index := 1; + for C in My_Complex_Graph.Iterate_By + (Start, My_Choices'Unrestricted_Access, My_Filter'Unrestricted_Access) + loop + if Index not in Check_2'Range or else + Graphs.Element (C) /= Check_2 (Index) + then + return Fail; + else + Index := Index + 1; + end if; + end loop; + return Pass; + end Iterate_By_Check; + + end Graph_Tests.Search; -- cgit