packages feed

chell-quickcheck (empty) → 0.1

raw patch · 4 files changed

+136/−0 lines, 4 filesdep +QuickCheckdep +basedep +chellsetup-changed

Dependencies added: QuickCheck, base, chell, random, text

Files

+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ chell-quickcheck.cabal view
@@ -0,0 +1,30 @@+name: chell-quickcheck+version: 0.1+synopsis: Quiet test runner (QuickCheck support)+license: MIT+license-file: license.txt+author: John Millikin <jmillikin@gmail.com>+build-type: Simple+cabal-version: >= 1.6+category: Testing+bug-reports: mailto:jmillikin@gmail.com+homepage: https://john-millikin.com/software/chell/+tested-with: GHC==6.12.1++source-repository head+  type: bazaar+  location: https://john-millikin.com/software/chell/++library+  ghc-options: -Wall+  hs-source-dirs: src++  build-depends:+      base >= 4 && < 5+    , chell >= 0.1 && < 0.2+    , QuickCheck >= 2.3 && < 2.5+    , random+    , text++  exposed-modules:+    Test.Chell.QuickCheck
+ license.txt view
@@ -0,0 +1,22 @@+Copyright (c) 2011 John Millikin++Permission is hereby granted, free of charge, to any person+obtaining a copy of this software and associated documentation+files (the "Software"), to deal in the Software without+restriction, including without limitation the rights to use,+copy, modify, merge, publish, distribute, sublicense, and/or sell+copies of the Software, and to permit persons to whom the+Software is furnished to do so, subject to the following+conditions:++The above copyright notice and this permission notice shall be+included in all copies or substantial portions of the Software.++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR+OTHER DEALINGS IN THE SOFTWARE.
+ src/Test/Chell/QuickCheck.hs view
@@ -0,0 +1,82 @@+{-# LANGUAGE OverloadedStrings #-}++module Test.Chell.QuickCheck+	( property+	) where++import           Data.Text (Text, pack)++import           System.Random (mkStdGen)+import qualified Test.Chell as Chell+import qualified Test.QuickCheck as QuickCheck+import qualified Test.QuickCheck.Gen as Gen+import qualified Test.QuickCheck.State as State+import qualified Test.QuickCheck.Test as Test+import qualified Test.QuickCheck.Text as Text++-- | Convert a QuickCheck property to a Chell 'Chell.Suite'.+--+-- @+--import Test.Chell+--import Test.Chell.QuickCheck+--import Test.QuickCheck hiding (property)+--+--tests :: [Suite]+--tests =+--    [ suite \"foo\"+--        [ property \"bar\" (\xs -> not (null xs) ==> length xs > 0)+--        ]+--    ]+-- @+property :: QuickCheck.Testable prop => Text -> prop -> Chell.Suite+property name prop = Chell.test (Chell.Test name chell_io) where+	chell_io opts = do+		let seed = Chell.testOptionSeed opts+		+		term <- Text.newNullTerminal+		+		let args = QuickCheck.stdArgs+		let state = State.MkState+			{ State.terminal = term+			, State.maxSuccessTests = QuickCheck.maxSuccess args+			, State.maxDiscardedTests = QuickCheck.maxDiscard args+			, State.computeSize = computeSize+			  	(QuickCheck.maxSize args)+			  	(QuickCheck.maxSuccess args)+			, State.numSuccessTests = 0+			, State.numDiscardedTests = 0+			, State.collected = []+			, State.expectedFailure = False+			, State.randomSeed = mkStdGen seed+			, State.numSuccessShrinks = 0+			, State.numTryShrinks = 0+			}+		+		result <- Test.test state (Gen.unGen (QuickCheck.property prop))+		let output = pack (Test.output result)+		return $ case result of+			Test.Success{} -> Chell.TestPassed+				[("seed", pack (show seed))]+			Test.Failure{} -> Chell.TestFailed+				[("seed", pack (show seed))]+				[Chell.Failure Nothing output]+			Test.GaveUp{} -> Chell.TestAborted+				[("seed", pack (show seed))]+				output+			Test.NoExpectedFailure{} -> Chell.TestFailed+				[("seed", pack (show seed))]+				[Chell.Failure Nothing output]++-- copied from quickcheck-2.4.1.1/src/Test/QuickCheck/Test.hs+computeSize :: Int -> Int -> Int -> Int -> Int+computeSize maxSize maxSuccess n d+	-- e.g. with maxSuccess = 250, maxSize = 100, goes like this:+	-- 0, 1, 2, ..., 99, 0, 1, 2, ..., 99, 0, 2, 4, ..., 98.+	| n `roundTo` maxSize + maxSize <= maxSuccess ||+	  n >= maxSuccess ||+	  maxSuccess `mod` maxSize == 0 = n `mod` maxSize + d `div` 10+	| otherwise =+	 (n `mod` maxSize) * maxSize `div` (maxSuccess `mod` maxSize) + d `div` 10++roundTo :: Int -> Int -> Int+roundTo n m = (n `div` m) * m