2017-04-08 15:59:35 +05:30
|
|
|
import unittest
|
|
|
|
|
|
2021-01-31 16:49:12 -05:00
|
|
|
from transpose import (
|
|
|
|
|
transpose,
|
|
|
|
|
)
|
2017-04-08 15:59:35 +05:30
|
|
|
|
2020-10-15 12:46:24 -04:00
|
|
|
# Tests adapted from `problem-specifications//canonical-data.json`
|
2017-04-08 15:59:35 +05:30
|
|
|
|
2019-10-03 21:26:36 +02:00
|
|
|
|
2018-06-13 09:12:09 -04:00
|
|
|
class TransposeTest(unittest.TestCase):
|
2017-04-08 15:59:35 +05:30
|
|
|
def test_empty_string(self):
|
2019-05-31 18:29:43 +02:00
|
|
|
lines = []
|
|
|
|
|
expected = []
|
2019-10-03 21:26:36 +02:00
|
|
|
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
|
2017-04-08 15:59:35 +05:30
|
|
|
|
|
|
|
|
def test_two_characters_in_a_row(self):
|
2019-10-03 21:26:36 +02:00
|
|
|
lines = ["A1"]
|
|
|
|
|
expected = ["A", "1"]
|
|
|
|
|
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
|
2017-04-08 15:59:35 +05:30
|
|
|
|
|
|
|
|
def test_two_characters_in_a_column(self):
|
2019-10-03 21:26:36 +02:00
|
|
|
lines = ["A", "1"]
|
|
|
|
|
expected = ["A1"]
|
|
|
|
|
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
|
2017-04-08 15:59:35 +05:30
|
|
|
|
|
|
|
|
def test_simple(self):
|
2019-10-03 21:26:36 +02:00
|
|
|
lines = ["ABC", "123"]
|
|
|
|
|
expected = ["A1", "B2", "C3"]
|
|
|
|
|
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
|
2017-04-08 15:59:35 +05:30
|
|
|
|
|
|
|
|
def test_single_line(self):
|
2019-05-31 18:29:43 +02:00
|
|
|
lines = ["Single line."]
|
2019-10-03 21:26:36 +02:00
|
|
|
expected = ["S", "i", "n", "g", "l", "e", " ", "l", "i", "n", "e", "."]
|
|
|
|
|
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
|
2017-04-08 15:59:35 +05:30
|
|
|
|
|
|
|
|
def test_first_line_longer_than_second_line(self):
|
2019-10-03 21:26:36 +02:00
|
|
|
lines = ["The fourth line.", "The fifth line."]
|
2017-04-08 15:59:35 +05:30
|
|
|
expected = [
|
|
|
|
|
"TT",
|
|
|
|
|
"hh",
|
|
|
|
|
"ee",
|
|
|
|
|
" ",
|
|
|
|
|
"ff",
|
|
|
|
|
"oi",
|
|
|
|
|
"uf",
|
|
|
|
|
"rt",
|
|
|
|
|
"th",
|
|
|
|
|
"h ",
|
|
|
|
|
" l",
|
|
|
|
|
"li",
|
|
|
|
|
"in",
|
|
|
|
|
"ne",
|
|
|
|
|
"e.",
|
2019-10-03 21:26:36 +02:00
|
|
|
".",
|
2017-04-08 15:59:35 +05:30
|
|
|
]
|
2019-10-03 21:26:36 +02:00
|
|
|
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
|
2017-04-08 15:59:35 +05:30
|
|
|
|
|
|
|
|
def test_second_line_longer_than_first_line(self):
|
2019-10-03 21:26:36 +02:00
|
|
|
lines = ["The first line.", "The second line."]
|
2017-04-08 15:59:35 +05:30
|
|
|
expected = [
|
|
|
|
|
"TT",
|
|
|
|
|
"hh",
|
|
|
|
|
"ee",
|
|
|
|
|
" ",
|
|
|
|
|
"fs",
|
|
|
|
|
"ie",
|
|
|
|
|
"rc",
|
|
|
|
|
"so",
|
|
|
|
|
"tn",
|
|
|
|
|
" d",
|
|
|
|
|
"l ",
|
|
|
|
|
"il",
|
|
|
|
|
"ni",
|
|
|
|
|
"en",
|
|
|
|
|
".e",
|
2019-10-03 21:26:36 +02:00
|
|
|
" .",
|
2017-04-08 15:59:35 +05:30
|
|
|
]
|
2019-10-03 21:26:36 +02:00
|
|
|
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
|
2019-05-31 18:29:43 +02:00
|
|
|
|
|
|
|
|
def test_mixed_line_length(self):
|
2019-10-03 21:26:36 +02:00
|
|
|
lines = ["The longest line.", "A long line.", "A longer line.", "A line."]
|
2019-05-31 18:29:43 +02:00
|
|
|
expected = [
|
|
|
|
|
"TAAA",
|
|
|
|
|
"h ",
|
|
|
|
|
"elll",
|
|
|
|
|
" ooi",
|
|
|
|
|
"lnnn",
|
|
|
|
|
"ogge",
|
|
|
|
|
"n e.",
|
|
|
|
|
"glr",
|
|
|
|
|
"ei ",
|
|
|
|
|
"snl",
|
|
|
|
|
"tei",
|
|
|
|
|
" .n",
|
|
|
|
|
"l e",
|
|
|
|
|
"i .",
|
|
|
|
|
"n",
|
|
|
|
|
"e",
|
2019-10-03 21:26:36 +02:00
|
|
|
".",
|
2019-05-31 18:29:43 +02:00
|
|
|
]
|
2019-10-03 21:26:36 +02:00
|
|
|
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
|
2017-04-08 15:59:35 +05:30
|
|
|
|
|
|
|
|
def test_square(self):
|
2019-10-03 21:26:36 +02:00
|
|
|
lines = ["HEART", "EMBER", "ABUSE", "RESIN", "TREND"]
|
|
|
|
|
expected = ["HEART", "EMBER", "ABUSE", "RESIN", "TREND"]
|
|
|
|
|
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
|
2017-04-08 15:59:35 +05:30
|
|
|
|
|
|
|
|
def test_rectangle(self):
|
2019-10-03 21:26:36 +02:00
|
|
|
lines = ["FRACTURE", "OUTLINED", "BLOOMING", "SEPTETTE"]
|
|
|
|
|
expected = ["FOBS", "RULE", "ATOP", "CLOT", "TIME", "UNIT", "RENT", "EDGE"]
|
|
|
|
|
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
|
2017-04-08 15:59:35 +05:30
|
|
|
|
|
|
|
|
def test_triangle(self):
|
2019-10-03 21:26:36 +02:00
|
|
|
lines = ["T", "EE", "AAA", "SSSS", "EEEEE", "RRRRRR"]
|
|
|
|
|
expected = ["TEASER", " EASER", " ASER", " SER", " ER", " R"]
|
|
|
|
|
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
|
2017-04-08 15:59:35 +05:30
|
|
|
|
|
|
|
|
|
2019-10-03 21:26:36 +02:00
|
|
|
if __name__ == "__main__":
|
2017-04-08 15:59:35 +05:30
|
|
|
unittest.main()
|