reset a3, kut Charlie ;)
[tt2015.git] / a3 / code / Gast / testable.dcl
diff --git a/a3/code/Gast/testable.dcl b/a3/code/Gast/testable.dcl
new file mode 100644 (file)
index 0000000..40a8f9b
--- /dev/null
@@ -0,0 +1,83 @@
+definition module testable\r
+\r
+/*\r
+       GAST: A Generic Automatic Software Test-system\r
+       \r
+       testable: the test algorithm for logical properties\r
+\r
+       Pieter Koopman, 2002-2010\r
+       Radboud Universty, Nijmegen\r
+       The Netherlands\r
+       pieter@cs.ru.nl\r
+*/\r
+\r
+import genLibTest\r
+from stdProperty import ::Property // for instance of testable\r
+import gen\r
+\r
+//--- basics --//\r
+\r
+:: Admin = {labels::![String], args::![String], name::![String], res::Result}\r
+:: Result = Undef | Rej | Pass | OK | CE\r
+:: RandomStream :== [Int]\r
+\r
+derive gLess Result\r
+instance == Result\r
+\r
+:: Property = Prop (RandomStream Admin -> [Admin])\r
+\r
+prop :: a -> Property | Testable a\r
+\r
+class TestArg a | genShow{|*|}, ggen{|*|} a\r
+class Testable a where evaluate :: a RandomStream !Admin -> [Admin]\r
+\r
+instance Testable Bool\r
+instance Testable Result\r
+instance Testable Property\r
+instance Testable (a->b) | Testable b & TestArg a  \r
+instance Testable [a] | Testable a  \r
+\r
+//derive bimap [], (,), (,,), (,,,), (,,,,), (,,,,,)\r
+\r
+MaxExists      :== 1000\r
+NrOfTest       :== 1000\r
+\r
+//--- for generating lists of elements ---//\r
+\r
+aStream :: RandomStream\r
+\r
+//--- for implementation of properties ---//\r
+\r
+diagonal :: [[a]] -> [a]\r
+forAll :: !(a->b) ![a] RandomStream !Admin -> [Admin] | Testable b & TestArg a\r
+split :: !RandomStream -> (RandomStream,RandomStream)\r
+generateAll :: !RandomStream -> [a] | ggen{|*|} a\r
+\r
+//--- testing --//\r
+\r
+:: Testoption\r
+       = Tests                 Int\r
+       | Fails                 Int\r
+       | Args                  Int\r
+       | RandomSeed    Int\r
+       | RandomList    [Int]\r
+       | Verbose\r
+       | Concise\r
+       | Quiet\r
+\r
+Test     :: [Testoption] !p   -> [String] | Testable p\r
+TestList :: [Testoption] ![p] -> [String] | Testable p\r
+\r
+verbose  ::      !RandomStream !p -> [String] | Testable p\r
+verbosen :: !Int !RandomStream !p -> [String] | Testable p\r
+concise  ::      !RandomStream !p -> [String] | Testable p\r
+concisen :: !Int !RandomStream !p -> [String] | Testable p\r
+quiet    ::      !RandomStream !p -> [String] | Testable p\r
+quietn   :: !Int !RandomStream !p -> [String] | Testable p\r
+quietnm  :: !Int !Int !RandomStream !p -> [String] | Testable p\r
+\r
+test :: !p -> [String] | Testable p              // test p NrOfTest times\r
+testn :: !Int !p -> [String] | Testable p        // maxnumber of tests\r
+ttestn :: !Int !p -> [String] | Testable p       // maxnumber of tests, trace all arguments\r
+testnm :: !Int !Int !p -> [String] | Testable p  // maxnumber of tests, max number of errors\r
+ttestnm :: !Int !Int !p -> [String] | Testable p // maxnumber of tests, max number of errors\r