Adding DAG visitor and some unit tests around its function
This commit is contained in:
@@ -1,9 +1,30 @@
|
||||
#include <iostream>
|
||||
|
||||
#include "daggy/DAG.hpp"
|
||||
#include "daggy/DAGVisitor.hpp"
|
||||
|
||||
#include "catch.hpp"
|
||||
|
||||
TEST_CASE("DAG Construction Tests", "[dag]") {
|
||||
daggy::DAG<int> dag;
|
||||
|
||||
REQUIRE(dag.size() == 0);
|
||||
REQUIRE(dag.empty());
|
||||
|
||||
REQUIRE_NOTHROW(dag.addVertex(0));
|
||||
for (int i = 1; i < 10; ++i) {
|
||||
dag.addVertex(i);
|
||||
dag.addEdge(i-1, i);
|
||||
}
|
||||
|
||||
REQUIRE(dag.getRoots().size() == 1);
|
||||
REQUIRE(dag.size() == 10);
|
||||
REQUIRE(! dag.empty());
|
||||
|
||||
// Cannot add an edge that would result in a cycle
|
||||
REQUIRE_THROWS(dag.addEdge(9, 5));
|
||||
}
|
||||
|
||||
TEST_CASE("DAG Basic Tests", "[dag]") {
|
||||
daggy::DAG<int> dag;
|
||||
|
||||
@@ -13,10 +34,10 @@ TEST_CASE("DAG Basic Tests", "[dag]") {
|
||||
dag.addEdge(i-1, i);
|
||||
}
|
||||
|
||||
REQUIRE(dag.shortestPath(0,9).size() == 10);
|
||||
SECTION("Pathing") {
|
||||
REQUIRE(dag.shortestPath(0,9).size() == 10);
|
||||
|
||||
dag.addEdge(5, 9);
|
||||
REQUIRE(dag.shortestPath(0,9).size() == 7);
|
||||
|
||||
REQUIRE_THROWS(dag.addEdge(9, 5));
|
||||
dag.addEdge(5, 9);
|
||||
REQUIRE(dag.shortestPath(0,9).size() == 7);
|
||||
}
|
||||
}
|
||||
|
||||
34
tests/unit_dag_visitor.cpp
Normal file
34
tests/unit_dag_visitor.cpp
Normal file
@@ -0,0 +1,34 @@
|
||||
#include <iostream>
|
||||
|
||||
#include "daggy/DAGVisitor.hpp"
|
||||
|
||||
#include "catch.hpp"
|
||||
|
||||
TEST_CASE("DAG Visitor Tests", "[dagvisitor]") {
|
||||
daggy::DAG<int> dag;
|
||||
|
||||
REQUIRE_NOTHROW(dag.addVertex(0));
|
||||
for (int i = 1; i < 10; ++i) {
|
||||
dag.addVertex(i);
|
||||
dag.addEdge(i-1, i);
|
||||
}
|
||||
|
||||
// Add an edge to make it interesting
|
||||
dag.addEdge(5, 7);
|
||||
|
||||
// for (auto v : dag.getRoots()) std::cout << " " << v << std::endl;
|
||||
|
||||
SECTION("Basic traversal") {
|
||||
daggy::DAGVisitor visitor(dag);
|
||||
REQUIRE(! visitor.isComplete());
|
||||
|
||||
size_t i = 0;
|
||||
while (! visitor.isComplete()) {
|
||||
auto id = visitor.visitNext();
|
||||
REQUIRE(id.has_value());
|
||||
visitor.completeVisit(id.value());
|
||||
++i;
|
||||
}
|
||||
REQUIRE(i == 10);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user