Skip to content

Commit 6cd7939

Browse files
tqa236yawpitch
authored andcommitted
Add test template for alphametics (#2122)
* Add test template for alphametics * Skip a test
1 parent 57d745a commit 6cd7939

File tree

2 files changed

+57
-73
lines changed

2 files changed

+57
-73
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{%- import "generator_macros.j2" as macros with context -%}
2+
{{ macros.header() }}
3+
4+
class {{ exercise | camel_case }}Test(unittest.TestCase):
5+
{% for case in cases[0]["cases"] -%}
6+
{% set description = case["description"] | to_snake -%}
7+
{% set value = case["input"]["puzzle"] -%}
8+
{% if value|length > 100 -%}
9+
# Reason to skip this test at https://github.com/exercism/python/pull/1358
10+
@unittest.skip("extra-credit")
11+
{% endif %}
12+
def test_{{ description }}(self):
13+
{% set expected = case["expected"] -%}
14+
self.assertEqual({{ case["property"] }}("{{ value }}"), {{ expected }})
15+
16+
{% endfor %}
17+
18+
{{ macros.footer() }}

exercises/alphametics/alphametics_test.py

Lines changed: 39 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
from alphametics import solve
44

5-
65
# Tests adapted from `problem-specifications//canonical-data.json` @ v1.3.0
76

7+
88
class AlphameticsTest(unittest.TestCase):
99
def test_puzzle_with_three_letters(self):
1010
self.assertEqual(solve("I + BB == ILL"), {"I": 1, "B": 9, "L": 0})
@@ -18,102 +18,68 @@ def test_leading_zero_solution_is_invalid(self):
1818
def test_puzzle_with_two_digits_final_carry(self):
1919
self.assertEqual(
2020
solve("A + A + A + A + A + A + A + A + A + A + A + B == BCC"),
21-
{"A": 9,
22-
"B": 1,
23-
"C": 0})
21+
{"A": 9, "B": 1, "C": 0},
22+
)
2423

2524
def test_puzzle_with_four_letters(self):
26-
self.assertEqual(
27-
solve("AS + A == MOM"), {"A": 9, "S": 2, "M": 1, "O": 0})
25+
self.assertEqual(solve("AS + A == MOM"), {"A": 9, "S": 2, "M": 1, "O": 0})
2826

2927
def test_puzzle_with_six_letters(self):
3028
self.assertEqual(
3129
solve("NO + NO + TOO == LATE"),
32-
{"N": 7,
33-
"O": 4,
34-
"T": 9,
35-
"L": 1,
36-
"A": 0,
37-
"E": 2})
30+
{"N": 7, "O": 4, "T": 9, "L": 1, "A": 0, "E": 2},
31+
)
3832

3933
def test_puzzle_with_seven_letters(self):
4034
self.assertEqual(
4135
solve("HE + SEES + THE == LIGHT"),
42-
{"E": 4,
43-
"G": 2,
44-
"H": 5,
45-
"I": 0,
46-
"L": 1,
47-
"S": 9,
48-
"T": 7})
36+
{"E": 4, "G": 2, "H": 5, "I": 0, "L": 1, "S": 9, "T": 7},
37+
)
4938

5039
def test_puzzle_with_eight_letters(self):
5140
self.assertEqual(
5241
solve("SEND + MORE == MONEY"),
53-
{"S": 9,
54-
"E": 5,
55-
"N": 6,
56-
"D": 7,
57-
"M": 1,
58-
"O": 0,
59-
"R": 8,
60-
"Y": 2})
42+
{"S": 9, "E": 5, "N": 6, "D": 7, "M": 1, "O": 0, "R": 8, "Y": 2},
43+
)
6144

6245
def test_puzzle_with_ten_letters(self):
6346
self.assertEqual(
6447
solve("AND + A + STRONG + OFFENSE + AS + A + GOOD == DEFENSE"),
65-
{"A": 5,
66-
"D": 3,
67-
"E": 4,
68-
"F": 7,
69-
"G": 8,
70-
"N": 0,
71-
"O": 2,
72-
"R": 1,
73-
"S": 6,
74-
"T": 9})
48+
{
49+
"A": 5,
50+
"D": 3,
51+
"E": 4,
52+
"F": 7,
53+
"G": 8,
54+
"N": 0,
55+
"O": 2,
56+
"R": 1,
57+
"S": 6,
58+
"T": 9,
59+
},
60+
)
7561

62+
# Reason to skip this test at https://github.com/exercism/python/pull/1358
7663
@unittest.skip("extra-credit")
7764
def test_puzzle_with_ten_letters_and_199_addends(self):
7865
self.assertEqual(
7966
solve(
80-
"THIS + A + FIRE + THEREFORE + FOR + ALL + HISTORIES + I + "
81-
"TELL + A + TALE + THAT + FALSIFIES + ITS + TITLE + TIS + "
82-
"A + LIE + THE + TALE + OF + THE + LAST + FIRE + HORSES + "
83-
"LATE + AFTER + THE + FIRST + FATHERS + FORESEE + THE + "
84-
"HORRORS + THE + LAST + FREE + TROLL + TERRIFIES + THE + "
85-
"HORSES + OF + FIRE + THE + TROLL + RESTS + AT + THE + "
86-
"HOLE + OF + LOSSES + IT + IS + THERE + THAT + SHE + STORES + "
87-
"ROLES + OF + LEATHERS + AFTER + SHE + SATISFIES + HER + "
88-
"HATE + OFF + THOSE + FEARS + A + TASTE + RISES + AS + SHE + "
89-
"HEARS + THE + LEAST + FAR + HORSE + THOSE + FAST + HORSES + "
90-
"THAT + FIRST + HEAR + THE + TROLL + FLEE + OFF + TO + THE + "
91-
"FOREST + THE + HORSES + THAT + ALERTS + RAISE + THE + "
92-
"STARES + OF + THE + OTHERS + AS + THE + TROLL + ASSAILS + "
93-
"AT + THE + TOTAL + SHIFT + HER + TEETH + TEAR + HOOF + OFF + "
94-
"TORSO + AS + THE + LAST + HORSE + FORFEITS + ITS + LIFE + "
95-
"THE + FIRST + FATHERS + HEAR + OF + THE + HORRORS + THEIR + "
96-
"FEARS + THAT + THE + FIRES + FOR + THEIR + FEASTS + ARREST + "
97-
"AS + THE + FIRST + FATHERS + RESETTLE + THE + LAST + OF + "
98-
"THE + FIRE + HORSES + THE + LAST + TROLL + HARASSES + THE + "
99-
"FOREST + HEART + FREE + AT + LAST + OF + THE + LAST + "
100-
"TROLL + ALL + OFFER + THEIR + FIRE + HEAT + TO + THE + "
101-
"ASSISTERS + FAR + OFF + THE + TROLL + FASTS + ITS + LIFE + "
102-
"SHORTER + AS + STARS + RISE + THE + HORSES + REST + SAFE + "
103-
"AFTER + ALL + SHARE + HOT + FISH + AS + THEIR + AFFILIATES + "
104-
"TAILOR + A + ROOFS + FOR + THEIR + SAFE == FORTRESSES"
67+
"THIS + A + FIRE + THEREFORE + FOR + ALL + HISTORIES + I + TELL + A + TALE + THAT + FALSIFIES + ITS + TITLE + TIS + A + LIE + THE + TALE + OF + THE + LAST + FIRE + HORSES + LATE + AFTER + THE + FIRST + FATHERS + FORESEE + THE + HORRORS + THE + LAST + FREE + TROLL + TERRIFIES + THE + HORSES + OF + FIRE + THE + TROLL + RESTS + AT + THE + HOLE + OF + LOSSES + IT + IS + THERE + THAT + SHE + STORES + ROLES + OF + LEATHERS + AFTER + SHE + SATISFIES + HER + HATE + OFF + THOSE + FEARS + A + TASTE + RISES + AS + SHE + HEARS + THE + LEAST + FAR + HORSE + THOSE + FAST + HORSES + THAT + FIRST + HEAR + THE + TROLL + FLEE + OFF + TO + THE + FOREST + THE + HORSES + THAT + ALERTS + RAISE + THE + STARES + OF + THE + OTHERS + AS + THE + TROLL + ASSAILS + AT + THE + TOTAL + SHIFT + HER + TEETH + TEAR + HOOF + OFF + TORSO + AS + THE + LAST + HORSE + FORFEITS + ITS + LIFE + THE + FIRST + FATHERS + HEAR + OF + THE + HORRORS + THEIR + FEARS + THAT + THE + FIRES + FOR + THEIR + FEASTS + ARREST + AS + THE + FIRST + FATHERS + RESETTLE + THE + LAST + OF + THE + FIRE + HORSES + THE + LAST + TROLL + HARASSES + THE + FOREST + HEART + FREE + AT + LAST + OF + THE + LAST + TROLL + ALL + OFFER + THEIR + FIRE + HEAT + TO + THE + ASSISTERS + FAR + OFF + THE + TROLL + FASTS + ITS + LIFE + SHORTER + AS + STARS + RISE + THE + HORSES + REST + SAFE + AFTER + ALL + SHARE + HOT + FISH + AS + THEIR + AFFILIATES + TAILOR + A + ROOFS + FOR + THEIR + SAFE == FORTRESSES"
10568
),
106-
{"A": 1,
107-
"E": 0,
108-
"F": 5,
109-
"H": 8,
110-
"I": 7,
111-
"L": 2,
112-
"O": 6,
113-
"R": 3,
114-
"S": 4,
115-
"T": 9})
69+
{
70+
"A": 1,
71+
"E": 0,
72+
"F": 5,
73+
"H": 8,
74+
"I": 7,
75+
"L": 2,
76+
"O": 6,
77+
"R": 3,
78+
"S": 4,
79+
"T": 9,
80+
},
81+
)
11682

11783

118-
if __name__ == '__main__':
84+
if __name__ == "__main__":
11985
unittest.main()

0 commit comments

Comments
 (0)