extends "res://bin/unittest.gd"
-const Board = preload('res://scripts/board.gd')
+const pieces_consts = preload('res://scripts/pieces_consts.gd')
- case("check_placement method checks boundaries")
- board.set_dimensions(13, 13)
- assert_true(board.check_placement(0, 0, 0, 0), 'top left corner')
- assert_true(board.check_placement(0, 0, 12, 12), 'bottom right corner')
- assert_false(board.check_placement(0, 0, 13, 12), 'beyond right')
- assert_false(board.check_placement(0, 0, 12, 13), 'beyond bottom')
- assert_false(board.check_placement(0, 0, -1, 0), 'beyond left')
- assert_false(board.check_placement(0, 0, 0, -1), 'beyond top')
- case("check_placement checks boundaries for different types")
- board.set_dimensions(13, 13)
- assert_true(board.check_placement(2, 0, 0, 0), 'top left corner')
- assert_false(board.check_placement(2, 0, 11, 12), 'bottom right corner')
- assert_false(board.check_placement(2, 0, 12, 11), 'bottom right corner')
+ case("rotation works as expected for idempotent pieces")
+ assert_dict_equal(pieces_consts.rotate_once(pieces_consts.PIECE_0), pieces_consts.PIECE_0, 'small square')
+ assert_dict_equal(pieces_consts.rotate_once(pieces_consts.PIECE_2), pieces_consts.PIECE_2, 'large square')
- case("board can place pieces and check for collisions")
- board.set_dimensions(13, 13)
- board.add_block(0, 0, 1, 1)
- assert_false(board.check_placement(0, 0, 1, 1), 'near top left corner')
- assert_false(board.check_placement(2, 0, 0, 0), 'top left corner')
+ case("rotation works for a few pieces")
+ expected = {Vector2(0, 0): pieces_consts.TOP_RIGHT, Vector2(1, 0): pieces_consts.TOP_LEFT}
+ assert_dict_equal(pieces_consts.rotate_once(pieces_consts.PIECE_6), expected, 'triangle thingie')
- case("board handles triangles when checking for collisions")
- board.set_dimensions(13, 13)
- assert_true(board.check_placement(1, 0, 1, 0), '')
- board.add_block(1, 0, 1, 0)
- assert_false(board.check_placement(1, 0, 1, 0), '')
- assert_false(board.check_placement(0, 0, 1, 0), '')
- assert_false(board.check_placement(2, 0, 0, 0), '')
- assert_true(board.check_placement(3, 0, 0, 0), 'complimenting piece')
- board.add_block(1, 0, 0, 1)
- assert_false(board.check_placement(3, 0, 0, 0), 'not complimenting piece')
+ case("2x rotation is idempotent for 7 & 8")
+ original_piece = pieces_consts.PIECES[i]
+ piece = pieces_consts.rotate(original_piece, 2)
+ assert_dict_equal(piece, original_piece, '2x rotation piece ' + str(i))
- case("board determines sawdust (points) for basic placements")
- board.set_dimensions(13, 13)
- assert_eq(board.get_points_for_placement(3, 0, 0, 0), 5, 'empty')
- board.add_block(1, 0, 1, 0)
- # Single complementing one:
- assert_eq(board.get_points_for_placement(3, 0, 0, 0), 6, 'single complimenting triangle')
- board.set_dimensions(5, 5)
- board.add_block(0, 0, 2, 1)
- board.add_block(0, 0, 1, 2)
- assert_eq(board.get_points_for_placement(0, 0, 1, 1), 7, 'two adjacent')
- board.add_block(0, 0, 0, 0)
- assert_eq(board.get_points_for_placement(0, 0, 1, 1), 7, 'ignores catty-corner')
- board.add_block(0, 0, 0, 1)
- assert_eq(board.get_points_for_placement(0, 0, 1, 1), 8, 'three adjacent')
- case("board determines sawdust (points) for bonus placements")
- board.set_dimensions(5, 5)
- board.add_block(0, 0, 2, 1)
- board.add_block(0, 0, 1, 2)
- board.add_block(0, 0, 0, 1)
- board.add_block(0, 0, 1, 0)
- board.add_block(0, 0, 1, 0)
- # Adjacent to 4 or more, gets 1 + 3 bonus
- assert_eq(board.get_points_for_placement(0, 0, 1, 1), 12, 'bonus')
- board.set_dimensions(10, 10)
- board.add_block(0, 0, 0, 1)
- board.add_block(0, 0, 1, 0)
- assert_eq(board.get_points_for_placement(3, 0, 1, 1), 7, 'two adjacent')
- board.add_block(0, 0, 2, 0)
- assert_eq(board.get_points_for_placement(3, 0, 1, 1), 7, 'three')
- board.add_block(0, 0, 2, 2)
- assert_eq(board.get_points_for_placement(3, 0, 1, 1), 8, 'three')
- board.add_block(1, 2, 1, 2)
- assert_eq(board.get_points_for_placement(3, 0, 1, 1), 12, 'four')
- board.add_block(1, 0, 2, 1)
- assert_true(board.check_placement(3, 0, 1, 1), 'ensure placement')
- assert_eq(board.get_points_for_placement(3, 0, 1, 1), 15, 'five')
+ case("4x rotation is idempotent for all pieces")
+ original_piece = pieces_consts.PIECES[i]
+ piece = pieces_consts.rotate(original_piece, 4)
+ assert_dict_equal(piece, original_piece, '4x rotation piece ' + str(i))