summaryrefslogtreecommitdiff
path: root/test/graph_tests-search.adb
diff options
context:
space:
mode:
Diffstat (limited to 'test/graph_tests-search.adb')
-rw-r--r--test/graph_tests-search.adb69
1 files changed, 69 insertions, 0 deletions
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;