From 12bf56ef0319e0a6474af6ae91f1c2f98e1efaab Mon Sep 17 00:00:00 2001 From: BethanyG Date: Sun, 17 Apr 2022 00:36:34 -0700 Subject: [PATCH] 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)