File tree 2 files changed +38
-0
lines changed
2 files changed +38
-0
lines changed Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
You can’t perform that action at this time.
0 commit comments