This repository has been archived on 2021-10-31. You can view files and clone it, but cannot push or open issues or pull requests.
sys_prog/roadmap/tests/optional_test1.cpp

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);
}