1 #include "catch/catch.hpp" 2 3 #include "mapgen.h" 4 #include "type_id.h" 5 6 TEST_CASE( "connects_to", "[mapgen][connects]" ) 7 { 8 // connects_to returns true if a given oter connects to a given cardinal 9 // compass direction, identified by an integer, clockwise from 0:North 10 11 int north = 0; 12 int east = 1; 13 int south = 2; 14 int west = 3; 15 16 // oter suffixes must be one of the following (order matters): 17 // ne, ns, es, nes, wn, ew, new, sw, nsw, esw, nesw 18 19 SECTION( "two-way connections" ) { 20 // North/South 21 CHECK( connects_to( oter_id( "sewer_ns" ), north ) ); 22 CHECK_FALSE( connects_to( oter_id( "sewer_ns" ), east ) ); 23 CHECK( connects_to( oter_id( "sewer_ns" ), south ) ); 24 CHECK_FALSE( connects_to( oter_id( "sewer_ns" ), west ) ); 25 26 // East/West 27 CHECK_FALSE( connects_to( oter_id( "sewer_ew" ), north ) ); 28 CHECK( connects_to( oter_id( "sewer_ew" ), east ) ); 29 CHECK_FALSE( connects_to( oter_id( "sewer_ew" ), south ) ); 30 CHECK( connects_to( oter_id( "sewer_ew" ), west ) ); 31 32 // North/East 33 CHECK( connects_to( oter_id( "sewer_ne" ), north ) ); 34 CHECK( connects_to( oter_id( "sewer_ne" ), east ) ); 35 CHECK_FALSE( connects_to( oter_id( "sewer_ne" ), south ) ); 36 CHECK_FALSE( connects_to( oter_id( "sewer_ne" ), west ) ); 37 38 // East/South 39 CHECK_FALSE( connects_to( oter_id( "sewer_es" ), north ) ); 40 CHECK( connects_to( oter_id( "sewer_es" ), east ) ); 41 CHECK( connects_to( oter_id( "sewer_es" ), south ) ); 42 CHECK_FALSE( connects_to( oter_id( "sewer_es" ), west ) ); 43 44 // South/West 45 CHECK_FALSE( connects_to( oter_id( "sewer_sw" ), north ) ); 46 CHECK_FALSE( connects_to( oter_id( "sewer_sw" ), east ) ); 47 CHECK( connects_to( oter_id( "sewer_sw" ), south ) ); 48 CHECK( connects_to( oter_id( "sewer_sw" ), west ) ); 49 50 // West/North 51 CHECK( connects_to( oter_id( "sewer_wn" ), north ) ); 52 CHECK_FALSE( connects_to( oter_id( "sewer_wn" ), east ) ); 53 CHECK_FALSE( connects_to( oter_id( "sewer_wn" ), south ) ); 54 CHECK( connects_to( oter_id( "sewer_wn" ), west ) ); 55 } 56 57 SECTION( "three-way connections" ) { 58 // North/East/South 59 CHECK( connects_to( oter_id( "sewer_nes" ), north ) ); 60 CHECK( connects_to( oter_id( "sewer_nes" ), east ) ); 61 CHECK( connects_to( oter_id( "sewer_nes" ), south ) ); 62 CHECK_FALSE( connects_to( oter_id( "sewer_nes" ), west ) ); 63 64 // East/South/West 65 CHECK_FALSE( connects_to( oter_id( "sewer_esw" ), north ) ); 66 CHECK( connects_to( oter_id( "sewer_esw" ), east ) ); 67 CHECK( connects_to( oter_id( "sewer_esw" ), south ) ); 68 CHECK( connects_to( oter_id( "sewer_esw" ), west ) ); 69 70 // South/West/North 71 CHECK( connects_to( oter_id( "sewer_nsw" ), north ) ); 72 CHECK_FALSE( connects_to( oter_id( "sewer_nsw" ), east ) ); 73 CHECK( connects_to( oter_id( "sewer_nsw" ), south ) ); 74 CHECK( connects_to( oter_id( "sewer_nsw" ), west ) ); 75 76 // West/North/East 77 CHECK( connects_to( oter_id( "sewer_new" ), north ) ); 78 CHECK( connects_to( oter_id( "sewer_new" ), east ) ); 79 CHECK_FALSE( connects_to( oter_id( "sewer_new" ), south ) ); 80 CHECK( connects_to( oter_id( "sewer_new" ), west ) ); 81 } 82 83 SECTION( "four-way connections" ) { 84 // North/East/South/West 85 CHECK( connects_to( oter_id( "sewer_nesw" ), north ) ); 86 CHECK( connects_to( oter_id( "sewer_nesw" ), east ) ); 87 CHECK( connects_to( oter_id( "sewer_nesw" ), south ) ); 88 CHECK( connects_to( oter_id( "sewer_nesw" ), west ) ); 89 } 90 } 91