StdProperty.dcl 2.63 KB
Newer Older
1
definition module Gast.StdProperty
Bas Lijnse's avatar
Bas Lijnse committed
2 3 4 5

/*
	GAST: A Generic Automatic Software Test-system
	
6
	stdProperty: opertors on logical properties
Bas Lijnse's avatar
Bas Lijnse committed
7 8 9 10 11 12 13

	Pieter Koopman, 2004
	Radboud Universty, Nijmegen
	The Netherlands
	pieter@cs.ru.nl
*/

14
import Gast.GenLibTest
15
import Gast.Testable
16
from Testing.TestEvents import :: Relation
Bas Lijnse's avatar
Bas Lijnse committed
17 18 19 20 21 22 23 24 25 26 27 28 29 30

class (\/) infixr 2 a b	:: !a b -> Property	//	Conditional or  of arg1 and arg2
class (/\) infixr 3	a b :: !a b -> Property	//	Conditional and of arg1 and arg2

instance /\ Bool     Bool
instance /\ Property Bool
instance /\ Bool     Property
instance /\ Property Property

instance \/ Bool     Bool
instance \/ Property Bool
instance \/ Bool     Property
instance \/ Property Property

31 32 33 34 35
(=.=) infix 4 :: !a !a -> Property | Eq, genShow{|*|}, JSONEncode{|*|} a // shows values x and y if x == y yields False
(<.)  infix 4 :: !a !a -> Property | Ord, genShow{|*|}, JSONEncode{|*|} a // shows values x and y if x <  y yields False
(<=.) infix 4 :: !a !a -> Property | Ord, genShow{|*|}, JSONEncode{|*|} a // shows values x and y if x <= y yields False
(>.)  infix 4 :: !a !a -> Property | Ord, genShow{|*|}, JSONEncode{|*|} a // shows values x and y if x >  y yields False
(>=.) infix 4 :: !a !a -> Property | Ord, genShow{|*|}, JSONEncode{|*|} a // shows values x and y if x >= y yields False
36
check :: !(a b -> Bool) !a !b -> Property | genShow{|*|}, JSONEncode{|*|} a & genShow{|*|}, JSONEncode{|*|} b
37

38
class (==>) infixr 1 b :: !b p -> Property | Testable p
Bas Lijnse's avatar
Bas Lijnse committed
39 40 41 42

instance ==> Bool
instance ==> Property

43
(<==>) infix 1 :: !a !b -> Property	| Testable a & Testable b		//	True if properties are equivalent
Bas Lijnse's avatar
Bas Lijnse committed
44 45 46 47 48 49 50 51 52 53 54

ExistsIn :: (x->p) [x] -> Property | Testable p & TestArg x 		// type is too restricive
Exists :: (x->p) -> Property | Testable p & TestArg x
ForAll :: !(x->p) -> Property | Testable p & TestArg x

ForEach :: ![x] !(x->p) -> Property | Testable p & TestArg x
(For) infixl 0 :: !(x->p) ![x] -> Property | Testable p & TestArg x
(ForAndGen) infixl 0 :: !(x->p) ![x] -> Property | Testable p & TestArg x

classify :: !Bool l !p -> Property | Testable p & genShow{|*|} l
label ::  !l !p -> Property | Testable p & genShow{|*|} l
55

56
name :: !n !p -> Property | Testable p & toString n
57 58 59 60 61 62 63 64 65 66 67 68

/**
* Assigns a name to a testable property.
*
* @param The testable property
* @param The name
* @return The named property
* @type n p -> Property | Testable p & toString n
*/
(@) infix 0 
(@) n p :== name n p

69
limitNrOfRecFieldValues :: !(Map (TypeName, RecFieldName) Int) !p -> Property | Testable p
Bas Lijnse's avatar
Bas Lijnse committed
70 71 72

instance ~ Bool
instance ~ Property
Steffen Michels's avatar
Steffen Michels committed
73 74

approxEqual :: !a !a !a -> Property | abs, Ord, -, genShow{|*|}, JSONEncode{|*|} a