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 +54/−0
- .travis.yml +108/−0
- Makefile +130/−0
- bench/haskell-src-exts.hs +38/−0
- bench/haskell-src.hs +58/−0
- eg/Makefile +24/−0
- eg/alga.hs +49/−0
- eg/negation.hs +9/−0
- eg/sorting.hs +43/−0
- fitspec.cabal +17/−2
- mk/depend.mk +461/−0
- mk/ghcdeps +49/−0
- mk/haddock-i +24/−0
- mk/haskell.mk +110/−0
- src/Test/FitSpec.hs +1/−1
- stack.yaml +16/−0
- tests/test-sdist +28/−0
+ .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