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