extends TestCase ## A map of three by three tiles, row by row, with rock (1) in the middle and ## in the top right corner. const CODES := [0, 0, 1, 0, 1, 0, 0, 0, 0] func _flags() -> PackedByteArray: return TileShape.flags(PackedByteArray(CODES), [1]) func test_flags_mark_the_tiles_of_the_given_codes() -> void: check_eq(_flags(), PackedByteArray([0, 0, 1, 0, 1, 0, 0, 0, 0]), "rock is marked") check_eq(TileShape.flags(PackedByteArray([0, 1, 2]), [1, 2]), PackedByteArray([0, 1, 1]), "several codes") func test_a_mask_holds_the_marked_neighbours_clockwise_from_north() -> void: check_eq(TileShape.mask(_flags(), 3, 3, Vector2i(1, 1), false), TileShape.NE, "the middle sees the corner") check_eq(TileShape.mask(_flags(), 3, 3, Vector2i(1, 2), false), TileShape.N, "below the middle") check_eq(TileShape.mask(_flags(), 3, 3, Vector2i(2, 1), false), TileShape.N | TileShape.W, "right of the middle") check_eq(TileShape.mask(_flags(), 3, 3, Vector2i(0, 0), false), TileShape.SE, "the top left corner") func test_beyond_the_edge_neighbours_count_as_marked_if_asked() -> void: var corner := TileShape.mask(_flags(), 3, 3, Vector2i(0, 0), true) var outside := TileShape.N | TileShape.NE | TileShape.NW | TileShape.W | TileShape.SW check_eq(corner, outside | TileShape.SE, "five neighbours lie outside") func test_variants_stay_the_same_and_differ_between_neighbours() -> void: check_eq(TileShape.variant(Vector2i(4, 7)), TileShape.variant(Vector2i(4, 7)), "the same every time") var seen := {} for y in 4: for x in 4: var variant := TileShape.variant(Vector2i(x, y)) check(variant >= 0, "never negative: %d" % variant) seen[variant] = true check_eq(seen.size(), 16, "sixteen tiles, sixteen variants")