#include #include #include #include "basic_testing.h" #include "../roadmap.h" TEST(basic_test) { std::unique_ptr 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 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 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); }