packages feed

quickcheck-lockstep-0.8.1: quickcheck-lockstep.cabal

cabal-version:   3.4
name:            quickcheck-lockstep
version:         0.8.1
license:         BSD-3-Clause
license-file:    LICENSE
author:          Edsko de Vries
maintainer:      edsko@well-typed.com, joris@well-typed.com
extra-doc-files:
  CHANGELOG.md
  README.md

category:        Testing
synopsis:
  Library for lockstep-style testing with 'quickcheck-dynamic'

description:
  Lockstep-style testing is a particular approach for blackbox
  testing of stateful APIs: we generate a random sequence of
  APIs calls, then execute them both against the system under
  test and against a model, and compare responses up to some
  notion of observability.

tested-with:
  GHC ==8.10
   || ==9.0
   || ==9.2
   || ==9.4
   || ==9.6
   || ==9.8
   || ==9.10
   || ==9.12

source-repository head
  type:     git
  location: https://github.com/well-typed/quickcheck-lockstep

source-repository this
  type:     git
  location: https://github.com/well-typed/quickcheck-lockstep
  tag:      quickcheck-lockstep-0.8.1

common language
  -- This is at the top-level so that `cabal check` does not complain.
  default-language:   Haskell2010

  -- For newer GHC's, override Haskell2010 with GHC2021
  if impl(ghc >=9.2.1)
    default-language: GHC2021

  -- For older GHC's, manually enable all language extensions that are in
  -- GHC2021
  --
  -- NOTE: FieldSelectors is not supported on ghc-8.10.7, so it is the only
  -- language extension that is missing compared to GHC2021
  else
    default-extensions:
      BangPatterns
      BinaryLiterals
      ConstrainedClassMethods
      ConstraintKinds
      DeriveDataTypeable
      DeriveFoldable
      DeriveFunctor
      DeriveGeneric
      DeriveLift
      DeriveTraversable
      DoAndIfThenElse
      EmptyCase
      EmptyDataDecls
      EmptyDataDeriving
      ExistentialQuantification
      ExplicitForAll
      FlexibleContexts
      FlexibleInstances
      ForeignFunctionInterface
      GADTSyntax
      GeneralisedNewtypeDeriving
      HexFloatLiterals
      ImplicitPrelude
      ImportQualifiedPost
      InstanceSigs
      KindSignatures
      MonomorphismRestriction
      MultiParamTypeClasses
      NamedFieldPuns
      NamedWildCards
      NoExplicitNamespaces
      NumericUnderscores
      PatternGuards
      PolyKinds
      PostfixOperators
      RankNTypes
      RelaxedPolyRec
      ScopedTypeVariables
      StandaloneDeriving
      StandaloneKindSignatures
      StarIsType
      TraditionalRecordSyntax
      TupleSections
      TypeApplications
      TypeOperators
      TypeSynonymInstances

  -- Extensions that we enable by default
  default-extensions:
    DeriveAnyClass
    DerivingStrategies
    DerivingVia
    ExplicitNamespaces
    GADTs
    LambdaCase
    RecordWildCards
    RoleAnnotations
    ViewPatterns

common warnings
  ghc-options:
    -Wall -Wcompat -Wincomplete-uni-patterns
    -Wincomplete-record-updates -Wpartial-fields -Widentities
    -Wredundant-constraints -Wmissing-export-lists
    -Wno-unticked-promoted-constructors -Wunused-packages

  ghc-options: -Werror=missing-deriving-strategies

library
  import:          language, warnings
  exposed-modules:
    Test.QuickCheck.StateModel.Lockstep
    Test.QuickCheck.StateModel.Lockstep.Defaults
    Test.QuickCheck.StateModel.Lockstep.Op
    Test.QuickCheck.StateModel.Lockstep.Op.Identity
    Test.QuickCheck.StateModel.Lockstep.Op.SumProd
    Test.QuickCheck.StateModel.Lockstep.Run

  other-modules:
    Test.QuickCheck.StateModel.Lockstep.API
    Test.QuickCheck.StateModel.Lockstep.EnvF
    Test.QuickCheck.StateModel.Lockstep.GVar

  -- quickcheck-dynamic requires ghc 8.10 minimum
  build-depends:
    , base                >=4.14  && <4.22
    , constraints         ^>=0.13 || ^>=0.14
    , containers          ^>=0.6  || ^>=0.7  || ^>=0.8
    , mtl                 ^>=2.2  || ^>=2.3
    , QuickCheck          ^>=2.14 || ^>=2.15 || ^>=2.16
    , quickcheck-dynamic  ^>=4.0

  hs-source-dirs:  src

test-suite test-quickcheck-lockstep
  import:             language, warnings
  type:               exitcode-stdio-1.0
  hs-source-dirs:     test
  main-is:            Main.hs
  other-modules:
    Test.Golden
    Test.IORef.Full
    Test.IORef.Simple
    Test.MockFS
    Test.MockFS.Mock

  default-extensions:
    DeriveGeneric
    EmptyCase

  -- Version bounds determined by main lib
  build-depends:
    , base                 <5
    , constraints
    , containers
    , directory
    , filepath
    , mtl
    , QuickCheck
    , quickcheck-dynamic
    , quickcheck-lockstep
    , tasty
    , tasty-golden
    , tasty-hunit
    , tasty-quickcheck
    , temporary

test-suite test-internals
  import:         language, warnings
  type:           exitcode-stdio-1.0
  hs-source-dirs: test-internals src
  main-is:        Main.hs
  other-modules:
    Test.QuickCheck.StateModel.Lockstep.EnvF
    Test.QuickCheck.StateModel.Lockstep.GVar
    Test.QuickCheck.StateModel.Lockstep.Op
    Test.QuickCheck.StateModel.Lockstep.Op.SumProd
    Test.Test.QuickCheck.StateModel.Lockstep.GVar

  -- Version bounds determined by main lib
  build-depends:
    , base                <5
    , mtl
    , quickcheck-dynamic
    , tasty
    , tasty-quickcheck