import unittest

from rectangles import (
    rectangles,
)

# Tests adapted from `problem-specifications//canonical-data.json`


class RectanglesTest(unittest.TestCase):
    def test_no_rows(self):
        self.assertEqual(rectangles([]), 0)

    def test_no_columns(self):
        self.assertEqual(rectangles([""]), 0)

    def test_no_rectangles(self):
        self.assertEqual(rectangles([" "]), 0)

    def test_one_rectangle(self):
        self.assertEqual(rectangles(["+-+", "| |", "+-+"]), 1)

    def test_two_rectangles_without_shared_parts(self):
        self.assertEqual(rectangles(["  +-+", "  | |", "+-+-+", "| |  ", "+-+  "]), 2)

    def test_five_rectangles_with_shared_parts(self):
        self.assertEqual(rectangles(["  +-+", "  | |", "+-+-+", "| | |", "+-+-+"]), 5)

    def test_rectangle_of_height_1_is_counted(self):
        self.assertEqual(rectangles(["+--+", "+--+"]), 1)

    def test_rectangle_of_width_1_is_counted(self):
        self.assertEqual(rectangles(["++", "||", "++"]), 1)

    def test_1x1_square_is_counted(self):
        self.assertEqual(rectangles(["++", "++"]), 1)

    def test_only_complete_rectangles_are_counted(self):
        self.assertEqual(rectangles(["  +-+", "    |", "+-+-+", "| | -", "+-+-+"]), 1)

    def test_rectangles_can_be_of_different_sizes(self):
        self.assertEqual(
            rectangles(
                [
                    "+------+----+",
                    "|      |    |",
                    "+---+--+    |",
                    "|   |       |",
                    "+---+-------+",
                ]
            ),
            3,
        )

    def test_corner_is_required_for_a_rectangle_to_be_complete(self):
        self.assertEqual(
            rectangles(
                [
                    "+------+----+",
                    "|      |    |",
                    "+------+    |",
                    "|   |       |",
                    "+---+-------+",
                ]
            ),
            2,
        )

    def test_large_input_with_many_rectangles(self):
        self.assertEqual(
            rectangles(
                [
                    "+---+--+----+",
                    "|   +--+----+",
                    "+---+--+    |",
                    "|   +--+----+",
                    "+---+--+--+-+",
                    "+---+--+--+-+",
                    "+------+  | |",
                    "          +-+",
                ]
            ),
            60,
        )


if __name__ == "__main__":
    unittest.main()
