2015-09-03 13:27:42 -04:00
|
|
|
import unittest
|
|
|
|
|
|
2019-06-11 10:54:04 -07:00
|
|
|
from rectangles import rectangles
|
2015-09-03 13:27:42 -04:00
|
|
|
|
2015-11-08 01:31:17 +01:00
|
|
|
|
2018-02-20 01:32:32 +08:00
|
|
|
# Tests adapted from `problem-specifications//canonical-data.json` @ v1.1.0
|
2017-04-08 08:23:43 +02:00
|
|
|
|
2018-06-13 09:12:09 -04:00
|
|
|
class RectanglesTest(unittest.TestCase):
|
2017-04-08 08:23:43 +02:00
|
|
|
def test_no_rows(self):
|
2019-06-11 10:54:04 -07:00
|
|
|
self.assertEqual(rectangles([]), 0)
|
2015-11-08 01:31:17 +01:00
|
|
|
|
2017-04-08 08:23:43 +02:00
|
|
|
def test_no_columns(self):
|
2019-06-11 10:54:04 -07:00
|
|
|
self.assertEqual(rectangles(['']), 0)
|
2015-09-03 13:27:42 -04:00
|
|
|
|
2017-04-08 08:23:43 +02:00
|
|
|
def test_no_rectangles(self):
|
2019-06-11 10:54:04 -07:00
|
|
|
self.assertEqual(rectangles([' ']), 0)
|
2015-09-03 13:27:42 -04:00
|
|
|
|
2015-11-08 01:31:17 +01:00
|
|
|
def test_one_rectangle(self):
|
2019-06-11 10:54:04 -07:00
|
|
|
strings = ['+-+',
|
|
|
|
|
'| |',
|
|
|
|
|
'+-+']
|
|
|
|
|
self.assertEqual(rectangles(strings), 1)
|
2015-09-03 13:27:42 -04:00
|
|
|
|
2017-04-08 08:23:43 +02:00
|
|
|
def test_two_rectangles_without_shared_parts(self):
|
2019-06-11 10:54:04 -07:00
|
|
|
strings = [' +-+',
|
|
|
|
|
' | |',
|
|
|
|
|
'+-+-+',
|
|
|
|
|
'| | ',
|
|
|
|
|
'+-+ ']
|
|
|
|
|
self.assertEqual(rectangles(strings), 2)
|
2015-09-03 13:27:42 -04:00
|
|
|
|
2017-04-08 08:23:43 +02:00
|
|
|
def test_five_rectangles_with_shared_parts(self):
|
2019-06-11 10:54:04 -07:00
|
|
|
strings = [' +-+',
|
|
|
|
|
' | |',
|
|
|
|
|
'+-+-+',
|
|
|
|
|
'| | |',
|
|
|
|
|
'+-+-+']
|
|
|
|
|
self.assertEqual(rectangles(strings), 5)
|
2015-09-03 13:27:42 -04:00
|
|
|
|
2017-04-08 08:23:43 +02:00
|
|
|
def test_rectangle_of_height_1_is_counted(self):
|
2019-06-11 10:54:04 -07:00
|
|
|
strings = ['+--+',
|
|
|
|
|
'+--+']
|
|
|
|
|
self.assertEqual(rectangles(strings), 1)
|
2017-04-08 08:23:43 +02:00
|
|
|
|
|
|
|
|
def test_rectangle_of_width_1_is_counted(self):
|
2019-06-11 10:54:04 -07:00
|
|
|
strings = ['++',
|
|
|
|
|
'||',
|
|
|
|
|
'++']
|
|
|
|
|
self.assertEqual(rectangles(strings), 1)
|
2017-04-08 08:23:43 +02:00
|
|
|
|
|
|
|
|
def test_1x1_square_is_counted(self):
|
2019-06-11 10:54:04 -07:00
|
|
|
strings = ['++',
|
|
|
|
|
'++']
|
|
|
|
|
self.assertEqual(rectangles(strings), 1)
|
2017-04-08 08:23:43 +02:00
|
|
|
|
|
|
|
|
def test_only_complete_rectangles_are_counted(self):
|
2019-06-11 10:54:04 -07:00
|
|
|
strings = [' +-+',
|
|
|
|
|
' |',
|
|
|
|
|
'+-+-+',
|
|
|
|
|
'| | -',
|
|
|
|
|
'+-+-+']
|
|
|
|
|
self.assertEqual(rectangles(strings), 1)
|
2015-09-03 13:27:42 -04:00
|
|
|
|
2017-04-08 08:23:43 +02:00
|
|
|
def test_rectangles_can_be_of_different_sizes(self):
|
2019-06-11 10:54:04 -07:00
|
|
|
strings = ['+------+----+',
|
|
|
|
|
'| | |',
|
|
|
|
|
'+---+--+ |',
|
|
|
|
|
'| | |',
|
|
|
|
|
'+---+-------+']
|
|
|
|
|
self.assertEqual(rectangles(strings), 3)
|
2015-09-03 13:27:42 -04:00
|
|
|
|
2017-04-08 08:23:43 +02:00
|
|
|
def test_corner_is_required_for_a_rectangle_to_be_complete(self):
|
2019-06-11 10:54:04 -07:00
|
|
|
strings = ['+------+----+',
|
|
|
|
|
'| | |',
|
|
|
|
|
'+------+ |',
|
|
|
|
|
'| | |',
|
|
|
|
|
'+---+-------+']
|
|
|
|
|
self.assertEqual(rectangles(strings), 2)
|
2015-09-03 13:27:42 -04:00
|
|
|
|
2017-04-08 08:23:43 +02:00
|
|
|
def test_large_input_with_many_rectangles(self):
|
2019-06-11 10:54:04 -07:00
|
|
|
strings = ['+---+--+----+',
|
|
|
|
|
'| +--+----+',
|
|
|
|
|
'+---+--+ |',
|
|
|
|
|
'| +--+----+',
|
|
|
|
|
'+---+--+--+-+',
|
|
|
|
|
'+---+--+--+-+',
|
|
|
|
|
'+------+ | |',
|
|
|
|
|
' +-+']
|
|
|
|
|
self.assertEqual(rectangles(strings), 60)
|
2017-04-08 08:23:43 +02:00
|
|
|
|
2016-11-29 09:44:47 +01:00
|
|
|
|
2015-09-03 13:27:42 -04:00
|
|
|
if __name__ == '__main__':
|
2015-11-08 01:31:17 +01:00
|
|
|
unittest.main()
|