Skip to content

Commit

Permalink
Added join input function and changed template and test file for tran…
Browse files Browse the repository at this point in the history
…spose exercise.
  • Loading branch information
BethanyG committed Aug 26, 2024
1 parent a74dfbd commit c06613d
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 94 deletions.
3 changes: 3 additions & 0 deletions bin/generate_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,8 @@ def regex_find(s: str, find: str) -> List[Any]:
def regex_split(s: str, find: str) -> List[str]:
return re.split(find, s)

def join_test_inputs(test_inputs: list) -> str:
return "\n".join(test_inputs)

def filter_test_cases(cases: List[TypeJSON], opts: TestsTOML) -> List[TypeJSON]:
"""
Expand Down Expand Up @@ -409,6 +411,7 @@ def generate(
env.filters["regex_replace"] = regex_replace
env.filters["regex_find"] = regex_find
env.filters["regex_split"] = regex_split
env.filters["join_test_inputs"] = join_test_inputs
env.filters["zip"] = zip
env.filters["parse_datetime"] = parse_datetime
env.filters["escape_invalid_escapes"] = escape_invalid_escapes
Expand Down
15 changes: 11 additions & 4 deletions exercises/practice/transpose/.meta/template.j2
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,16 @@

class {{ exercise | camel_case }}Test(unittest.TestCase):
{% for case in cases -%}
def test_{{ case["description"] | to_snake }}(self):
lines = {{ case["input"]["lines"] }}
expected = {{ case["expected"] }}
self.assertEqual({{ case["property"] }}("\n".join(lines)), "\n".join(expected))
def test_{{ case["description"] | to_snake }}(self):
{%- if case["input"]["lines"] | length > 0 %}
text = "{{+ case["input"]["lines"] | join_test_inputs | replace('\n','\\n') }}"
expected = "{{+ case["expected"] | join_test_inputs | replace('\n','\\n') }}"


{%- else %}
text = ""
expected = ""
{%- endif %}

self.assertEqual({{ case["property"] }}(text), expected)
{% endfor %}
2 changes: 1 addition & 1 deletion exercises/practice/transpose/transpose.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
def transpose(lines):
def transpose(text):
pass
138 changes: 49 additions & 89 deletions exercises/practice/transpose/transpose_test.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# These tests are auto-generated with test data from:
# https://github.com/exercism/problem-specifications/tree/main/exercises/transpose/canonical-data.json
# File last updated on 2023-07-19
# File last updated on 2024-08-26

import unittest

Expand All @@ -11,113 +11,73 @@

class TransposeTest(unittest.TestCase):
def test_empty_string(self):
lines = []
expected = []
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
lines = ""
expected = ""

self.assertEqual(transpose(lines), expected)

def test_two_characters_in_a_row(self):
lines = ["A1"]
expected = ["A", "1"]
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
lines = "A1"
expected = "A\n1"

self.assertEqual(transpose(lines), expected)

def test_two_characters_in_a_column(self):
lines = ["A", "1"]
expected = ["A1"]
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
lines = "A\n1"
expected = "A1"

self.assertEqual(transpose(lines), expected)

def test_simple(self):
lines = ["ABC", "123"]
expected = ["A1", "B2", "C3"]
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
lines = "ABC\n123"
expected = "A1\nB2\nC3"

self.assertEqual(transpose(lines), expected)

def test_single_line(self):
lines = ["Single line."]
expected = ["S", "i", "n", "g", "l", "e", " ", "l", "i", "n", "e", "."]
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
lines = "Single line."
expected = "S\ni\nn\ng\nl\ne\n \nl\ni\nn\ne\n."

self.assertEqual(transpose(lines), expected)

def test_first_line_longer_than_second_line(self):
lines = ["The fourth line.", "The fifth line."]
expected = [
"TT",
"hh",
"ee",
" ",
"ff",
"oi",
"uf",
"rt",
"th",
"h ",
" l",
"li",
"in",
"ne",
"e.",
".",
]
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
lines = "The fourth line.\nThe fifth line."
expected = "TT\nhh\nee\n \nff\noi\nuf\nrt\nth\nh \n l\nli\nin\nne\ne.\n."

self.assertEqual(transpose(lines), expected)

def test_second_line_longer_than_first_line(self):
lines = ["The first line.", "The second line."]
expected = [
"TT",
"hh",
"ee",
" ",
"fs",
"ie",
"rc",
"so",
"tn",
" d",
"l ",
"il",
"ni",
"en",
".e",
" .",
]
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
lines = "The first line.\nThe second line."
expected = "TT\nhh\nee\n \nfs\nie\nrc\nso\ntn\n d\nl \nil\nni\nen\n.e\n ."

self.assertEqual(transpose(lines), 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)), "\n".join(expected))
lines = "The longest line.\nA long line.\nA longer line.\nA line."
expected = "TAAA\nh \nelll\n ooi\nlnnn\nogge\nn e.\nglr\nei \nsnl\ntei\n .n\nl e\ni .\nn\ne\n."

self.assertEqual(transpose(lines), expected)

def test_square(self):
lines = ["HEART", "EMBER", "ABUSE", "RESIN", "TREND"]
expected = ["HEART", "EMBER", "ABUSE", "RESIN", "TREND"]
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
lines = "HEART\nEMBER\nABUSE\nRESIN\nTREND"
expected = "HEART\nEMBER\nABUSE\nRESIN\nTREND"

self.assertEqual(transpose(lines), expected)

def test_rectangle(self):
lines = ["FRACTURE", "OUTLINED", "BLOOMING", "SEPTETTE"]
expected = ["FOBS", "RULE", "ATOP", "CLOT", "TIME", "UNIT", "RENT", "EDGE"]
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
lines = "FRACTURE\nOUTLINED\nBLOOMING\nSEPTETTE"
expected = "FOBS\nRULE\nATOP\nCLOT\nTIME\nUNIT\nRENT\nEDGE"

self.assertEqual(transpose(lines), expected)

def test_triangle(self):
lines = ["T", "EE", "AAA", "SSSS", "EEEEE", "RRRRRR"]
expected = ["TEASER", " EASER", " ASER", " SER", " ER", " R"]
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
lines = "T\nEE\nAAA\nSSSS\nEEEEE\nRRRRRR"
expected = "TEASER\n EASER\n ASER\n SER\n ER\n R"

self.assertEqual(transpose(lines), expected)

def test_jagged_triangle(self):
lines = ["11", "2", "3333", "444", "555555", "66666"]
expected = ["123456", "1 3456", " 3456", " 3 56", " 56", " 5"]
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
lines = "11\n2\n3333\n444\n555555\n66666"
expected = "123456\n1 3456\n 3456\n 3 56\n 56\n 5"

self.assertEqual(transpose(lines), expected)

0 comments on commit c06613d

Please sign in to comment.