Skip to content

Commit c09ffd3

Browse files
committed
Solve 'Is it even?' kata
1 parent 27dd8c0 commit c09ffd3

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

src/Even.hs

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
module Even (isEven) where
2+
3+
-- https://www.codewars.com/kata/555a67db74814aa4ee0001b5/train/haskell
4+
5+
isEven :: Double -> Bool
6+
isEven n = remainder == 0.0
7+
where
8+
(_, remainder) = divMod' n 2
9+
10+
divMod' :: Double -> Int -> (Int, Double)
11+
divMod' a b = (d', a - d * b')
12+
where
13+
b' = fromIntegral b :: Double
14+
d' = floor (a / b') :: Int
15+
d = fromIntegral d' :: Double
16+
17+
-- #againwhatlearned: Use mod' or divMod' from Data.Fixed module:
18+
-- import Data.Fixed (mod')
19+
-- isEven n = mod' n 2 == 0

test/EvenSpec.hs

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
module EvenSpec where
2+
3+
import Even (isEven)
4+
import Test.Hspec
5+
import Text.Printf (printf)
6+
7+
spec :: Spec
8+
spec = do
9+
describe "Fixed Tests" $ do
10+
it "isEven 0" $ isEven 0 `shouldBe` True
11+
it "isEven 0.5" $ isEven 0.5 `shouldBe` False
12+
it "isEven 1" $ isEven 1 `shouldBe` False
13+
it "isEven 2" $ isEven 2 `shouldBe` True
14+
it "isEven (-4)" $ isEven (-4) `shouldBe` True
15+
it "isEven 15" $ isEven 15 `shouldBe` False
16+
it "isEven 20" $ isEven 20 `shouldBe` True
17+
it "isEven 220" $ isEven 220 `shouldBe` True
18+
it "isEven 222222221" $ isEven 222222221 `shouldBe` False
19+
it "isEven 500000000" $ isEven 500000000 `shouldBe` True

0 commit comments

Comments
 (0)