implemented getRung
This commit is contained in:
parent
24a1f2f10c
commit
768497d399
|
@ -24,7 +24,15 @@ License along with this program. If not, see
|
||||||
|
|
||||||
-}
|
-}
|
||||||
|
|
||||||
module Abacus (Abacus, newAbacus, getNumBeads, getNumRungs) where
|
module Abacus (
|
||||||
|
Abacus,
|
||||||
|
newAbacus,
|
||||||
|
getNumBeads,
|
||||||
|
getNumRungs,
|
||||||
|
getRung,
|
||||||
|
) where
|
||||||
|
|
||||||
|
import Data.List (find)
|
||||||
|
|
||||||
import Abacus.Internal
|
import Abacus.Internal
|
||||||
|
|
||||||
|
@ -48,4 +56,16 @@ getNumBeads = abacusNumBeads
|
||||||
getNumRungs :: Abacus -> Int
|
getNumRungs :: Abacus -> Int
|
||||||
getNumRungs = length . abacusRungs
|
getNumRungs = length . abacusRungs
|
||||||
|
|
||||||
|
-- | Returns the number of beads slid across a given rung
|
||||||
|
getRung
|
||||||
|
:: Int
|
||||||
|
-- ^ The rung number
|
||||||
|
-> Abacus
|
||||||
|
-- ^ Abacus being checked
|
||||||
|
-> Maybe Int
|
||||||
|
-- ^ The number of beads slid across (if the rung exists)
|
||||||
|
getRung r a = snd <$> find
|
||||||
|
(\(n, _) -> n == r)
|
||||||
|
(zip [0..] $ abacusRungs a)
|
||||||
|
|
||||||
--jl
|
--jl
|
||||||
|
|
|
@ -32,6 +32,7 @@ spec = describe "Abacus" $ do
|
||||||
newAbacusSpec
|
newAbacusSpec
|
||||||
getNumBeadsSpec
|
getNumBeadsSpec
|
||||||
getNumRungsSpec
|
getNumRungsSpec
|
||||||
|
getRungSpec
|
||||||
|
|
||||||
newAbacusSpec :: Spec
|
newAbacusSpec :: Spec
|
||||||
newAbacusSpec = describe "newAbacusSpec" $ mapM_
|
newAbacusSpec = describe "newAbacusSpec" $ mapM_
|
||||||
|
@ -73,4 +74,18 @@ getNumRungsSpec = describe "getNumRungs" $ mapM_
|
||||||
tenRungs = build 10
|
tenRungs = build 10
|
||||||
build n = fromJust $ newAbacus 10 n
|
build n = fromJust $ newAbacus 10 n
|
||||||
|
|
||||||
|
getRungSpec :: Spec
|
||||||
|
getRungSpec = describe "getRung" $ mapM_
|
||||||
|
( \(desc, rung, expected) -> context desc $ let
|
||||||
|
actual = getRung rung abacus
|
||||||
|
in it ("should be " ++ show expected) $
|
||||||
|
actual `shouldBe` expected
|
||||||
|
)
|
||||||
|
[ ( "0th rung", 0, Just 2 )
|
||||||
|
, ( "last rung", 2, Just 5 )
|
||||||
|
, ( "negative rung", -1, Nothing )
|
||||||
|
, ( "too large", 3, Nothing )
|
||||||
|
] where
|
||||||
|
abacus = Abacus 10 [2, 3, 5]
|
||||||
|
|
||||||
--jl
|
--jl
|
||||||
|
|
Loading…
Reference in New Issue
Block a user