| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
FitSpec.Mutable
Description
Enumeration of function mutations
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.
Instances
| Mutable Bool Source # | mutants True = [True,False] |
| Mutable Char Source # | |
| Mutable Int Source # | mutants 3 = [3,0,1,2,4,5,6,7,8,9,... |
| Mutable () Source # | mutants () = [()] |
| (Eq a, Listable a) => Mutable [a] Source # | mutants [0] = [ [0], [], [0,0], [1], ... |
| (Eq a, Listable a) => Mutable (Maybe a) Source # | mutants (Just 0) = [Just 0, Nothing, ... |
| (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 ] |
| (Mutable a, Mutable b) => Mutable (a, b) Source # | mutants (0,1) = [(0,1),(0,0),(1,1),(0,-1),...] |
| (Mutable a, Mutable b, Mutable c) => Mutable (a, b, c) Source # | |
| (Mutable a, Mutable b, Mutable c, Mutable d) => Mutable (a, b, c, d) Source # | |
| (Mutable a, Mutable b, Mutable c, Mutable d, Mutable e) => Mutable (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 # | For Mutable tuple instances greater than sixtuples, see
|
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]], ...]