aboutsummaryrefslogtreecommitdiff
path: root/benchmark/agbenchmark/challenges/verticals/code/6_battleship/artifacts_in/test_negative.py
diff options
context:
space:
mode:
Diffstat (limited to 'benchmark/agbenchmark/challenges/verticals/code/6_battleship/artifacts_in/test_negative.py')
-rw-r--r--benchmark/agbenchmark/challenges/verticals/code/6_battleship/artifacts_in/test_negative.py100
1 files changed, 100 insertions, 0 deletions
diff --git a/benchmark/agbenchmark/challenges/verticals/code/6_battleship/artifacts_in/test_negative.py b/benchmark/agbenchmark/challenges/verticals/code/6_battleship/artifacts_in/test_negative.py
new file mode 100644
index 000000000..34bed48b4
--- /dev/null
+++ b/benchmark/agbenchmark/challenges/verticals/code/6_battleship/artifacts_in/test_negative.py
@@ -0,0 +1,100 @@
+import pytest
+from abstract_class import ShipPlacement, Turn
+from pydantic import ValidationError
+
+
+def test_ship_placement_out_of_bounds(battleship_game):
+ game_id = battleship_game.create_game()
+
+ try:
+ out_of_bounds_ship = ShipPlacement(
+ ship_type="battleship",
+ start={"row": 11, "column": "Z"},
+ direction="horizontal",
+ )
+ except ValidationError: # Use the directly imported ValidationError class
+ pass
+ else:
+ with pytest.raises(ValueError, match="Placement out of bounds"):
+ battleship_game.create_ship_placement(game_id, out_of_bounds_ship)
+
+
+def test_no_ship_overlap(battleship_game):
+ game_id = battleship_game.create_game()
+ placement1 = ShipPlacement(
+ ship_type="battleship", start={"row": 1, "column": "A"}, direction="horizontal"
+ )
+ battleship_game.create_ship_placement(game_id, placement1)
+ placement2 = ShipPlacement(
+ ship_type="cruiser", start={"row": 1, "column": "A"}, direction="horizontal"
+ )
+ with pytest.raises(ValueError):
+ battleship_game.create_ship_placement(game_id, placement2)
+
+
+def test_cant_hit_before_ships_placed(battleship_game):
+ game_id = battleship_game.create_game()
+ placement1 = ShipPlacement(
+ ship_type="battleship", start={"row": 1, "column": "A"}, direction="horizontal"
+ )
+ battleship_game.create_ship_placement(game_id, placement1)
+ placement2 = ShipPlacement(
+ ship_type="cruiser", start={"row": 4, "column": "D"}, direction="horizontal"
+ )
+ battleship_game.create_ship_placement(game_id, placement2)
+ turn = Turn(target={"row": 1, "column": "A"})
+ with pytest.raises(
+ ValueError, match="All ships must be placed before starting turns"
+ ):
+ battleship_game.create_turn(game_id, turn)
+
+
+def test_cant_place_ship_after_all_ships_placed(battleship_game, initialized_game_id):
+ game = battleship_game.get_game(initialized_game_id)
+ additional_ship = ShipPlacement(
+ ship_type="carrier", start={"row": 2, "column": "E"}, direction="horizontal"
+ )
+
+ with pytest.raises(
+ ValueError, match="All ships are already placed. Cannot place more ships."
+ ):
+ battleship_game.create_ship_placement(initialized_game_id, additional_ship)
+
+
+def test_ship_placement_invalid_direction(battleship_game):
+ game_id = battleship_game.create_game()
+
+ with pytest.raises(ValueError, match="Invalid ship direction"):
+ invalid_direction_ship = ShipPlacement(
+ ship_type="battleship",
+ start={"row": 1, "column": "A"},
+ direction="diagonal",
+ )
+ battleship_game.create_ship_placement(game_id, invalid_direction_ship)
+
+
+def test_invalid_ship_type(battleship_game):
+ game_id = battleship_game.create_game()
+ invalid_ship = ShipPlacement(
+ ship_type="spacecraft", start={"row": 1, "column": "A"}, direction="horizontal"
+ )
+ with pytest.raises(ValueError, match="Invalid ship type"):
+ battleship_game.create_ship_placement(game_id, invalid_ship)
+
+
+def test_ship_placement_extends_beyond_boundaries(battleship_game):
+ game_id = battleship_game.create_game()
+
+ with pytest.raises(ValueError, match="Ship extends beyond board boundaries"):
+ ship_extending_beyond = ShipPlacement(
+ ship_type="battleship",
+ start={"row": 1, "column": "H"},
+ direction="horizontal",
+ )
+ battleship_game.create_ship_placement(game_id, ship_extending_beyond)
+
+ with pytest.raises(ValueError, match="Ship extends beyond board boundaries"):
+ ship_extending_beyond = ShipPlacement(
+ ship_type="cruiser", start={"row": 9, "column": "A"}, direction="vertical"
+ )
+ battleship_game.create_ship_placement(game_id, ship_extending_beyond)