From 6cf9a74df73b87096603b0a01a7baf276c007edd Mon Sep 17 00:00:00 2001 From: David Rosca <roscadav@fit.cvut.cz> Date: Wed, 4 Mar 2015 22:42:47 +0100 Subject: [PATCH] GraphTest: Modify to test all representations Also edited to use ASSERT_EQUAL for better fail messages --- alib2data/test-src/graph/GraphTest.cpp | 365 ++++++++++++++----------- alib2data/test-src/graph/GraphTest.h | 14 + 2 files changed, 223 insertions(+), 156 deletions(-) diff --git a/alib2data/test-src/graph/GraphTest.cpp b/alib2data/test-src/graph/GraphTest.cpp index 3fe1087d1f..4a98a486f3 100644 --- a/alib2data/test-src/graph/GraphTest.cpp +++ b/alib2data/test-src/graph/GraphTest.cpp @@ -3,12 +3,11 @@ #include "sax/SaxParseInterface.h" #include "sax/SaxComposeInterface.h" -#include "graph/directed/DirectedGraph.h" -#include "graph/undirected/UndirectedGraph.h" - #include "factory/XmlDataFactory.hpp" #include "factory/StringDataFactory.hpp" +#define CPPUNIT_ASSERT_EQUAL_INT(a, b) CPPUNIT_ASSERT_EQUAL(a, (int)b) + CPPUNIT_TEST_SUITE_REGISTRATION(GraphTest); void GraphTest::setUp() @@ -20,6 +19,60 @@ void GraphTest::tearDown() } void GraphTest::testCopyConstruct() +{ + testCopyConstruct_impl(graph::REPRESENTATION::ADJACENCY_LIST); + testCopyConstruct_impl(graph::REPRESENTATION::ADJACENCY_MATRIX); +} + +void GraphTest::testEqual() +{ + testEqual_impl(graph::REPRESENTATION::ADJACENCY_LIST); + testEqual_impl(graph::REPRESENTATION::ADJACENCY_MATRIX); +} + +void GraphTest::testXMLParser() +{ + testXMLParser_impl(graph::REPRESENTATION::ADJACENCY_LIST); + testXMLParser_impl(graph::REPRESENTATION::ADJACENCY_MATRIX); +} + +void GraphTest::testStringParser() +{ + testStringParser_impl(graph::REPRESENTATION::ADJACENCY_LIST); + testStringParser_impl(graph::REPRESENTATION::ADJACENCY_MATRIX); +} + +void GraphTest::testAddEdge() +{ + testAddEdge_impl(graph::REPRESENTATION::ADJACENCY_LIST); + testAddEdge_impl(graph::REPRESENTATION::ADJACENCY_MATRIX); +} + +void GraphTest::testRemoveEdge() +{ + testRemoveEdge_impl(graph::REPRESENTATION::ADJACENCY_LIST); + testRemoveEdge_impl(graph::REPRESENTATION::ADJACENCY_MATRIX); +} + +void GraphTest::testAddNode() +{ + testAddNode_impl(graph::REPRESENTATION::ADJACENCY_LIST); + testAddNode_impl(graph::REPRESENTATION::ADJACENCY_MATRIX); +} + +void GraphTest::testRemoveNode() +{ + testRemoveNode_impl(graph::REPRESENTATION::ADJACENCY_LIST); + testRemoveNode_impl(graph::REPRESENTATION::ADJACENCY_MATRIX); +} + +void GraphTest::testNeighborEdges() +{ + testNeighborEdges_impl(graph::REPRESENTATION::ADJACENCY_LIST); + testNeighborEdges_impl(graph::REPRESENTATION::ADJACENCY_MATRIX); +} + +void GraphTest::testCopyConstruct_impl(graph::REPRESENTATION representation) { // Common graph::Node n1("n1"); @@ -27,7 +80,7 @@ void GraphTest::testCopyConstruct() graph::Node n3("n3"); // Directed - graph::DirectedGraph dg(graph::REPRESENTATION::ADJACENCY_LIST); + graph::DirectedGraph dg(representation); dg.addNode(n1); dg.addNode(n2); dg.addNode(n3); @@ -41,7 +94,7 @@ void GraphTest::testCopyConstruct() CPPUNIT_ASSERT(dg2 == dg3); // Undirected - graph::UndirectedGraph ug(graph::REPRESENTATION::ADJACENCY_LIST); + graph::UndirectedGraph ug(representation); ug.addNode(n1); ug.addNode(n2); ug.addNode(n3); @@ -55,7 +108,7 @@ void GraphTest::testCopyConstruct() CPPUNIT_ASSERT(ug2 == ug3); } -void GraphTest::testEqual() +void GraphTest::testEqual_impl(graph::REPRESENTATION representation) { // Common graph::Node n1("n1"); @@ -63,14 +116,14 @@ void GraphTest::testEqual() graph::Node n3("n3"); // Directed - graph::DirectedGraph dg(graph::REPRESENTATION::ADJACENCY_LIST); + graph::DirectedGraph dg(representation); dg.addNode(n1); dg.addNode(n2); dg.addNode(n3); dg.addEdge(graph::DirectedEdge(n1, n2)); dg.addEdge(graph::DirectedEdge(n1, n3)); - graph::DirectedGraph dg2(graph::REPRESENTATION::ADJACENCY_LIST); + graph::DirectedGraph dg2(representation); dg2.addNode(n1); dg2.addNode(n2); dg2.addEdge(graph::DirectedEdge(n1, n2)); @@ -84,14 +137,14 @@ void GraphTest::testEqual() CPPUNIT_ASSERT(dg == dg2); // Undirected - graph::UndirectedGraph ug(graph::REPRESENTATION::ADJACENCY_LIST); + graph::UndirectedGraph ug(representation); ug.addNode(n1); ug.addNode(n2); ug.addNode(n3); ug.addEdge(graph::UndirectedEdge(n1, n2)); ug.addEdge(graph::UndirectedEdge(n1, n3)); - graph::UndirectedGraph ug2(graph::REPRESENTATION::ADJACENCY_LIST); + graph::UndirectedGraph ug2(representation); ug2.addNode(n1); ug2.addNode(n2); ug2.addEdge(graph::UndirectedEdge(n1, n2)); @@ -105,7 +158,7 @@ void GraphTest::testEqual() CPPUNIT_ASSERT(ug == ug2); } -void GraphTest::testXMLParser() +void GraphTest::testXMLParser_impl(graph::REPRESENTATION representation) { // Common graph::Node n1("n1"); @@ -113,7 +166,7 @@ void GraphTest::testXMLParser() graph::Node n3("n3"); // Directed - graph::DirectedGraph dg(graph::REPRESENTATION::ADJACENCY_LIST); + graph::DirectedGraph dg(representation); dg.addNode(n1); dg.addNode(n2); dg.addNode(n3); @@ -126,7 +179,7 @@ void GraphTest::testXMLParser() CPPUNIT_ASSERT(dg1 == dg2); // Undirected - graph::UndirectedGraph ug(graph::REPRESENTATION::ADJACENCY_LIST); + graph::UndirectedGraph ug(representation); ug.addNode(n1); ug.addNode(n2); ug.addNode(n3); @@ -139,7 +192,7 @@ void GraphTest::testXMLParser() CPPUNIT_ASSERT(ug1 == ug2); } -void GraphTest::testStringParser() +void GraphTest::testStringParser_impl(graph::REPRESENTATION representation) { // Common graph::Node n1("n1"); @@ -147,7 +200,7 @@ void GraphTest::testStringParser() graph::Node n3("n3"); // Directed - graph::DirectedGraph dg(graph::REPRESENTATION::ADJACENCY_LIST); + graph::DirectedGraph dg(representation); dg.addNode(n1); dg.addNode(n2); dg.addNode(n3); @@ -160,7 +213,7 @@ void GraphTest::testStringParser() CPPUNIT_ASSERT(dg1 == dg2); // Undirected - graph::UndirectedGraph ug(graph::REPRESENTATION::ADJACENCY_LIST); + graph::UndirectedGraph ug(representation); ug.addNode(n1); ug.addNode(n2); ug.addNode(n3); @@ -173,7 +226,7 @@ void GraphTest::testStringParser() CPPUNIT_ASSERT(ug1 == ug2); } -void GraphTest::testAddEdge() +void GraphTest::testAddEdge_impl(graph::REPRESENTATION representation) { // Common graph::Node n1("n1"); @@ -182,91 +235,91 @@ void GraphTest::testAddEdge() graph::Node n4("n4"); // Directed - graph::DirectedGraph dg(graph::REPRESENTATION::ADJACENCY_LIST); + graph::DirectedGraph dg(representation); dg.addNode(n1); dg.addNode(n2); dg.addNode(n3); dg.addNode(n4); - CPPUNIT_ASSERT(dg.getEdges().empty()); - CPPUNIT_ASSERT(dg.findEdges(n1, n2).empty()); + CPPUNIT_ASSERT_EQUAL(true, dg.getEdges().empty()); + CPPUNIT_ASSERT_EQUAL(true, dg.findEdges(n1, n2).empty()); dg.addEdge(graph::DirectedEdge(n1, n2)); - CPPUNIT_ASSERT(dg.getEdges().size() == 1); - CPPUNIT_ASSERT(dg.findEdges(n1, n2).size() == 1); - CPPUNIT_ASSERT(dg.findEdges(n2, n1).empty()); + CPPUNIT_ASSERT_EQUAL_INT(1, dg.getEdges().size()); + CPPUNIT_ASSERT_EQUAL_INT(1, dg.findEdges(n1, n2).size()); + CPPUNIT_ASSERT_EQUAL(true, dg.findEdges(n2, n1).empty()); // Multi-edge can only be added with non-empty label - CPPUNIT_ASSERT(dg.addEdge(graph::DirectedEdge(n1, n2)) == false); - CPPUNIT_ASSERT(dg.getEdges().size() == 1); - CPPUNIT_ASSERT(dg.findEdges(n1, n2).size() == 1); - CPPUNIT_ASSERT(dg.findEdges(n2, n1).empty()); + CPPUNIT_ASSERT_EQUAL(false, dg.addEdge(graph::DirectedEdge(n1, n2))); + CPPUNIT_ASSERT_EQUAL_INT(1, dg.getEdges().size()); + CPPUNIT_ASSERT_EQUAL_INT(1, dg.findEdges(n1, n2).size()); + CPPUNIT_ASSERT_EQUAL(true, dg.findEdges(n2, n1).empty()); dg.addEdge(graph::DirectedEdge(n2, n3)); - CPPUNIT_ASSERT(dg.getEdges().size() == 2); - CPPUNIT_ASSERT(dg.findEdges(n2, n3).size() == 1); - CPPUNIT_ASSERT(dg.findEdges(n3, n2).empty()); + CPPUNIT_ASSERT_EQUAL_INT(2, dg.getEdges().size()); + CPPUNIT_ASSERT_EQUAL_INT(1, dg.findEdges(n2, n3).size()); + CPPUNIT_ASSERT_EQUAL(true, dg.findEdges(n3, n2).empty()); dg.addEdge(graph::DirectedEdge(n3, n4)); - CPPUNIT_ASSERT(dg.getEdges().size() == 3); - CPPUNIT_ASSERT(dg.findEdges(n3, n4).size() == 1); - CPPUNIT_ASSERT(dg.findEdges(n4, n3).empty()); + CPPUNIT_ASSERT_EQUAL_INT(3, dg.getEdges().size()); + CPPUNIT_ASSERT_EQUAL_INT(1, dg.findEdges(n3, n4).size()); + CPPUNIT_ASSERT_EQUAL(true, dg.findEdges(n4, n3).empty()); // Multi-edge can only be added with non-empty label - CPPUNIT_ASSERT(dg.addEdge(graph::DirectedEdge(n3, n4)) == false); - CPPUNIT_ASSERT(dg.getEdges().size() == 3); - CPPUNIT_ASSERT(dg.findEdges(n3, n4).size() == 1); - CPPUNIT_ASSERT(dg.findEdges(n4, n3).empty()); + CPPUNIT_ASSERT_EQUAL(false, dg.addEdge(graph::DirectedEdge(n3, n4))); + CPPUNIT_ASSERT_EQUAL_INT(3, dg.getEdges().size()); + CPPUNIT_ASSERT_EQUAL_INT(1, dg.findEdges(n3, n4).size()); + CPPUNIT_ASSERT_EQUAL(true, dg.findEdges(n4, n3).empty()); dg.addEdge(graph::DirectedEdge(n3, n4, "multi-edge")); - CPPUNIT_ASSERT(dg.getEdges().size() == 4); - CPPUNIT_ASSERT(dg.findEdges(n3, n4).size() == 2); - CPPUNIT_ASSERT(dg.findEdges(n4, n3).empty()); + CPPUNIT_ASSERT_EQUAL_INT(4, dg.getEdges().size()); + CPPUNIT_ASSERT_EQUAL_INT(2, dg.findEdges(n3, n4).size()); + CPPUNIT_ASSERT_EQUAL(true, dg.findEdges(n4, n3).empty()); // Undirected - graph::UndirectedGraph ug(graph::REPRESENTATION::ADJACENCY_LIST); + graph::UndirectedGraph ug(representation); ug.addNode(n1); ug.addNode(n2); ug.addNode(n3); ug.addNode(n4); - CPPUNIT_ASSERT(ug.getEdges().empty()); - CPPUNIT_ASSERT(ug.findEdges(n1, n2).empty()); + CPPUNIT_ASSERT_EQUAL(true, ug.getEdges().empty()); + CPPUNIT_ASSERT_EQUAL(true, ug.findEdges(n1, n2).empty()); ug.addEdge(graph::UndirectedEdge(n1, n2)); - CPPUNIT_ASSERT(ug.getEdges().size() == 1); - CPPUNIT_ASSERT(ug.findEdges(n1, n2).size() == 1); - CPPUNIT_ASSERT(ug.findEdges(n2, n1).size() == 1); + CPPUNIT_ASSERT_EQUAL_INT(1, ug.getEdges().size()); + CPPUNIT_ASSERT_EQUAL_INT(1, ug.findEdges(n1, n2).size()); + CPPUNIT_ASSERT_EQUAL_INT(1, ug.findEdges(n2, n1).size()); // Multi-edge can only be added with non-empty label - CPPUNIT_ASSERT(ug.addEdge(graph::UndirectedEdge(n1, n2)) == false); - CPPUNIT_ASSERT(ug.getEdges().size() == 1); - CPPUNIT_ASSERT(ug.findEdges(n1, n2).size() == 1); - CPPUNIT_ASSERT(ug.findEdges(n2, n1).size() == 1); + CPPUNIT_ASSERT_EQUAL(false, ug.addEdge(graph::UndirectedEdge(n1, n2))); + CPPUNIT_ASSERT_EQUAL_INT(1, ug.getEdges().size()); + CPPUNIT_ASSERT_EQUAL_INT(1, ug.findEdges(n1, n2).size()); + CPPUNIT_ASSERT_EQUAL_INT(1, ug.findEdges(n2, n1).size()); ug.addEdge(graph::UndirectedEdge(n2, n3)); - CPPUNIT_ASSERT(ug.getEdges().size() == 2); - CPPUNIT_ASSERT(ug.findEdges(n2, n3).size() == 1); - CPPUNIT_ASSERT(ug.findEdges(n3, n2).size() == 1); + CPPUNIT_ASSERT_EQUAL_INT(2, ug.getEdges().size()); + CPPUNIT_ASSERT_EQUAL_INT(1, ug.findEdges(n2, n3).size()); + CPPUNIT_ASSERT_EQUAL_INT(1, ug.findEdges(n3, n2).size()); ug.addEdge(graph::UndirectedEdge(n3, n4)); - CPPUNIT_ASSERT(ug.getEdges().size() == 3); - CPPUNIT_ASSERT(ug.findEdges(n3, n4).size() == 1); - CPPUNIT_ASSERT(ug.findEdges(n4, n3).size() == 1); + CPPUNIT_ASSERT_EQUAL_INT(3, ug.getEdges().size()); + CPPUNIT_ASSERT_EQUAL_INT(1, ug.findEdges(n3, n4).size()); + CPPUNIT_ASSERT_EQUAL_INT(1, ug.findEdges(n4, n3).size()); // Multi-edge can only be added with non-empty label - CPPUNIT_ASSERT(ug.addEdge(graph::UndirectedEdge(n3, n4)) == false); - CPPUNIT_ASSERT(ug.getEdges().size() == 3); - CPPUNIT_ASSERT(ug.findEdges(n3, n4).size() == 1); - CPPUNIT_ASSERT(ug.findEdges(n4, n3).size() == 1); + CPPUNIT_ASSERT_EQUAL(false, ug.addEdge(graph::UndirectedEdge(n3, n4))); + CPPUNIT_ASSERT_EQUAL_INT(3, ug.getEdges().size()); + CPPUNIT_ASSERT_EQUAL_INT(1, ug.findEdges(n3, n4).size()); + CPPUNIT_ASSERT_EQUAL_INT(1, ug.findEdges(n4, n3).size()); ug.addEdge(graph::UndirectedEdge(n3, n4, "multi-edge")); - CPPUNIT_ASSERT(ug.getEdges().size() == 4); - CPPUNIT_ASSERT(ug.findEdges(n3, n4).size() == 2); - CPPUNIT_ASSERT(ug.findEdges(n4, n3).size() == 2); + CPPUNIT_ASSERT_EQUAL_INT(4, ug.getEdges().size()); + CPPUNIT_ASSERT_EQUAL_INT(2, ug.findEdges(n3, n4).size()); + CPPUNIT_ASSERT_EQUAL_INT(2, ug.findEdges(n4, n3).size()); } -void GraphTest::testRemoveEdge() +void GraphTest::testRemoveEdge_impl(graph::REPRESENTATION representation) { // Common graph::Node n1("n1"); @@ -275,126 +328,126 @@ void GraphTest::testRemoveEdge() graph::Node n4("n4"); // Directed - graph::DirectedGraph dg(graph::REPRESENTATION::ADJACENCY_LIST); + graph::DirectedGraph dg(representation); dg.addEdge(graph::DirectedEdge(n1, n2)); dg.addEdge(graph::DirectedEdge(n1, n2, "multi-edge")); dg.addEdge(graph::DirectedEdge(n2, n3)); dg.addEdge(graph::DirectedEdge(n3, n4)); dg.addEdge(graph::DirectedEdge(n4, n1)); - CPPUNIT_ASSERT(dg.getNodes().size() == 4); - CPPUNIT_ASSERT(dg.getEdges().size() == 5); + CPPUNIT_ASSERT_EQUAL_INT(4, dg.getNodes().size()); + CPPUNIT_ASSERT_EQUAL_INT(5, dg.getEdges().size()); - CPPUNIT_ASSERT(dg.neighbors(n1).size() == 1); + CPPUNIT_ASSERT_EQUAL_INT(1, dg.neighbors(n1).size()); dg.removeEdge(graph::DirectedEdge(n1, n2)); - CPPUNIT_ASSERT(dg.findEdges(n1, n2).size() == 1); - CPPUNIT_ASSERT(dg.neighbors(n1).size() == 1); + CPPUNIT_ASSERT_EQUAL_INT(1, dg.findEdges(n1, n2).size()); + CPPUNIT_ASSERT_EQUAL_INT(1, dg.neighbors(n1).size()); - CPPUNIT_ASSERT(dg.neighbors(n1).size() == 1); + CPPUNIT_ASSERT_EQUAL_INT(1, dg.neighbors(n1).size()); dg.removeEdge(graph::DirectedEdge(n1, n2, "multi-edge")); - CPPUNIT_ASSERT(dg.findEdges(n1, n2).size() == 0); - CPPUNIT_ASSERT(dg.neighbors(n1).empty()); + CPPUNIT_ASSERT_EQUAL_INT(0, dg.findEdges(n1, n2).size()); + CPPUNIT_ASSERT_EQUAL(true, dg.neighbors(n1).empty()); - CPPUNIT_ASSERT(dg.neighbors(n2).size() == 1); + CPPUNIT_ASSERT_EQUAL_INT(1, dg.neighbors(n2).size()); dg.removeEdge(graph::DirectedEdge(n2, n3)); - CPPUNIT_ASSERT(dg.findEdges(n2, n3).size() == 0); - CPPUNIT_ASSERT(dg.neighbors(n2).empty()); + CPPUNIT_ASSERT_EQUAL_INT(0, dg.findEdges(n2, n3).size()); + CPPUNIT_ASSERT_EQUAL(true, dg.neighbors(n2).empty()); - CPPUNIT_ASSERT(dg.neighbors(n3).size() == 1); + CPPUNIT_ASSERT_EQUAL_INT(1, dg.neighbors(n3).size()); dg.removeEdge(graph::DirectedEdge(n3, n4)); - CPPUNIT_ASSERT(dg.findEdges(n3, n4).size() == 0); - CPPUNIT_ASSERT(dg.neighbors(n3).empty()); + CPPUNIT_ASSERT_EQUAL_INT(0, dg.findEdges(n3, n4).size()); + CPPUNIT_ASSERT_EQUAL(true, dg.neighbors(n3).empty()); - CPPUNIT_ASSERT(dg.neighbors(n4).size() == 1); + CPPUNIT_ASSERT_EQUAL_INT(1, dg.neighbors(n4).size()); dg.removeEdge(graph::DirectedEdge(n4, n1)); - CPPUNIT_ASSERT(dg.findEdges(n4, n1).size() == 0); - CPPUNIT_ASSERT(dg.neighbors(n4).empty()); + CPPUNIT_ASSERT_EQUAL_INT(0, dg.findEdges(n4, n1).size()); + CPPUNIT_ASSERT_EQUAL(true, dg.neighbors(n4).empty()); - CPPUNIT_ASSERT(dg.getEdges().empty()); - CPPUNIT_ASSERT(dg.getNodes().empty()); + CPPUNIT_ASSERT_EQUAL(true, dg.getEdges().empty()); + CPPUNIT_ASSERT_EQUAL(true, dg.getNodes().empty()); // Undirected - graph::UndirectedGraph ug(graph::REPRESENTATION::ADJACENCY_LIST); + graph::UndirectedGraph ug(representation); ug.addEdge(graph::UndirectedEdge(n1, n2)); ug.addEdge(graph::UndirectedEdge(n1, n2, "multi-edge")); ug.addEdge(graph::UndirectedEdge(n2, n3)); ug.addEdge(graph::UndirectedEdge(n3, n4)); ug.addEdge(graph::UndirectedEdge(n4, n1)); - CPPUNIT_ASSERT(ug.getNodes().size() == 4); - CPPUNIT_ASSERT(ug.getEdges().size() == 5); + CPPUNIT_ASSERT_EQUAL_INT(4, ug.getNodes().size()); + CPPUNIT_ASSERT_EQUAL_INT(5, ug.getEdges().size()); - CPPUNIT_ASSERT(ug.neighbors(n1).size() == 2); + CPPUNIT_ASSERT_EQUAL_INT(2, ug.neighbors(n1).size()); ug.removeEdge(graph::UndirectedEdge(n1, n2)); - CPPUNIT_ASSERT(ug.findEdges(n1, n2).size() == 1); - CPPUNIT_ASSERT(ug.neighbors(n1).size() == 2); + CPPUNIT_ASSERT_EQUAL_INT(1, ug.findEdges(n1, n2).size()); + CPPUNIT_ASSERT_EQUAL_INT(2, ug.neighbors(n1).size()); - CPPUNIT_ASSERT(ug.neighbors(n1).size() == 2); + CPPUNIT_ASSERT_EQUAL_INT(2, ug.neighbors(n1).size()); ug.removeEdge(graph::UndirectedEdge(n1, n2, "multi-edge")); - CPPUNIT_ASSERT(ug.findEdges(n1, n2).size() == 0); - CPPUNIT_ASSERT(ug.neighbors(n1).size() == 1); + CPPUNIT_ASSERT_EQUAL_INT(0, ug.findEdges(n1, n2).size()); + CPPUNIT_ASSERT_EQUAL_INT(1, ug.neighbors(n1).size()); - CPPUNIT_ASSERT(ug.neighbors(n2).size() == 1); + CPPUNIT_ASSERT_EQUAL_INT(1, ug.neighbors(n2).size()); ug.removeEdge(graph::UndirectedEdge(n2, n3)); - CPPUNIT_ASSERT(ug.findEdges(n2, n3).size() == 0); + CPPUNIT_ASSERT_EQUAL_INT(0, ug.findEdges(n2, n3).size()); CPPUNIT_ASSERT(ug.neighbors(n2).empty()); - CPPUNIT_ASSERT(ug.neighbors(n3).size() == 1); + CPPUNIT_ASSERT_EQUAL_INT(1, ug.neighbors(n3).size()); ug.removeEdge(graph::UndirectedEdge(n3, n4)); - CPPUNIT_ASSERT(ug.findEdges(n3, n4).size() == 0); + CPPUNIT_ASSERT_EQUAL_INT(0, ug.findEdges(n3, n4).size()); CPPUNIT_ASSERT(ug.neighbors(n3).empty()); - CPPUNIT_ASSERT(ug.neighbors(n4).size() == 1); + CPPUNIT_ASSERT_EQUAL_INT(1, ug.neighbors(n4).size()); ug.removeEdge(graph::UndirectedEdge(n4, n1)); - CPPUNIT_ASSERT(ug.findEdges(n4, n1).size() == 0); - CPPUNIT_ASSERT(ug.neighbors(n4).empty()); + CPPUNIT_ASSERT_EQUAL_INT(0, ug.findEdges(n4, n1).size()); + CPPUNIT_ASSERT_EQUAL(true, ug.neighbors(n4).empty()); - CPPUNIT_ASSERT(ug.getEdges().empty()); - CPPUNIT_ASSERT(ug.getNodes().empty()); + CPPUNIT_ASSERT_EQUAL(true, ug.getEdges().empty()); + CPPUNIT_ASSERT_EQUAL(true, ug.getNodes().empty()); } -void GraphTest::testAddNode() +void GraphTest::testAddNode_impl(graph::REPRESENTATION representation) { // Directed - graph::DirectedGraph dg(graph::REPRESENTATION::ADJACENCY_LIST); + graph::DirectedGraph dg(representation); - CPPUNIT_ASSERT(dg.getNodes().size() == 0); + CPPUNIT_ASSERT_EQUAL_INT(0, dg.getNodes().size()); dg.addNode(graph::Node("n1")); - CPPUNIT_ASSERT(dg.getNodes().size() == 1); + CPPUNIT_ASSERT_EQUAL_INT(1, dg.getNodes().size()); dg.addNode(graph::Node("n2")); - CPPUNIT_ASSERT(dg.getNodes().size() == 2); + CPPUNIT_ASSERT_EQUAL_INT(2, dg.getNodes().size()); - CPPUNIT_ASSERT(dg.addNode(graph::Node("n2")) == false); - CPPUNIT_ASSERT(dg.getNodes().size() == 2); + CPPUNIT_ASSERT_EQUAL(false, dg.addNode(graph::Node("n2"))); + CPPUNIT_ASSERT_EQUAL_INT(2, dg.getNodes().size()); dg.addNode(graph::Node("n3")); - CPPUNIT_ASSERT(dg.getNodes().size() == 3); + CPPUNIT_ASSERT_EQUAL_INT(3, dg.getNodes().size()); dg.addNode(graph::Node("n4")); - CPPUNIT_ASSERT(dg.getNodes().size() == 4); + CPPUNIT_ASSERT_EQUAL_INT(4, dg.getNodes().size()); dg.addNode(graph::Node("n5")); - CPPUNIT_ASSERT(dg.getNodes().size() == 5); + CPPUNIT_ASSERT_EQUAL_INT(5, dg.getNodes().size()); // Undirected - graph::UndirectedGraph ug(graph::REPRESENTATION::ADJACENCY_LIST); + graph::UndirectedGraph ug(representation); - CPPUNIT_ASSERT(ug.getNodes().size() == 0); + CPPUNIT_ASSERT_EQUAL_INT(0, ug.getNodes().size()); ug.addNode(graph::Node("n1")); - CPPUNIT_ASSERT(ug.getNodes().size() == 1); + CPPUNIT_ASSERT_EQUAL_INT(1, ug.getNodes().size()); ug.addNode(graph::Node("n2")); - CPPUNIT_ASSERT(ug.getNodes().size() == 2); + CPPUNIT_ASSERT_EQUAL_INT(2, ug.getNodes().size()); - CPPUNIT_ASSERT(ug.addNode(graph::Node("n2")) == false); - CPPUNIT_ASSERT(ug.getNodes().size() == 2); + CPPUNIT_ASSERT_EQUAL(false, ug.addNode(graph::Node("n2"))); + CPPUNIT_ASSERT_EQUAL_INT(2, ug.getNodes().size()); ug.addNode(graph::Node("n3")); - CPPUNIT_ASSERT(ug.getNodes().size() == 3); + CPPUNIT_ASSERT_EQUAL_INT(3, ug.getNodes().size()); ug.addNode(graph::Node("n4")); - CPPUNIT_ASSERT(ug.getNodes().size() == 4); + CPPUNIT_ASSERT_EQUAL_INT(4, ug.getNodes().size()); ug.addNode(graph::Node("n5")); - CPPUNIT_ASSERT(ug.getNodes().size() == 5); + CPPUNIT_ASSERT_EQUAL_INT(5, ug.getNodes().size()); } -void GraphTest::testRemoveNode() +void GraphTest::testRemoveNode_impl(graph::REPRESENTATION representation) { // Common graph::Node n1("n1"); @@ -403,64 +456,64 @@ void GraphTest::testRemoveNode() graph::Node n4("n4"); // Directed - graph::DirectedGraph dg(graph::REPRESENTATION::ADJACENCY_LIST); + graph::DirectedGraph dg(representation); dg.addEdge(graph::DirectedEdge(n1, n2)); dg.addEdge(graph::DirectedEdge(n1, n2, "multi-edge")); dg.addEdge(graph::DirectedEdge(n2, n3)); dg.addEdge(graph::DirectedEdge(n3, n4)); dg.addEdge(graph::DirectedEdge(n4, n1)); - CPPUNIT_ASSERT(dg.getNodes().size() == 4); - CPPUNIT_ASSERT(dg.getEdges().size() == 5); + CPPUNIT_ASSERT_EQUAL_INT(4, dg.getNodes().size()); + CPPUNIT_ASSERT_EQUAL_INT(5, dg.getEdges().size()); dg.removeNode(n1); - CPPUNIT_ASSERT(dg.neighbors(n4).empty()); - CPPUNIT_ASSERT(dg.findEdges(n1, n2).empty()); - CPPUNIT_ASSERT(dg.findEdges(n4, n1).empty()); + CPPUNIT_ASSERT_EQUAL(true, dg.neighbors(n4).empty()); + CPPUNIT_ASSERT_EQUAL(true, dg.findEdges(n1, n2).empty()); + CPPUNIT_ASSERT_EQUAL(true, dg.findEdges(n4, n1).empty()); dg.removeNode(n2); - CPPUNIT_ASSERT(dg.findEdges(n2, n3).empty()); + CPPUNIT_ASSERT_EQUAL(true, dg.findEdges(n2, n3).empty()); dg.removeNode(n3); - CPPUNIT_ASSERT(dg.findEdges(n3, n4).empty()); + CPPUNIT_ASSERT_EQUAL(true, dg.findEdges(n3, n4).empty()); dg.removeNode(n4); - CPPUNIT_ASSERT(dg.findEdges(n4, n1).empty()); + CPPUNIT_ASSERT_EQUAL(true, dg.findEdges(n4, n1).empty()); - CPPUNIT_ASSERT(dg.getEdges().empty()); - CPPUNIT_ASSERT(dg.getNodes().empty()); + CPPUNIT_ASSERT_EQUAL(true, dg.getEdges().empty()); + CPPUNIT_ASSERT_EQUAL(true, dg.getNodes().empty()); // Undirected - graph::UndirectedGraph ug(graph::REPRESENTATION::ADJACENCY_LIST); + graph::UndirectedGraph ug(representation); ug.addEdge(graph::UndirectedEdge(n1, n2)); ug.addEdge(graph::UndirectedEdge(n1, n2, "multi-edge")); ug.addEdge(graph::UndirectedEdge(n2, n3)); ug.addEdge(graph::UndirectedEdge(n3, n4)); ug.addEdge(graph::UndirectedEdge(n4, n1)); - CPPUNIT_ASSERT(ug.getNodes().size() == 4); - CPPUNIT_ASSERT(ug.getEdges().size() == 5); + CPPUNIT_ASSERT_EQUAL_INT(4, ug.getNodes().size()); + CPPUNIT_ASSERT_EQUAL_INT(5, ug.getEdges().size()); ug.removeNode(n1); - CPPUNIT_ASSERT(ug.neighbors(n4).size() == 1); - CPPUNIT_ASSERT(ug.findEdges(n1, n2).empty()); - CPPUNIT_ASSERT(ug.findEdges(n4, n1).empty()); + CPPUNIT_ASSERT_EQUAL_INT(1, ug.neighbors(n4).size()); + CPPUNIT_ASSERT_EQUAL(true, ug.findEdges(n1, n2).empty()); + CPPUNIT_ASSERT_EQUAL(true, ug.findEdges(n4, n1).empty()); ug.removeNode(n2); - CPPUNIT_ASSERT(ug.findEdges(n2, n3).empty()); + CPPUNIT_ASSERT_EQUAL(true, ug.findEdges(n2, n3).empty()); ug.removeNode(n3); - CPPUNIT_ASSERT(ug.neighbors(n4).empty()); - CPPUNIT_ASSERT(ug.findEdges(n3, n4).empty()); + CPPUNIT_ASSERT_EQUAL(true, ug.neighbors(n4).empty()); + CPPUNIT_ASSERT_EQUAL(true, ug.findEdges(n3, n4).empty()); ug.removeNode(n4); - CPPUNIT_ASSERT(ug.findEdges(n4, n1).empty()); + CPPUNIT_ASSERT_EQUAL(true, ug.findEdges(n4, n1).empty()); - CPPUNIT_ASSERT(ug.getEdges().empty()); - CPPUNIT_ASSERT(ug.getNodes().empty()); + CPPUNIT_ASSERT_EQUAL(true, ug.getEdges().empty()); + CPPUNIT_ASSERT_EQUAL(true, ug.getNodes().empty()); } -void GraphTest::testNeighborEdges() +void GraphTest::testNeighborEdges_impl(graph::REPRESENTATION representation) { // Common graph::Node n1("n1"); @@ -476,7 +529,7 @@ void GraphTest::testNeighborEdges() graph::DirectedEdge de5(n3, n4); graph::DirectedEdge de6(n4, n1); - graph::DirectedGraph dg(graph::REPRESENTATION::ADJACENCY_LIST); + graph::DirectedGraph dg(representation); dg.addEdge(de1); dg.addEdge(de2); dg.addEdge(de3); @@ -485,16 +538,16 @@ void GraphTest::testNeighborEdges() dg.addEdge(de6); std::set<graph::DirectedEdge> dexpected = { de1, de2, de3 }; - CPPUNIT_ASSERT(dg.neighborEdges(n1) == dexpected); + CPPUNIT_ASSERT_EQUAL(dexpected, dg.neighborEdges(n1)); dexpected = { de4 }; - CPPUNIT_ASSERT(dg.neighborEdges(n2) == dexpected); + CPPUNIT_ASSERT_EQUAL(dexpected, dg.neighborEdges(n2)); dexpected = { de5 }; - CPPUNIT_ASSERT(dg.neighborEdges(n3) == dexpected); + CPPUNIT_ASSERT_EQUAL(dexpected, dg.neighborEdges(n3)); dexpected = { de6 }; - CPPUNIT_ASSERT(dg.neighborEdges(n4) == dexpected); + CPPUNIT_ASSERT_EQUAL(dexpected, dg.neighborEdges(n4)); // Undirected graph::UndirectedEdge ue1(n1, n2); @@ -504,7 +557,7 @@ void GraphTest::testNeighborEdges() graph::UndirectedEdge ue5(n3, n4); graph::UndirectedEdge ue6(n4, n1); - graph::UndirectedGraph ug(graph::REPRESENTATION::ADJACENCY_LIST); + graph::UndirectedGraph ug(representation); ug.addEdge(ue1); ug.addEdge(ue2); ug.addEdge(ue3); @@ -513,15 +566,15 @@ void GraphTest::testNeighborEdges() ug.addEdge(ue6); std::set<graph::UndirectedEdge> uexpected = { ue1, ue2, ue3, ue6 }; - CPPUNIT_ASSERT(ug.neighborEdges(n1) == uexpected); + CPPUNIT_ASSERT_EQUAL(uexpected, ug.neighborEdges(n1)); uexpected = { ue1, ue2, ue4 }; - CPPUNIT_ASSERT(ug.neighborEdges(n2) == uexpected); + CPPUNIT_ASSERT_EQUAL(uexpected, ug.neighborEdges(n2)); uexpected = { ue3, ue4, ue5 }; - CPPUNIT_ASSERT(ug.neighborEdges(n3) == uexpected); + CPPUNIT_ASSERT_EQUAL(uexpected, ug.neighborEdges(n3)); uexpected = { ue5, ue6 }; - CPPUNIT_ASSERT(ug.neighborEdges(n4) == uexpected); + CPPUNIT_ASSERT_EQUAL(uexpected, ug.neighborEdges(n4)); } diff --git a/alib2data/test-src/graph/GraphTest.h b/alib2data/test-src/graph/GraphTest.h index f2849cce74..edc57e97d9 100644 --- a/alib2data/test-src/graph/GraphTest.h +++ b/alib2data/test-src/graph/GraphTest.h @@ -3,6 +3,9 @@ #include <cppunit/extensions/HelperMacros.h> +#include "graph/directed/DirectedGraph.h" +#include "graph/undirected/UndirectedGraph.h" + class GraphTest : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(GraphTest); @@ -31,6 +34,17 @@ public: void testAddNode(); void testRemoveNode(); void testNeighborEdges(); + + void testCopyConstruct_impl(graph::REPRESENTATION representation); + void testEqual_impl(graph::REPRESENTATION representation); + void testXMLParser_impl(graph::REPRESENTATION representation); + void testStringParser_impl(graph::REPRESENTATION representation); + + void testAddEdge_impl(graph::REPRESENTATION representation); + void testRemoveEdge_impl(graph::REPRESENTATION representation); + void testAddNode_impl(graph::REPRESENTATION representation); + void testRemoveNode_impl(graph::REPRESENTATION representation); + void testNeighborEdges_impl(graph::REPRESENTATION representation); }; #endif // GRAPH_TEST_H_ -- GitLab