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