From 4ebb0bf393fe24cd4e602c2ab438caca9ebc5f80 Mon Sep 17 00:00:00 2001 From: Jonathan Lamothe Date: Wed, 21 Aug 2024 18:35:03 -0400 Subject: [PATCH] implemented `resetAbacus` and `rungList` --- src/Abacus.hs | 11 +++++++++++ test/AbacusSpec.hs | 16 ++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/src/Abacus.hs b/src/Abacus.hs index d88aabe..53e59ec 100644 --- a/src/Abacus.hs +++ b/src/Abacus.hs @@ -34,6 +34,8 @@ module Abacus ( getRung, setRung, rungL, + resetAbacus, + rungList, ) where import Data.List (find) @@ -105,4 +107,13 @@ rungL n = lens (fromJust . getRung n) (flip $ setRung n) +-- | Resets all the beads on an 'Abacus' +resetAbacus :: Abacus -> Abacus +resetAbacus a = a + { abacusRungs = map (const 0) (abacusRungs a) } + +-- | Returns values on each rung as a list +rungList :: Abacus -> [Int] +rungList = abacusRungs + --jl diff --git a/test/AbacusSpec.hs b/test/AbacusSpec.hs index 40298c3..85e6689 100644 --- a/test/AbacusSpec.hs +++ b/test/AbacusSpec.hs @@ -42,6 +42,8 @@ spec = describe "Abacus" $ do getRungSpec setRungSpec rungLSpec + resetAbacusSpec + rungListSpec newAbacusSpec :: Spec newAbacusSpec = describe "newAbacusSpec" $ mapM_ @@ -142,4 +144,18 @@ rungLSpec = describe "rungL" $ do , ( "invalid rung", -1, mkA [2, 3, 5] ) ] +resetAbacusSpec :: Spec +resetAbacusSpec = describe "resetAbacus" $ let + expected = Abacus 10 [0, 0, 0] + in it ("should be " ++ show expected) $ let + actual = resetAbacus $ Abacus 10 [2, 3, 5] + in expected `shouldBe` actual + +rungListSpec :: Spec +rungListSpec = describe "rungList" $ let + expected = [2, 3, 5] + in it ("should be " ++ show expected) $ let + actual = rungList $ Abacus 10 [2, 3, 5] + in expected `shouldBe` actual + --jl