packages feed

fitspec 0.4.6 → 0.4.7

raw patch · 17 files changed

+1219/−3 lines, 17 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

Files

+ .gitignore view
@@ -0,0 +1,54 @@+# cabal stuff+**/dist+**/cabal.sandbox.config+**/.cabal-sandbox+.stack-work+mk/toplibs++# vim stuff+**.swp+**.swo++# ctags stuff+**/TAGS+**/tags++# ghc object (when compiled directly)+**/*.o+**/*.hi+**/*.dyn_o+**/*.dyn_hi++# benchmark binaries+bench/avltrees+bench/bools+bench/heaps+bench/mergeheaps+bench/id+bench/list+bench/pretty+bench/sets+bench/setsofsets+bench/sieve+bench/sorting+bench/spring+bench/digraphs+bench/haskell-src+bench/haskell-src-exts+eg/sorting+eg/negation+eg/alga++# test binaries+tests/test-mutate+tests/test-showmutable+tests/test-derive+tests/test-utils++# Haddock+doc/*.html+doc/*.css+doc/*.js+doc/*.png+doc/*.gif+doc/*.json
+ .travis.yml view
@@ -0,0 +1,108 @@+# .travis.yml file for FitSpec+#+# Copyright:   (c) 2017-2018 Rudy Matela+# License:     3-Clause BSD  (see the file LICENSE)+# Maintainer:  Rudy Matela <rudy@matela.com.br>++language: c  # not really++notifications:+  email:+    on_failure: change++sudo: false++cache:+  directories:+  - $HOME/.ghc+  - $HOME/.cabal+  - $HOME/.stack++before_install:+- export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH+- ghc --version+- cabal --version+- rm -f ~/.cabal/config && cabal update+# Download and unpack the stack executable+# "Once Travis whitelists the stack.dev files," simply include stack in the+# addons section. -- https://docs.haskellstack.org/en/stable/travis_ci/+- mkdir -p ~/.local/bin+- export PATH=$HOME/.local/bin:$PATH+- travis_retry curl -L https://www.stackage.org/stack/linux-x86_64 | tar xz --wildcards --strip-components=1 -C ~/.local/bin '*/stack'+- stack config set system-ghc --global true+- stack --version+- cabal install leancheck cmdargs++script:+- make && make test-without-extra-deps+- make haddock+- make test-sdist+- make test-via-cabal+- stack $STACKR --no-terminal --skip-ghc-check test++matrix:+  allow_failures:+  - ghc: 'head'+  - ghc: '7.10'  # Failing due to a bug in cabal?  Deactivating for now...+  include:+  - ghc: 'head'+    env:                   GHCVER=head         CABALVER=head+    addons: {apt: {packages: [ghc-head,   cabal-install-head], sources: hvr-ghc}}+  - ghc: '8.4'+    env:                   GHCVER=8.4.2        CABALVER=2.2+    addons: {apt: {packages: [ghc-8.4.2,  cabal-install-2.2],  sources: hvr-ghc}}+  - ghc: '8.2'+    env:                   GHCVER=8.2.1        CABALVER=2.0+    addons: {apt: {packages: [ghc-8.2.1,  cabal-install-2.0],  sources: hvr-ghc}}+  - ghc: '8.0'+    env:                   GHCVER=8.0.2        CABALVER=1.24+    addons: {apt: {packages: [ghc-8.0.2,  cabal-install-1.24], sources: hvr-ghc}}+  - ghc: '7.10'+    env:                   GHCVER=7.10.3       CABALVER=1.22+    addons: {apt: {packages: [ghc-7.10.3, cabal-install-1.22], sources: hvr-ghc}}+  # we only support stack with GHC >= 7.10+  - ghc: '7.8'+    env:                   GHCVER=7.8.4        CABALVER=1.18+    addons: {apt: {packages: [ghc-7.8.4,  cabal-install-1.18], sources: hvr-ghc}}+    before_install:+    - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH+    - ghc --version+    - cabal --version+    - rm -f ~/.cabal/config && cabal update+    - cabal install Cabal==1.18.*+    - cabal install leancheck cmdargs+    script:+    - make && make test-without-extra-deps+    - make haddock HADDOCKFLAGS=+    - make test-sdist+    - cabal test+  - ghc: '7.6'+    env:                   GHCVER=7.6.3        CABALVER=1.18+    addons: {apt: {packages: [ghc-7.6.3,  cabal-install-1.18], sources: hvr-ghc}}+    before_install:+    - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH+    - ghc --version+    - cabal --version+    - rm -f ~/.cabal/config && cabal update+    - cabal install Cabal==1.18.*+    - cabal install leancheck cmdargs+    script:+    - make && make test-without-extra-deps+    - make haddock HADDOCKFLAGS=+    - make test-sdist+    - cabal test+  - ghc: '7.4'+    env:                   GHCVER=7.4.2        CABALVER=1.18+    addons: {apt: {packages: [ghc-7.4.2,  cabal-install-1.18], sources: hvr-ghc}}+    before_install:+    - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH+    - ghc --version+    - cabal --version+    - rm -f ~/.cabal/config && cabal update+    - cabal install Cabal==1.18.*+    - cabal install leancheck cmdargs+    script:+    - make && make test-without-extra-deps+    - make haddock HADDOCKFLAGS=+    - make test-sdist+    - cabal test
+ Makefile view
@@ -0,0 +1,130 @@+# Makefile for FitSpec+#+# Copyright:   (c) 2015-2018 Rudy Matela+# License:     3-Clause BSD  (see the file LICENSE)+# Maintainer:  Rudy Matela <rudy@matela.com.br>+#+# This is faster than Cabal:+#+# Time      Scratch  Already compiled+# Makefile    14s      0s+# Cabal       90s      1s+#+# Cabal tries to "sandbox" the build of every benchmark program+# rebuilding everything for each of those.++# Misc variables+GHCIMPORTDIRS = src:bench+GHCFLAGS = -O2 $(shell grep -q "Arch Linux" /etc/lsb-release && echo -dynamic)+HADDOCKFLAGS = --no-print-missing-docs+MOSTBENCHS = \+  bench/avltrees         \+  bench/bools            \+  bench/digraphs         \+  bench/heaps            \+  bench/id               \+  bench/list             \+  bench/mergeheaps       \+  bench/pretty           \+  bench/sets             \+  bench/setsofsets       \+  bench/sieve            \+  bench/sorting          \+  bench/spring+BENCHS = $(MOSTBENCHS) \+  bench/haskell-src      \+  bench/haskell-src-exts+MOSTEGS = \+  eg/sorting \+  eg/negation+EGS = $(MOSTEGS) \+  eg/alga+TESTS = \+  tests/test-derive      \+  tests/test-mutate      \+  tests/test-showmutable \+  tests/test-utils++all: mk/toplibs++benchs: $(BENCHS) all++egs: $(EGS) all++ghci: Test/FitSpec.ghci++test: all benchs egs $(TESTS)+	./tests/test-mutate+	./tests/test-showmutable+	./tests/test-derive+	./tests/test-utils++test-without-extra-deps: all $(MOSTBENCHS) $(MOSTEGS) $(TESTS)+	./tests/test-mutate+	./tests/test-showmutable+	./tests/test-derive+	./tests/test-utils++legacy-test:+	make clean && make test-without-extra-deps -j8 GHC=ghc-8.2  GHCFLAGS="-Werror -dynamic"+	make clean && make test-without-extra-deps -j8 GHC=ghc-8.0  GHCFLAGS="-Werror -dynamic"+	make clean && make test-without-extra-deps -j8 GHC=ghc-7.10 GHCFLAGS="-Werror -dynamic"+	make clean && make test-without-extra-deps -j8 GHC=ghc-7.8  GHCFLAGS="-Werror -dynamic"+	make clean && make test                    -j8++test-via-cabal:+	cabal configure --enable-tests --enable-benchmarks --ghc-options="-dynamic -Werror" && cabal build && cabal test++test-sdist:+	tests/test-sdist++prepare-test-via-cabal:+	rm -rf .cabal-sandbox cabal.sandbox.config+	cabal sandbox init+	cabal install --only-dependencies --enable-documentation+	cabal configure --enable-tests --enable-benchmarks++legacy-test-via-cabal:+	cabal-ghc-8.2  configure --enable-tests --enable-benchmarks --ghc-option=-dynamic && cabal-ghc-8.2  build && cabal-ghc-8.2  test+	cabal-ghc-8.0  configure --enable-tests --enable-benchmarks --ghc-option=-dynamic && cabal-ghc-8.0  build && cabal-ghc-8.0  test+	cabal-ghc-7.10 configure --enable-tests --enable-benchmarks --ghc-option=-dynamic && cabal-ghc-7.10 build && cabal-ghc-7.10 test+	cabal-ghc-7.8  configure --enable-tests --enable-benchmarks --ghc-option=-dynamic && cabal-ghc-7.8  build && cabal-ghc-7.8  test+	cabal clean++prepare-legacy-test-via-cabal:+	rm -rf .cabal-sandbox cabal.sandbox.config+	cabal sandbox init+	cabal          install --only-dependencies --enable-tests --enable-benchmarks --enable-documentation+	cabal-ghc-8.2  install --only-dependencies --enable-tests --enable-benchmarks+	cabal-ghc-8.0  install --only-dependencies --enable-tests --enable-benchmarks+	cabal-ghc-7.10 install --only-dependencies --enable-tests --enable-benchmarks+	cabal-ghc-7.8  install --only-dependencies --enable-tests --enable-benchmarks++clean: clean-hi-o clean-haddock+	rm -f $(TESTS) $(BENCHS) $(EGS) {eg,bench}/*.{hi,o,dyn_hi,dyn_o}++# Debug: just list all source files compiled normally+list-hs:+	$(LISTHS)++list-libs:+	$(LISTLIBS)++hlint:+	hlint \+	  --ignore "Use import/export shortcut" \+	  --ignore "Use first" \+	  --ignore "Use second" \+	  --ignore "Use ***" \+	  FitSpec.hs FitSpec bench tests++mk/toplibs: src/Test/FitSpec.o bench/Set.o+	touch mk/toplibs++bench/avltrees: bench/AVLTree.o++bench/heaps: bench/Heap.o++bench/digraphs: bench/Digraph.o++include mk/haskell.mk
+ bench/haskell-src-exts.hs view
@@ -0,0 +1,38 @@+{-# LANGUAGE TemplateHaskell #-}+import Test.FitSpec+import Language.Haskell.Exts+import Language.Haskell.Exts.Pretty++instance Eq a => Eq (ParseResult a) where+  ParseOk x == ParseOk y = x == y+  ParseFailed l1 s1 == ParseFailed l2 s2 = l1 == l2 && s1 == s2+  _ == _ = False++deriveMutableCascading ''ParseResult+deriveMutableCascading ''Module+deriveMutableCascading ''SrcSpanInfo++properties :: (String -> ParseResult (Module SrcSpanInfo)+              ,Module SrcSpanInfo -> String)+           -> [Property]+properties (parseFileContents,prettyPrint) =+  [ property $ case parseFileContents "" of+                 ParseOk (Module _ _ _ _ _) -> True+                 _ -> False+  , property $ case parseFileContents "a" of+                 ParseFailed (SrcLoc "<unknown>.hs" 2 1) _ -> True+                 _ -> False+  , property $ \m -> case parseFileContents (prettyPrint m) of+                       ParseOk m' -> case parseFileContents (prettyPrint m') of+                                       ParseOk m'' -> m' == m''+                                       _ -> False+                       _ -> True+-- Not true:+--, property $ \s -> case parseFileContents s of+--                     ParseOk m' -> prettyPrint m' == s+--                     _ -> True+  ]++main = mainWith args { names = ["parseFileContents f", "prettyPrint m"] }+                (parseFileContents,prettyPrint)+                properties
+ bench/haskell-src.hs view
@@ -0,0 +1,58 @@+{-# LANGUAGE TemplateHaskell, StandaloneDeriving #-}+import Test.FitSpec+import Language.Haskell.Parser+import Language.Haskell.Pretty as P+import Language.Haskell.Syntax+import Data.Ratio+import Data.List (intercalate)+import Data.Function (on)+import Data.Char++deriving instance Eq HsModule -- needed for Mutable++deriveMutableCascading ''HsModule++-- change ``take 5'' below to ``take n'' where n `elem` [1,2,3,4]+-- to see surviving mutants for different refinements+--+-- All 5 properties should be reported as ``apparently complete''+-- so no surviving mutants.+properties :: (HsModule -> String) -> [Property]+properties prettyPrint = take 5+  [ property $+      \nm loc -> (prettyPrint $ HsModule loc (Module nm) Nothing [] [])+              == "module " ++ nm ++ " where"++  , property $+      \nm loc -> (prettyPrint $ HsModule loc (Module nm) (Just []) [] [])+              == "module " ++ nm ++ " () where"++  , property $+      \nm loc -> (prettyPrint $ HsModule loc (Module nm) Nothing [] [HsFunBind []])+              == "module " ++ nm ++ " where"++  , property $+      \nm loc imports decls ->+           (prettyPrint $ HsModule loc (Module nm) Nothing imports decls)+       === unlines (("module " ++ nm ++ " where")+                   :(map P.prettyPrint imports+                  ++ map P.prettyPrint decls))++  , property $+      \nm loc imports exports decls ->+           (prettyPrint $ HsModule loc (Module nm) (Just exports) imports decls)+       === unlines (["module " ++ nm ++ " ("+                               ++ intercalate ", " (map P.prettyPrint exports)+                               ++ ") where"]+                 ++ map P.prettyPrint imports+                 ++ map P.prettyPrint decls)+  ]+  where+  (===) :: String -> String -> Bool+  (===) = (==) `on` (filter (not . null) . lines)++main = mainWith args { names = ["prettyPrint"]+                     , timeout = 0+                     }+                prettyPrint+                properties
+ eg/Makefile view
@@ -0,0 +1,24 @@+# Makefile for FitSpec++# Configuration variables+FITSPECPATH = ../src+GHCFLAGS = -O2 -i$(FITSPECPATH) -dynamic++# Misc variables++all: sorting negation++clean:+	rm -f *.hi *.o sorting negation++# Implicit rules:++%.o: %.hs+	ghc $(GHCFLAGS) $<++%: %.hs+	ghc $(GHCFLAGS) $<++.PHONY: %.ghci+%.ghci: %.hs+	ghci $(GHCFLAGS) -O0 $<
+ eg/alga.hs view
@@ -0,0 +1,49 @@+{-# LANGUAGE TemplateHaskell #-}+import Test.FitSpec+import Test.LeanCheck.Tiers+import Algebra.Graph++instance (Listable a, Ord a) => Listable (Graph a) where+  tiers = nubT+        $ cons0 Empty+       \/ cons1 Vertex+       \/ cons2 Overlay+       \/ cons2 Connect++deriveMutableE [''Ord] ''Graph++instance Ord a => Ord (Graph a) where+  (<=) = isSubgraphOf++type A = Int++properties :: ( Graph A -> Graph A -> Graph A+              , Graph A -> Graph A -> Graph A )+           -> [Property]+properties (plus,times) =+  [ property $ \x y -> x + y == y + x+  , property $ \x y z -> x + (y + z) == (x + y) + z+  , property $ \x y z -> x * (y * z) == (x * y) * z+  , property $ \x y z -> x * (y * z) == (x * y) + (x * z) + (y * z)+  ]+  where+  (+) = plus+  (*) = times+  infixl 6 ++  infixl 7 *++main :: IO ()+main = do+  args <- getArgsWith+    args { names = ["x + y", "x * y"]+         , nMutants = 1000+         , nTests   = 1000+         , timeout  = 0+         }+  reportWithExtra+    [ ((*),(+))+    , ((*),(*))+    , ((+),(+)) ]+    args+    ((+),(*))+    properties
+ eg/negation.hs view
@@ -0,0 +1,9 @@+-- Minimal example: mutation testing a negation specification+import Test.FitSpec++properties not =+  [ property $ \p -> not (not p) == p+  , property $ \p -> not (not (not p)) == not p+  ]++main = mainWith args {names = ["not p"]} not properties
+ eg/sorting.hs view
@@ -0,0 +1,43 @@+-- Minimal example: mutation testing a sort specification+--+-- (this program might take a minute to run depending on your system)+--+-- Usage:+--+-- $ ghc -O2 sorting.hs+-- $ ./sorting+-- Apparent incomplete and non-minimal specification based on+-- 4000 test cases for each of properties 1, 2, 3, 4 and 5+-- for each of 4000 mutant variations.+--+-- 3 survivors (99% killed), smallest:+--   \xs -> case xs of+--            [0,0,1] -> [0,1,1]+--            _ -> sort xs+--+-- apparent minimal property subsets:  {1,2,3} {1,2,4}+-- conjectures:  {3}    =  {4}     96% killed (weak)+--               {1,3} ==> {5}     98% killed (weak)++import Test.FitSpec+import Data.List (sort)++properties sort =+  [ property $ \xs   -> ordered (sort xs)+  , property $ \xs   -> length (sort xs) == length xs+  , property $ \x xs -> elem x (sort xs) == elem x xs+  , property $ \x xs -> notElem x (sort xs) == notElem x xs+  , property $ \x xs -> minimum (x:xs) == head (sort (x:xs))+  ]+  where+  ordered (x:y:xs) = x <= y && ordered (y:xs)+  ordered _        = True++main =+  mainWith args { names = ["sort xs"]+                , nMutants = 4000+                , nTests   = 4000+                , timeout  = 0+                }+           (sort::[Word2]->[Word2])+           properties
fitspec.cabal view
@@ -1,5 +1,5 @@ name:                fitspec-version:             0.4.6+version:             0.4.7 synopsis:            refining property sets for testing Haskell programs description:   FitSpec provides automated assistance in the task of refining test properties@@ -29,6 +29,21 @@                , TODO.md                , doc/modules.md                , doc/tutorial-property-creation.md+extra-source-files: .gitignore+                  , .travis.yml+                  , Makefile+                  , bench/haskell-src-exts.hs+                  , bench/haskell-src.hs+                  , eg/Makefile+                  , eg/alga.hs+                  , eg/negation.hs+                  , eg/sorting.hs+                  , mk/depend.mk+                  , mk/ghcdeps+                  , mk/haddock-i+                  , mk/haskell.mk+                  , stack.yaml+                  , tests/test-sdist tested-with: GHC==8.2, GHC==8.0, GHC==7.10, GHC==7.8, GHC==7.6, GHC==7.4  source-repository head@@ -38,7 +53,7 @@ source-repository this   type:            git   location:        https://github.com/rudymatela/fitspec-  tag:             v0.4.6+  tag:             v0.4.7   library
+ mk/depend.mk view
@@ -0,0 +1,461 @@+bench/AVLTree.o: \+  bench/AVLTree.hs+bench/avltrees: \+  bench/avltrees.hs \+  bench/AVLTree.hs \+  mk/toplibs+bench/avltrees.o: \+  src/Test/FitSpec/Utils.hs \+  src/Test/FitSpec/TestTypes.hs \+  src/Test/FitSpec/ShowMutable/Tuples.hs \+  src/Test/FitSpec/ShowMutable.hs \+  src/Test/FitSpec/Report.hs \+  src/Test/FitSpec/PrettyPrint.hs \+  src/Test/FitSpec.hs \+  src/Test/FitSpec/Mutable/Tuples.hs \+  src/Test/FitSpec/Mutable.hs \+  src/Test/FitSpec/Main.hs \+  src/Test/FitSpec/Engine.hs \+  src/Test/FitSpec/Derive.hs \+  bench/avltrees.hs \+  bench/AVLTree.hs+bench/bools: \+  bench/bools.hs \+  mk/toplibs+bench/bools.o: \+  src/Test/FitSpec/Utils.hs \+  src/Test/FitSpec/TestTypes.hs \+  src/Test/FitSpec/ShowMutable/Tuples.hs \+  src/Test/FitSpec/ShowMutable.hs \+  src/Test/FitSpec/Report.hs \+  src/Test/FitSpec/PrettyPrint.hs \+  src/Test/FitSpec.hs \+  src/Test/FitSpec/Mutable/Tuples.hs \+  src/Test/FitSpec/Mutable.hs \+  src/Test/FitSpec/Main.hs \+  src/Test/FitSpec/Engine.hs \+  src/Test/FitSpec/Derive.hs \+  bench/bools.hs+bench/Digraph.o: \+  bench/Digraph.hs+bench/digraphs: \+  bench/digraphs.hs \+  bench/Digraph.hs \+  mk/toplibs+bench/digraphs.o: \+  src/Test/FitSpec/Utils.hs \+  src/Test/FitSpec/TestTypes.hs \+  src/Test/FitSpec/ShowMutable/Tuples.hs \+  src/Test/FitSpec/ShowMutable.hs \+  src/Test/FitSpec/Report.hs \+  src/Test/FitSpec/PrettyPrint.hs \+  src/Test/FitSpec.hs \+  src/Test/FitSpec/Mutable/Tuples.hs \+  src/Test/FitSpec/Mutable.hs \+  src/Test/FitSpec/Main.hs \+  src/Test/FitSpec/Engine.hs \+  src/Test/FitSpec/Derive.hs \+  bench/digraphs.hs \+  bench/Digraph.hs+bench/haskell-src-exts: \+  mk/toplibs+bench/haskell-src-exts.o: \+  src/Test/FitSpec/Utils.hs \+  src/Test/FitSpec/TestTypes.hs \+  src/Test/FitSpec/ShowMutable/Tuples.hs \+  src/Test/FitSpec/ShowMutable.hs \+  src/Test/FitSpec/Report.hs \+  src/Test/FitSpec/PrettyPrint.hs \+  src/Test/FitSpec.hs \+  src/Test/FitSpec/Mutable/Tuples.hs \+  src/Test/FitSpec/Mutable.hs \+  src/Test/FitSpec/Main.hs \+  src/Test/FitSpec/Engine.hs \+  src/Test/FitSpec/Derive.hs \+  bench/haskell-src-exts.hs+bench/haskell-src: \+  mk/toplibs+bench/haskell-src.o: \+  src/Test/FitSpec/Utils.hs \+  src/Test/FitSpec/TestTypes.hs \+  src/Test/FitSpec/ShowMutable/Tuples.hs \+  src/Test/FitSpec/ShowMutable.hs \+  src/Test/FitSpec/Report.hs \+  src/Test/FitSpec/PrettyPrint.hs \+  src/Test/FitSpec.hs \+  src/Test/FitSpec/Mutable/Tuples.hs \+  src/Test/FitSpec/Mutable.hs \+  src/Test/FitSpec/Main.hs \+  src/Test/FitSpec/Engine.hs \+  src/Test/FitSpec/Derive.hs \+  bench/haskell-src.hs+bench/Heap.o: \+  bench/Heap.hs+bench/heaps: \+  bench/heaps.hs \+  bench/Heap.hs \+  mk/toplibs+bench/heaps.o: \+  src/Test/FitSpec/Utils.hs \+  src/Test/FitSpec/TestTypes.hs \+  src/Test/FitSpec/ShowMutable/Tuples.hs \+  src/Test/FitSpec/ShowMutable.hs \+  src/Test/FitSpec/Report.hs \+  src/Test/FitSpec/PrettyPrint.hs \+  src/Test/FitSpec.hs \+  src/Test/FitSpec/Mutable/Tuples.hs \+  src/Test/FitSpec/Mutable.hs \+  src/Test/FitSpec/Main.hs \+  src/Test/FitSpec/Engine.hs \+  src/Test/FitSpec/Derive.hs \+  bench/heaps.hs \+  bench/Heap.hs+bench/id: \+  bench/id.hs \+  mk/toplibs+bench/id.o: \+  src/Test/FitSpec/Utils.hs \+  src/Test/FitSpec/TestTypes.hs \+  src/Test/FitSpec/ShowMutable/Tuples.hs \+  src/Test/FitSpec/ShowMutable.hs \+  src/Test/FitSpec/Report.hs \+  src/Test/FitSpec/PrettyPrint.hs \+  src/Test/FitSpec.hs \+  src/Test/FitSpec/Mutable/Tuples.hs \+  src/Test/FitSpec/Mutable.hs \+  src/Test/FitSpec/Main.hs \+  src/Test/FitSpec/Engine.hs \+  src/Test/FitSpec/Derive.hs \+  bench/id.hs+bench/list: \+  bench/list.hs \+  mk/toplibs+bench/list.o: \+  src/Test/FitSpec/Utils.hs \+  src/Test/FitSpec/TestTypes.hs \+  src/Test/FitSpec/ShowMutable/Tuples.hs \+  src/Test/FitSpec/ShowMutable.hs \+  src/Test/FitSpec/Report.hs \+  src/Test/FitSpec/PrettyPrint.hs \+  src/Test/FitSpec.hs \+  src/Test/FitSpec/Mutable/Tuples.hs \+  src/Test/FitSpec/Mutable.hs \+  src/Test/FitSpec/Main.hs \+  src/Test/FitSpec/Engine.hs \+  src/Test/FitSpec/Derive.hs \+  bench/list.hs+bench/mergeheaps: \+  bench/mergeheaps.hs \+  bench/Heap.hs \+  mk/toplibs+bench/mergeheaps.o: \+  src/Test/FitSpec/Utils.hs \+  src/Test/FitSpec/TestTypes.hs \+  src/Test/FitSpec/ShowMutable/Tuples.hs \+  src/Test/FitSpec/ShowMutable.hs \+  src/Test/FitSpec/Report.hs \+  src/Test/FitSpec/PrettyPrint.hs \+  src/Test/FitSpec.hs \+  src/Test/FitSpec/Mutable/Tuples.hs \+  src/Test/FitSpec/Mutable.hs \+  src/Test/FitSpec/Main.hs \+  src/Test/FitSpec/Engine.hs \+  src/Test/FitSpec/Derive.hs \+  bench/mergeheaps.hs \+  bench/Heap.hs+bench/pretty: \+  bench/pretty.hs \+  mk/toplibs+bench/pretty.o: \+  src/Test/FitSpec/Utils.hs \+  src/Test/FitSpec/TestTypes.hs \+  src/Test/FitSpec/ShowMutable/Tuples.hs \+  src/Test/FitSpec/ShowMutable.hs \+  src/Test/FitSpec/Report.hs \+  src/Test/FitSpec/PrettyPrint.hs \+  src/Test/FitSpec.hs \+  src/Test/FitSpec/Mutable/Tuples.hs \+  src/Test/FitSpec/Mutable.hs \+  src/Test/FitSpec/Main.hs \+  src/Test/FitSpec/Engine.hs \+  src/Test/FitSpec/Derive.hs \+  bench/pretty.hs+bench/Set.o: \+  bench/Set.hs+bench/sets: \+  bench/sets.hs \+  bench/Set.hs \+  mk/toplibs+bench/setsofsets: \+  bench/setsofsets.hs \+  bench/Set.hs \+  mk/toplibs+bench/setsofsets.o: \+  src/Test/FitSpec/Utils.hs \+  src/Test/FitSpec/TestTypes.hs \+  src/Test/FitSpec/ShowMutable/Tuples.hs \+  src/Test/FitSpec/ShowMutable.hs \+  src/Test/FitSpec/Report.hs \+  src/Test/FitSpec/PrettyPrint.hs \+  src/Test/FitSpec.hs \+  src/Test/FitSpec/Mutable/Tuples.hs \+  src/Test/FitSpec/Mutable.hs \+  src/Test/FitSpec/Main.hs \+  src/Test/FitSpec/Engine.hs \+  src/Test/FitSpec/Derive.hs \+  bench/setsofsets.hs \+  bench/Set.hs+bench/sets.o: \+  src/Test/FitSpec/Utils.hs \+  src/Test/FitSpec/TestTypes.hs \+  src/Test/FitSpec/ShowMutable/Tuples.hs \+  src/Test/FitSpec/ShowMutable.hs \+  src/Test/FitSpec/Report.hs \+  src/Test/FitSpec/PrettyPrint.hs \+  src/Test/FitSpec.hs \+  src/Test/FitSpec/Mutable/Tuples.hs \+  src/Test/FitSpec/Mutable.hs \+  src/Test/FitSpec/Main.hs \+  src/Test/FitSpec/Engine.hs \+  src/Test/FitSpec/Derive.hs \+  bench/sets.hs \+  bench/Set.hs+bench/sieve: \+  bench/sieve.hs \+  mk/toplibs+bench/sieve.o: \+  src/Test/FitSpec/Utils.hs \+  src/Test/FitSpec/TestTypes.hs \+  src/Test/FitSpec/ShowMutable/Tuples.hs \+  src/Test/FitSpec/ShowMutable.hs \+  src/Test/FitSpec/Report.hs \+  src/Test/FitSpec/PrettyPrint.hs \+  src/Test/FitSpec.hs \+  src/Test/FitSpec/Mutable/Tuples.hs \+  src/Test/FitSpec/Mutable.hs \+  src/Test/FitSpec/Main.hs \+  src/Test/FitSpec/Engine.hs \+  src/Test/FitSpec/Derive.hs \+  bench/sieve.hs+bench/sorting: \+  bench/sorting.hs \+  mk/toplibs+bench/sorting.o: \+  src/Test/FitSpec/Utils.hs \+  src/Test/FitSpec/TestTypes.hs \+  src/Test/FitSpec/ShowMutable/Tuples.hs \+  src/Test/FitSpec/ShowMutable.hs \+  src/Test/FitSpec/Report.hs \+  src/Test/FitSpec/PrettyPrint.hs \+  src/Test/FitSpec.hs \+  src/Test/FitSpec/Mutable/Tuples.hs \+  src/Test/FitSpec/Mutable.hs \+  src/Test/FitSpec/Main.hs \+  src/Test/FitSpec/Engine.hs \+  src/Test/FitSpec/Derive.hs \+  bench/sorting.hs+bench/spring: \+  bench/spring.hs \+  mk/toplibs+bench/spring.o: \+  src/Test/FitSpec/Utils.hs \+  src/Test/FitSpec/TestTypes.hs \+  src/Test/FitSpec/ShowMutable/Tuples.hs \+  src/Test/FitSpec/ShowMutable.hs \+  src/Test/FitSpec/Report.hs \+  src/Test/FitSpec/PrettyPrint.hs \+  src/Test/FitSpec.hs \+  src/Test/FitSpec/Mutable/Tuples.hs \+  src/Test/FitSpec/Mutable.hs \+  src/Test/FitSpec/Main.hs \+  src/Test/FitSpec/Engine.hs \+  src/Test/FitSpec/Derive.hs \+  bench/spring.hs+eg/alga: \+  eg/alga.hs \+  mk/toplibs+eg/alga.o: \+  src/Test/FitSpec/Utils.hs \+  src/Test/FitSpec/TestTypes.hs \+  src/Test/FitSpec/ShowMutable/Tuples.hs \+  src/Test/FitSpec/ShowMutable.hs \+  src/Test/FitSpec/Report.hs \+  src/Test/FitSpec/PrettyPrint.hs \+  src/Test/FitSpec.hs \+  src/Test/FitSpec/Mutable/Tuples.hs \+  src/Test/FitSpec/Mutable.hs \+  src/Test/FitSpec/Main.hs \+  src/Test/FitSpec/Engine.hs \+  src/Test/FitSpec/Derive.hs \+  eg/alga.hs+eg/negation: \+  eg/negation.hs \+  mk/toplibs+eg/negation.o: \+  src/Test/FitSpec/Utils.hs \+  src/Test/FitSpec/TestTypes.hs \+  src/Test/FitSpec/ShowMutable/Tuples.hs \+  src/Test/FitSpec/ShowMutable.hs \+  src/Test/FitSpec/Report.hs \+  src/Test/FitSpec/PrettyPrint.hs \+  src/Test/FitSpec.hs \+  src/Test/FitSpec/Mutable/Tuples.hs \+  src/Test/FitSpec/Mutable.hs \+  src/Test/FitSpec/Main.hs \+  src/Test/FitSpec/Engine.hs \+  src/Test/FitSpec/Derive.hs \+  eg/negation.hs+eg/sorting: \+  eg/sorting.hs \+  mk/toplibs+eg/sorting.o: \+  src/Test/FitSpec/Utils.hs \+  src/Test/FitSpec/TestTypes.hs \+  src/Test/FitSpec/ShowMutable/Tuples.hs \+  src/Test/FitSpec/ShowMutable.hs \+  src/Test/FitSpec/Report.hs \+  src/Test/FitSpec/PrettyPrint.hs \+  src/Test/FitSpec.hs \+  src/Test/FitSpec/Mutable/Tuples.hs \+  src/Test/FitSpec/Mutable.hs \+  src/Test/FitSpec/Main.hs \+  src/Test/FitSpec/Engine.hs \+  src/Test/FitSpec/Derive.hs \+  eg/sorting.hs+src/Test/FitSpec/Derive.o: \+  src/Test/FitSpec/ShowMutable.hs \+  src/Test/FitSpec/PrettyPrint.hs \+  src/Test/FitSpec/Mutable.hs \+  src/Test/FitSpec/Derive.hs+src/Test/FitSpec/Dot.o: \+  src/Test/FitSpec/Utils.hs \+  src/Test/FitSpec/TestTypes.hs \+  src/Test/FitSpec/ShowMutable/Tuples.hs \+  src/Test/FitSpec/ShowMutable.hs \+  src/Test/FitSpec/Report.hs \+  src/Test/FitSpec/PrettyPrint.hs \+  src/Test/FitSpec.hs \+  src/Test/FitSpec/Mutable/Tuples.hs \+  src/Test/FitSpec/Mutable.hs \+  src/Test/FitSpec/Main.hs \+  src/Test/FitSpec/Engine.hs \+  src/Test/FitSpec/Dot.hs \+  src/Test/FitSpec/Derive.hs+src/Test/FitSpec/Engine: \+  mk/toplibs+src/Test/FitSpec/Engine.o: \+  src/Test/FitSpec/Utils.hs \+  src/Test/FitSpec/Mutable.hs \+  src/Test/FitSpec/Engine.hs+src/Test/FitSpec/Main: \+  mk/toplibs+src/Test/FitSpec/Main.o: \+  src/Test/FitSpec/Utils.hs \+  src/Test/FitSpec/ShowMutable.hs \+  src/Test/FitSpec/Report.hs \+  src/Test/FitSpec/PrettyPrint.hs \+  src/Test/FitSpec/Mutable.hs \+  src/Test/FitSpec/Main.hs \+  src/Test/FitSpec/Engine.hs+src/Test/FitSpec: \+  mk/toplibs+src/Test/FitSpec/Mutable.o: \+  src/Test/FitSpec/Mutable.hs+src/Test/FitSpec/Mutable/Tuples.o: \+  src/Test/FitSpec/Mutable/Tuples.hs \+  src/Test/FitSpec/Mutable.hs+src/Test/FitSpec.o: \+  src/Test/FitSpec/Utils.hs \+  src/Test/FitSpec/TestTypes.hs \+  src/Test/FitSpec/ShowMutable/Tuples.hs \+  src/Test/FitSpec/ShowMutable.hs \+  src/Test/FitSpec/Report.hs \+  src/Test/FitSpec/PrettyPrint.hs \+  src/Test/FitSpec.hs \+  src/Test/FitSpec/Mutable/Tuples.hs \+  src/Test/FitSpec/Mutable.hs \+  src/Test/FitSpec/Main.hs \+  src/Test/FitSpec/Engine.hs \+  src/Test/FitSpec/Derive.hs+src/Test/FitSpec/PrettyPrint.o: \+  src/Test/FitSpec/PrettyPrint.hs+src/Test/FitSpec/Report: \+  mk/toplibs+src/Test/FitSpec/Report.o: \+  src/Test/FitSpec/Utils.hs \+  src/Test/FitSpec/ShowMutable.hs \+  src/Test/FitSpec/Report.hs \+  src/Test/FitSpec/PrettyPrint.hs \+  src/Test/FitSpec/Mutable.hs \+  src/Test/FitSpec/Engine.hs+src/Test/FitSpec/ShowMutable.o: \+  src/Test/FitSpec/ShowMutable.hs \+  src/Test/FitSpec/PrettyPrint.hs+src/Test/FitSpec/ShowMutable/Tuples.o: \+  src/Test/FitSpec/ShowMutable/Tuples.hs \+  src/Test/FitSpec/ShowMutable.hs \+  src/Test/FitSpec/PrettyPrint.hs+src/Test/FitSpec/TestTypes.o: \+  src/Test/FitSpec/TestTypes.hs \+  src/Test/FitSpec/ShowMutable.hs \+  src/Test/FitSpec/PrettyPrint.hs \+  src/Test/FitSpec/Mutable.hs+src/Test/FitSpec/Utils.o: \+  src/Test/FitSpec/Utils.hs+tests/test-derive.o: \+  tests/test-derive.hs \+  src/Test/FitSpec/Utils.hs \+  src/Test/FitSpec/TestTypes.hs \+  src/Test/FitSpec/ShowMutable/Tuples.hs \+  src/Test/FitSpec/ShowMutable.hs \+  src/Test/FitSpec/Report.hs \+  src/Test/FitSpec/PrettyPrint.hs \+  src/Test/FitSpec.hs \+  src/Test/FitSpec/Mutable/Tuples.hs \+  src/Test/FitSpec/Mutable.hs \+  src/Test/FitSpec/Main.hs \+  src/Test/FitSpec/Engine.hs \+  src/Test/FitSpec/Derive.hs+tests/test-derive: \+  tests/test-derive.hs \+  mk/toplibs+tests/test-mutate.o: \+  tests/test-mutate.hs \+  src/Test/FitSpec/Utils.hs \+  src/Test/FitSpec/TestTypes.hs \+  src/Test/FitSpec/ShowMutable/Tuples.hs \+  src/Test/FitSpec/ShowMutable.hs \+  src/Test/FitSpec/Report.hs \+  src/Test/FitSpec/PrettyPrint.hs \+  src/Test/FitSpec.hs \+  src/Test/FitSpec/Mutable/Tuples.hs \+  src/Test/FitSpec/Mutable.hs \+  src/Test/FitSpec/Main.hs \+  src/Test/FitSpec/Engine.hs \+  src/Test/FitSpec/Derive.hs+tests/test-mutate: \+  tests/test-mutate.hs \+  mk/toplibs+tests/test-showmutable.o: \+  tests/test-showmutable.hs \+  src/Test/FitSpec/Utils.hs \+  src/Test/FitSpec/TestTypes.hs \+  src/Test/FitSpec/ShowMutable/Tuples.hs \+  src/Test/FitSpec/ShowMutable.hs \+  src/Test/FitSpec/Report.hs \+  src/Test/FitSpec/PrettyPrint.hs \+  src/Test/FitSpec.hs \+  src/Test/FitSpec/Mutable/Tuples.hs \+  src/Test/FitSpec/Mutable.hs \+  src/Test/FitSpec/Main.hs \+  src/Test/FitSpec/Engine.hs \+  src/Test/FitSpec/Derive.hs+tests/test-showmutable: \+  tests/test-showmutable.hs \+  mk/toplibs+tests/test-utils.o: \+  tests/test-utils.hs \+  src/Test/FitSpec/Utils.hs+tests/test-utils: \+  tests/test-utils.hs \+  mk/toplibs
+ mk/ghcdeps view
@@ -0,0 +1,49 @@+#!/bin/bash+#+# ghcdeps: generate Haskell make dependencies for compiling with GHC.+#+# Copyright (c) 2015-2018 Rudy Matela.+# Distributed under the 3-Clause BSD licence.+#+# From a list of files provided on standard input,+# generate flat make dependencies.+#+# Transitive relations are repeated.+#+# Usage:+#   $ ghcdeps -isomedir:someother <<LIST+#   program.hs+#   Library.hs+#   Path/To/Library.hs+#   LIST+#   program: ...+#   Library.o: ...+#   Path/To/Library.o: ...+#+# Or:+#   $ find -name \*.hs -o -name \*.lhs | ghcdeps [GHCFLAGS]+#   ...+#+# Note that when using find, you have to remember to exclude unecessary files,+# e.g.:  dist, Setup.hs+#+# Yes, this is hacky.  But hey, it works.+while read fn+do+	ghc "$@" -dep-suffix=. -dep-makefile=tmp.mk -M "$fn" ||+	exit 1+	deps="`cat tmp.mk |+	       grep "hs$" |+	       sort |+	       sed -e "s/.*: //" |+	       tac |+	       tr '\n' ' ' |+	       sed -e "s/ $//"`"+	obj=`echo $fn | sed -e 's,^\./,,;s/\.hs$/.o/'`+	bin=`echo $fn | sed -e 's,^\./,,;s/\.hs$//'`+	echo "$obj: $deps"+	grep -q "main" "$fn" && echo "$bin: `echo $deps | sed -e 's|[^ ]*src[^ ]*||g'` mk/toplibs"+	rm -f tmp.mk+done |+sort |+sed -e 's,  *, \\\n  ,g'
+ mk/haddock-i view
@@ -0,0 +1,24 @@+#!/bin/bash+#+# haddock-i: list haddock's -i parameters.+#+# Copyright (c) 2015-2018 Rudy Matela.+# Distributed under the 3-Clause BSD licence.+#+# $ haddock-i <package1> <package2> ... <packageN>+#+# will print -i parameters necessary for haddock to link to Haddock+# documentation installed on your system, so you can:+#+# $ haddock-i base template-haskell | xargs haddock <files>+errxit() {+	echo "$@" > /dev/stderr+	exit 1+}++for pkg in "$@"; do+	ghc-pkg field $pkg haddock-html,haddock-interfaces ||+	errxit "error: haddock-i: cannot find package $pkg (ghc-pkg)"+done |+sed "s/.*: //" |+sed "N;s/\n/,/;s/^/-i/"
+ mk/haskell.mk view
@@ -0,0 +1,110 @@+# Implicit rules for compiling Haskell code.+#+# Copyright (c) 2015-2018 Rudy Matela.+# Distributed under the 3-Clause BSD licence.+#+# You can optionally configure the "Configuration variables" below in your main+# makefile, e.g.:+#+#   GHCIMPORTDIRS = path/to/dir:path/to/another/dir+#   GHCFLAGS = -O2 -dynamic+#   GHC = ghc-7.6+#   include haskell.mk++++# Configuration variables++# GHC Parameters+GHCIMPORTDIRS ?=+GHCFLAGS ?=+GHC ?= ghc+GHCCMD = $(GHC) -i$(GHCIMPORTDIRS) $(GHCFLAGS)++# Hugs Parameters+HUGSIMPORTDIRS ?= "/usr/lib/hugs/packages/*"+HUGSFLAGS ?=+CPPHS_HUGS ?= cpphs-hugs --noline -D__HUGS__+HUGS ?= hugs+RUNHUGS ?= runhugs+HUGSCMD    = $(HUGS)    -F"$(CPPHS_HUGS)" -P$(HUGSIMPORTDIRS) $(HUGSFLAGS)+RUNHUGSCMD = $(RUNHUGS) -F"$(CPPHS_HUGS)" -P$(HUGSIMPORTDIRS) $(HUGSFLAGS)+++# Makefile where to keep the dependencies+DEPMK ?= mk/depend.mk++# LIB_HSS: all library Haskell files+# ALL_HSS: all Haskell files+# You can override ALL/LIB_HSS in your main Makefile+LIST_LIB_HSS ?= find src -name "*.hs"+LIST_ALL_HSS ?= find \( -path "./dist" -o -path "./.stack-work" \) -prune \+                     -o -name "*.*hs" -print+LIB_HSS ?= $(shell $(LIST_LIB_HSS))+ALL_HSS ?= $(shell $(LIST_ALL_HSS))++PKGNAME = $(shell cat *.cabal | grep "^name:"    | sed -e "s/name: *//")+++# Implicit rules+%.hi %.o: %.hs+	$(GHCCMD) $< && touch $@++%: %.hs+	$(GHCCMD) $< && touch $@++.PHONY: %.ghci+%.ghci: %.hs+	$(GHCCMD) -O0 --interactive $<++.PHONY: %.hugs+%.hugs: %.hs+	$(HUGSCMD) $<++.PHONY: %.runhugs+%.runhugs: %.hs+	$(RUNHUGSCMD) $<+++# Cleaning rule (add as a clean dependency)+.PHONY: clean-hi-o+clean-hi-o:+	find $(ALL_HSS) | sed -e 's/hs$$/o/'      | xargs rm -f+	find $(ALL_HSS) | sed -e 's/hs$$/hi/'     | xargs rm -f+	find $(ALL_HSS) | sed -e 's/hs$$/dyn_o/'  | xargs rm -f+	find $(ALL_HSS) | sed -e 's/hs$$/dyn_hi/' | xargs rm -f+++# Update dependency file+.PHONY: depend+depend:+	find $(ALL_HSS) | ./mk/ghcdeps -i$(GHCIMPORTDIRS) $(GHCFLAGS) > $(DEPMK)++# haddock rules+haddock: doc/index.html++clean-haddock:+	rm -f doc/*.{html,css,js,png,gif,json} README.html++upload-haddock:+	@echo "use \`cabal upload -d' instead"+	@echo "(but 1st: cabal install --only-dependencies --enable-documentation)"+	@echo "(to just compile docs: cabal haddock --for-hackage)"+	@echo "(on Arch Linux, use: cabal haddock --for-hackage --haddock-options=--optghc=-dynamic)"++doc/index.html: $(LIB_HSS)+	./mk/haddock-i base template-haskell | xargs \+	haddock --html -odoc $(LIB_HSS) $(HADDOCKFLAGS) --title=$(PKGNAME)++# lists all Haskell source files+list-all-hss:+	@find $(ALL_HSS)++# lists library Haskell source files+list-lib-hss:+	@find $(LIB_HSS)++show-pkgname:+	@echo $(PKGNAME)++include $(DEPMK)
src/Test/FitSpec.hs view
@@ -1,6 +1,6 @@ -- | -- Module      : Test.FitSpec--- Copyright   : (c) 2015-2017 Rudy Matela+-- Copyright   : (c) 2015-2018 Rudy Matela -- License     : 3-Clause BSD  (see the file LICENSE) -- Maintainer  : Rudy Matela <rudy@matela.com.br> --
+ stack.yaml view
@@ -0,0 +1,16 @@+# stack.yaml docs:+# https://docs.haskellstack.org/en/stable/yaml_configuration/++# resolver: nightly-2015-09-21+# resolver: ghc-7.10.2+resolver: lts-12.7++packages:+- .++extra-deps:+- leancheck-0.7.2++flags: {}++extra-package-dbs: []
+ tests/test-sdist view
@@ -0,0 +1,28 @@+#!/bin/bash+#+# test-sdist: tests the package generated by "cabal sdist".+#+# Copyright (c) 2015-2018 Rudy Matela.+# Distributed under the 3-Clause BSD licence.+pkgver=` cat *.cabal | grep "^version:" | sed -e "s/version: *//"`+pkgname=`cat *.cabal | grep "^name:"    | sed -e "s/name: *//"`+pkg=$pkgname-$pkgver+set -x+cabal sdist &&+cd dist &&+if [ -d ../.git ]+then+	# on git repo, test if files are the same+	git -C .. ls-files                                      | sort > ls-git   &&+	tar -tf $pkg.tar.gz | grep -v "/$" | sed -e "s,$pkg/,," | sort > ls-cabal &&+	diff -rud ls-git ls-cabal &&+	rm -f ls-git ls-cabal+else+	# outside of git repo, test build+	rm -rf $pkg/ &&+	tar -xzf $pkg.tar.gz &&+	cd $pkg/ &&+	cabal configure --enable-tests --enable-benchmarks &&+	cabal build &&+	cabal test+fi