clash-prelude-quickcheck (empty) → 0.1.0.0
raw patch · 8 files changed
+182/−0 lines, 8 filesdep +QuickCheckdep +basedep +clash-preludesetup-changed
Dependencies added: QuickCheck, base, clash-prelude, containers, mtl
Files
- LICENSE +30/−0
- README.md +4/−0
- Setup.hs +2/−0
- clash-prelude-quickcheck.cabal +46/−0
- src/CLaSH/QuickCheck/Instances/BitPack.hs +24/−0
- src/CLaSH/QuickCheck/Instances/BitVector.hs +30/−0
- src/CLaSH/QuickCheck/Instances/Signal.hs +19/−0
- src/CLaSH/QuickCheck/Instances/Vec.hs +27/−0
+ LICENSE view
@@ -0,0 +1,30 @@+Copyright (c) 2014, John Ericson++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++ * Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.++ * Redistributions in binary form must reproduce the above+ copyright notice, this list of conditions and the following+ disclaimer in the documentation and/or other materials provided+ with the distribution.++ * Neither the name of John Ericson nor the names of other+ contributors may be used to endorse or promote products derived+ from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ README.md view
@@ -0,0 +1,4 @@+clash-prelude-quickcheck+================================================================================++QuickCheck instances for various types in the CλaSH Prelude.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ clash-prelude-quickcheck.cabal view
@@ -0,0 +1,46 @@+name: clash-prelude-quickcheck+version: 0.1.0.0+synopsis: QuickCheck instances for various types in the CλaSH Prelude+bug-reports: https://github.com/Ericson2314/clash-prelude-quickcheck/issues+license: OtherLicense+license-file: LICENSE+author: John Ericson+maintainer: Ericson2314@Yahoo.com+category: Hardware, Testing+build-type: Simple+extra-source-files: README.md+cabal-version: >=1.10++data-files: README.md++source-repository head+ type: git+ location: https://github.com/Ericson2314/clash-prelude-quickcheck.git++library+ exposed-modules: CLaSH.QuickCheck.Instances.BitVector+ , CLaSH.QuickCheck.Instances.BitPack+ , CLaSH.QuickCheck.Instances.Signal+ , CLaSH.QuickCheck.Instances.Vec++ -- other-modules:++ default-extensions: ScopedTypeVariables+ , LambdaCase+ , TypeOperators+ , DataKinds+ , TypeFamilies+ , UndecidableInstances+ , FlexibleContexts+ , FlexibleInstances+ , GADTs+ , KindSignatures++ build-depends: base >=4.7 && <4.8+ , QuickCheck >=2.7 && <2.8+ , clash-prelude >=0.6 && <0.7+ , mtl >=2.1 && <2.3+ , containers >=0.5 && <0.6++ hs-source-dirs: src+ default-language: Haskell2010
+ src/CLaSH/QuickCheck/Instances/BitPack.hs view
@@ -0,0 +1,24 @@+module CLaSH.QuickCheck.Instances.BitPack () where++import Data.Bits++import qualified Test.QuickCheck+import Test.QuickCheck++import CLaSH.Prelude hiding (lift)+import CLaSH.Sized.Vector+import CLaSH.Promoted.Nat++import CLaSH.QuickCheck.Instances.BitVector+import CLaSH.QuickCheck.Instances.Vec+++instance (BitPack (Unsigned a), KnownNat (BitSize (Unsigned a)))+ => Arbitrary (Unsigned a) where+ arbitrary = unpack <$> arbitrary+ shrink = fmap unpack . shrink . pack++instance (BitPack (Signed a), KnownNat (BitSize (Signed a)))+ => Arbitrary (Signed a) where+ arbitrary = unpack <$> arbitrary+ shrink = fmap unpack . shrink . pack
+ src/CLaSH/QuickCheck/Instances/BitVector.hs view
@@ -0,0 +1,30 @@+module CLaSH.QuickCheck.Instances.BitVector () where++import Prelude ()++import Data.Bits+import Data.Traversable++import qualified Test.QuickCheck+import Test.QuickCheck++import CLaSH.Prelude hiding (sequence, lift)+import CLaSH.Sized.Vector+import CLaSH.Promoted.Nat++import qualified CLaSH.Sized.Vector as V+++iso1 :: Bool -> Bit+iso1 = \case False -> 0+ True -> 1++iso2 :: Bit -> Bool+iso2 = \case 0 -> False+ _ -> True++instance KnownNat n => Arbitrary (BitVector n) where+ arbitrary = fmap pack $ sequence $ V.repeat $ iso1 <$> arbitrary+ shrink v = fmap pack x+ where x :: [Vec n Bit]+ x = (fmap . fmap) iso1 $ sequence $ shrink <$> iso2 <$> unpack v
+ src/CLaSH/QuickCheck/Instances/Signal.hs view
@@ -0,0 +1,19 @@+module CLaSH.QuickCheck.Instances.Signal () where++import Data.Bits++import Control.Applicative++import qualified Test.QuickCheck+import Test.QuickCheck++import CLaSH.Prelude.Explicit hiding (lift)+import CLaSH.Sized.Vector+import CLaSH.Promoted.Nat+++instance Arbitrary a => Arbitrary (CSignal clk a) where+ arbitrary = cfromList <$> infiniteList++ --TODO: what does it mean to shrink an infinite stream+ --shrink x = [] : (fmap fromList $ shrink $ CLaSH.Prelude.sample x)
+ src/CLaSH/QuickCheck/Instances/Vec.hs view
@@ -0,0 +1,27 @@+module CLaSH.QuickCheck.Instances.Vec () where++import Prelude ()++import Data.Traversable++import Control.Applicative++import qualified Test.QuickCheck+import Test.QuickCheck hiding ((.&.))++import Unsafe.Coerce (unsafeCoerce)++import CLaSH.Prelude hiding (sequence)+import CLaSH.Sized.Vector+import CLaSH.Promoted.Nat+++instance (KnownNat n, Arbitrary a) => Arbitrary (Vec n a) where+ arbitrary = sequence $ repeat arbitrary+ shrink x = sequence $ shrink <$> x++instance (Ord a) => Ord (Vec n a) where+ compare x y = foldr f EQ $ zipWith compare x y+ where f EQ keepGoing = keepGoing+ f done _ = done+