packages feed

integer-types-0.1.4.0: test/Spec/SubtractOne.hs

module Spec.SubtractOne where

import Essentials
import Integer (Positive, Signed)
import Integer.Gen qualified as Gen
import Integer.Positive qualified as Positive
import Integer.Signed qualified as Signed
import Test.Hspec (Spec, context, it)
import Test.Hspec.Hedgehog (forAll, hedgehog, modifyMaxSuccess, (===))
import Prelude (toInteger, (-))

spec :: Spec
spec =
  context "subtractOne in A behaves the same as (- 1) in Integer" do
    modifyMaxSuccess (\_ -> 1000) do
      it "A = Positive" $ hedgehog do
        x :: Positive <- forAll Gen.integral
        toInteger (Positive.subtractOne x) === toInteger x - 1
      it "A = Signed" $ hedgehog do
        x :: Signed <- forAll Gen.integral
        toInteger (Signed.subtractOne x) === toInteger x - 1