fitspec-0.4.6: refining property sets for testing Haskell programs

Copyright(c) 2015-2017 Rudy Matela
License3-Clause BSD (see the file LICENSE)
MaintainerRudy Matela <rudy@matela.com.br>
Safe HaskellNone
LanguageHaskell2010

Test.FitSpec.Mutable

Description

Enumeration of function mutations

Synopsis

Documentation

class Mutable a where Source #

This typeclass is similar to Listable.

A type is Mutable when there exists a function that is able to list mutations of a value. Ideally: list all possible values without repetitions.

Instances are usually defined by a mutiers function that given a value, returns tiers of mutants of that value: the first tier contains the equivalent mutant, of size 0, the second tier contains mutants of size 1, the third tier contains mutants of size 2, and so on.

The equivalent mutant is the actual function without mutations.

The size of a mutant is given by the sum of: the number of mutated points (relations) and the sizes of mutated arguments and results.

To get only inequivalent mutants, just take the tail of either mutants or mutiers:

tail mutants
tail mutiers

Given that the underlying Listable enumeration has no repetitions, parametric instances defined in this file will have no repeated mutants.

Minimal complete definition

mutants | mutiers

Methods

mutiers :: a -> [[a]] Source #

mutants :: a -> [a] Source #

Instances
Mutable Bool Source #
mutants True = [True,False]
Instance details

Defined in Test.FitSpec.Mutable

Methods

mutiers :: Bool -> [[Bool]] Source #

mutants :: Bool -> [Bool] Source #

Mutable Char Source # 
Instance details

Defined in Test.FitSpec.Mutable

Methods

mutiers :: Char -> [[Char]] Source #

mutants :: Char -> [Char] Source #

Mutable Double Source # 
Instance details

Defined in Test.FitSpec.Mutable

Mutable Float Source # 
Instance details

Defined in Test.FitSpec.Mutable

Methods

mutiers :: Float -> [[Float]] Source #

mutants :: Float -> [Float] Source #

Mutable Int Source #
mutants 3 = [3,0,1,2,4,5,6,7,8,...]
Instance details

Defined in Test.FitSpec.Mutable

Methods

mutiers :: Int -> [[Int]] Source #

mutants :: Int -> [Int] Source #

Mutable Integer Source # 
Instance details

Defined in Test.FitSpec.Mutable

Mutable Ordering Source # 
Instance details

Defined in Test.FitSpec.Mutable

Mutable Word Source # 
Instance details

Defined in Test.FitSpec.Mutable

Methods

mutiers :: Word -> [[Word]] Source #

mutants :: Word -> [Word] Source #

Mutable () Source #
mutants () = [()]
Instance details

Defined in Test.FitSpec.Mutable

Methods

mutiers :: () -> [[()]] Source #

mutants :: () -> [()] Source #

Mutable Int1 Source # 
Instance details

Defined in Test.FitSpec.TestTypes

Methods

mutiers :: Int1 -> [[Int1]] Source #

mutants :: Int1 -> [Int1] Source #

Mutable Int2 Source # 
Instance details

Defined in Test.FitSpec.TestTypes

Methods

mutiers :: Int2 -> [[Int2]] Source #

mutants :: Int2 -> [Int2] Source #

Mutable Int3 Source # 
Instance details

Defined in Test.FitSpec.TestTypes

Methods

mutiers :: Int3 -> [[Int3]] Source #

mutants :: Int3 -> [Int3] Source #

Mutable Int4 Source # 
Instance details

Defined in Test.FitSpec.TestTypes

Methods

mutiers :: Int4 -> [[Int4]] Source #

mutants :: Int4 -> [Int4] Source #

Mutable Word1 Source # 
Instance details

Defined in Test.FitSpec.TestTypes

Methods

mutiers :: Word1 -> [[Word1]] Source #

mutants :: Word1 -> [Word1] Source #

Mutable Word2 Source # 
Instance details

Defined in Test.FitSpec.TestTypes

Methods

mutiers :: Word2 -> [[Word2]] Source #

mutants :: Word2 -> [Word2] Source #

Mutable Word3 Source # 
Instance details

Defined in Test.FitSpec.TestTypes

Methods

mutiers :: Word3 -> [[Word3]] Source #

mutants :: Word3 -> [Word3] Source #

Mutable Word4 Source # 
Instance details

Defined in Test.FitSpec.TestTypes

Methods

mutiers :: Word4 -> [[Word4]] Source #

mutants :: Word4 -> [Word4] Source #

Mutable Nat Source # 
Instance details

Defined in Test.FitSpec.TestTypes

Methods

mutiers :: Nat -> [[Nat]] Source #

mutants :: Nat -> [Nat] Source #

(Eq a, Listable a) => Mutable [a] Source #
mutants [0] = [ [0], [], [0,0], [1], ...
Instance details

Defined in Test.FitSpec.Mutable

Methods

mutiers :: [a] -> [[[a]]] Source #

mutants :: [a] -> [[a]] Source #

(Eq a, Listable a) => Mutable (Maybe a) Source #
mutants (Just 0) = [Just 0, Nothing, ...
Instance details

Defined in Test.FitSpec.Mutable

Methods

mutiers :: Maybe a -> [[Maybe a]] Source #

mutants :: Maybe a -> [Maybe a] Source #

(Eq a, Listable a, Integral a) => Mutable (Ratio a) Source # 
Instance details

Defined in Test.FitSpec.Mutable

Methods

mutiers :: Ratio a -> [[Ratio a]] Source #

mutants :: Ratio a -> [Ratio a] Source #

(Eq a, Listable a, Mutable b) => Mutable (a -> b) Source #
mutants not =
  [ not
  , \p -> case p of False -> False; _ -> not p
  , \p -> case p of True  -> True;  _ -> not p
  , \p -> case p of False -> False; True -> True
  ]
Instance details

Defined in Test.FitSpec.Mutable

Methods

mutiers :: (a -> b) -> [[a -> b]] Source #

mutants :: (a -> b) -> [a -> b] Source #

(Eq a, Listable a, Eq b, Listable b) => Mutable (Either a b) Source # 
Instance details

Defined in Test.FitSpec.Mutable

Methods

mutiers :: Either a b -> [[Either a b]] Source #

mutants :: Either a b -> [Either a b] Source #

(Mutable a, Mutable b) => Mutable (a, b) Source #
mutants (0,1) = [(0,1),(0,0),(1,1),(0,-1),...]
Instance details

Defined in Test.FitSpec.Mutable

Methods

mutiers :: (a, b) -> [[(a, b)]] Source #

mutants :: (a, b) -> [(a, b)] Source #

(Mutable a, Mutable b, Mutable c) => Mutable (a, b, c) Source # 
Instance details

Defined in Test.FitSpec.Mutable

Methods

mutiers :: (a, b, c) -> [[(a, b, c)]] Source #

mutants :: (a, b, c) -> [(a, b, c)] Source #

(Mutable a, Mutable b, Mutable c, Mutable d) => Mutable (a, b, c, d) Source # 
Instance details

Defined in Test.FitSpec.Mutable

Methods

mutiers :: (a, b, c, d) -> [[(a, b, c, d)]] Source #

mutants :: (a, b, c, d) -> [(a, b, c, d)] Source #

(Mutable a, Mutable b, Mutable c, Mutable d, Mutable e) => Mutable (a, b, c, d, e) Source # 
Instance details

Defined in Test.FitSpec.Mutable

Methods

mutiers :: (a, b, c, d, e) -> [[(a, b, c, d, e)]] Source #

mutants :: (a, b, c, d, e) -> [(a, b, c, d, e)] Source #

(Mutable a, Mutable b, Mutable c, Mutable d, Mutable e, Mutable f) => Mutable (a, b, c, d, e, f) Source # 
Instance details

Defined in Test.FitSpec.Mutable

Methods

mutiers :: (a, b, c, d, e, f) -> [[(a, b, c, d, e, f)]] Source #

mutants :: (a, b, c, d, e, f) -> [(a, b, c, d, e, f)] Source #

(Mutable a, Mutable b, Mutable c, Mutable d, Mutable e, Mutable f, Mutable g) => Mutable (a, b, c, d, e, f, g) Source # 
Instance details

Defined in Test.FitSpec.Mutable.Tuples

Methods

mutiers :: (a, b, c, d, e, f, g) -> [[(a, b, c, d, e, f, g)]] Source #

mutants :: (a, b, c, d, e, f, g) -> [(a, b, c, d, e, f, g)] Source #

(Mutable a, Mutable b, Mutable c, Mutable d, Mutable e, Mutable f, Mutable g, Mutable h) => Mutable (a, b, c, d, e, f, g, h) Source # 
Instance details

Defined in Test.FitSpec.Mutable.Tuples

Methods

mutiers :: (a, b, c, d, e, f, g, h) -> [[(a, b, c, d, e, f, g, h)]] Source #

mutants :: (a, b, c, d, e, f, g, h) -> [(a, b, c, d, e, f, g, h)] Source #

(Mutable a, Mutable b, Mutable c, Mutable d, Mutable e, Mutable f, Mutable g, Mutable h, Mutable i) => Mutable (a, b, c, d, e, f, g, h, i) Source # 
Instance details

Defined in Test.FitSpec.Mutable.Tuples

Methods

mutiers :: (a, b, c, d, e, f, g, h, i) -> [[(a, b, c, d, e, f, g, h, i)]] Source #

mutants :: (a, b, c, d, e, f, g, h, i) -> [(a, b, c, d, e, f, g, h, i)] Source #

(Mutable a, Mutable b, Mutable c, Mutable d, Mutable e, Mutable f, Mutable g, Mutable h, Mutable i, Mutable j) => Mutable (a, b, c, d, e, f, g, h, i, j) Source # 
Instance details

Defined in Test.FitSpec.Mutable.Tuples

Methods

mutiers :: (a, b, c, d, e, f, g, h, i, j) -> [[(a, b, c, d, e, f, g, h, i, j)]] Source #

mutants :: (a, b, c, d, e, f, g, h, i, j) -> [(a, b, c, d, e, f, g, h, i, j)] Source #

(Mutable a, Mutable b, Mutable c, Mutable d, Mutable e, Mutable f, Mutable g, Mutable h, Mutable i, Mutable j, Mutable k) => Mutable (a, b, c, d, e, f, g, h, i, j, k) Source # 
Instance details

Defined in Test.FitSpec.Mutable.Tuples

Methods

mutiers :: (a, b, c, d, e, f, g, h, i, j, k) -> [[(a, b, c, d, e, f, g, h, i, j, k)]] Source #

mutants :: (a, b, c, d, e, f, g, h, i, j, k) -> [(a, b, c, d, e, f, g, h, i, j, k)] Source #

(Mutable a, Mutable b, Mutable c, Mutable d, Mutable e, Mutable f, Mutable g, Mutable h, Mutable i, Mutable j, Mutable k, Mutable l) => Mutable (a, b, c, d, e, f, g, h, i, j, k, l) Source # 
Instance details

Defined in Test.FitSpec.Mutable.Tuples

Methods

mutiers :: (a, b, c, d, e, f, g, h, i, j, k, l) -> [[(a, b, c, d, e, f, g, h, i, j, k, l)]] Source #

mutants :: (a, b, c, d, e, f, g, h, i, j, k, l) -> [(a, b, c, d, e, f, g, h, i, j, k, l)] Source #

mutiersEq :: (Listable a, Eq a) => a -> [[a]] Source #

Implementation of mutiers for non-functional data types. Use this to create instances for user-defined data types, e.g.:

instance MyData
  where mutiers = mutiersEq

and for parametric datatypes:

instance (Eq a, Eq b) => MyDt a b
  where mutiers = mutiersEq

Examples:

mutiersEq True = [[True], [False]]
mutiersEq 2   = [[2], [0], [1], [], [3], [4], [5], [6], [7], [8], [9], ...]
mutiersEq [1] = [[[1]], [[]], [[0]], [[0,0]], [[0,0,0],[0,1],[1,0],[-1]], ...]