107 lines
3.0 KiB
C++
107 lines
3.0 KiB
C++
#include <iostream>
|
|
#include <memory>
|
|
#include <cassert>
|
|
|
|
#include "basic_testing.h"
|
|
|
|
#include "../roadmap.h"
|
|
|
|
TEST(basic_test) {
|
|
std::unique_ptr<AbstractRoadMap> m(createRoadMap());
|
|
|
|
// Add roads on one island:
|
|
m->addRoad({"Locarno", "Lugano", "Agno"});
|
|
assert_false(m->hasLoop());
|
|
m->addRoad("Agno", "Berna");
|
|
assert_false(m->hasLoop());
|
|
m->addRoad("Locarno", "Berna");
|
|
m->addRoad("Locarno", "Basel");
|
|
m->addRoad({"Ginevra", "Basel", "Sciaffusa", "Zurigo"});
|
|
|
|
assert_int_eq(m->neighborCountForCity("Locarno"), 3);
|
|
assert_true(m->hasLoop());
|
|
assert_int_eq(m->countIslands(), 1);
|
|
assert_int_eq(m->neighborCountForCity("Basel"), 3);
|
|
|
|
m->addRoad("Basel", "Paris");
|
|
assert_int_eq(m->neighborCountForCity("Basel"), 4);
|
|
|
|
m->addRoad("London", "Edinburgh");
|
|
m->addRoad("Dublin", "Belfast");
|
|
m->addRoad("Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch", "Anglesey");
|
|
|
|
assert_int_eq(m->countIslands(), 4);
|
|
|
|
m->addRoad("Belfast", "Edinburgh");
|
|
assert_int_eq(m->countIslands(), 3);
|
|
assert_true(m->reachable("Agno", "Locarno"));
|
|
assert_false(m->reachable("Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch", "Edinburgh"));
|
|
m->addRoad("Anglesey", "London");
|
|
assert_true(m->reachable("Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch", "Edinburgh"));
|
|
m->clear();
|
|
assert_int_eq(m->countIslands(), 0);
|
|
|
|
TEST_PASSED;
|
|
}
|
|
|
|
TEST(loops_test) {
|
|
std::unique_ptr<AbstractRoadMap> m(createRoadMap());
|
|
|
|
// Add roads on one island:
|
|
m->addRoad({"Naples", "Lugano", "Praia Grande"});
|
|
assert_false(m->hasLoop());
|
|
// Add roads on another island:
|
|
m->addRoad("Colorado", "Boulder");
|
|
assert_false(m->hasLoop());
|
|
// Add roads on another island:
|
|
m->addRoad("Milano", "Siena");
|
|
assert_false(m->hasLoop());
|
|
assert_int_eq(m->countIslands(), 3);
|
|
|
|
// Merge two islands
|
|
m->addRoad("Milano", "Boulder");
|
|
assert_false(m->hasLoop());
|
|
assert_int_eq(m->countIslands(), 2);
|
|
|
|
// Create Loop
|
|
m->addRoad("Colorado", "Siena");
|
|
assert_true(m->hasLoop());
|
|
assert_int_eq(m->countIslands(), 2);
|
|
|
|
// Create another Loop
|
|
m->addRoad("Lugano", "Zurich");
|
|
m->addRoad("Praia Grande", "Zurich");
|
|
assert_int_eq(m->countIslands(), 2);
|
|
|
|
// Merge two islands
|
|
m->addRoad("Praia Grande", "Naples");
|
|
assert_false(m->reachable("Colorado", "Praia Grande"));
|
|
assert_int_eq(m->countIslands(), 2);
|
|
m->addRoad("Praia Grande", "Siena");
|
|
m->addRoad("Naples", "Colorado");
|
|
assert_int_eq(m->countIslands(), 1);
|
|
assert_int_eq(m->neighborCountForCity("Zurich"), 2);
|
|
m->addRoad({"Colorado", "Zurich", "Siena"});
|
|
assert_true(m->reachable("Praia Grande", "Colorado"));
|
|
|
|
m->clear();
|
|
assert_int_eq(m->countIslands(), 0);
|
|
|
|
TEST_PASSED;
|
|
}
|
|
|
|
TEST(santaclaus_test) {
|
|
std::unique_ptr<AbstractRoadMap> m(createRoadMap());
|
|
|
|
|
|
TEST_PASSED;
|
|
}
|
|
|
|
int main() {
|
|
RUN_TEST(basic_test);
|
|
RUN_TEST(loops_test);
|
|
RUN_TEST(santaclaus_test);
|
|
PRINT_TEST_RESULTS;
|
|
assert(ALL_TESTS_PASSED);
|
|
}
|