diff options
Diffstat (limited to 'test/graph_tests-search.adb')
| -rw-r--r-- | test/graph_tests-search.adb | 69 | 
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;  | 
