leancheck-0.9.12: Enumerative property-based testing
Copyright(c) 2015-2021 Rudy Matela
License3-Clause BSD (see the file LICENSE)
MaintainerRudy Matela <rudy@matela.com.br>
Safe HaskellSafe-Inferred
LanguageHaskell2010

Test.LeanCheck.Function.Ord

Description

This optional module is part of LeanCheck, a simple enumerative property-based testing library.

Toy Eq and Ord instance for functions.

instance (Listable a, Eq b) => Eq (a -> b) where
  (==)  =  areEqualFor 12
instance (Listable a, Ord b) => Ord (a -> b) where
  compare  =  compareFor 12

This compares functions by testing them for up to 12 different values of each argument.

Single argument functions are tested 12 times. Two argument functions are tested 144 times. Three argument functions are tested 1728 times. At each subsequent argument, number of tests and runtime increases 12-fold.

To customize the number of tests, don't import this and use the above code changing the 12 value. Keep in mind that this value is number of tests for each argument.

Warning: this is only intended to be used in testing modules. Avoid importing this on modules that are used as libraries as there is no way to unimport a typeclass instance.

Orphan instances

(Listable a, Ord b) => Ord (a -> b) Source #

Two functions are compared based on the results of twelve different enumerated values for each argument.

Single argument functions are tested 12 times. Two argument functions are tested 144 times. Three argument functions are tested 1728 times. At each subsequent argument, number of tests and runtime increases 12-fold.

This is only intended to be available on test programs and modules but not on libraries. If you see this exported on a library that is not specifically intended to consider equality between functions, file a bug report to the library maintainer.

Instance details

Methods

compare :: (a -> b) -> (a -> b) -> Ordering #

(<) :: (a -> b) -> (a -> b) -> Bool #

(<=) :: (a -> b) -> (a -> b) -> Bool #

(>) :: (a -> b) -> (a -> b) -> Bool #

(>=) :: (a -> b) -> (a -> b) -> Bool #

max :: (a -> b) -> (a -> b) -> a -> b #

min :: (a -> b) -> (a -> b) -> a -> b #