quickcheck-quid-0.0.1.9: src/test/Test/QuickCheck/Quid/Representations/DecimalSpec.hs
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeApplications #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Test.QuickCheck.Quid.Representations.DecimalSpec
where
import Internal.Test.QuickCheck.Quid
( Quid, naturalToQuid )
import Internal.Test.QuickCheck.Quid.Representations.Decimal
( Decimal (..) )
import Numeric.Natural
( Natural )
import Test.Hspec
( Spec, describe, parallel )
import Test.Hspec.Unit
( UnitTestData (..), unitTests )
import Test.QuickCheck
( Arbitrary (..) )
import Test.Hspec.QuickCheck.Classes
( testLaws )
import Prelude hiding
( (^) )
import qualified Prelude
import qualified Test.QuickCheck.Classes as Laws
spec :: Spec
spec = do
parallel $ describe "Lawfulness of type class instances" $ do
testLaws @(Decimal Quid)
[ Laws.showLaws
, Laws.showReadLaws
]
parallel $ describe "Unit tests" $ do
unitTests_show_decimal_naturalToQuid
--------------------------------------------------------------------------------
-- Unit tests
--------------------------------------------------------------------------------
unitTests_show_decimal_naturalToQuid :: Spec
unitTests_show_decimal_naturalToQuid = unitTests
"unitTests_show_decimal_naturalToQuid"
(show . Decimal . naturalToQuid)
(mkTest <$> tests)
where
mkTest :: (Natural, String) -> UnitTestData Natural String
mkTest (params, result) = UnitTestData {params, result}
(^) :: Natural -> Natural -> Natural
(^) = (Prelude.^)
tests =
[ (0, "0")
, (1, "1")
, (8, "8")
, (9, "9")
, (10^0, "1")
, (10^1, "10")
, (10^2, "100")
, (10^3, "1000")
, (10^4, "10000")
, (10^5, "100000")
, (10^6, "1000000")
, (10^7, "10000000")
, (10^0 - 1, "0")
, (10^1 - 1, "9")
, (10^2 - 1, "99")
, (10^3 - 1, "999")
, (10^4 - 1, "9999")
, (10^5 - 1, "99999")
, (10^6 - 1, "999999")
, (10^7 - 1, "9999999")
]
--------------------------------------------------------------------------------
-- Arbitrary instances
--------------------------------------------------------------------------------
deriving via Quid instance Arbitrary (Decimal Quid)