2015-09-03 13:27:42 -04:00
|
|
|
import unittest
|
|
|
|
|
|
|
|
|
|
from rectangles import count
|
|
|
|
|
|
2015-11-08 01:31:17 +01:00
|
|
|
|
2017-04-08 08:23:43 +02:00
|
|
|
# test cases adapted from `x-common//canonical-data.json` @ version: 1.0.0
|
|
|
|
|
|
2015-09-03 13:27:42 -04:00
|
|
|
class WordTest(unittest.TestCase):
|
2017-04-08 08:23:43 +02:00
|
|
|
def test_no_rows(self):
|
|
|
|
|
self.assertEqual(count([]), 0)
|
2015-11-08 01:31:17 +01:00
|
|
|
|
2017-04-08 08:23:43 +02:00
|
|
|
def test_no_columns(self):
|
|
|
|
|
self.assertEqual(count(['']), 0)
|
2015-09-03 13:27:42 -04:00
|
|
|
|
2017-04-08 08:23:43 +02:00
|
|
|
def test_no_rectangles(self):
|
|
|
|
|
self.assertEqual(count([' ']), 0)
|
2015-09-03 13:27:42 -04:00
|
|
|
|
2015-11-08 01:31:17 +01:00
|
|
|
def test_one_rectangle(self):
|
2017-04-08 08:23:43 +02:00
|
|
|
lines = ['+-+',
|
|
|
|
|
'| |',
|
|
|
|
|
'+-+']
|
2017-03-23 13:37:20 +01:00
|
|
|
self.assertEqual(count(lines), 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):
|
|
|
|
|
lines = [' +-+',
|
|
|
|
|
' | |',
|
|
|
|
|
'+-+-+',
|
|
|
|
|
'| | ',
|
|
|
|
|
'+-+ ']
|
2017-03-23 13:37:20 +01:00
|
|
|
self.assertEqual(count(lines), 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):
|
|
|
|
|
lines = [' +-+',
|
|
|
|
|
' | |',
|
|
|
|
|
'+-+-+',
|
|
|
|
|
'| | |',
|
|
|
|
|
'+-+-+']
|
2017-03-23 13:37:20 +01:00
|
|
|
self.assertEqual(count(lines), 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):
|
|
|
|
|
lines = ['+--+',
|
|
|
|
|
'+--+']
|
|
|
|
|
self.assertEqual(count(lines), 1)
|
|
|
|
|
|
|
|
|
|
def test_rectangle_of_width_1_is_counted(self):
|
|
|
|
|
lines = ['++',
|
|
|
|
|
'||',
|
|
|
|
|
'++']
|
|
|
|
|
self.assertEqual(count(lines), 1)
|
|
|
|
|
|
|
|
|
|
def test_1x1_square_is_counted(self):
|
|
|
|
|
lines = ['++',
|
|
|
|
|
'++']
|
|
|
|
|
self.assertEqual(count(lines), 1)
|
|
|
|
|
|
|
|
|
|
def test_only_complete_rectangles_are_counted(self):
|
|
|
|
|
lines = [' +-+',
|
|
|
|
|
' |',
|
|
|
|
|
'+-+-+',
|
|
|
|
|
'| | -',
|
|
|
|
|
'+-+-+']
|
2017-03-23 13:37:20 +01:00
|
|
|
self.assertEqual(count(lines), 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):
|
|
|
|
|
lines = ['+------+----+',
|
|
|
|
|
'| | |',
|
|
|
|
|
'+---+--+ |',
|
|
|
|
|
'| | |',
|
|
|
|
|
'+---+-------+']
|
2017-03-23 13:37:20 +01:00
|
|
|
self.assertEqual(count(lines), 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):
|
|
|
|
|
lines = ['+------+----+',
|
|
|
|
|
'| | |',
|
|
|
|
|
'+------+ |',
|
|
|
|
|
'| | |',
|
|
|
|
|
'+---+-------+']
|
2017-03-23 13:37:20 +01:00
|
|
|
self.assertEqual(count(lines), 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):
|
|
|
|
|
lines = ['+---+--+----+',
|
|
|
|
|
'| +--+----+',
|
|
|
|
|
'+---+--+ |',
|
|
|
|
|
'| +--+----+',
|
|
|
|
|
'+---+--+--+-+',
|
|
|
|
|
'+---+--+--+-+',
|
|
|
|
|
'+------+ | |',
|
|
|
|
|
' +-+']
|
|
|
|
|
self.assertEqual(count(lines), 60)
|
|
|
|
|
|
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()
|