From 82a42674ba64c6386152a5910fd7345a92b135e8 Mon Sep 17 00:00:00 2001 From: Jed Barber Date: Thu, 21 May 2020 21:24:25 +1000 Subject: Tests complete, minor bugs fixed --- test/graph_tests-search.adb | 231 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 231 insertions(+) create mode 100644 test/graph_tests-search.adb (limited to 'test/graph_tests-search.adb') diff --git a/test/graph_tests-search.adb b/test/graph_tests-search.adb new file mode 100644 index 0000000..54b51a4 --- /dev/null +++ b/test/graph_tests-search.adb @@ -0,0 +1,231 @@ + + +package body Graph_Tests.Search is + + + function Find_Check + return Test_Result + is + function Node_Perm is new Is_Permutation (Node_ID, Positive, Graphs.Node_Array); + function Edge_Perm is new Is_Permutation (Graphs.Edge_Type, Positive, Graphs.Edge_Array); + Copy_Graph : Graphs.Graph := My_Complex_Graph; + begin + if not Node_Perm (Copy_Graph.Find (Node_Label (+"LOL")), No_Nodes) or + not Edge_Perm (Copy_Graph.Find (Edge_Label (+"KEK")), No_Edges) + then + return Fail; + end if; + Copy_Graph.Append_Label (2, Node_Label (+"LOL")); + Copy_Graph.Append_Label (5, Node_Label (+"LOL")); + Copy_Graph.Append_Label ((6, 5, 6), Edge_Label (+"KEK")); + Copy_Graph.Append_Label ((7, 5, 7), Edge_Label (+"KEK")); + Copy_Graph.Append_Label (10, Node_Label (+"KEK")); + Copy_Graph.Append_Label ((4, 2, 4), Edge_Label (+"LOL")); + if not Node_Perm (Copy_Graph.Find (Node_Label (+"LOL")), (2, 5)) or + not Edge_Perm (Copy_Graph.Find (Edge_Label (+"KEK")), ((6, 5, 6), (7, 5, 7))) + then + return Fail; + end if; + return Pass; + end Find_Check; + + + function Find_Subgraph_Check + return Test_Result + is + function Node_Perm is new Is_Permutation (Node_ID, Positive, Graphs.Node_Array); + function Edge_Perm is new Is_Permutation (Graphs.Edge_Type, Positive, Graphs.Edge_Array); + Copy_Graph : Graphs.Graph := My_Complex_Graph; + Position : Graphs.Cursor := Copy_Graph.To_Cursor (7); + begin + if not Node_Perm (Graphs.Find_In_Subgraph (Position, Node_Label (+"LOL")), No_Nodes) or + not Edge_Perm (Graphs.Find_In_Subgraph (Position, Edge_Label (+"KEK")), No_Edges) + then + return Fail; + end if; + Copy_Graph.Append_Label (2, Node_Label (+"LOL")); + Copy_Graph.Append_Label (5, Node_Label (+"LOL")); + Copy_Graph.Append_Label ((6, 5, 6), Edge_Label (+"KEK")); + Copy_Graph.Append_Label ((7, 5, 7), Edge_Label (+"KEK")); + Copy_Graph.Append_Label (10, Node_Label (+"KEK")); + Copy_Graph.Append_Label ((4, 2, 4), Edge_Label (+"LOL")); + if not Node_Perm (Graphs.Find_In_Subgraph (Position, Node_Label (+"LOL")), (1 => 5)) or + not Edge_Perm (Graphs.Find_In_Subgraph (Position, Edge_Label (+"KEK")), + ((6, 5, 6), (7, 5, 7))) + then + return Fail; + end if; + return Pass; + end Find_Subgraph_Check; + + + function Contains_Check + return Test_Result + is + Copy_Graph : Graphs.Graph := My_Nonempty_Graph; + begin + 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")) + 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")) + then + return Fail; + end if; + return Pass; + end Contains_Check; + + + function Contains_Label_Check + return Test_Result + is + Copy_Graph : Graphs.Graph := My_Nonempty_Graph; + begin + if Copy_Graph.Contains_Label (Node_Label (+"ABC")) or + Copy_Graph.Contains_Label (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_Label (Node_Label (+"ABC")) or + not Copy_Graph.Contains_Label (Edge_Label (+"DEF")) + then + return Fail; + end if; + return Pass; + end Contains_Label_Check; + + + function Contains_Subgraph_Check + return Test_Result + is + Copy_Graph : Graphs.Graph := My_Complex_Graph; + 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, 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_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")) + 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")) + then + return Fail; + end if; + return Pass; + end Contains_Subgraph_Check; + + + function Contains_Label_Subgraph_Check + return Test_Result + is + Copy_Graph : Graphs.Graph := My_Complex_Graph; + Branch_1 : Graphs.Cursor := Copy_Graph.To_Cursor (5); + Branch_2 : Graphs.Cursor := Copy_Graph.To_Cursor (2); + begin + if Graphs.Contains_Label_In_Subgraph (Branch_1, Node_Label (+"ABC")) or + Graphs.Contains_Label_In_Subgraph (Branch_1, Edge_Label (+"DEF")) or + Graphs.Contains_Label_In_Subgraph (Branch_2, Node_Label (+"ABC")) or + Graphs.Contains_Label_In_Subgraph (Branch_2, Edge_Label (+"DEF")) + then + return Fail; + end if; + Copy_Graph.Append_Label (5, Node_Label (+"ABC")); + Copy_Graph.Append_Label ((8, 6, 8), Edge_Label (+"DEF")); + if not Graphs.Contains_Label_In_Subgraph (Branch_1, Node_Label (+"ABC")) or + not Graphs.Contains_Label_In_Subgraph (Branch_1, Edge_Label (+"DEF")) or + Graphs.Contains_Label_In_Subgraph (Branch_2, Node_Label (+"ABC")) or + Graphs.Contains_Label_In_Subgraph (Branch_2, Edge_Label (+"DEF")) + then + return Fail; + end if; + return Pass; + end Contains_Label_Subgraph_Check; + + + function Iterate_Check + return Test_Result + is + Index : Positive := 1; + Check_1 : Graphs.Node_Array := (2, 5, 9, 11); + Check_2 : Graphs.Node_Array := (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); + begin + for C in My_Nonempty_Graph.Iterate 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 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_Check; + + + function Iterate_Subgraph_Check + return Test_Result + is + Index : Positive := 1; + Check : Graphs.Node_Array := (5, 6, 7, 8, 9, 10); + Position_1 : Graphs.Cursor := My_Complex_Graph.To_Cursor (5); + Position_2 : Graphs.Cursor := My_Complex_Graph.To_Cursor (7); + begin + for C in My_Complex_Graph.Iterate_Subgraph (Position_1) loop + if Index not in Check'Range or else + Graphs.Element (C) /= Check (Index) + then + return Fail; + else + Index := Index + 1; + end if; + end loop; + Index := 1; + for C in My_Complex_Graph.Iterate_Subgraph (Position_2) loop + if Index not in Check'Range or else + Graphs.Element (C) /= Check (Index) + then + return Fail; + else + Index := Index + 1; + end if; + end loop; + return Pass; + end Iterate_Subgraph_Check; + + +end Graph_Tests.Search; + + -- cgit