-- |
-- Module      : Test.FitSpec.TestTypes
-- Copyright   : (c) 2015-2017 Rudy Matela
-- License     : 3-Clause BSD  (see the file LICENSE)
-- Maintainer  : Rudy Matela <rudy@matela.com.br>
--
-- FitSpec's Test Types:
-- 'Nat',
-- 'Int2', 'Int3', 'Int4',
-- 'UInt2', 'UInt3', 'UInt4'.
--
-- This module re-exports "Test.LeanCheck.Utils.Types" module
-- and defines 'Mutable' and 'ShowMutable' instances for the types
-- defined there.
module Test.FitSpec.TestTypes (module Test.LeanCheck.Utils.Types) where

import Test.FitSpec.Mutable
import Test.FitSpec.ShowMutable
import Test.LeanCheck.Utils.Types

-- {- Standard implementation:
instance Mutable Nat   where mutiers :: Nat -> [[Nat]]
mutiers = Nat -> [[Nat]]
forall a. (Listable a, Eq a) => a -> [[a]]
mutiersEq
instance Mutable Int1  where mutiers :: Int1 -> [[Int1]]
mutiers = Int1 -> [[Int1]]
forall a. (Listable a, Eq a) => a -> [[a]]
mutiersEq
instance Mutable Int2  where mutiers :: Int2 -> [[Int2]]
mutiers = Int2 -> [[Int2]]
forall a. (Listable a, Eq a) => a -> [[a]]
mutiersEq
instance Mutable Int3  where mutiers :: Int3 -> [[Int3]]
mutiers = Int3 -> [[Int3]]
forall a. (Listable a, Eq a) => a -> [[a]]
mutiersEq
instance Mutable Int4  where mutiers :: Int4 -> [[Int4]]
mutiers = Int4 -> [[Int4]]
forall a. (Listable a, Eq a) => a -> [[a]]
mutiersEq
instance Mutable Word1 where mutiers :: Word1 -> [[Word1]]
mutiers = Word1 -> [[Word1]]
forall a. (Listable a, Eq a) => a -> [[a]]
mutiersEq
instance Mutable Word2 where mutiers :: Word2 -> [[Word2]]
mutiers = Word2 -> [[Word2]]
forall a. (Listable a, Eq a) => a -> [[a]]
mutiersEq
instance Mutable Word3 where mutiers :: Word3 -> [[Word3]]
mutiers = Word3 -> [[Word3]]
forall a. (Listable a, Eq a) => a -> [[a]]
mutiersEq
instance Mutable Word4 where mutiers :: Word4 -> [[Word4]]
mutiers = Word4 -> [[Word4]]
forall a. (Listable a, Eq a) => a -> [[a]]
mutiersEq
-- -}
{- Alternative implementation:
instance Mutable Nat   where mutants = mutantsIntegral
instance Mutable Int2  where mutants = mutantsIntegral
instance Mutable Int3  where mutants = mutantsIntegral
instance Mutable Int4  where mutants = mutantsIntegral
instance Mutable Word2 where mutants = mutantsIntegral
instance Mutable Word3 where mutants = mutantsIntegral
instance Mutable Word4 where mutants = mutantsIntegral
-- -}
instance ShowMutable Nat   where mutantS :: Nat -> Nat -> MutantS
mutantS = Nat -> Nat -> MutantS
forall a. (Eq a, Show a) => a -> a -> MutantS
mutantSEq
instance ShowMutable Int1  where mutantS :: Int1 -> Int1 -> MutantS
mutantS = Int1 -> Int1 -> MutantS
forall a. (Eq a, Show a) => a -> a -> MutantS
mutantSEq
instance ShowMutable Int2  where mutantS :: Int2 -> Int2 -> MutantS
mutantS = Int2 -> Int2 -> MutantS
forall a. (Eq a, Show a) => a -> a -> MutantS
mutantSEq
instance ShowMutable Int3  where mutantS :: Int3 -> Int3 -> MutantS
mutantS = Int3 -> Int3 -> MutantS
forall a. (Eq a, Show a) => a -> a -> MutantS
mutantSEq
instance ShowMutable Int4  where mutantS :: Int4 -> Int4 -> MutantS
mutantS = Int4 -> Int4 -> MutantS
forall a. (Eq a, Show a) => a -> a -> MutantS
mutantSEq
instance ShowMutable Word1 where mutantS :: Word1 -> Word1 -> MutantS
mutantS = Word1 -> Word1 -> MutantS
forall a. (Eq a, Show a) => a -> a -> MutantS
mutantSEq
instance ShowMutable Word2 where mutantS :: Word2 -> Word2 -> MutantS
mutantS = Word2 -> Word2 -> MutantS
forall a. (Eq a, Show a) => a -> a -> MutantS
mutantSEq
instance ShowMutable Word3 where mutantS :: Word3 -> Word3 -> MutantS
mutantS = Word3 -> Word3 -> MutantS
forall a. (Eq a, Show a) => a -> a -> MutantS
mutantSEq
instance ShowMutable Word4 where mutantS :: Word4 -> Word4 -> MutantS
mutantS = Word4 -> Word4 -> MutantS
forall a. (Eq a, Show a) => a -> a -> MutantS
mutantSEq