From 56947ad5bbf0df7d35111010d0d5b7b3c19329cf Mon Sep 17 00:00:00 2001 From: Jed Barber Date: Wed, 27 May 2020 17:51:42 +1000 Subject: Removed Follow, Path; Added LNode, LEdge, Node_Path, Edge_Path, Contains functions for Paths --- test/graph_tests-search.adb | 83 +++++++++++++++++++++++++++++++++------------ 1 file changed, 62 insertions(+), 21 deletions(-) (limited to 'test/graph_tests-search.adb') diff --git a/test/graph_tests-search.adb b/test/graph_tests-search.adb index d72ce67..9933c7d 100644 --- a/test/graph_tests-search.adb +++ b/test/graph_tests-search.adb @@ -64,23 +64,21 @@ package body Graph_Tests.Search is is Copy_Graph : Graphs.Graph := My_Nonempty_Graph; begin - if Copy_Graph.Contains (Graphs.No_Node) or - Copy_Graph.Contains (Graphs.No_Node, Node_Label (+"ABC")) or - Copy_Graph.Contains (Node_ID (20)) or + if Copy_Graph.Contains (Node_ID (20)) or not Copy_Graph.Contains (Node_ID (2)) or Copy_Graph.Contains (Edge_ID (20)) or not Copy_Graph.Contains (Edge_ID (7)) or - Copy_Graph.Contains ((99, 99, 99)) or - not Copy_Graph.Contains ((7, 2, 5)) or - Copy_Graph.Contains (2, Node_Label (+"ABC")) or - Copy_Graph.Contains ((7, 2, 5), Edge_Label (+"DEF")) + Copy_Graph.Contains (Graphs.Edge_Type'(99, 99, 99)) or + not Copy_Graph.Contains (Graphs.Edge_Type'(7, 2, 5)) or + Copy_Graph.Contains (Graphs.Labeled_Node_Type'(2, Node_Label (+"ABC"))) or + Copy_Graph.Contains (Graphs.Labeled_Edge_Type'((7, 2, 5), Edge_Label (+"DEF"))) then return Fail; end if; Copy_Graph.Append_Label (2, Node_Label (+"ABC")); Copy_Graph.Append_Label ((7, 2, 5), Edge_Label (+"DEF")); - if not Copy_Graph.Contains (2, Node_Label (+"ABC")) or - not Copy_Graph.Contains ((7, 2, 5), Edge_Label (+"DEF")) + if not Copy_Graph.Contains (Graphs.Labeled_Node_Type'(2, Node_Label (+"ABC"))) or + not Copy_Graph.Contains (Graphs.Labeled_Edge_Type'((7, 2, 5), Edge_Label (+"DEF"))) then return Fail; end if; @@ -116,25 +114,29 @@ package body Graph_Tests.Search is Branch_1 : Graphs.Cursor := Copy_Graph.To_Cursor (5); Branch_2 : Graphs.Cursor := Copy_Graph.To_Cursor (2); begin - if Graphs.Contains_In_Subgraph (Branch_1, Graphs.No_Node) or - Graphs.Contains_In_Subgraph (Branch_1, Graphs.No_Node, Node_Label (+"ABC")) or - Graphs.Contains_In_Subgraph (Branch_1, Node_ID (2)) or + if Graphs.Contains_In_Subgraph (Branch_1, Node_ID (2)) or not Graphs.Contains_In_Subgraph (Branch_1, Node_ID (10)) or - Graphs.Contains_In_Subgraph (Branch_1, (2, 2, 3)) or - not Graphs.Contains_In_Subgraph (Branch_1, (13, 7, 5)) or + Graphs.Contains_In_Subgraph (Branch_1, Graphs.Edge_Type'(2, 2, 3)) or + not Graphs.Contains_In_Subgraph (Branch_1, Graphs.Edge_Type'(13, 7, 5)) or Graphs.Contains_In_Subgraph (Branch_2, Node_ID (99)) or - Graphs.Contains_In_Subgraph (Branch_2, (1, 99, 99)) or - Graphs.Contains_In_Subgraph (Branch_1, Node_ID (5), Node_Label (+"ABC")) or - Graphs.Contains_In_Subgraph (Branch_1, (13, 7, 5), Edge_Label (+"DEF")) + Graphs.Contains_In_Subgraph (Branch_2, Graphs.Edge_Type'(1, 99, 99)) or + Graphs.Contains_In_Subgraph + (Branch_1, Graphs.Labeled_Node_Type'(Node_ID (5), Node_Label (+"ABC"))) or + Graphs.Contains_In_Subgraph + (Branch_1, Graphs.Labeled_Edge_Type'((13, 7, 5), Edge_Label (+"DEF"))) then return Fail; end if; Copy_Graph.Append_Label (5, Node_Label (+"ABC")); Copy_Graph.Append_Label ((13, 7, 5), Edge_Label (+"DEF")); - if Graphs.Contains_In_Subgraph (Branch_2, Node_ID (5), Node_Label (+"ABC")) or - not Graphs.Contains_In_Subgraph (Branch_1, Node_ID (5), Node_Label (+"ABC")) or - Graphs.Contains_In_Subgraph (Branch_2, (13, 7, 5), Edge_Label (+"DEF")) or - not Graphs.Contains_In_Subgraph (Branch_1, (13, 7, 5), Edge_Label (+"DEF")) + if Graphs.Contains_In_Subgraph + (Branch_2, Graphs.Labeled_Node_Type'(Node_ID (5), Node_Label (+"ABC"))) or + not Graphs.Contains_In_Subgraph + (Branch_1, Graphs.Labeled_Node_Type'(Node_ID (5), Node_Label (+"ABC"))) or + Graphs.Contains_In_Subgraph + (Branch_2, Graphs.Labeled_Edge_Type'((13, 7, 5), Edge_Label (+"DEF"))) or + not Graphs.Contains_In_Subgraph + (Branch_1, Graphs.Labeled_Edge_Type'((13, 7, 5), Edge_Label (+"DEF"))) then return Fail; end if; @@ -169,6 +171,45 @@ package body Graph_Tests.Search is end Contains_Label_Subgraph_Check; + function Contains_Path_Check + return Test_Result + is + Node_Path_In : Graphs.Node_Path := (1, 2, 3); + Node_Path_Out : Graphs.Node_Path := (87, 88, 89, 100); + Edge_Path_In : Graphs.Edge_Path := ((5, 1, 5), (6, 5, 6), (8, 6, 8)); + Edge_Path_Out : Graphs.Edge_Path := ((1, 1, 4), (5, 4, 7)); + begin + if not My_Complex_Graph.Contains_Path (Node_Path_In) or + My_Complex_Graph.Contains_Path (Node_Path_Out) or + not My_Complex_Graph.Contains_Path (Edge_Path_In) or + My_Complex_Graph.Contains_Path (Edge_Path_Out) + then + return Fail; + end if; + return Pass; + end Contains_Path_Check; + + + function Contains_Path_Subgraph_Check + return Test_Result + is + Node_Path_In : Graphs.Node_Path := (5, 7, 7, 5); + Node_Path_Out : Graphs.Node_Path := (1, 2, 3); + Edge_Path_In : Graphs.Edge_Path := ((6, 5, 6), (8, 6, 8)); + Edge_Path_Out : Graphs.Edge_Path := ((1, 1, 2), (2, 2, 3)); + Position : Graphs.Cursor := My_Complex_Graph.To_Cursor (5); + begin + if not Graphs.Contains_Path_In_Subgraph (Position, Node_Path_In) or + Graphs.Contains_Path_In_Subgraph (Position, Node_Path_Out) or + not Graphs.Contains_Path_In_Subgraph (Position, Edge_Path_In) or + Graphs.Contains_Path_In_Subgraph (Position, Edge_Path_Out) + then + return Fail; + end if; + return Pass; + end Contains_Path_Subgraph_Check; + + function Iterate_Check return Test_Result is -- cgit