Sha256: 504789fb2a8b8666b01e9e9994e84a4d6b97c8f522a37272aef483a2ee7c296a

Contents?: true

Size: 1.61 KB

Versions: 152

Compression:

Stored size: 1.61 KB

Contents

{-# OPTIONS_GHC -fno-warn-type-defaults #-}

import Data.Foldable     (for_)
import Test.Hspec        (Spec, describe, it, shouldBe)
import Test.Hspec.Runner (configFastFail, defaultConfig, hspecWith)

import Grains (square, total)

main :: IO ()
main = hspecWith defaultConfig {configFastFail = True} specs

specs :: Spec
specs = describe "grains" $ do
          describe "square" $ for_ squareCases squareTest
          describe "total"  $ totalTest totalCase
  where

    squareTest (description, n, expected) = it description assertion
      where
        assertion  = expression `shouldBe` expected
        expression = fmap fromIntegral . square . fromIntegral $ n

    totalTest (description, expected) = it description assertion
      where
        assertion = fromIntegral total `shouldBe` expected

-- Test cases adapted from `exercism/x-common/grains` on 2016-11-06.

squareCases :: [(String, Integer, Maybe Integer)]
squareCases =
    [ ("square 1"             ,  1, Just                   1)
    , ("square 2"             ,  2, Just                   2)
    , ("square 3"             ,  3, Just                   4)
    , ("square 4"             ,  4, Just                   8)
    , ("square 16"            , 16, Just               32768)
    , ("square 32"            , 32, Just          2147483648)
    , ("square 64"            , 64, Just 9223372036854775808)
    , ("square negative"      , -1, Nothing                 )
    , ("square 0"             ,  0, Nothing                 )
    , ("square bigger than 64", 65, Nothing                 ) ]

totalCase :: (String, Integer)
totalCase = ("total grains", 18446744073709551615)

Version data entries

152 entries across 152 versions & 1 rubygems

Version Path
trackler-2.1.0.9 tracks/haskell/exercises/grains/test/Tests.hs
trackler-2.1.0.8 tracks/haskell/exercises/grains/test/Tests.hs
trackler-2.1.0.7 tracks/haskell/exercises/grains/test/Tests.hs
trackler-2.1.0.6 tracks/haskell/exercises/grains/test/Tests.hs
trackler-2.1.0.5 tracks/haskell/exercises/grains/test/Tests.hs
trackler-2.1.0.4 tracks/haskell/exercises/grains/test/Tests.hs
trackler-2.1.0.3 tracks/haskell/exercises/grains/test/Tests.hs
trackler-2.1.0.2 tracks/haskell/exercises/grains/test/Tests.hs
trackler-2.1.0.1 tracks/haskell/exercises/grains/test/Tests.hs
trackler-2.1.0.0 tracks/haskell/exercises/grains/test/Tests.hs
trackler-2.0.8.55 tracks/haskell/exercises/grains/test/Tests.hs
trackler-2.0.8.54 tracks/haskell/exercises/grains/test/Tests.hs
trackler-2.0.8.53 tracks/haskell/exercises/grains/test/Tests.hs
trackler-2.0.8.52 tracks/haskell/exercises/grains/test/Tests.hs
trackler-2.0.8.51 tracks/haskell/exercises/grains/test/Tests.hs
trackler-2.0.8.50 tracks/haskell/exercises/grains/test/Tests.hs
trackler-2.0.8.49 tracks/haskell/exercises/grains/test/Tests.hs
trackler-2.0.8.48 tracks/haskell/exercises/grains/test/Tests.hs
trackler-2.0.8.47 tracks/haskell/exercises/grains/test/Tests.hs
trackler-2.0.8.46 tracks/haskell/exercises/grains/test/Tests.hs