From 12bf56ef0319e0a6474af6ae91f1c2f98e1efaab Mon Sep 17 00:00:00 2001 From: BethanyG Date: Sun, 17 Apr 2022 00:36:34 -0700 Subject: [PATCH 1/2] Ressurected Class Based High Scores. --- .../practice/high-scores/.meta/example.py | 17 +++++------ .../practice/high-scores/.meta/template.j2 | 5 ++-- exercises/practice/high-scores/high_scores.py | 19 ++++++++----- .../practice/high-scores/high_scores_test.py | 28 ++++++++++++------- 4 files changed, 42 insertions(+), 27 deletions(-) diff --git a/exercises/practice/high-scores/.meta/example.py b/exercises/practice/high-scores/.meta/example.py index fc86075255c..d9f606639e2 100644 --- a/exercises/practice/high-scores/.meta/example.py +++ b/exercises/practice/high-scores/.meta/example.py @@ -1,11 +1,12 @@ +class HighScores: + def __init__(self, scores): + self.scores = scores -def latest(scores): - return scores[-1] + def latest(self): + return self.scores[-1] + def personal_best(self): + return max(self.scores) -def personal_best(scores): - return max(scores) - - -def personal_top_three(scores): - return sorted(scores, reverse=True)[:3] + def personal_top_three(self): + return sorted(self.scores, reverse=True)[:3] diff --git a/exercises/practice/high-scores/.meta/template.j2 b/exercises/practice/high-scores/.meta/template.j2 index 596cd34f466..a02f3a5619e 100644 --- a/exercises/practice/high-scores/.meta/template.j2 +++ b/exercises/practice/high-scores/.meta/template.j2 @@ -3,9 +3,10 @@ def test_{{ case["description"] | to_snake }}(self): scores = {{ case["input"]["scores"] }} expected = {{ case["expected"] }} - self.assertEqual({{ case["property"] | to_snake }}(scores), expected) + self.assertEqual(HighScores(scores).{{ case["property"] | to_snake }}(), expected) {% endmacro -%} -{{ macros.header(ignore=["scores"]) }} + +{{ macros.header(["HighScores"]) }} class {{ exercise | camel_case }}Test(unittest.TestCase): {%- for case in cases -%} diff --git a/exercises/practice/high-scores/high_scores.py b/exercises/practice/high-scores/high_scores.py index 0d24cdb1c1d..e7e73a2f707 100644 --- a/exercises/practice/high-scores/high_scores.py +++ b/exercises/practice/high-scores/high_scores.py @@ -1,10 +1,15 @@ -def latest(scores): - pass +# class HighScores: +# def __init__(self, scores): +# pass +class HighScores: + def __init__(self, scores): + self.scores = scores + def latest(self): + return self.scores[-1] -def personal_best(scores): - pass + def personal_best(self): + return max(self.scores) - -def personal_top_three(scores): - pass + def personal_top_three(self): + return sorted(self.scores, reverse=True)[:3] diff --git a/exercises/practice/high-scores/high_scores_test.py b/exercises/practice/high-scores/high_scores_test.py index d3495d6f96b..6610d99ddce 100644 --- a/exercises/practice/high-scores/high_scores_test.py +++ b/exercises/practice/high-scores/high_scores_test.py @@ -1,9 +1,7 @@ import unittest from high_scores import ( - latest, - personal_best, - personal_top_three, + HighScores, ) # Tests adapted from `problem-specifications//canonical-data.json` @@ -13,34 +11,44 @@ class HighScoresTest(unittest.TestCase): def test_latest_score(self): scores = [100, 0, 90, 30] expected = 30 - self.assertEqual(latest(scores), expected) + self.assertEqual(HighScores(scores).latest(), expected) def test_personal_best(self): scores = [40, 100, 70] expected = 100 - self.assertEqual(personal_best(scores), expected) + self.assertEqual(HighScores(scores).personal_best(), expected) def test_personal_top_three_from_a_list_of_scores(self): scores = [10, 30, 90, 30, 100, 20, 10, 0, 30, 40, 40, 70, 70] expected = [100, 90, 70] - self.assertEqual(personal_top_three(scores), expected) + self.assertEqual(HighScores(scores).personal_top_three(), expected) def test_personal_top_highest_to_lowest(self): scores = [20, 10, 30] expected = [30, 20, 10] - self.assertEqual(personal_top_three(scores), expected) + self.assertEqual(HighScores(scores).personal_top_three(), expected) def test_personal_top_when_there_is_a_tie(self): scores = [40, 20, 40, 30] expected = [40, 40, 30] - self.assertEqual(personal_top_three(scores), expected) + self.assertEqual(HighScores(scores).personal_top_three(), expected) def test_personal_top_when_there_are_less_than_3(self): scores = [30, 70] expected = [70, 30] - self.assertEqual(personal_top_three(scores), expected) + self.assertEqual(HighScores(scores).personal_top_three(), expected) def test_personal_top_when_there_is_only_one(self): scores = [40] expected = [40] - self.assertEqual(personal_top_three(scores), expected) + self.assertEqual(HighScores(scores).personal_top_three(), expected) + + def test_latest_score_after_personal_top_scores(self): + scores = [70, 50, 20, 30] + expected = 30 + self.assertEqual(HighScores(scores).latest_after_top_three(), expected) + + def test_scores_after_personal_top_scores(self): + scores = [30, 50, 20, 70] + expected = [30, 50, 20, 70] + self.assertEqual(HighScores(scores).scores_after_top_three(), expected) From 07de70c90006b0d5923a548ecc7c647ed8907ae8 Mon Sep 17 00:00:00 2001 From: Isaac Good Date: Mon, 18 Apr 2022 22:36:09 -0700 Subject: [PATCH 2/2] Handle latest_after properties --- exercises/practice/high-scores/.meta/template.j2 | 9 +++++++++ exercises/practice/high-scores/.meta/tests.toml | 2 -- exercises/practice/high-scores/high_scores.py | 14 +------------- exercises/practice/high-scores/high_scores_test.py | 9 +++------ 4 files changed, 13 insertions(+), 21 deletions(-) diff --git a/exercises/practice/high-scores/.meta/template.j2 b/exercises/practice/high-scores/.meta/template.j2 index a02f3a5619e..abfa13e4b00 100644 --- a/exercises/practice/high-scores/.meta/template.j2 +++ b/exercises/practice/high-scores/.meta/template.j2 @@ -3,16 +3,25 @@ def test_{{ case["description"] | to_snake }}(self): scores = {{ case["input"]["scores"] }} expected = {{ case["expected"] }} + {%- if "latest_after_" not in ( case["property"] | to_snake ) %} self.assertEqual(HighScores(scores).{{ case["property"] | to_snake }}(), expected) + {%- else %} + highscores = HighScores(scores) + highscores.{{ case["property"] | to_snake | replace("latest_after_", "personal_") }}() + self.assertEqual(highscores.latest(), expected) + {% endif -%} {% endmacro -%} {{ macros.header(["HighScores"]) }} + class {{ exercise | camel_case }}Test(unittest.TestCase): {%- for case in cases -%} {%- if "cases" in case -%} {%- for subcase in case["cases"] -%} + {%- if "scores_after_" not in ( subcase["property"] | to_snake ) %} {{- testcase(subcase) -}} + {% endif -%} {% endfor %} {%- else %} {%- if case["property"] != "scores" %} diff --git a/exercises/practice/high-scores/.meta/tests.toml b/exercises/practice/high-scores/.meta/tests.toml index ff40787cadb..c81c228848b 100644 --- a/exercises/practice/high-scores/.meta/tests.toml +++ b/exercises/practice/high-scores/.meta/tests.toml @@ -35,8 +35,6 @@ description = "Top 3 scores -> Personal top when there is only one" [2df075f9-fec9-4756-8f40-98c52a11504f] description = "Top 3 scores -> Latest score after personal top scores" -include = false [809c4058-7eb1-4206-b01e-79238b9b71bc] description = "Top 3 scores -> Scores after personal top scores" -include = false diff --git a/exercises/practice/high-scores/high_scores.py b/exercises/practice/high-scores/high_scores.py index e7e73a2f707..a981ea89a0d 100644 --- a/exercises/practice/high-scores/high_scores.py +++ b/exercises/practice/high-scores/high_scores.py @@ -1,15 +1,3 @@ -# class HighScores: -# def __init__(self, scores): -# pass class HighScores: def __init__(self, scores): - self.scores = scores - - def latest(self): - return self.scores[-1] - - def personal_best(self): - return max(self.scores) - - def personal_top_three(self): - return sorted(self.scores, reverse=True)[:3] + pass diff --git a/exercises/practice/high-scores/high_scores_test.py b/exercises/practice/high-scores/high_scores_test.py index 6610d99ddce..f38edec9403 100644 --- a/exercises/practice/high-scores/high_scores_test.py +++ b/exercises/practice/high-scores/high_scores_test.py @@ -46,9 +46,6 @@ def test_personal_top_when_there_is_only_one(self): def test_latest_score_after_personal_top_scores(self): scores = [70, 50, 20, 30] expected = 30 - self.assertEqual(HighScores(scores).latest_after_top_three(), expected) - - def test_scores_after_personal_top_scores(self): - scores = [30, 50, 20, 70] - expected = [30, 50, 20, 70] - self.assertEqual(HighScores(scores).scores_after_top_three(), expected) + highscores = HighScores(scores) + highscores.personal_top_three() + self.assertEqual(highscores.latest(), expected)