{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE RankNTypes #-}

module Byron.Spec.Ledger.Delegation.Test (coverDelegFailures) where

import qualified Control.State.Transition.Generator as Generator
import           Data.Data (Data)
import           GHC.Stack (HasCallStack)
import           Hedgehog (MonadTest)
import           Hedgehog.Internal.Property (CoverPercentage)

import           Byron.Spec.Ledger.Delegation

coverDelegFailures
  :: forall m a
   .  ( MonadTest m
      , HasCallStack
      , Data a
      )
  => CoverPercentage
  -> a
  -> m ()
coverDelegFailures :: CoverPercentage -> a -> m ()
coverDelegFailures CoverPercentage
coverPercentage =
  CoverPercentage -> [PredicateFailure SDELEG] -> a -> m ()
forall (m :: * -> *) s a.
(MonadTest m, HasCallStack, Data (PredicateFailure s), Data a) =>
CoverPercentage -> [PredicateFailure s] -> a -> m ()
Generator.coverFailures
    CoverPercentage
coverPercentage
    [ EpochDiff -> SdelegPredicateFailure
EpochInThePast (Epoch -> Epoch -> EpochDiff
EpochDiff Epoch
0 Epoch
0) -- The value here is ignored, only the constructor is compared
    , EpochDiff -> SdelegPredicateFailure
EpochPastNextEpoch (Epoch -> Epoch -> EpochDiff
EpochDiff Epoch
0 Epoch
0 ) -- The value here is ignored, only the constructor is compared
    , PredicateFailure SDELEG
SdelegPredicateFailure
IsAlreadyScheduled
    , PredicateFailure SDELEG
SdelegPredicateFailure
IsNotGenesisKey
    , PredicateFailure SDELEG
SdelegPredicateFailure
HasAlreadyDelegated
    , PredicateFailure SDELEG
SdelegPredicateFailure
DoesNotVerify
    ]