packages feed

leancheck 0.7.0 → 0.7.1

raw patch · 177 files changed

+1947/−1026 lines, 177 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

+ Test.LeanCheck: mapCons :: (Listable a, Listable b) => ([(a, b)] -> c) -> [[c]]
+ Test.LeanCheck.Error: (+|) :: [a] -> [a] -> [a]
+ Test.LeanCheck.Error: (==>) :: Bool -> Bool -> Bool
+ Test.LeanCheck.Error: (><) :: [[a]] -> [[b]] -> [[(a, b)]]
+ Test.LeanCheck.Error: (\/) :: [[a]] -> [[a]] -> [[a]]
+ Test.LeanCheck.Error: (\\//) :: [[a]] -> [[a]] -> [[a]]
+ Test.LeanCheck.Error: addWeight :: [[a]] -> Int -> [[a]]
+ Test.LeanCheck.Error: bagCons :: Listable a => ([a] -> b) -> [[b]]
+ Test.LeanCheck.Error: bagsOf :: [[a]] -> [[[a]]]
+ Test.LeanCheck.Error: check :: Testable a => a -> IO ()
+ Test.LeanCheck.Error: checkFor :: Testable a => Int -> a -> IO ()
+ Test.LeanCheck.Error: checkResult :: Testable a => a -> IO Bool
+ Test.LeanCheck.Error: checkResultFor :: Testable a => Int -> a -> IO Bool
+ Test.LeanCheck.Error: class Listable a
+ Test.LeanCheck.Error: class Testable a
+ Test.LeanCheck.Error: concatMapT :: (a -> [[b]]) -> [[a]] -> [[b]]
+ Test.LeanCheck.Error: concatT :: [[[[a]]]] -> [[a]]
+ Test.LeanCheck.Error: cons0 :: a -> [[a]]
+ Test.LeanCheck.Error: cons1 :: Listable a => (a -> b) -> [[b]]
+ Test.LeanCheck.Error: cons10 :: (Listable a, Listable b, Listable c, Listable d, Listable e, Listable f, Listable g, Listable h, Listable i, Listable j) => (a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k) -> [[k]]
+ Test.LeanCheck.Error: cons11 :: (Listable a, Listable b, Listable c, Listable d, Listable e, Listable f, Listable g, Listable h, Listable i, Listable j, Listable k) => (a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l) -> [[l]]
+ Test.LeanCheck.Error: cons12 :: (Listable a, Listable b, Listable c, Listable d, Listable e, Listable f, Listable g, Listable h, Listable i, Listable j, Listable k, Listable l) => (a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m) -> [[m]]
+ Test.LeanCheck.Error: cons2 :: (Listable a, Listable b) => (a -> b -> c) -> [[c]]
+ Test.LeanCheck.Error: cons3 :: (Listable a, Listable b, Listable c) => (a -> b -> c -> d) -> [[d]]
+ Test.LeanCheck.Error: cons4 :: (Listable a, Listable b, Listable c, Listable d) => (a -> b -> c -> d -> e) -> [[e]]
+ Test.LeanCheck.Error: cons5 :: (Listable a, Listable b, Listable c, Listable d, Listable e) => (a -> b -> c -> d -> e -> f) -> [[f]]
+ Test.LeanCheck.Error: cons6 :: (Listable a, Listable b, Listable c, Listable d, Listable e, Listable f) => (a -> b -> c -> d -> e -> f -> g) -> [[g]]
+ Test.LeanCheck.Error: cons7 :: (Listable a, Listable b, Listable c, Listable d, Listable e, Listable f, Listable g) => (a -> b -> c -> d -> e -> f -> g -> h) -> [[h]]
+ Test.LeanCheck.Error: cons8 :: (Listable a, Listable b, Listable c, Listable d, Listable e, Listable f, Listable g, Listable h) => (a -> b -> c -> d -> e -> f -> g -> h -> i) -> [[i]]
+ Test.LeanCheck.Error: cons9 :: (Listable a, Listable b, Listable c, Listable d, Listable e, Listable f, Listable g, Listable h, Listable i) => (a -> b -> c -> d -> e -> f -> g -> h -> i -> j) -> [[j]]
+ Test.LeanCheck.Error: delay :: [[a]] -> [[a]]
+ Test.LeanCheck.Error: deleteT :: Eq a => a -> [[a]] -> [[a]]
+ Test.LeanCheck.Error: deriveListable :: Name -> DecsQ
+ Test.LeanCheck.Error: deriveListableCascading :: Name -> DecsQ
+ Test.LeanCheck.Error: filterT :: (a -> Bool) -> [[a]] -> [[a]]
+ Test.LeanCheck.Error: infixr 0 ==>
+ Test.LeanCheck.Error: infixr 5 +|
+ Test.LeanCheck.Error: infixr 7 \\//
+ Test.LeanCheck.Error: infixr 8 ><
+ Test.LeanCheck.Error: list :: Listable a => [a]
+ Test.LeanCheck.Error: listIntegral :: (Enum a, Num a) => [a]
+ Test.LeanCheck.Error: listsOf :: [[a]] -> [[[a]]]
+ Test.LeanCheck.Error: listsOfLength :: Int -> [[a]] -> [[[a]]]
+ Test.LeanCheck.Error: mapCons :: (Listable a, Listable b) => ([(a, b)] -> c) -> [[c]]
+ Test.LeanCheck.Error: mapT :: (a -> b) -> [[a]] -> [[b]]
+ Test.LeanCheck.Error: noDupListCons :: Listable a => ([a] -> b) -> [[b]]
+ Test.LeanCheck.Error: noDupListsOf :: [[a]] -> [[[a]]]
+ Test.LeanCheck.Error: normalizeT :: [[a]] -> [[a]]
+ Test.LeanCheck.Error: ofWeight :: [[a]] -> Int -> [[a]]
+ Test.LeanCheck.Error: product3With :: (a -> b -> c -> d) -> [[a]] -> [[b]] -> [[c]] -> [[d]]
+ Test.LeanCheck.Error: productMaybeWith :: (a -> b -> Maybe c) -> [[a]] -> [[b]] -> [[c]]
+ Test.LeanCheck.Error: productWith :: (a -> b -> c) -> [[a]] -> [[b]] -> [[c]]
+ Test.LeanCheck.Error: products :: [[[a]]] -> [[[a]]]
+ Test.LeanCheck.Error: reset :: [[a]] -> [[a]]
+ Test.LeanCheck.Error: setCons :: Listable a => ([a] -> b) -> [[b]]
+ Test.LeanCheck.Error: setsOf :: [[a]] -> [[[a]]]
+ Test.LeanCheck.Error: suchThat :: [[a]] -> (a -> Bool) -> [[a]]
+ Test.LeanCheck.Error: tiers :: Listable a => [[a]]
+ Test.LeanCheck.Error: tiersFractional :: Fractional a => [[a]]
+ Test.LeanCheck.Error: toTiers :: [a] -> [[a]]
+ Test.LeanCheck.Tiers: mapCons :: (Listable a, Listable b) => ([(a, b)] -> c) -> [[c]]
+ Test.LeanCheck.Tiers: maps :: [[a]] -> [[b]] -> [[[(a, b)]]]
+ Test.LeanCheck.Utils.Operators: okNum :: (Eq a, Num a) => a -> a -> a -> Bool
+ Test.LeanCheck.Utils.TypeBinding: rational :: Rational
+ Test.LeanCheck.Utils.Types: Map :: [(a, b)] -> Map a b
+ Test.LeanCheck.Utils.Types: instance (GHC.Classes.Eq a, GHC.Classes.Eq b) => GHC.Classes.Eq (Test.LeanCheck.Utils.Types.Map a b)
+ Test.LeanCheck.Utils.Types: instance (GHC.Classes.Ord a, GHC.Classes.Ord b) => GHC.Classes.Ord (Test.LeanCheck.Utils.Types.Map a b)
+ Test.LeanCheck.Utils.Types: instance (GHC.Read.Read a, GHC.Read.Read b) => GHC.Read.Read (Test.LeanCheck.Utils.Types.Map a b)
+ Test.LeanCheck.Utils.Types: instance (GHC.Show.Show a, GHC.Show.Show b) => GHC.Show.Show (Test.LeanCheck.Utils.Types.Map a b)
+ Test.LeanCheck.Utils.Types: instance (Test.LeanCheck.Core.Listable a, Test.LeanCheck.Core.Listable b) => Test.LeanCheck.Core.Listable (Test.LeanCheck.Utils.Types.Map a b)
+ Test.LeanCheck.Utils.Types: newtype Map a b
- Test.LeanCheck: class Listable a where tiers = toTiers list list = concat tiers
+ Test.LeanCheck: class Listable a
- Test.LeanCheck.Core: class Listable a where tiers = toTiers list list = concat tiers
+ Test.LeanCheck.Core: class Listable a
- Test.LeanCheck.Function.Listable.FunListable: class FunListable a where validResults x = not . invalidResults x invalidResults x = not . validResults x
+ Test.LeanCheck.Function.Listable.FunListable: class FunListable a
- Test.LeanCheck.Function.ShowFunction: class Listable a where tiers = toTiers list list = concat tiers
+ Test.LeanCheck.Function.ShowFunction: class Listable a

Files

.gitignore view
@@ -42,5 +42,6 @@ doc/*.js doc/*.png doc/*.gif+doc/*.json mk/toplibs README.html
.travis.yml view
@@ -1,4 +1,8 @@ # .travis.yml file for LeanCheck+#+# 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 @@ -33,23 +37,35 @@ - stack --no-terminal --skip-ghc-check test  matrix:+  allow_failures:+  - ghc: 'head'   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}}+    env:                   GHCVER=8.2.2        CABALVER=2.0+    addons: {apt: {packages: [ghc-8.2.2,  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}}-  # stack is only supported on GHC >= 7.8+    before_install:+    - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH+    - ghc --version+    - cabal --version+    script:+    - make GHCFLAGS=-O2 && make test GHCFLAGS=-O2 && make haddock HADDOCKFLAGS=+    - 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}}@@ -70,3 +86,10 @@     script:     - make GHCFLAGS=-O2 && make test GHCFLAGS=-O2 && make haddock HADDOCKFLAGS=     - cabal test+  - ghc: 'hugs'+    env:                   GHCVER=hugs+    addons: {apt: {packages: [hugs]}}+    before_install:+    - echo ":version" | hugs+    script:+    - make hugs-test
LICENSE view
@@ -1,4 +1,4 @@-Copyright (c) 2015-2017, Rudy Matela+Copyright (c) 2015-2018, Rudy Matela  All rights reserved. 
Makefile view
@@ -1,6 +1,6 @@ # Makefile for LeanCheck #-# 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> TESTS = tests/test           \@@ -25,21 +25,16 @@ 	bench/tiers-listsofpairs \ 	bench/tiers-mixed \ 	bench/tiers-LISTHS   = find src mk -name \*.hs-LISTOBJS = $(LISTHS) | sed -e 's/.hs$$/.o/'-ALLHS    = $(shell $(LISTHS))-ALLOBJS  = $(shell $(LISTOBJS))-OBJS = src/Test/LeanCheck.o \-       src/Test/LeanCheck/Function.o \-       src/Test/LeanCheck/Error.o GHCIMPORTDIRS = src:tests # -dynamic is needed only for src/Test/LeanCheck/Derive.hs and tests/test-derive.hs GHCFLAGS = -dynamic -O2 HADDOCKFLAGS = --no-print-missing-docs+HUGSIMPORTDIRS = .:./src:./tests:./etc/hugs-backports:/usr/lib/hugs/packages/*+HUGSFLAGS = -98 -h32M -all: $(OBJS)+all: mk/toplibs -all-all: $(ALLOBJS)+all-all: mk/All.o  test: $(patsubst %,%.test,$(TESTS)) diff-test @@ -59,20 +54,27 @@ clean: clean-hi-o clean-haddock 	rm -f bench/tiers-colistable.hs 	rm -f bench/tiers-listsofpairs.hs-	rm -f bench/tiers-funlistable 	rm -f bench/tiers-funlistable.hs+	rm -f bench/tiers-mixed.hs 	rm -f $(TESTS) $(BENCHS) $(EGS) mk/toplibs  ghci: mk/All.ghci -install:-	@echo "use \`cabal install' instead"+hugs: src/Test/LeanCheck.hugs -list-hs:-	$(LISTHS)+hugs-test: \+  tests/test-fun.runhugs \+  tests/test-io.runhugs \+  tests/test-operators.runhugs \+  tests/test-stats.runhugs \+  tests/test-tiers.runhugs \+  tests/test.runhugs+# tests/test-error.runhugs    # TODO: make this pass+# tests/test-funshow.runhugs  # TODO: make this pass+# tests/test-types.runhugs    # TODO: make this pass -list-objs:-	$(LISTOBJS)+install:+	@echo "use \`cabal install' instead"  test-sdist: 	./tests/test-sdist@@ -80,14 +82,16 @@ test-via-stack: 	stack test -legacy-test: # needs ghc-8.0 .. ghc-7.8 installed as such+legacy-test: # needs ghc-8.2 .. ghc-7.8 installed as such+	make clean  &&  make test GHC=ghc-8.2  GHCFLAGS="-Werror -dynamic" 	make clean  &&  make test GHC=ghc-8.0  GHCFLAGS="-Werror -dynamic" 	make clean  &&  make test GHC=ghc-7.10 GHCFLAGS="-Werror -dynamic" 	make clean  &&  make test GHC=ghc-7.8  GHCFLAGS="-Werror -dynamic" 	make clean  &&  make test  legacy-test-via-cabal: # needs similarly named cabal wrappers-	cabal clean  &&  cabal-ghc-8.0  configure  &&  cabal-ghc-7.10 test+	cabal clean  &&  cabal-ghc-8.2  configure  &&  cabal-ghc-8.2  test+	cabal clean  &&  cabal-ghc-8.0  configure  &&  cabal-ghc-8.0  test 	cabal clean  &&  cabal-ghc-7.10 configure  &&  cabal-ghc-7.10 test 	cabal clean  &&  cabal-ghc-7.8  configure  &&  cabal-ghc-7.8  test 	cabal clean  &&  cabal test@@ -103,25 +107,6 @@ 	pandoc doc/tutorial.md -o doc/tutorial.html 	pandoc doc/data-invariant.md -o doc/data-invariant.html -haddock: doc/index.html--clean-haddock:-	rm -f doc/*.{html,css,js,png,gif} 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: $(ALLHS)-	./mk/haddock-i base template-haskell | xargs \-	haddock --html -odoc $(ALLHS) $(HADDOCKFLAGS) --title=leancheck-	@echo 'NOTE: please ensure that there are *only* 7'-	@echo '      undocumented functions on Test.LeanCheck'-	@echo '      as "OPTIONS_HADDOCK prune" is active'-	@echo '      to hide cons6...cons12'- # NOTE: (very hacky!) the following target allows parallel compilation (-jN) of # eg and tests programs so long as they don't share dependencies _not_ stored # in src/ and tests/.  Runnable binaries should depend on mk/toplibs instead of@@ -169,6 +154,11 @@ 	./bench/tiers "NoDup Nat"        | diff -rud tests/diff/tiers-NoDupNat.out    - 	./bench/tiers "NoDup Nat2"       | diff -rud tests/diff/tiers-NoDupNat2.out   - 	./bench/tiers "NoDup Nat3"       | diff -rud tests/diff/tiers-NoDupNat3.out   -+	./bench/tiers "Map Bool Bool"    | diff -rud tests/diff/tiers-MapBoolBool.out -+	./bench/tiers "Map () ()"        | diff -rud tests/diff/tiers-MapUU.out       -+	./bench/tiers "Map Nat Nat"      | diff -rud tests/diff/tiers-MapNatNat.out   -+	./bench/tiers "Map Nat2 Nat2"    | diff -rud tests/diff/tiers-MapNat2Nat2.out -+	./bench/tiers "Map Nat3 Nat3"    | diff -rud tests/diff/tiers-MapNat3Nat3.out -  update-diff-test-tiers: bench/tiers 	# simple types@@ -208,6 +198,11 @@ 	./bench/tiers "NoDup Nat"        > tests/diff/tiers-NoDupNat.out 	./bench/tiers "NoDup Nat2"       > tests/diff/tiers-NoDupNat2.out 	./bench/tiers "NoDup Nat3"       > tests/diff/tiers-NoDupNat3.out+	./bench/tiers "Map Bool Bool"    > tests/diff/tiers-MapBoolBool.out+	./bench/tiers "Map () ()"        > tests/diff/tiers-MapUU.out+	./bench/tiers "Map Nat Nat"      > tests/diff/tiers-MapNatNat.out+	./bench/tiers "Map Nat2 Nat2"    > tests/diff/tiers-MapNat2Nat2.out+	./bench/tiers "Map Nat3 Nat3"    > tests/diff/tiers-MapNat3Nat3.out  prepare-depend: bench/tiers-listsofpairs.hs \                 bench/tiers-colistable.hs \
README.md view
@@ -153,6 +153,8 @@ [tutorial on property-based testing with LeanCheck] \(`doc/tutorial.md` in the source repository). +LeanCheck is subject to a chapter in a [PhD Thesis (2017)].+ [LeanCheck's Haddock documentation]: https://hackage.haskell.org/package/leancheck/docs/Test-LeanCheck.html [tutorial on property-based testing with LeanCheck]: https://github.com/rudymatela/leancheck/blob/master/doc/tutorial.md @@ -171,6 +173,7 @@ [Feat]: https://hackage.haskell.org/package/testing-feat [SmallCheck]: https://hackage.haskell.org/package/smallcheck [QuickCheck]: https://hackage.haskell.org/package/QuickCheck+[PhD Thesis (2017)]: https://matela.com.br/paper/rudy-phd-thesis-2017.pdf  [symbol `>`]: https://www.haskell.org/haddock/doc/html/ch03s08.html#idm140354810780208 
TODO.md view
@@ -7,11 +7,6 @@ misc ---- -* improve `mk/haskell.mk`: pass ALLHS and LIBHS instead of HSS-  By making that distinction, haskell.mk will be able to handle Haddock.-  It will also be clearer what each parameter means.-  Note that ALLHS and LIBHS are not (but could be) the final names.- * parameterize number of tests in test programs and add slow-test target  @@ -26,7 +21,7 @@ other improvements ------------------ -* implement `classStatsT` and `conditionStatsT`+* implement `conditionStatsT` (see `classStatsT`)   later
bench/tiers.hs view
@@ -1,6 +1,6 @@ -- tiers.hs -- prints tiers of values up to a certain point ----- Copyright (c) 2015-2017 Rudy Matela.+-- Copyright (c) 2015-2018 Rudy Matela. -- Distributed under the 3-Clause BSD licence (see the file LICENSE). import Test.LeanCheck import Test.LeanCheck.Utils.Types@@ -50,9 +50,6 @@  put :: (Show a, Eq a, Listable a) => String -> Int -> a -> IO () put t n a = do-  putStrLn $ "tiers :: [" ++ t ++ "]  ="-  printTiers n $ tiers `asTypeOf` [[a]]-  putStrLn $ ""   putStrLn $ "map length (tiers :: [[ " ++ t ++ " ]])  =  "           ++ showDotsLongerThan n (map length $ tiers `asTypeOf` [[a]])   putStrLn $ ""@@ -64,6 +61,9 @@   putStrLn $ ""   putStrLn $ "ratioRepetitions (list :: [ " ++ t ++ " ])  =  "           ++ show (ratioRepetitions . concat . take n $ tiers `asTypeOf` [[a]])+  putStrLn $ ""+  putStrLn $ "tiers :: [" ++ t ++ "]  ="+  printTiers n $ tiers `asTypeOf` [[a]]  u :: a u = undefined@@ -105,6 +105,8 @@     "([()],[()])"      -> put t n (u :: ([()],[()])          )     "([Bool],[Bool])"  -> put t n (u :: ([Bool],[Bool])      )     "([Int],[Int])"    -> put t n (u :: ([Int],[Int])        )+    -- lists of lists+    "[[Int]]"          -> put t n (u :: [[Int]]              )     -- functions     "()->()"           -> put t n (u :: () -> ()             )     "()->Bool"         -> put t n (u :: () -> Bool           )@@ -149,5 +151,10 @@     "NoDup Nat"        -> put t n (u :: NoDup Nat            )     "NoDup Nat2"       -> put t n (u :: NoDup Nat2           )     "NoDup Nat3"       -> put t n (u :: NoDup Nat3           )+    "Map Bool Bool"    -> put t n (u :: Map Bool Bool        )+    "Map () ()"        -> put t n (u :: Map () ()            )+    "Map Nat Nat"      -> put t n (u :: Map Nat Nat          )+    "Map Nat2 Nat2"    -> put t n (u :: Map Nat2 Nat2        )+    "Map Nat3 Nat3"    -> put t n (u :: Map Nat3 Nat3        )     -- unhandled     _                  -> putStrLn $ "unknown/unhandled type `" ++ t ++ "'"
eg/test-bool.hs view
@@ -1,6 +1,6 @@ -- test-bool.hs -- example program, testing Bool fns using LeanCheck ----- Copyright (c) 2017 Rudy Matela.+-- Copyright (c) 2017-2018 Rudy Matela. -- Distributed under the 3-Clause BSD licence (see the file LICENSE). import Test.LeanCheck import Test.LeanCheck.Function
eg/test-list.hs view
@@ -1,6 +1,6 @@ -- test-list.hs -- example program, testing Data.List using LeanCheck ----- Copyright (c) 2017 Rudy Matela.+-- Copyright (c) 2017-2018 Rudy Matela. -- Distributed under the 3-Clause BSD licence (see the file LICENSE). import Test.LeanCheck import Data.List
eg/test-sort.hs view
@@ -1,6 +1,6 @@ -- test-sort.hs -- example program, testing sort using LeanCheck ----- Copyright (c) 2017 Rudy Matela.+-- Copyright (c) 2017-2018 Rudy Matela. -- Distributed under the 3-Clause BSD licence (see the file LICENSE). import Test.LeanCheck 
leancheck.cabal view
@@ -11,7 +11,7 @@ -- this cabal file too complicated.  -- Rudy  name:                leancheck-version:             0.7.0+version:             0.7.1 synopsis:            Cholesterol-free property-based testing description:   LeanCheck is a simple enumerative property-based testing library.@@ -33,7 +33,7 @@ maintainer:          Rudy Matela <rudy@matela.com.br> category:            Testing build-type:          Simple-cabal-version:       >=1.18+cabal-version:       1.18  extra-doc-files: README.md                , CREDITS.md@@ -59,7 +59,7 @@                   , mk/Toplibs.hs                   , tests/diff/*.out                   , tests/diff/eg/*.out-tested-with: GHC==8.2, GHC==8.0, GHC==7.10, GHC==7.8, GHC==7.6, GHC==7.4+tested-with: GHC==8.4, GHC==8.2, GHC==8.0, GHC==7.10, GHC==7.8, GHC==7.6, GHC==7.4   source-repository head@@ -69,7 +69,7 @@ source-repository this   type:            git   location:        https://github.com/rudymatela/leancheck-  tag:             v0.7.0+  tag:             v0.7.1  library   exposed-modules: Test.LeanCheck
mk/depend.mk view
@@ -182,6 +182,8 @@   src/Test/LeanCheck/Core.hs \   src/Test/LeanCheck/Basic.hs \   eg/test-sort.hs+etc/hugs-backports/Data/Function.o: \+  etc/hugs-backports/Data/Function.hs mk/All.o: \   src/Test/LeanCheck/Utils/Types.hs \   src/Test/LeanCheck/Utils/TypeBinding.hs \@@ -215,6 +217,11 @@   src/Test/LeanCheck/Core.hs \   src/Test/LeanCheck/Basic.hs \   mk/Toplibs.hs+Setup.o: \+  Setup.hs+Setup: \+  Setup.hs \+  mk/toplibs src/Test/LeanCheck/Basic.o: \   src/Test/LeanCheck/Core.hs \   src/Test/LeanCheck/Basic.hs
mk/ghcdeps view
@@ -2,7 +2,7 @@ # # ghcdeps: generate Haskell make dependencies for compiling with GHC. #-# Copyright (c) 2015-2017 Rudy Matela.+# Copyright (c) 2015-2018 Rudy Matela. # Distributed under the 3-Clause BSD licence. # # From a list of files provided on standard input,
mk/haddock-i view
@@ -2,7 +2,7 @@ # # haddock-i: list haddock's -i parameters. #-# Copyright (c) 2015-2017 Rudy Matela.+# Copyright (c) 2015-2018 Rudy Matela. # Distributed under the 3-Clause BSD licence. # # $ haddock-i <package1> <package2> ... <packageN>
mk/haskell.mk view
@@ -1,6 +1,6 @@ # Implicit rules for compiling Haskell code. #-# Copyright (c) 2015-2017 Rudy Matela.+# Copyright (c) 2015-2018 Rudy Matela. # Distributed under the 3-Clause BSD licence. # # You can optionally configure the "Configuration variables" below in your main@@ -19,24 +19,34 @@ 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 -# By default, excludes dist and Setup.hs, so that a Makefile can coexist nicely-# in a cabalized project.  Also excludes .stack-work.-HSS ?= $(shell find \( -path "./dist" -o -path "./Setup.hs" -o -path "./.stack-work" \) -prune \-                 -o -name "*.*hs" -print)-# You can override HSS in your main Makefile-# It should include all Haskell sources to be compiled by different targets-# (even those that are not a dependency to all)-# It will be used to generate dependencies and for cleaning objects+# 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-GHCCMD = $(GHC) -i$(GHCIMPORTDIRS) $(GHCFLAGS)- %.hi %.o: %.hs 	$(GHCCMD) $< && touch $@ @@ -47,19 +57,54 @@ %.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 $(HSS) | sed -e 's/hs$$/o/'      | xargs rm -f-	find $(HSS) | sed -e 's/hs$$/hi/'     | xargs rm -f-	find $(HSS) | sed -e 's/hs$$/dyn_o/'  | xargs rm -f-	find $(HSS) | sed -e 's/hs$$/dyn_hi/' | xargs rm -f+	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 $(HSS) | ./mk/ghcdeps -i$(GHCIMPORTDIRS) $(GHCFLAGS) > $(DEPMK)+	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/LeanCheck.hs view
@@ -1,7 +1,7 @@ {-# OPTIONS_HADDOCK prune #-} -- | -- Module      : Test.LeanCheck--- 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> --@@ -102,6 +102,7 @@   , setCons   , bagCons   , noDupListCons+  , mapCons    -- ** Products of tiers   , product3With
src/Test/LeanCheck/Basic.hs view
@@ -1,6 +1,6 @@ -- | -- Module      : Test.LeanCheck.Basic--- 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> --
src/Test/LeanCheck/Core.hs view
@@ -1,6 +1,6 @@ -- | -- Module      : Test.LeanCheck.Core--- 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> --
src/Test/LeanCheck/Derive.hs view
@@ -1,7 +1,7 @@ {-# LANGUAGE TemplateHaskell, CPP #-} -- | -- Module      : Test.LeanCheck.Derive--- 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> --@@ -11,7 +11,7 @@ -- This is an experimental module for deriving 'Listable' instances. -- -- Needs GHC and Template Haskell--- (tested on GHC 7.4, 7.6, 7.8, 7.10 and 8.0).+-- (tested on GHC 7.4, 7.6, 7.8, 7.10, 8.0, 8.2 and 8.4). -- -- If LeanCheck does not compile under later GHCs, this module is probably the -- culprit.@@ -24,6 +24,8 @@   ) where +#ifdef __GLASGOW_HASKELL__+ import Language.Haskell.TH import Test.LeanCheck.Basic import Control.Monad (unless, liftM, liftM2, filterM)@@ -297,3 +299,27 @@  nubMerges :: Ord a => [[a]] -> [a] nubMerges = foldr nubMerge []++#else+-- When using Hugs or other compiler without Template Haskell++errorNotGHC :: a+errorNotGHC = error "Only defined when using GHC"++deriveListable :: a+deriveListable = errorNotGHC++deriveListableIfNeeded :: a+deriveListableIfNeeded = errorNotGHC++deriveListableCascading :: a+deriveListableCascading = errorNotGHC++deriveTiers :: a+deriveTiers = errorNotGHC++deriveList :: a+deriveList = errorNotGHC++-- closing #ifdef __GLASGOW_HASKELL__+#endif
src/Test/LeanCheck/Error.hs view
@@ -1,6 +1,6 @@ -- | -- Module      : Test.LeanCheck.Error--- 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> --
src/Test/LeanCheck/Function.hs view
@@ -1,6 +1,6 @@ -- | -- Module      : Test.LeanCheck.Function--- 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> --
src/Test/LeanCheck/Function/CoListable.hs view
@@ -1,6 +1,6 @@ -- | -- Module      : Test.LeanCheck.Function.CoListable--- 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> --
src/Test/LeanCheck/Function/Eq.hs view
@@ -1,6 +1,6 @@ -- | -- Module      : Test.LeanCheck.Function.Eq--- 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> --
src/Test/LeanCheck/Function/Listable.hs view
@@ -1,6 +1,6 @@ -- | -- Module      : Test.LeanCheck.Function.Listable--- 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> --
src/Test/LeanCheck/Function/Listable/CoListable.hs view
@@ -1,6 +1,6 @@ -- | -- Module      : Test.LeanCheck.Function.Listable.CoListable--- 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> --
src/Test/LeanCheck/Function/Listable/FunListable.hs view
@@ -1,6 +1,6 @@ -- | -- Module      : Test.LeanCheck.FunListable--- 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> --
src/Test/LeanCheck/Function/Listable/ListsOfPairs.hs view
@@ -1,6 +1,6 @@ -- | -- Module      : Test.LeanCheck.Function.ListsOfPairs--- 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> --
src/Test/LeanCheck/Function/Listable/Mixed.hs view
@@ -1,6 +1,6 @@ -- | -- Module      : Test.LeanCheck.Function.Mixed--- 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> --
src/Test/LeanCheck/Function/Listable/Periodic.hs view
@@ -1,6 +1,6 @@ -- | -- Module      : Test.LeanCheck.Function.Periodic--- 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> --
src/Test/LeanCheck/Function/ListsOfPairs.hs view
@@ -1,6 +1,6 @@ -- | -- Module      : Test.LeanCheck.Function.ListsOfPairs--- 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> --@@ -43,15 +43,15 @@ -- they represent exceptions to a constant function, -- hence the name 'exceptionPairs'. exceptionPairs :: [[a]] -> [[b]] -> [[ [(a,b)] ]]-exceptionPairs xss yss = concatMapT (`excep` yss) (incompleteSetsOf xss)+exceptionPairs xss yss = concatMapT exceptionsFor (incompleteSetsOf xss)   where-  excep :: [a] -> [[b]] -> [[ [(a,b)] ]]-  excep xs sbs = zip xs `mapT` products (const sbs `map` xs)+--exceptionsFor :: [a] -> [[ [(a,b)] ]]+  exceptionsFor xs = zip xs `mapT` products (const yss `map` xs) -- incompleteSetsOf is needed, instead of setsOf, because mutating *all* values -- of a constant function makes no sense (we would have already enumerated that -- function anyway).  As of 2c23c1a, it makes no difference whether -- incompleteSetsOf is used instead of setsOf for types with less than 12--- values.+-- values because of the finite guard on `-->>`.  -- | Returns tiers of sets excluding the universe set. --
src/Test/LeanCheck/Function/Show.hs view
@@ -1,6 +1,6 @@ -- | -- Module      : Test.LeanCheck.Function.Show--- 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> --
src/Test/LeanCheck/Function/ShowFunction.hs view
@@ -1,6 +1,6 @@ -- | -- Module      : Test.LeanCheck.Function.ShowFunction--- 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> --
src/Test/LeanCheck/IO.hs view
@@ -1,6 +1,6 @@ -- | -- Module      : Test.LeanCheck.IO--- 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> --@@ -24,7 +24,13 @@ import Test.LeanCheck.Core import Data.Maybe (listToMaybe) import Data.List (find)+#ifdef __GLASGOW_HASKELL__ import Control.Exception (SomeException, catch, evaluate)+#else+-- on Hugs+import Control.Exception (Exception, catch, evaluate)+type SomeException = Exception+#endif  -- | Checks a property printing results on 'stdout' --@@ -69,8 +75,8 @@             | Exception Int [String] String   deriving (Eq, Show) -resultsIO :: Testable a => Int -> a -> IO [Result]-resultsIO n = sequence . zipWith torio [1..] . take n . results+resultsIO :: Testable a => Int -> a -> [IO Result]+resultsIO n = zipWith torio [1..] . take n . results   where     tor i (_,True) = OK i     tor i (as,False) = Falsified i as@@ -79,12 +85,13 @@                      in return (Exception i as (show e))  resultIO :: Testable a => Int -> a -> IO Result-resultIO n p = do-  rs <- resultsIO n p-  return . maybe (last rs) id-         $ find isFailure rs-  where isFailure (OK _) = False-        isFailure _      = True+resultIO n = computeResult . resultsIO n+  where+  computeResult []  = error "resultIO: no results, empty Listable enumeration?"+  computeResult [r] = r+  computeResult (r:rs) = r >>= \r -> case r of+                                     (OK _) -> computeResult rs+                                     _      -> return r  showResult :: Int -> Result -> String showResult m (OK n)             = "+++ OK, passed " ++ show n ++ " tests"
src/Test/LeanCheck/Stats.hs view
@@ -1,6 +1,7 @@+{-# LANGUAGE CPP #-} -- | -- Module      : Test.LeanCheck.Stats--- Copyright   : (c) 2017 Rudy Matela+-- Copyright   : (c) 2017-2018 Rudy Matela -- License     : 3-Clause BSD  (see the file LICENSE) -- Maintainer  : Rudy Matela <rudy@matela.com.br> --@@ -25,8 +26,23 @@  import Test.LeanCheck.Core import Data.Function (on)+#ifndef __HUGS__ import Data.List (intercalate, transpose)+#else+import Data.List (transpose) +intercalate :: [a] -> [[a]] -> [a]+intercalate xs xss = concat (intersperse xs xss)+  where+  intersperse             :: a -> [a] -> [a]+  intersperse _   []      = []+  intersperse sep (x:xs)  = x : prependToAll sep xs+    where+    prependToAll            :: a -> [a] -> [a]+    prependToAll _   []     = []+    prependToAll sep (x:xs) = sep : x : prependToAll sep xs+#endif+ classStats :: (Listable a, Show b) => Int -> (a -> b) -> IO () classStats n f = putStrLn                . table " "@@ -40,9 +56,21 @@                     , show (100 * n `div` len) ++ "%"                     ] --- TODO: implement this classStatsT :: (Listable a, Show b) => Int -> (a -> b) -> IO ()-classStatsT = error "classStatsT: not implemented yet, use classStats for now"+classStatsT n f = putStrLn+                . table "  "+                . (heading:)+                . ([" "]:)+                . map showCounts+                . prependTotal+                . countsTOn (unquote . show . f)+                $ take n tiers+  where+  heading = "" : "tot " : map show [0..(n-1)]+  showCounts (s,n,ns) = (s ++ ":") : (show n ++ " ") : map show ns+  (_,n,ns) -+- (_,n',ns') = ("tot", n + n', zipWith (+) ns ns')+  totalizeCounts = foldr (-+-) (undefined, 0, repeat 0)+  prependTotal cs = totalizeCounts cs : cs  conditionStats :: Listable a => Int -> [(String,a->Bool)] -> IO () conditionStats n = putStrLn . table " " . map show1@@ -57,7 +85,7 @@  -- TODO: implement this conditionStatsT :: Listable a => Int -> [(String,a->Bool)] -> IO ()-conditionStatsT = error "conditionsStatsT: not implemented yet, use classStats for now"+conditionStatsT = error "conditionsStatsT: not implemented yet, use conditionStats for now"  classify :: Eq a => [a] -> [[a]] classify = classifyBy (==)@@ -82,6 +110,14 @@  countsOn :: Eq b => (a -> b) -> [a] -> [(b,Int)] countsOn f = map (\xs -> (f $ head xs, length xs)) . classifyOn f++countsT :: Eq a => [[a]] -> [(a,Int,[Int])]+countsT xss = [(x,n,map (count x) xss) | (x,n) <- counts (concat xss)]+  where+  count x = length . filter (== x)++countsTOn :: Eq b => (a -> b) -> [[a]] -> [(b,Int,[Int])]+countsTOn f = countsT . mapT f  headLength :: [a] -> (a,Int) headLength xs = (head xs, length xs)
src/Test/LeanCheck/Tiers.hs view
@@ -1,6 +1,6 @@ -- | -- Module      : Test.LeanCheck.Tiers--- 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> --@@ -18,6 +18,7 @@     listCons   , setCons   , bagCons+  , mapCons   , noDupListCons    , maybeCons0@@ -35,6 +36,7 @@   , setsOf   , noDupListsOf   , products+  , maps   , listsOfLength    -- * Tiers of pairs@@ -108,6 +110,19 @@ setCons :: Listable a => ([a] -> b) -> [[b]] setCons = (`mapT` setsOf tiers) +-- | Given a constructor that takes a map of elements (encoded as a list),+--   lists tiers of applications of this constructor+--+--   So long as the underlying 'Listable' enumerations have no repetitions,+--   this will generate no repetitions.+--+--   This allows defining an efficient implementation of `tiers` that does not+--   repeat maps given by:+--+--   >   tiers = mapCons fromList+mapCons :: (Listable a, Listable b) => ([(a,b)] -> c) -> [[c]]+mapCons = (`mapT` maps tiers tiers)+ -- | Given a constructor that takes a list with no duplicate elements, --   return tiers of applications of this constructor. noDupListCons :: Listable a => ([a] -> b) -> [[b]]@@ -355,6 +370,15 @@ -- >   tiers = mapT fromList $ setsOf tiers setsOf :: [[a]] -> [[[a]]] setsOf = ([[]]:) . concatT . setChoicesWith (\x xss -> mapT (x:) (setsOf xss))++-- | Takes as arguments tiers of source and target values;+--   returns tiers of maps from the source to the target encoded as lists+--   without repetition.+maps :: [[a]] -> [[b]] -> [[[(a,b)]]]+maps xss yss = concatMapT mapsFor (setsOf xss)+  where+--mapsFor :: [a] -> [[ [(a,b)] ]]+  mapsFor xs = zip xs `mapT` products (const yss `map` xs)  -- | Lists tiers of choices. -- Choices are pairs of values and tiers excluding that value.
src/Test/LeanCheck/Utils.hs view
@@ -1,6 +1,6 @@ -- | -- Module      : Test.LeanCheck.Utils--- 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> --
src/Test/LeanCheck/Utils/Operators.hs view
@@ -1,6 +1,6 @@ -- | -- Module      : Test.LeanCheck.Utils.Operators--- 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> --@@ -52,6 +52,7 @@   , okEq   , okOrd   , okEqOrd+  , okNum   ) where @@ -228,6 +229,20 @@ okEqOrd x y z = okEq  x y z              && okOrd x y z              && (x == y) == (x `compare` y == EQ) -- consistent instances++okNum :: (Eq a, Num a) => a -> a -> a -> Bool+okNum x y z  =  commutative (+) x y+             && commutative (*) x y+             && associative (+) x y z+             && associative (*) x y z+             && distributive (*) (+) x y z+             && idempotent (+0) x+             && idempotent (*1) x+             && idempotent abs x+             && idempotent signum x+             && negate (negate x) == x+             && abs x * signum x == x+             && x - x == 0  -- | Equal under, a ternary operator with the same fixity as '=='. --
src/Test/LeanCheck/Utils/TypeBinding.hs view
@@ -1,6 +1,6 @@ -- | -- Module      : Test.LeanCheck.Utils.TypeBinding--- 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> --@@ -91,6 +91,7 @@   , bool   , int, integer   , float, double+  , rational   , char, string   , ordering   , mayb, eith@@ -281,6 +282,9 @@  double :: Double double = undefinedOf "double"++rational :: Rational+rational = undefinedOf "rational"  bool :: Bool bool = undefinedOf "bool"
src/Test/LeanCheck/Utils/Types.hs view
@@ -1,6 +1,6 @@ -- | -- Module      : Test.LeanCheck.Utils.Types--- 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> --@@ -58,13 +58,14 @@   , NoDup (..)   , Bag (..)   , Set (..)+  , Map (..)   ) where -- TODO: Add Ix and Bits instances  import Test.LeanCheck (Listable(..), listIntegral) import Test.LeanCheck.Core ((+|),cons1)-import Test.LeanCheck.Tiers (noDupListCons, setCons, bagCons)+import Test.LeanCheck.Tiers (noDupListCons, setCons, bagCons, mapCons) import Data.Ratio ((%))  narrowU :: Int -> Int -> Int@@ -460,10 +461,13 @@ newtype NoDup a = NoDup [a] deriving (Show, Read, Eq, Ord) newtype Bag a = Bag [a] deriving (Show, Read, Eq, Ord) newtype Set a = Set [a] deriving (Show, Read, Eq, Ord)+newtype Map a b = Map [(a,b)] deriving (Show, Read, Eq, Ord)  instance Listable a => Listable (NoDup a) where tiers = noDupListCons NoDup instance Listable a => Listable (Bag a)   where tiers = bagCons Bag instance Listable a => Listable (Set a)   where tiers = setCons Set+instance (Listable a, Listable b)+                    => Listable (Map a b) where tiers = mapCons Map  -- | 'X' type to be wrapped around integer types for an e-'X'-treme integer --   enumeration.  See the 'Listable' instance for 'X'.  Use 'X' when
stack.yaml view
@@ -3,7 +3,7 @@  # resolver: nightly-2015-09-21 # resolver: ghc-7.10.2-resolver: lts-9.0+resolver: lts-11.11  packages: - .
tests/Test.hs view
@@ -1,6 +1,6 @@ -- | -- Module      : Test--- 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> --@@ -15,7 +15,6 @@   , tNatTripleOrd   , tNatQuadrupleOrd   , tNatQuintupleOrd-  , tNatSixtupleOrd   , tNatListOrd   , tListsOfNatOrd   , tPairEqParams@@ -104,10 +103,6 @@ tNatQuintupleOrd :: Int -> Bool tNatQuintupleOrd n = n `tStrictlyOrderedBy`  comparing sum' `thn` compare   where sum' (x,y,z,w,v) = x+y+z+w+v :: Nat--tNatSixtupleOrd :: Int -> Bool-tNatSixtupleOrd n = n `tStrictlyOrderedBy`  comparing sum' `thn` compare-  where sum' (x,y,z,w,v,u) = x+y+z+w+v+u :: Nat  tNatListOrd :: Int -> Bool tNatListOrd n = n `tStrictlyOrderedBy`  comparing sum' `thn` compare
tests/diff/tiers-BagBool.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Bag Bool ]])  =  [1,2,3,4,5,6,7,8,9,10,11,12,...]++length (list :: [ Bag Bool ])  =  Infinity++allUnique (list :: [ Bag Bool ])  =  True++ratioRepetitions (list :: [ Bag Bool ])  =  0 % 1+ tiers :: [Bag Bool]  =   [ [Bag []]   , [ Bag [False]@@ -90,11 +98,3 @@     ]   , ...   ]--map length (tiers :: [[ Bag Bool ]])  =  [1,2,3,4,5,6,7,8,9,10,11,12,...]--length (list :: [ Bag Bool ])  =  Infinity--allUnique (list :: [ Bag Bool ])  =  True--ratioRepetitions (list :: [ Bag Bool ])  =  0 % 1
tests/diff/tiers-BagNat.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Bag Nat ]])  =  [1,1,2,3,5,7,11,15,22,30,42,56,...]++length (list :: [ Bag Nat ])  =  Infinity++allUnique (list :: [ Bag Nat ])  =  True++ratioRepetitions (list :: [ Bag Nat ])  =  0 % 1+ tiers :: [Bag Nat]  =   [ [Bag []]   , [Bag [0]]@@ -206,11 +214,3 @@     ]   , ...   ]--map length (tiers :: [[ Bag Nat ]])  =  [1,1,2,3,5,7,11,15,22,30,42,56,...]--length (list :: [ Bag Nat ])  =  Infinity--allUnique (list :: [ Bag Nat ])  =  True--ratioRepetitions (list :: [ Bag Nat ])  =  0 % 1
tests/diff/tiers-BagNat2.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Bag Nat2 ]])  =  [1,1,2,2,3,3,4,4,5,5,6,6,...]++length (list :: [ Bag Nat2 ])  =  Infinity++allUnique (list :: [ Bag Nat2 ])  =  True++ratioRepetitions (list :: [ Bag Nat2 ])  =  0 % 1+ tiers :: [Bag Nat2]  =   [ [Bag []]   , [Bag [0]]@@ -53,11 +61,3 @@     ]   , ...   ]--map length (tiers :: [[ Bag Nat2 ]])  =  [1,1,2,2,3,3,4,4,5,5,6,6,...]--length (list :: [ Bag Nat2 ])  =  Infinity--allUnique (list :: [ Bag Nat2 ])  =  True--ratioRepetitions (list :: [ Bag Nat2 ])  =  0 % 1
tests/diff/tiers-BagNat3.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Bag Nat3 ]])  =  [1,1,2,3,4,5,7,8,10,12,14,16,...]++length (list :: [ Bag Nat3 ])  =  Infinity++allUnique (list :: [ Bag Nat3 ])  =  True++ratioRepetitions (list :: [ Bag Nat3 ])  =  0 % 1+ tiers :: [Bag Nat3]  =   [ [Bag []]   , [Bag [0]]@@ -94,11 +102,3 @@     ]   , ...   ]--map length (tiers :: [[ Bag Nat3 ]])  =  [1,1,2,3,4,5,7,8,10,12,14,16,...]--length (list :: [ Bag Nat3 ])  =  Infinity--allUnique (list :: [ Bag Nat3 ])  =  True--ratioRepetitions (list :: [ Bag Nat3 ])  =  0 % 1
tests/diff/tiers-BagU.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Bag () ]])  =  [1,1,1,1,1,1,1,1,1,1,1,1,...]++length (list :: [ Bag () ])  =  Infinity++allUnique (list :: [ Bag () ])  =  True++ratioRepetitions (list :: [ Bag () ])  =  0 % 1+ tiers :: [Bag ()]  =   [ [Bag []]   , [Bag [()]]@@ -13,11 +21,3 @@   , [Bag [(),(),(),(),(),(),(),(),(),(),()]]   , ...   ]--map length (tiers :: [[ Bag () ]])  =  [1,1,1,1,1,1,1,1,1,1,1,1,...]--length (list :: [ Bag () ])  =  Infinity--allUnique (list :: [ Bag () ])  =  True--ratioRepetitions (list :: [ Bag () ])  =  0 % 1
tests/diff/tiers-Bool.out view
@@ -1,9 +1,3 @@-tiers :: [Bool]  =-  [ [ False-    , True-    ]-  ]- map length (tiers :: [[ Bool ]])  =  [2]  length (list :: [ Bool ])  =  2@@ -11,3 +5,9 @@ allUnique (list :: [ Bool ])  =  True  ratioRepetitions (list :: [ Bool ])  =  0 % 1++tiers :: [Bool]  =+  [ [ False+    , True+    ]+  ]
tests/diff/tiers-Bools.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ [Bool] ]])  =  [1,2,4,8,16,32,...]++length (list :: [ [Bool] ])  =  Infinity++allUnique (list :: [ [Bool] ])  =  True++ratioRepetitions (list :: [ [Bool] ])  =  0 % 1+ tiers :: [[Bool]]  =   [ [[]]   , [ [False]@@ -69,11 +77,3 @@     ]   , ...   ]--map length (tiers :: [[ [Bool] ]])  =  [1,2,4,8,16,32,...]--length (list :: [ [Bool] ])  =  Infinity--allUnique (list :: [ [Bool] ])  =  True--ratioRepetitions (list :: [ [Bool] ])  =  0 % 1
tests/diff/tiers-Char.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Char ]])  =  [1,1,1,1,1,1,1,1,1,1,1,1,...]++length (list :: [ Char ])  =  Infinity++allUnique (list :: [ Char ])  =  True++ratioRepetitions (list :: [ Char ])  =  0 % 1+ tiers :: [Char]  =   [ ['a']   , [' ']@@ -13,11 +21,3 @@   , ['!']   , ...   ]--map length (tiers :: [[ Char ]])  =  [1,1,1,1,1,1,1,1,1,1,1,1,...]--length (list :: [ Char ])  =  Infinity--allUnique (list :: [ Char ])  =  True--ratioRepetitions (list :: [ Char ])  =  0 % 1
tests/diff/tiers-Int,Int,Int.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ (Int,Int,Int) ]])  =  [1,3,6,10,15,21,...]++length (list :: [ (Int,Int,Int) ])  =  Infinity++allUnique (list :: [ (Int,Int,Int) ])  =  True++ratioRepetitions (list :: [ (Int,Int,Int) ])  =  0 % 1+ tiers :: [(Int,Int,Int)]  =   [ [(0,0,0)]   , [ (0,0,1)@@ -62,11 +70,3 @@     ]   , ...   ]--map length (tiers :: [[ (Int,Int,Int) ]])  =  [1,3,6,10,15,21,...]--length (list :: [ (Int,Int,Int) ])  =  Infinity--allUnique (list :: [ (Int,Int,Int) ])  =  True--ratioRepetitions (list :: [ (Int,Int,Int) ])  =  0 % 1
tests/diff/tiers-Int,Int.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ (Int,Int) ]])  =  [1,2,3,4,5,6,7,8,9,10,11,12,...]++length (list :: [ (Int,Int) ])  =  Infinity++allUnique (list :: [ (Int,Int) ])  =  True++ratioRepetitions (list :: [ (Int,Int) ])  =  0 % 1+ tiers :: [(Int,Int)]  =   [ [(0,0)]   , [ (0,1)@@ -90,11 +98,3 @@     ]   , ...   ]--map length (tiers :: [[ (Int,Int) ]])  =  [1,2,3,4,5,6,7,8,9,10,11,12,...]--length (list :: [ (Int,Int) ])  =  Infinity--allUnique (list :: [ (Int,Int) ])  =  True--ratioRepetitions (list :: [ (Int,Int) ])  =  0 % 1
tests/diff/tiers-Int.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Int ]])  =  [1,1,1,1,1,1,1,1,1,1,1,1,...]++length (list :: [ Int ])  =  Infinity++allUnique (list :: [ Int ])  =  True++ratioRepetitions (list :: [ Int ])  =  0 % 1+ tiers :: [Int]  =   [ [0]   , [1]@@ -13,11 +21,3 @@   , [6]   , ...   ]--map length (tiers :: [[ Int ]])  =  [1,1,1,1,1,1,1,1,1,1,1,1,...]--length (list :: [ Int ])  =  Infinity--allUnique (list :: [ Int ])  =  True--ratioRepetitions (list :: [ Int ])  =  0 % 1
tests/diff/tiers-Integer.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Integer ]])  =  [1,1,1,1,1,1,1,1,1,1,1,1,...]++length (list :: [ Integer ])  =  Infinity++allUnique (list :: [ Integer ])  =  True++ratioRepetitions (list :: [ Integer ])  =  0 % 1+ tiers :: [Integer]  =   [ [0]   , [1]@@ -13,11 +21,3 @@   , [6]   , ...   ]--map length (tiers :: [[ Integer ]])  =  [1,1,1,1,1,1,1,1,1,1,1,1,...]--length (list :: [ Integer ])  =  Infinity--allUnique (list :: [ Integer ])  =  True--ratioRepetitions (list :: [ Integer ])  =  0 % 1
tests/diff/tiers-Ints.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ [Int] ]])  =  [1,1,2,4,8,16,...]++length (list :: [ [Int] ])  =  Infinity++allUnique (list :: [ [Int] ])  =  True++ratioRepetitions (list :: [ [Int] ])  =  0 % 1+ tiers :: [[Int]]  =   [ [[]]   , [[0]]@@ -37,11 +45,3 @@     ]   , ...   ]--map length (tiers :: [[ [Int] ]])  =  [1,1,2,4,8,16,...]--length (list :: [ [Int] ])  =  Infinity--allUnique (list :: [ [Int] ])  =  True--ratioRepetitions (list :: [ [Int] ])  =  0 % 1
+ tests/diff/tiers-MapBoolBool.out view
@@ -0,0 +1,21 @@+map length (tiers :: [[ Map Bool Bool ]])  =  [1,4,4]++length (list :: [ Map Bool Bool ])  =  9++allUnique (list :: [ Map Bool Bool ])  =  True++ratioRepetitions (list :: [ Map Bool Bool ])  =  0 % 1++tiers :: [Map Bool Bool]  =+  [ [Map []]+  , [ Map [(False,False)]+    , Map [(False,True)]+    , Map [(True,False)]+    , Map [(True,True)]+    ]+  , [ Map [(False,False),(True,False)]+    , Map [(False,False),(True,True)]+    , Map [(False,True),(True,False)]+    , Map [(False,True),(True,True)]+    ]+  ]
+ tests/diff/tiers-MapNat2Nat2.out view
@@ -0,0 +1,22 @@+map length (tiers :: [[ Map Nat2 Nat2 ]])  =  [1,1,2,2,2,1]++length (list :: [ Map Nat2 Nat2 ])  =  9++allUnique (list :: [ Map Nat2 Nat2 ])  =  True++ratioRepetitions (list :: [ Map Nat2 Nat2 ])  =  0 % 1++tiers :: [Map Nat2 Nat2]  =+  [ [Map []]+  , [Map [(0,0)]]+  , [ Map [(0,1)]+    , Map [(1,0)]+    ]+  , [ Map [(1,1)]+    , Map [(0,0),(1,0)]+    ]+  , [ Map [(0,0),(1,1)]+    , Map [(0,1),(1,0)]+    ]+  , [Map [(0,1),(1,1)]]+  ]
+ tests/diff/tiers-MapNat3Nat3.out view
@@ -0,0 +1,84 @@+map length (tiers :: [[ Map Nat3 Nat3 ]])  =  [1,1,2,4,5,7,8,9,9,8,6,3,...]++length (list :: [ Map Nat3 Nat3 ])  =  Infinity++allUnique (list :: [ Map Nat3 Nat3 ])  =  True++ratioRepetitions (list :: [ Map Nat3 Nat3 ])  =  0 % 1++tiers :: [Map Nat3 Nat3]  =+  [ [Map []]+  , [Map [(0,0)]]+  , [ Map [(0,1)]+    , Map [(1,0)]+    ]+  , [ Map [(0,2)]+    , Map [(1,1)]+    , Map [(0,0),(1,0)]+    , Map [(2,0)]+    ]+  , [ Map [(1,2)]+    , Map [(0,0),(1,1)]+    , Map [(0,1),(1,0)]+    , Map [(2,1)]+    , Map [(0,0),(2,0)]+    ]+  , [ Map [(0,0),(1,2)]+    , Map [(0,1),(1,1)]+    , Map [(0,2),(1,0)]+    , Map [(2,2)]+    , Map [(0,0),(2,1)]+    , Map [(0,1),(2,0)]+    , Map [(1,0),(2,0)]+    ]+  , [ Map [(0,1),(1,2)]+    , Map [(0,2),(1,1)]+    , Map [(0,0),(2,2)]+    , Map [(0,1),(2,1)]+    , Map [(0,2),(2,0)]+    , Map [(1,0),(2,1)]+    , Map [(1,1),(2,0)]+    , Map [(0,0),(1,0),(2,0)]+    ]+  , [ Map [(0,2),(1,2)]+    , Map [(0,1),(2,2)]+    , Map [(0,2),(2,1)]+    , Map [(1,0),(2,2)]+    , Map [(1,1),(2,1)]+    , Map [(1,2),(2,0)]+    , Map [(0,0),(1,0),(2,1)]+    , Map [(0,0),(1,1),(2,0)]+    , Map [(0,1),(1,0),(2,0)]+    ]+  , [ Map [(0,2),(2,2)]+    , Map [(1,1),(2,2)]+    , Map [(1,2),(2,1)]+    , Map [(0,0),(1,0),(2,2)]+    , Map [(0,0),(1,1),(2,1)]+    , Map [(0,0),(1,2),(2,0)]+    , Map [(0,1),(1,0),(2,1)]+    , Map [(0,1),(1,1),(2,0)]+    , Map [(0,2),(1,0),(2,0)]+    ]+  , [ Map [(1,2),(2,2)]+    , Map [(0,0),(1,1),(2,2)]+    , Map [(0,0),(1,2),(2,1)]+    , Map [(0,1),(1,0),(2,2)]+    , Map [(0,1),(1,1),(2,1)]+    , Map [(0,1),(1,2),(2,0)]+    , Map [(0,2),(1,0),(2,1)]+    , Map [(0,2),(1,1),(2,0)]+    ]+  , [ Map [(0,0),(1,2),(2,2)]+    , Map [(0,1),(1,1),(2,2)]+    , Map [(0,1),(1,2),(2,1)]+    , Map [(0,2),(1,0),(2,2)]+    , Map [(0,2),(1,1),(2,1)]+    , Map [(0,2),(1,2),(2,0)]+    ]+  , [ Map [(0,1),(1,2),(2,2)]+    , Map [(0,2),(1,1),(2,2)]+    , Map [(0,2),(1,2),(2,1)]+    ]+  , ...+  ]
+ tests/diff/tiers-MapNatNat.out view
@@ -0,0 +1,571 @@+map length (tiers :: [[ Map Nat Nat ]])  =  [1,1,2,4,7,12,20,33,53,84,131,202,...]++length (list :: [ Map Nat Nat ])  =  Infinity++allUnique (list :: [ Map Nat Nat ])  =  True++ratioRepetitions (list :: [ Map Nat Nat ])  =  0 % 1++tiers :: [Map Nat Nat]  =+  [ [Map []]+  , [Map [(0,0)]]+  , [ Map [(0,1)]+    , Map [(1,0)]+    ]+  , [ Map [(0,2)]+    , Map [(1,1)]+    , Map [(0,0),(1,0)]+    , Map [(2,0)]+    ]+  , [ Map [(0,3)]+    , Map [(1,2)]+    , Map [(0,0),(1,1)]+    , Map [(0,1),(1,0)]+    , Map [(2,1)]+    , Map [(0,0),(2,0)]+    , Map [(3,0)]+    ]+  , [ Map [(0,4)]+    , Map [(1,3)]+    , Map [(0,0),(1,2)]+    , Map [(0,1),(1,1)]+    , Map [(0,2),(1,0)]+    , Map [(2,2)]+    , Map [(0,0),(2,1)]+    , Map [(0,1),(2,0)]+    , Map [(3,1)]+    , Map [(0,0),(3,0)]+    , Map [(1,0),(2,0)]+    , Map [(4,0)]+    ]+  , [ Map [(0,5)]+    , Map [(1,4)]+    , Map [(0,0),(1,3)]+    , Map [(0,1),(1,2)]+    , Map [(0,2),(1,1)]+    , Map [(0,3),(1,0)]+    , Map [(2,3)]+    , Map [(0,0),(2,2)]+    , Map [(0,1),(2,1)]+    , Map [(0,2),(2,0)]+    , Map [(3,2)]+    , Map [(0,0),(3,1)]+    , Map [(0,1),(3,0)]+    , Map [(1,0),(2,1)]+    , Map [(1,1),(2,0)]+    , Map [(4,1)]+    , Map [(0,0),(1,0),(2,0)]+    , Map [(0,0),(4,0)]+    , Map [(1,0),(3,0)]+    , Map [(5,0)]+    ]+  , [ Map [(0,6)]+    , Map [(1,5)]+    , Map [(0,0),(1,4)]+    , Map [(0,1),(1,3)]+    , Map [(0,2),(1,2)]+    , Map [(0,3),(1,1)]+    , Map [(0,4),(1,0)]+    , Map [(2,4)]+    , Map [(0,0),(2,3)]+    , Map [(0,1),(2,2)]+    , Map [(0,2),(2,1)]+    , Map [(0,3),(2,0)]+    , Map [(3,3)]+    , Map [(0,0),(3,2)]+    , Map [(0,1),(3,1)]+    , Map [(0,2),(3,0)]+    , Map [(1,0),(2,2)]+    , Map [(1,1),(2,1)]+    , Map [(1,2),(2,0)]+    , Map [(4,2)]+    , Map [(0,0),(1,0),(2,1)]+    , Map [(0,0),(1,1),(2,0)]+    , Map [(0,1),(1,0),(2,0)]+    , Map [(0,0),(4,1)]+    , Map [(0,1),(4,0)]+    , Map [(1,0),(3,1)]+    , Map [(1,1),(3,0)]+    , Map [(5,1)]+    , Map [(0,0),(1,0),(3,0)]+    , Map [(0,0),(5,0)]+    , Map [(1,0),(4,0)]+    , Map [(2,0),(3,0)]+    , Map [(6,0)]+    ]+  , [ Map [(0,7)]+    , Map [(1,6)]+    , Map [(0,0),(1,5)]+    , Map [(0,1),(1,4)]+    , Map [(0,2),(1,3)]+    , Map [(0,3),(1,2)]+    , Map [(0,4),(1,1)]+    , Map [(0,5),(1,0)]+    , Map [(2,5)]+    , Map [(0,0),(2,4)]+    , Map [(0,1),(2,3)]+    , Map [(0,2),(2,2)]+    , Map [(0,3),(2,1)]+    , Map [(0,4),(2,0)]+    , Map [(3,4)]+    , Map [(0,0),(3,3)]+    , Map [(0,1),(3,2)]+    , Map [(0,2),(3,1)]+    , Map [(0,3),(3,0)]+    , Map [(1,0),(2,3)]+    , Map [(1,1),(2,2)]+    , Map [(1,2),(2,1)]+    , Map [(1,3),(2,0)]+    , Map [(4,3)]+    , Map [(0,0),(1,0),(2,2)]+    , Map [(0,0),(1,1),(2,1)]+    , Map [(0,0),(1,2),(2,0)]+    , Map [(0,1),(1,0),(2,1)]+    , Map [(0,1),(1,1),(2,0)]+    , Map [(0,2),(1,0),(2,0)]+    , Map [(0,0),(4,2)]+    , Map [(0,1),(4,1)]+    , Map [(0,2),(4,0)]+    , Map [(1,0),(3,2)]+    , Map [(1,1),(3,1)]+    , Map [(1,2),(3,0)]+    , Map [(5,2)]+    , Map [(0,0),(1,0),(3,1)]+    , Map [(0,0),(1,1),(3,0)]+    , Map [(0,1),(1,0),(3,0)]+    , Map [(0,0),(5,1)]+    , Map [(0,1),(5,0)]+    , Map [(1,0),(4,1)]+    , Map [(1,1),(4,0)]+    , Map [(2,0),(3,1)]+    , Map [(2,1),(3,0)]+    , Map [(6,1)]+    , Map [(0,0),(1,0),(4,0)]+    , Map [(0,0),(2,0),(3,0)]+    , Map [(0,0),(6,0)]+    , Map [(1,0),(5,0)]+    , Map [(2,0),(4,0)]+    , Map [(7,0)]+    ]+  , [ Map [(0,8)]+    , Map [(1,7)]+    , Map [(0,0),(1,6)]+    , Map [(0,1),(1,5)]+    , Map [(0,2),(1,4)]+    , Map [(0,3),(1,3)]+    , Map [(0,4),(1,2)]+    , Map [(0,5),(1,1)]+    , Map [(0,6),(1,0)]+    , Map [(2,6)]+    , Map [(0,0),(2,5)]+    , Map [(0,1),(2,4)]+    , Map [(0,2),(2,3)]+    , Map [(0,3),(2,2)]+    , Map [(0,4),(2,1)]+    , Map [(0,5),(2,0)]+    , Map [(3,5)]+    , Map [(0,0),(3,4)]+    , Map [(0,1),(3,3)]+    , Map [(0,2),(3,2)]+    , Map [(0,3),(3,1)]+    , Map [(0,4),(3,0)]+    , Map [(1,0),(2,4)]+    , Map [(1,1),(2,3)]+    , Map [(1,2),(2,2)]+    , Map [(1,3),(2,1)]+    , Map [(1,4),(2,0)]+    , Map [(4,4)]+    , Map [(0,0),(1,0),(2,3)]+    , Map [(0,0),(1,1),(2,2)]+    , Map [(0,0),(1,2),(2,1)]+    , Map [(0,0),(1,3),(2,0)]+    , Map [(0,1),(1,0),(2,2)]+    , Map [(0,1),(1,1),(2,1)]+    , Map [(0,1),(1,2),(2,0)]+    , Map [(0,2),(1,0),(2,1)]+    , Map [(0,2),(1,1),(2,0)]+    , Map [(0,3),(1,0),(2,0)]+    , Map [(0,0),(4,3)]+    , Map [(0,1),(4,2)]+    , Map [(0,2),(4,1)]+    , Map [(0,3),(4,0)]+    , Map [(1,0),(3,3)]+    , Map [(1,1),(3,2)]+    , Map [(1,2),(3,1)]+    , Map [(1,3),(3,0)]+    , Map [(5,3)]+    , Map [(0,0),(1,0),(3,2)]+    , Map [(0,0),(1,1),(3,1)]+    , Map [(0,0),(1,2),(3,0)]+    , Map [(0,1),(1,0),(3,1)]+    , Map [(0,1),(1,1),(3,0)]+    , Map [(0,2),(1,0),(3,0)]+    , Map [(0,0),(5,2)]+    , Map [(0,1),(5,1)]+    , Map [(0,2),(5,0)]+    , Map [(1,0),(4,2)]+    , Map [(1,1),(4,1)]+    , Map [(1,2),(4,0)]+    , Map [(2,0),(3,2)]+    , Map [(2,1),(3,1)]+    , Map [(2,2),(3,0)]+    , Map [(6,2)]+    , Map [(0,0),(1,0),(4,1)]+    , Map [(0,0),(1,1),(4,0)]+    , Map [(0,1),(1,0),(4,0)]+    , Map [(0,0),(2,0),(3,1)]+    , Map [(0,0),(2,1),(3,0)]+    , Map [(0,1),(2,0),(3,0)]+    , Map [(0,0),(6,1)]+    , Map [(0,1),(6,0)]+    , Map [(1,0),(5,1)]+    , Map [(1,1),(5,0)]+    , Map [(2,0),(4,1)]+    , Map [(2,1),(4,0)]+    , Map [(7,1)]+    , Map [(0,0),(1,0),(5,0)]+    , Map [(0,0),(2,0),(4,0)]+    , Map [(0,0),(7,0)]+    , Map [(1,0),(2,0),(3,0)]+    , Map [(1,0),(6,0)]+    , Map [(2,0),(5,0)]+    , Map [(3,0),(4,0)]+    , Map [(8,0)]+    ]+  , [ Map [(0,9)]+    , Map [(1,8)]+    , Map [(0,0),(1,7)]+    , Map [(0,1),(1,6)]+    , Map [(0,2),(1,5)]+    , Map [(0,3),(1,4)]+    , Map [(0,4),(1,3)]+    , Map [(0,5),(1,2)]+    , Map [(0,6),(1,1)]+    , Map [(0,7),(1,0)]+    , Map [(2,7)]+    , Map [(0,0),(2,6)]+    , Map [(0,1),(2,5)]+    , Map [(0,2),(2,4)]+    , Map [(0,3),(2,3)]+    , Map [(0,4),(2,2)]+    , Map [(0,5),(2,1)]+    , Map [(0,6),(2,0)]+    , Map [(3,6)]+    , Map [(0,0),(3,5)]+    , Map [(0,1),(3,4)]+    , Map [(0,2),(3,3)]+    , Map [(0,3),(3,2)]+    , Map [(0,4),(3,1)]+    , Map [(0,5),(3,0)]+    , Map [(1,0),(2,5)]+    , Map [(1,1),(2,4)]+    , Map [(1,2),(2,3)]+    , Map [(1,3),(2,2)]+    , Map [(1,4),(2,1)]+    , Map [(1,5),(2,0)]+    , Map [(4,5)]+    , Map [(0,0),(1,0),(2,4)]+    , Map [(0,0),(1,1),(2,3)]+    , Map [(0,0),(1,2),(2,2)]+    , Map [(0,0),(1,3),(2,1)]+    , Map [(0,0),(1,4),(2,0)]+    , Map [(0,1),(1,0),(2,3)]+    , Map [(0,1),(1,1),(2,2)]+    , Map [(0,1),(1,2),(2,1)]+    , Map [(0,1),(1,3),(2,0)]+    , Map [(0,2),(1,0),(2,2)]+    , Map [(0,2),(1,1),(2,1)]+    , Map [(0,2),(1,2),(2,0)]+    , Map [(0,3),(1,0),(2,1)]+    , Map [(0,3),(1,1),(2,0)]+    , Map [(0,4),(1,0),(2,0)]+    , Map [(0,0),(4,4)]+    , Map [(0,1),(4,3)]+    , Map [(0,2),(4,2)]+    , Map [(0,3),(4,1)]+    , Map [(0,4),(4,0)]+    , Map [(1,0),(3,4)]+    , Map [(1,1),(3,3)]+    , Map [(1,2),(3,2)]+    , Map [(1,3),(3,1)]+    , Map [(1,4),(3,0)]+    , Map [(5,4)]+    , Map [(0,0),(1,0),(3,3)]+    , Map [(0,0),(1,1),(3,2)]+    , Map [(0,0),(1,2),(3,1)]+    , Map [(0,0),(1,3),(3,0)]+    , Map [(0,1),(1,0),(3,2)]+    , Map [(0,1),(1,1),(3,1)]+    , Map [(0,1),(1,2),(3,0)]+    , Map [(0,2),(1,0),(3,1)]+    , Map [(0,2),(1,1),(3,0)]+    , Map [(0,3),(1,0),(3,0)]+    , Map [(0,0),(5,3)]+    , Map [(0,1),(5,2)]+    , Map [(0,2),(5,1)]+    , Map [(0,3),(5,0)]+    , Map [(1,0),(4,3)]+    , Map [(1,1),(4,2)]+    , Map [(1,2),(4,1)]+    , Map [(1,3),(4,0)]+    , Map [(2,0),(3,3)]+    , Map [(2,1),(3,2)]+    , Map [(2,2),(3,1)]+    , Map [(2,3),(3,0)]+    , Map [(6,3)]+    , Map [(0,0),(1,0),(4,2)]+    , Map [(0,0),(1,1),(4,1)]+    , Map [(0,0),(1,2),(4,0)]+    , Map [(0,1),(1,0),(4,1)]+    , Map [(0,1),(1,1),(4,0)]+    , Map [(0,2),(1,0),(4,0)]+    , Map [(0,0),(2,0),(3,2)]+    , Map [(0,0),(2,1),(3,1)]+    , Map [(0,0),(2,2),(3,0)]+    , Map [(0,1),(2,0),(3,1)]+    , Map [(0,1),(2,1),(3,0)]+    , Map [(0,2),(2,0),(3,0)]+    , Map [(0,0),(6,2)]+    , Map [(0,1),(6,1)]+    , Map [(0,2),(6,0)]+    , Map [(1,0),(5,2)]+    , Map [(1,1),(5,1)]+    , Map [(1,2),(5,0)]+    , Map [(2,0),(4,2)]+    , Map [(2,1),(4,1)]+    , Map [(2,2),(4,0)]+    , Map [(7,2)]+    , Map [(0,0),(1,0),(5,1)]+    , Map [(0,0),(1,1),(5,0)]+    , Map [(0,1),(1,0),(5,0)]+    , Map [(0,0),(2,0),(4,1)]+    , Map [(0,0),(2,1),(4,0)]+    , Map [(0,1),(2,0),(4,0)]+    , Map [(0,0),(7,1)]+    , Map [(0,1),(7,0)]+    , Map [(1,0),(2,0),(3,1)]+    , Map [(1,0),(2,1),(3,0)]+    , Map [(1,1),(2,0),(3,0)]+    , Map [(1,0),(6,1)]+    , Map [(1,1),(6,0)]+    , Map [(2,0),(5,1)]+    , Map [(2,1),(5,0)]+    , Map [(3,0),(4,1)]+    , Map [(3,1),(4,0)]+    , Map [(8,1)]+    , Map [(0,0),(1,0),(2,0),(3,0)]+    , Map [(0,0),(1,0),(6,0)]+    , Map [(0,0),(2,0),(5,0)]+    , Map [(0,0),(3,0),(4,0)]+    , Map [(0,0),(8,0)]+    , Map [(1,0),(2,0),(4,0)]+    , Map [(1,0),(7,0)]+    , Map [(2,0),(6,0)]+    , Map [(3,0),(5,0)]+    , Map [(9,0)]+    ]+  , [ Map [(0,10)]+    , Map [(1,9)]+    , Map [(0,0),(1,8)]+    , Map [(0,1),(1,7)]+    , Map [(0,2),(1,6)]+    , Map [(0,3),(1,5)]+    , Map [(0,4),(1,4)]+    , Map [(0,5),(1,3)]+    , Map [(0,6),(1,2)]+    , Map [(0,7),(1,1)]+    , Map [(0,8),(1,0)]+    , Map [(2,8)]+    , Map [(0,0),(2,7)]+    , Map [(0,1),(2,6)]+    , Map [(0,2),(2,5)]+    , Map [(0,3),(2,4)]+    , Map [(0,4),(2,3)]+    , Map [(0,5),(2,2)]+    , Map [(0,6),(2,1)]+    , Map [(0,7),(2,0)]+    , Map [(3,7)]+    , Map [(0,0),(3,6)]+    , Map [(0,1),(3,5)]+    , Map [(0,2),(3,4)]+    , Map [(0,3),(3,3)]+    , Map [(0,4),(3,2)]+    , Map [(0,5),(3,1)]+    , Map [(0,6),(3,0)]+    , Map [(1,0),(2,6)]+    , Map [(1,1),(2,5)]+    , Map [(1,2),(2,4)]+    , Map [(1,3),(2,3)]+    , Map [(1,4),(2,2)]+    , Map [(1,5),(2,1)]+    , Map [(1,6),(2,0)]+    , Map [(4,6)]+    , Map [(0,0),(1,0),(2,5)]+    , Map [(0,0),(1,1),(2,4)]+    , Map [(0,0),(1,2),(2,3)]+    , Map [(0,0),(1,3),(2,2)]+    , Map [(0,0),(1,4),(2,1)]+    , Map [(0,0),(1,5),(2,0)]+    , Map [(0,1),(1,0),(2,4)]+    , Map [(0,1),(1,1),(2,3)]+    , Map [(0,1),(1,2),(2,2)]+    , Map [(0,1),(1,3),(2,1)]+    , Map [(0,1),(1,4),(2,0)]+    , Map [(0,2),(1,0),(2,3)]+    , Map [(0,2),(1,1),(2,2)]+    , Map [(0,2),(1,2),(2,1)]+    , Map [(0,2),(1,3),(2,0)]+    , Map [(0,3),(1,0),(2,2)]+    , Map [(0,3),(1,1),(2,1)]+    , Map [(0,3),(1,2),(2,0)]+    , Map [(0,4),(1,0),(2,1)]+    , Map [(0,4),(1,1),(2,0)]+    , Map [(0,5),(1,0),(2,0)]+    , Map [(0,0),(4,5)]+    , Map [(0,1),(4,4)]+    , Map [(0,2),(4,3)]+    , Map [(0,3),(4,2)]+    , Map [(0,4),(4,1)]+    , Map [(0,5),(4,0)]+    , Map [(1,0),(3,5)]+    , Map [(1,1),(3,4)]+    , Map [(1,2),(3,3)]+    , Map [(1,3),(3,2)]+    , Map [(1,4),(3,1)]+    , Map [(1,5),(3,0)]+    , Map [(5,5)]+    , Map [(0,0),(1,0),(3,4)]+    , Map [(0,0),(1,1),(3,3)]+    , Map [(0,0),(1,2),(3,2)]+    , Map [(0,0),(1,3),(3,1)]+    , Map [(0,0),(1,4),(3,0)]+    , Map [(0,1),(1,0),(3,3)]+    , Map [(0,1),(1,1),(3,2)]+    , Map [(0,1),(1,2),(3,1)]+    , Map [(0,1),(1,3),(3,0)]+    , Map [(0,2),(1,0),(3,2)]+    , Map [(0,2),(1,1),(3,1)]+    , Map [(0,2),(1,2),(3,0)]+    , Map [(0,3),(1,0),(3,1)]+    , Map [(0,3),(1,1),(3,0)]+    , Map [(0,4),(1,0),(3,0)]+    , Map [(0,0),(5,4)]+    , Map [(0,1),(5,3)]+    , Map [(0,2),(5,2)]+    , Map [(0,3),(5,1)]+    , Map [(0,4),(5,0)]+    , Map [(1,0),(4,4)]+    , Map [(1,1),(4,3)]+    , Map [(1,2),(4,2)]+    , Map [(1,3),(4,1)]+    , Map [(1,4),(4,0)]+    , Map [(2,0),(3,4)]+    , Map [(2,1),(3,3)]+    , Map [(2,2),(3,2)]+    , Map [(2,3),(3,1)]+    , Map [(2,4),(3,0)]+    , Map [(6,4)]+    , Map [(0,0),(1,0),(4,3)]+    , Map [(0,0),(1,1),(4,2)]+    , Map [(0,0),(1,2),(4,1)]+    , Map [(0,0),(1,3),(4,0)]+    , Map [(0,1),(1,0),(4,2)]+    , Map [(0,1),(1,1),(4,1)]+    , Map [(0,1),(1,2),(4,0)]+    , Map [(0,2),(1,0),(4,1)]+    , Map [(0,2),(1,1),(4,0)]+    , Map [(0,3),(1,0),(4,0)]+    , Map [(0,0),(2,0),(3,3)]+    , Map [(0,0),(2,1),(3,2)]+    , Map [(0,0),(2,2),(3,1)]+    , Map [(0,0),(2,3),(3,0)]+    , Map [(0,1),(2,0),(3,2)]+    , Map [(0,1),(2,1),(3,1)]+    , Map [(0,1),(2,2),(3,0)]+    , Map [(0,2),(2,0),(3,1)]+    , Map [(0,2),(2,1),(3,0)]+    , Map [(0,3),(2,0),(3,0)]+    , Map [(0,0),(6,3)]+    , Map [(0,1),(6,2)]+    , Map [(0,2),(6,1)]+    , Map [(0,3),(6,0)]+    , Map [(1,0),(5,3)]+    , Map [(1,1),(5,2)]+    , Map [(1,2),(5,1)]+    , Map [(1,3),(5,0)]+    , Map [(2,0),(4,3)]+    , Map [(2,1),(4,2)]+    , Map [(2,2),(4,1)]+    , Map [(2,3),(4,0)]+    , Map [(7,3)]+    , Map [(0,0),(1,0),(5,2)]+    , Map [(0,0),(1,1),(5,1)]+    , Map [(0,0),(1,2),(5,0)]+    , Map [(0,1),(1,0),(5,1)]+    , Map [(0,1),(1,1),(5,0)]+    , Map [(0,2),(1,0),(5,0)]+    , Map [(0,0),(2,0),(4,2)]+    , Map [(0,0),(2,1),(4,1)]+    , Map [(0,0),(2,2),(4,0)]+    , Map [(0,1),(2,0),(4,1)]+    , Map [(0,1),(2,1),(4,0)]+    , Map [(0,2),(2,0),(4,0)]+    , Map [(0,0),(7,2)]+    , Map [(0,1),(7,1)]+    , Map [(0,2),(7,0)]+    , Map [(1,0),(2,0),(3,2)]+    , Map [(1,0),(2,1),(3,1)]+    , Map [(1,0),(2,2),(3,0)]+    , Map [(1,1),(2,0),(3,1)]+    , Map [(1,1),(2,1),(3,0)]+    , Map [(1,2),(2,0),(3,0)]+    , Map [(1,0),(6,2)]+    , Map [(1,1),(6,1)]+    , Map [(1,2),(6,0)]+    , Map [(2,0),(5,2)]+    , Map [(2,1),(5,1)]+    , Map [(2,2),(5,0)]+    , Map [(3,0),(4,2)]+    , Map [(3,1),(4,1)]+    , Map [(3,2),(4,0)]+    , Map [(8,2)]+    , Map [(0,0),(1,0),(2,0),(3,1)]+    , Map [(0,0),(1,0),(2,1),(3,0)]+    , Map [(0,0),(1,1),(2,0),(3,0)]+    , Map [(0,1),(1,0),(2,0),(3,0)]+    , Map [(0,0),(1,0),(6,1)]+    , Map [(0,0),(1,1),(6,0)]+    , Map [(0,1),(1,0),(6,0)]+    , Map [(0,0),(2,0),(5,1)]+    , Map [(0,0),(2,1),(5,0)]+    , Map [(0,1),(2,0),(5,0)]+    , Map [(0,0),(3,0),(4,1)]+    , Map [(0,0),(3,1),(4,0)]+    , Map [(0,1),(3,0),(4,0)]+    , Map [(0,0),(8,1)]+    , Map [(0,1),(8,0)]+    , Map [(1,0),(2,0),(4,1)]+    , Map [(1,0),(2,1),(4,0)]+    , Map [(1,1),(2,0),(4,0)]+    , Map [(1,0),(7,1)]+    , Map [(1,1),(7,0)]+    , Map [(2,0),(6,1)]+    , Map [(2,1),(6,0)]+    , Map [(3,0),(5,1)]+    , Map [(3,1),(5,0)]+    , Map [(9,1)]+    , Map [(0,0),(1,0),(2,0),(4,0)]+    , Map [(0,0),(1,0),(7,0)]+    , Map [(0,0),(2,0),(6,0)]+    , Map [(0,0),(3,0),(5,0)]+    , Map [(0,0),(9,0)]+    , Map [(1,0),(2,0),(5,0)]+    , Map [(1,0),(3,0),(4,0)]+    , Map [(1,0),(8,0)]+    , Map [(2,0),(7,0)]+    , Map [(3,0),(6,0)]+    , Map [(4,0),(5,0)]+    , Map [(10,0)]+    ]+  , ...+  ]
+ tests/diff/tiers-MapUU.out view
@@ -0,0 +1,12 @@+map length (tiers :: [[ Map () () ]])  =  [1,1]++length (list :: [ Map () () ])  =  2++allUnique (list :: [ Map () () ])  =  True++ratioRepetitions (list :: [ Map () () ])  =  0 % 1++tiers :: [Map () ()]  =+  [ [Map []]+  , [Map [((),())]]+  ]
tests/diff/tiers-Nat,Nat,Nat.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ (Nat,Nat,Nat) ]])  =  [1,3,6,10,15,21,...]++length (list :: [ (Nat,Nat,Nat) ])  =  Infinity++allUnique (list :: [ (Nat,Nat,Nat) ])  =  True++ratioRepetitions (list :: [ (Nat,Nat,Nat) ])  =  0 % 1+ tiers :: [(Nat,Nat,Nat)]  =   [ [(0,0,0)]   , [ (0,0,1)@@ -62,11 +70,3 @@     ]   , ...   ]--map length (tiers :: [[ (Nat,Nat,Nat) ]])  =  [1,3,6,10,15,21,...]--length (list :: [ (Nat,Nat,Nat) ])  =  Infinity--allUnique (list :: [ (Nat,Nat,Nat) ])  =  True--ratioRepetitions (list :: [ (Nat,Nat,Nat) ])  =  0 % 1
tests/diff/tiers-Nat,Nat.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ (Nat,Nat) ]])  =  [1,2,3,4,5,6,7,8,9,10,11,12,...]++length (list :: [ (Nat,Nat) ])  =  Infinity++allUnique (list :: [ (Nat,Nat) ])  =  True++ratioRepetitions (list :: [ (Nat,Nat) ])  =  0 % 1+ tiers :: [(Nat,Nat)]  =   [ [(0,0)]   , [ (0,1)@@ -90,11 +98,3 @@     ]   , ...   ]--map length (tiers :: [[ (Nat,Nat) ]])  =  [1,2,3,4,5,6,7,8,9,10,11,12,...]--length (list :: [ (Nat,Nat) ])  =  Infinity--allUnique (list :: [ (Nat,Nat) ])  =  True--ratioRepetitions (list :: [ (Nat,Nat) ])  =  0 % 1
tests/diff/tiers-Nat.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Nat ]])  =  [1,1,1,1,1,1,1,1,1,1,1,1,...]++length (list :: [ Nat ])  =  Infinity++allUnique (list :: [ Nat ])  =  True++ratioRepetitions (list :: [ Nat ])  =  0 % 1+ tiers :: [Nat]  =   [ [0]   , [1]@@ -13,11 +21,3 @@   , [11]   , ...   ]--map length (tiers :: [[ Nat ]])  =  [1,1,1,1,1,1,1,1,1,1,1,1,...]--length (list :: [ Nat ])  =  Infinity--allUnique (list :: [ Nat ])  =  True--ratioRepetitions (list :: [ Nat ])  =  0 % 1
tests/diff/tiers-Nats.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ [Nat] ]])  =  [1,1,2,4,8,16,...]++length (list :: [ [Nat] ])  =  Infinity++allUnique (list :: [ [Nat] ])  =  True++ratioRepetitions (list :: [ [Nat] ])  =  0 % 1+ tiers :: [[Nat]]  =   [ [[]]   , [[0]]@@ -37,11 +45,3 @@     ]   , ...   ]--map length (tiers :: [[ [Nat] ]])  =  [1,1,2,4,8,16,...]--length (list :: [ [Nat] ])  =  Infinity--allUnique (list :: [ [Nat] ])  =  True--ratioRepetitions (list :: [ [Nat] ])  =  0 % 1
tests/diff/tiers-NoDupBool.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ NoDup Bool ]])  =  [1,2,2]++length (list :: [ NoDup Bool ])  =  5++allUnique (list :: [ NoDup Bool ])  =  True++ratioRepetitions (list :: [ NoDup Bool ])  =  0 % 1+ tiers :: [NoDup Bool]  =   [ [NoDup []]   , [ NoDup [False]@@ -7,11 +15,3 @@     , NoDup [True,False]     ]   ]--map length (tiers :: [[ NoDup Bool ]])  =  [1,2,2]--length (list :: [ NoDup Bool ])  =  5--allUnique (list :: [ NoDup Bool ])  =  True--ratioRepetitions (list :: [ NoDup Bool ])  =  0 % 1
tests/diff/tiers-NoDupNat.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ NoDup Nat ]])  =  [1,1,1,3,3,5,11,13,19,27,57,65,...]++length (list :: [ NoDup Nat ])  =  Infinity++allUnique (list :: [ NoDup Nat ])  =  True++ratioRepetitions (list :: [ NoDup Nat ])  =  0 % 1+ tiers :: [NoDup Nat]  =   [ [NoDup []]   , [NoDup [0]]@@ -216,11 +224,3 @@     ]   , ...   ]--map length (tiers :: [[ NoDup Nat ]])  =  [1,1,1,3,3,5,11,13,19,27,57,65,...]--length (list :: [ NoDup Nat ])  =  Infinity--allUnique (list :: [ NoDup Nat ])  =  True--ratioRepetitions (list :: [ NoDup Nat ])  =  0 % 1
tests/diff/tiers-NoDupNat2.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ NoDup Nat2 ]])  =  [1,1,1,2]++length (list :: [ NoDup Nat2 ])  =  5++allUnique (list :: [ NoDup Nat2 ])  =  True++ratioRepetitions (list :: [ NoDup Nat2 ])  =  0 % 1+ tiers :: [NoDup Nat2]  =   [ [NoDup []]   , [NoDup [0]]@@ -6,11 +14,3 @@     , NoDup [1,0]     ]   ]--map length (tiers :: [[ NoDup Nat2 ]])  =  [1,1,1,2]--length (list :: [ NoDup Nat2 ])  =  5--allUnique (list :: [ NoDup Nat2 ])  =  True--ratioRepetitions (list :: [ NoDup Nat2 ])  =  0 % 1
tests/diff/tiers-NoDupNat3.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ NoDup Nat3 ]])  =  [1,1,1,3,2,2,6]++length (list :: [ NoDup Nat3 ])  =  Infinity++allUnique (list :: [ NoDup Nat3 ])  =  True++ratioRepetitions (list :: [ NoDup Nat3 ])  =  0 % 1+ tiers :: [NoDup Nat3]  =   [ [NoDup []]   , [NoDup [0]]@@ -20,11 +28,3 @@     , NoDup [2,1,0]     ]   ]--map length (tiers :: [[ NoDup Nat3 ]])  =  [1,1,1,3,2,2,6]--length (list :: [ NoDup Nat3 ])  =  Infinity--allUnique (list :: [ NoDup Nat3 ])  =  True--ratioRepetitions (list :: [ NoDup Nat3 ])  =  0 % 1
tests/diff/tiers-NoDupU.out view
@@ -1,8 +1,3 @@-tiers :: [NoDup ()]  =-  [ [NoDup []]-  , [NoDup [()]]-  ]- map length (tiers :: [[ NoDup () ]])  =  [1,1]  length (list :: [ NoDup () ])  =  2@@ -10,3 +5,8 @@ allUnique (list :: [ NoDup () ])  =  True  ratioRepetitions (list :: [ NoDup () ])  =  0 % 1++tiers :: [NoDup ()]  =+  [ [NoDup []]+  , [NoDup [()]]+  ]
tests/diff/tiers-SetBool.out view
@@ -1,11 +1,3 @@-tiers :: [Set Bool]  =-  [ [Set []]-  , [ Set [False]-    , Set [True]-    ]-  , [Set [False,True]]-  ]- map length (tiers :: [[ Set Bool ]])  =  [1,2,1]  length (list :: [ Set Bool ])  =  4@@ -13,3 +5,11 @@ allUnique (list :: [ Set Bool ])  =  True  ratioRepetitions (list :: [ Set Bool ])  =  0 % 1++tiers :: [Set Bool]  =+  [ [Set []]+  , [ Set [False]+    , Set [True]+    ]+  , [Set [False,True]]+  ]
tests/diff/tiers-SetNat.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Set Nat ]])  =  [1,1,1,2,2,3,4,5,6,8,10,12,...]++length (list :: [ Set Nat ])  =  Infinity++allUnique (list :: [ Set Nat ])  =  True++ratioRepetitions (list :: [ Set Nat ])  =  0 % 1+ tiers :: [Set Nat]  =   [ [Set []]   , [Set [0]]@@ -65,11 +73,3 @@     ]   , ...   ]--map length (tiers :: [[ Set Nat ]])  =  [1,1,1,2,2,3,4,5,6,8,10,12,...]--length (list :: [ Set Nat ])  =  Infinity--allUnique (list :: [ Set Nat ])  =  True--ratioRepetitions (list :: [ Set Nat ])  =  0 % 1
tests/diff/tiers-SetNat2.out view
@@ -1,10 +1,3 @@-tiers :: [Set Nat2]  =-  [ [Set []]-  , [Set [0]]-  , [Set [1]]-  , [Set [0,1]]-  ]- map length (tiers :: [[ Set Nat2 ]])  =  [1,1,1,1]  length (list :: [ Set Nat2 ])  =  4@@ -12,3 +5,10 @@ allUnique (list :: [ Set Nat2 ])  =  True  ratioRepetitions (list :: [ Set Nat2 ])  =  0 % 1++tiers :: [Set Nat2]  =+  [ [Set []]+  , [Set [0]]+  , [Set [1]]+  , [Set [0,1]]+  ]
tests/diff/tiers-SetNat3.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Set Nat3 ]])  =  [1,1,1,2,1,1,1]++length (list :: [ Set Nat3 ])  =  8++allUnique (list :: [ Set Nat3 ])  =  True++ratioRepetitions (list :: [ Set Nat3 ])  =  0 % 1+ tiers :: [Set Nat3]  =   [ [Set []]   , [Set [0]]@@ -9,11 +17,3 @@   , [Set [1,2]]   , [Set [0,1,2]]   ]--map length (tiers :: [[ Set Nat3 ]])  =  [1,1,1,2,1,1,1]--length (list :: [ Set Nat3 ])  =  8--allUnique (list :: [ Set Nat3 ])  =  True--ratioRepetitions (list :: [ Set Nat3 ])  =  0 % 1
tests/diff/tiers-SetU.out view
@@ -1,8 +1,3 @@-tiers :: [Set ()]  =-  [ [Set []]-  , [Set [()]]-  ]- map length (tiers :: [[ Set () ]])  =  [1,1]  length (list :: [ Set () ])  =  2@@ -10,3 +5,8 @@ allUnique (list :: [ Set () ])  =  True  ratioRepetitions (list :: [ Set () ])  =  0 % 1++tiers :: [Set ()]  =+  [ [Set []]+  , [Set [()]]+  ]
tests/diff/tiers-String.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ String ]])  =  [1,1,2,4,8,16,...]++length (list :: [ String ])  =  Infinity++allUnique (list :: [ String ])  =  True++ratioRepetitions (list :: [ String ])  =  0 % 1+ tiers :: [String]  =   [ [""]   , ["a"]@@ -37,11 +45,3 @@     ]   , ...   ]--map length (tiers :: [[ String ]])  =  [1,1,2,4,8,16,...]--length (list :: [ String ])  =  Infinity--allUnique (list :: [ String ])  =  True--ratioRepetitions (list :: [ String ])  =  0 % 1
tests/diff/tiers-U,Us.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ [((),())] ]])  =  [1,1,1,1,1,1,1,1,1,1,1,1,...]++length (list :: [ [((),())] ])  =  Infinity++allUnique (list :: [ [((),())] ])  =  True++ratioRepetitions (list :: [ [((),())] ])  =  0 % 1+ tiers :: [[((),())]]  =   [ [[]]   , [[((),())]]@@ -13,11 +21,3 @@   , [[((),()),((),()),((),()),((),()),((),()),((),()),((),()),((),()),((),()),((),()),((),())]]   , ...   ]--map length (tiers :: [[ [((),())] ]])  =  [1,1,1,1,1,1,1,1,1,1,1,1,...]--length (list :: [ [((),())] ])  =  Infinity--allUnique (list :: [ [((),())] ])  =  True--ratioRepetitions (list :: [ [((),())] ])  =  0 % 1
tests/diff/tiers-Us,Us.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ ([()],[()]) ]])  =  [1,2,3,4,5,6,7,8,9,10,11,12,...]++length (list :: [ ([()],[()]) ])  =  Infinity++allUnique (list :: [ ([()],[()]) ])  =  True++ratioRepetitions (list :: [ ([()],[()]) ])  =  0 % 1+ tiers :: [([()],[()])]  =   [ [([],[])]   , [ ([],[()])@@ -90,11 +98,3 @@     ]   , ...   ]--map length (tiers :: [[ ([()],[()]) ]])  =  [1,2,3,4,5,6,7,8,9,10,11,12,...]--length (list :: [ ([()],[()]) ])  =  Infinity--allUnique (list :: [ ([()],[()]) ])  =  True--ratioRepetitions (list :: [ ([()],[()]) ])  =  0 % 1
tests/diff/tiers-Us.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ [()] ]])  =  [1,1,1,1,1,1,1,1,1,1,1,1,...]++length (list :: [ [()] ])  =  Infinity++allUnique (list :: [ [()] ])  =  True++ratioRepetitions (list :: [ [()] ])  =  0 % 1+ tiers :: [[()]]  =   [ [[]]   , [[()]]@@ -13,11 +21,3 @@   , [[(),(),(),(),(),(),(),(),(),(),()]]   , ...   ]--map length (tiers :: [[ [()] ]])  =  [1,1,1,1,1,1,1,1,1,1,1,1,...]--length (list :: [ [()] ])  =  Infinity--allUnique (list :: [ [()] ])  =  True--ratioRepetitions (list :: [ [()] ])  =  0 % 1
tests/diff/tiers-colistable-Bool-Bool.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Bool->Bool ]])  =  [4]++length (list :: [ Bool->Bool ])  =  4++allUnique (list :: [ Bool->Bool ])  =  True++ratioRepetitions (list :: [ Bool->Bool ])  =  0 % 1+ tiers :: [Bool->Bool]  =   [ [ \x -> case x of               False -> False@@ -13,11 +21,3 @@               True -> True     ]   ]--map length (tiers :: [[ Bool->Bool ]])  =  [4]--length (list :: [ Bool->Bool ])  =  4--allUnique (list :: [ Bool->Bool ])  =  True--ratioRepetitions (list :: [ Bool->Bool ])  =  0 % 1
tests/diff/tiers-colistable-Bool-MBool.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Bool->Maybe Bool ]])  =  [1,4,4]++length (list :: [ Bool->Maybe Bool ])  =  9++allUnique (list :: [ Bool->Maybe Bool ])  =  True++ratioRepetitions (list :: [ Bool->Maybe Bool ])  =  0 % 1+ tiers :: [Bool->Maybe Bool]  =   [ [ \x -> case x of               False -> Nothing@@ -30,11 +38,3 @@               True -> Just True     ]   ]--map length (tiers :: [[ Bool->Maybe Bool ]])  =  [1,4,4]--length (list :: [ Bool->Maybe Bool ])  =  9--allUnique (list :: [ Bool->Maybe Bool ])  =  True--ratioRepetitions (list :: [ Bool->Maybe Bool ])  =  0 % 1
tests/diff/tiers-colistable-Bool-U.out view
@@ -1,10 +1,3 @@-tiers :: [Bool->()]  =-  [ [ \x -> case x of-              False -> ()-              True -> ()-    ]-  ]- map length (tiers :: [[ Bool->() ]])  =  [1]  length (list :: [ Bool->() ])  =  1@@ -12,3 +5,10 @@ allUnique (list :: [ Bool->() ])  =  True  ratioRepetitions (list :: [ Bool->() ])  =  0 % 1++tiers :: [Bool->()]  =+  [ [ \x -> case x of+              False -> ()+              True -> ()+    ]+  ]
tests/diff/tiers-colistable-Bools-Bools.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ [Bool]->[Bool] ]])  =  [1,3,12,57,...]++length (list :: [ [Bool]->[Bool] ])  =  Infinity++allUnique (list :: [ [Bool]->[Bool] ])  =  False++ratioRepetitions (list :: [ [Bool]->[Bool] ])  =  16 % 73+ tiers :: [[Bool]->[Bool]]  =   [ [ \x -> case x of               [] -> []@@ -735,11 +743,3 @@     ]   , ...   ]--map length (tiers :: [[ [Bool]->[Bool] ]])  =  [1,3,12,57,...]--length (list :: [ [Bool]->[Bool] ])  =  Infinity--allUnique (list :: [ [Bool]->[Bool] ])  =  False--ratioRepetitions (list :: [ [Bool]->[Bool] ])  =  16 % 73
tests/diff/tiers-colistable-Int-Int-Int.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Int->Int->Int ]])  =  [1,3,11,46,...]++length (list :: [ Int->Int->Int ])  =  Infinity++allUnique (list :: [ Int->Int->Int ])  =  False++ratioRepetitions (list :: [ Int->Int->Int ])  =  37 % 61+ tiers :: [Int->Int->Int]  =   [ [ \x y -> case (x,y) of                 (0,0) -> 0@@ -615,11 +623,3 @@     ]   , ...   ]--map length (tiers :: [[ Int->Int->Int ]])  =  [1,3,11,46,...]--length (list :: [ Int->Int->Int ])  =  Infinity--allUnique (list :: [ Int->Int->Int ])  =  False--ratioRepetitions (list :: [ Int->Int->Int ])  =  37 % 61
tests/diff/tiers-colistable-Int-Int.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Int->Int ]])  =  [1,2,5,15,51,188,...]++length (list :: [ Int->Int ])  =  Infinity++allUnique (list :: [ Int->Int ])  =  False++ratioRepetitions (list :: [ Int->Int ])  =  96 % 131+ tiers :: [Int->Int]  =   [ [ \x -> case x of               0 -> 0@@ -2627,11 +2635,3 @@     ]   , ...   ]--map length (tiers :: [[ Int->Int ]])  =  [1,2,5,15,51,188,...]--length (list :: [ Int->Int ])  =  Infinity--allUnique (list :: [ Int->Int ])  =  False--ratioRepetitions (list :: [ Int->Int ])  =  96 % 131
tests/diff/tiers-colistable-Ints-Ints.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ [Int]->[Int] ]])  =  [1,2,6,21,...]++length (list :: [ [Int]->[Int] ])  =  Infinity++allUnique (list :: [ [Int]->[Int] ])  =  False++ratioRepetitions (list :: [ [Int]->[Int] ])  =  2 % 5+ tiers :: [[Int]->[Int]]  =   [ [ \x -> case x of               [] -> []@@ -305,11 +313,3 @@     ]   , ...   ]--map length (tiers :: [[ [Int]->[Int] ]])  =  [1,2,6,21,...]--length (list :: [ [Int]->[Int] ])  =  Infinity--allUnique (list :: [ [Int]->[Int] ])  =  False--ratioRepetitions (list :: [ [Int]->[Int] ])  =  2 % 5
tests/diff/tiers-colistable-MBool-Bool.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Maybe Bool->Bool ]])  =  [8]++length (list :: [ Maybe Bool->Bool ])  =  8++allUnique (list :: [ Maybe Bool->Bool ])  =  True++ratioRepetitions (list :: [ Maybe Bool->Bool ])  =  0 % 1+ tiers :: [Maybe Bool->Bool]  =   [ [ \x -> case x of               Nothing -> False@@ -33,11 +41,3 @@               Just True -> True     ]   ]--map length (tiers :: [[ Maybe Bool->Bool ]])  =  [8]--length (list :: [ Maybe Bool->Bool ])  =  8--allUnique (list :: [ Maybe Bool->Bool ])  =  True--ratioRepetitions (list :: [ Maybe Bool->Bool ])  =  0 % 1
tests/diff/tiers-colistable-MBool-MBool.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Maybe Bool->Maybe Bool ]])  =  [1,6,12,8]++length (list :: [ Maybe Bool->Maybe Bool ])  =  Infinity++allUnique (list :: [ Maybe Bool->Maybe Bool ])  =  True++ratioRepetitions (list :: [ Maybe Bool->Maybe Bool ])  =  0 % 1+ tiers :: [Maybe Bool->Maybe Bool]  =   [ [ \x -> case x of               Nothing -> Nothing@@ -112,11 +120,3 @@               Just True -> Just True     ]   ]--map length (tiers :: [[ Maybe Bool->Maybe Bool ]])  =  [1,6,12,8]--length (list :: [ Maybe Bool->Maybe Bool ])  =  Infinity--allUnique (list :: [ Maybe Bool->Maybe Bool ])  =  True--ratioRepetitions (list :: [ Maybe Bool->Maybe Bool ])  =  0 % 1
tests/diff/tiers-colistable-Nat,Nat-Nat.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ (Nat,Nat)->Nat ]])  =  [1,3,11,46,...]++length (list :: [ (Nat,Nat)->Nat ])  =  Infinity++allUnique (list :: [ (Nat,Nat)->Nat ])  =  False++ratioRepetitions (list :: [ (Nat,Nat)->Nat ])  =  37 % 61+ tiers :: [(Nat,Nat)->Nat]  =   [ [ \x -> case x of               (0,0) -> 0@@ -615,11 +623,3 @@     ]   , ...   ]--map length (tiers :: [[ (Nat,Nat)->Nat ]])  =  [1,3,11,46,...]--length (list :: [ (Nat,Nat)->Nat ])  =  Infinity--allUnique (list :: [ (Nat,Nat)->Nat ])  =  False--ratioRepetitions (list :: [ (Nat,Nat)->Nat ])  =  37 % 61
tests/diff/tiers-colistable-Nat-Nat-Nat.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Nat->Nat->Nat ]])  =  [1,3,11,46,...]++length (list :: [ Nat->Nat->Nat ])  =  Infinity++allUnique (list :: [ Nat->Nat->Nat ])  =  False++ratioRepetitions (list :: [ Nat->Nat->Nat ])  =  37 % 61+ tiers :: [Nat->Nat->Nat]  =   [ [ \x y -> case (x,y) of                 (0,0) -> 0@@ -615,11 +623,3 @@     ]   , ...   ]--map length (tiers :: [[ Nat->Nat->Nat ]])  =  [1,3,11,46,...]--length (list :: [ Nat->Nat->Nat ])  =  Infinity--allUnique (list :: [ Nat->Nat->Nat ])  =  False--ratioRepetitions (list :: [ Nat->Nat->Nat ])  =  37 % 61
tests/diff/tiers-colistable-Nat-Nat.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Nat->Nat ]])  =  [1,2,5,15,51,188,...]++length (list :: [ Nat->Nat ])  =  Infinity++allUnique (list :: [ Nat->Nat ])  =  False++ratioRepetitions (list :: [ Nat->Nat ])  =  82 % 131+ tiers :: [Nat->Nat]  =   [ [ \x -> case x of               0 -> 0@@ -2627,11 +2635,3 @@     ]   , ...   ]--map length (tiers :: [[ Nat->Nat ]])  =  [1,2,5,15,51,188,...]--length (list :: [ Nat->Nat ])  =  Infinity--allUnique (list :: [ Nat->Nat ])  =  False--ratioRepetitions (list :: [ Nat->Nat ])  =  82 % 131
tests/diff/tiers-colistable-Nat-U.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Nat->() ]])  =  [1,1,2,5,14,42,...]++length (list :: [ Nat->() ])  =  Infinity++allUnique (list :: [ Nat->() ])  =  False++ratioRepetitions (list :: [ Nat->() ])  =  64 % 65+ tiers :: [Nat->()]  =   [ [ \x -> case x of               0 -> ()@@ -657,11 +665,3 @@     ]   , ...   ]--map length (tiers :: [[ Nat->() ]])  =  [1,1,2,5,14,42,...]--length (list :: [ Nat->() ])  =  Infinity--allUnique (list :: [ Nat->() ])  =  False--ratioRepetitions (list :: [ Nat->() ])  =  64 % 65
tests/diff/tiers-colistable-Nat2-Nat2.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Nat2->Nat2 ]])  =  [1,2,1]++length (list :: [ Nat2->Nat2 ])  =  4++allUnique (list :: [ Nat2->Nat2 ])  =  True++ratioRepetitions (list :: [ Nat2->Nat2 ])  =  0 % 1+ tiers :: [Nat2->Nat2]  =   [ [ \x -> case x of               0 -> 0@@ -15,11 +23,3 @@               1 -> 1     ]   ]--map length (tiers :: [[ Nat2->Nat2 ]])  =  [1,2,1]--length (list :: [ Nat2->Nat2 ])  =  4--allUnique (list :: [ Nat2->Nat2 ])  =  True--ratioRepetitions (list :: [ Nat2->Nat2 ])  =  0 % 1
tests/diff/tiers-colistable-Nat2-Nat3.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Nat2->Nat3 ]])  =  [1,2,3,2,1]++length (list :: [ Nat2->Nat3 ])  =  9++allUnique (list :: [ Nat2->Nat3 ])  =  True++ratioRepetitions (list :: [ Nat2->Nat3 ])  =  0 % 1+ tiers :: [Nat2->Nat3]  =   [ [ \x -> case x of               0 -> 0@@ -32,11 +40,3 @@               1 -> 2     ]   ]--map length (tiers :: [[ Nat2->Nat3 ]])  =  [1,2,3,2,1]--length (list :: [ Nat2->Nat3 ])  =  9--allUnique (list :: [ Nat2->Nat3 ])  =  True--ratioRepetitions (list :: [ Nat2->Nat3 ])  =  0 % 1
tests/diff/tiers-colistable-Nat3-Nat2.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Nat3->Nat2 ]])  =  [1,3,3,1]++length (list :: [ Nat3->Nat2 ])  =  8++allUnique (list :: [ Nat3->Nat2 ])  =  True++ratioRepetitions (list :: [ Nat3->Nat2 ])  =  0 % 1+ tiers :: [Nat3->Nat2]  =   [ [ \x -> case x of               0 -> 0@@ -36,11 +44,3 @@               2 -> 1     ]   ]--map length (tiers :: [[ Nat3->Nat2 ]])  =  [1,3,3,1]--length (list :: [ Nat3->Nat2 ])  =  8--allUnique (list :: [ Nat3->Nat2 ])  =  True--ratioRepetitions (list :: [ Nat3->Nat2 ])  =  0 % 1
tests/diff/tiers-colistable-Nat3-Nat3.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Nat3->Nat3 ]])  =  [1,3,6,7,6,3,1]++length (list :: [ Nat3->Nat3 ])  =  Infinity++allUnique (list :: [ Nat3->Nat3 ])  =  True++ratioRepetitions (list :: [ Nat3->Nat3 ])  =  0 % 1+ tiers :: [Nat3->Nat3]  =   [ [ \x -> case x of               0 -> 0@@ -115,11 +123,3 @@               2 -> 2     ]   ]--map length (tiers :: [[ Nat3->Nat3 ]])  =  [1,3,6,7,6,3,1]--length (list :: [ Nat3->Nat3 ])  =  Infinity--allUnique (list :: [ Nat3->Nat3 ])  =  True--ratioRepetitions (list :: [ Nat3->Nat3 ])  =  0 % 1
tests/diff/tiers-colistable-Nats-Nats.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ [Nat]->[Nat] ]])  =  [1,2,6,21,...]++length (list :: [ [Nat]->[Nat] ])  =  Infinity++allUnique (list :: [ [Nat]->[Nat] ])  =  False++ratioRepetitions (list :: [ [Nat]->[Nat] ])  =  2 % 5+ tiers :: [[Nat]->[Nat]]  =   [ [ \x -> case x of               [] -> []@@ -305,11 +313,3 @@     ]   , ...   ]--map length (tiers :: [[ [Nat]->[Nat] ]])  =  [1,2,6,21,...]--length (list :: [ [Nat]->[Nat] ])  =  Infinity--allUnique (list :: [ [Nat]->[Nat] ])  =  False--ratioRepetitions (list :: [ [Nat]->[Nat] ])  =  2 % 5
tests/diff/tiers-colistable-U-Bool.out view
@@ -1,11 +1,3 @@-tiers :: [()->Bool]  =-  [ [ \x -> case x of-              () -> False-    , \x -> case x of-              () -> True-    ]-  ]- map length (tiers :: [[ ()->Bool ]])  =  [2]  length (list :: [ ()->Bool ])  =  2@@ -13,3 +5,11 @@ allUnique (list :: [ ()->Bool ])  =  True  ratioRepetitions (list :: [ ()->Bool ])  =  0 % 1++tiers :: [()->Bool]  =+  [ [ \x -> case x of+              () -> False+    , \x -> case x of+              () -> True+    ]+  ]
tests/diff/tiers-colistable-U-Nat.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ ()->Nat ]])  =  [1,1,1,1,1,1,...]++length (list :: [ ()->Nat ])  =  Infinity++allUnique (list :: [ ()->Nat ])  =  True++ratioRepetitions (list :: [ ()->Nat ])  =  0 % 1+ tiers :: [()->Nat]  =   [ [ \x -> case x of               () -> 0@@ -19,11 +27,3 @@     ]   , ...   ]--map length (tiers :: [[ ()->Nat ]])  =  [1,1,1,1,1,1,...]--length (list :: [ ()->Nat ])  =  Infinity--allUnique (list :: [ ()->Nat ])  =  True--ratioRepetitions (list :: [ ()->Nat ])  =  0 % 1
tests/diff/tiers-colistable-U-U.out view
@@ -1,9 +1,3 @@-tiers :: [()->()]  =-  [ [ \x -> case x of-              () -> ()-    ]-  ]- map length (tiers :: [[ ()->() ]])  =  [1]  length (list :: [ ()->() ])  =  1@@ -11,3 +5,9 @@ allUnique (list :: [ ()->() ])  =  True  ratioRepetitions (list :: [ ()->() ])  =  0 % 1++tiers :: [()->()]  =+  [ [ \x -> case x of+              () -> ()+    ]+  ]
tests/diff/tiers-colistable-Us-Us.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ [()]->[()] ]])  =  [1,2,4,8,...]++length (list :: [ [()]->[()] ])  =  Infinity++allUnique (list :: [ [()]->[()] ])  =  False++ratioRepetitions (list :: [ [()]->[()] ])  =  1 % 3+ tiers :: [[()]->[()]]  =   [ [ \x -> case x of               [] -> []@@ -155,11 +163,3 @@     ]   , ...   ]--map length (tiers :: [[ [()]->[()] ]])  =  [1,2,4,8,...]--length (list :: [ [()]->[()] ])  =  Infinity--allUnique (list :: [ [()]->[()] ])  =  False--ratioRepetitions (list :: [ [()]->[()] ])  =  1 % 3
tests/diff/tiers-funlistable-Bool-Bool.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Bool->Bool ]])  =  [4]++length (list :: [ Bool->Bool ])  =  4++allUnique (list :: [ Bool->Bool ])  =  True++ratioRepetitions (list :: [ Bool->Bool ])  =  0 % 1+ tiers :: [Bool->Bool]  =   [ [ \x -> case x of               False -> False@@ -13,11 +21,3 @@               True -> True     ]   ]--map length (tiers :: [[ Bool->Bool ]])  =  [4]--length (list :: [ Bool->Bool ])  =  4--allUnique (list :: [ Bool->Bool ])  =  True--ratioRepetitions (list :: [ Bool->Bool ])  =  0 % 1
tests/diff/tiers-funlistable-Bool-MBool.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Bool->Maybe Bool ]])  =  [1,4,4]++length (list :: [ Bool->Maybe Bool ])  =  9++allUnique (list :: [ Bool->Maybe Bool ])  =  True++ratioRepetitions (list :: [ Bool->Maybe Bool ])  =  0 % 1+ tiers :: [Bool->Maybe Bool]  =   [ [ \x -> case x of               False -> Nothing@@ -30,11 +38,3 @@               True -> Just True     ]   ]--map length (tiers :: [[ Bool->Maybe Bool ]])  =  [1,4,4]--length (list :: [ Bool->Maybe Bool ])  =  9--allUnique (list :: [ Bool->Maybe Bool ])  =  True--ratioRepetitions (list :: [ Bool->Maybe Bool ])  =  0 % 1
tests/diff/tiers-funlistable-Bool-U.out view
@@ -1,10 +1,3 @@-tiers :: [Bool->()]  =-  [ [ \x -> case x of-              False -> ()-              True -> ()-    ]-  ]- map length (tiers :: [[ Bool->() ]])  =  [1]  length (list :: [ Bool->() ])  =  1@@ -12,3 +5,10 @@ allUnique (list :: [ Bool->() ])  =  True  ratioRepetitions (list :: [ Bool->() ])  =  0 % 1++tiers :: [Bool->()]  =+  [ [ \x -> case x of+              False -> ()+              True -> ()+    ]+  ]
tests/diff/tiers-funlistable-Bools-Bools.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ [Bool]->[Bool] ]])  =  [1,2,4,8,...]++length (list :: [ [Bool]->[Bool] ])  =  Infinity++allUnique (list :: [ [Bool]->[Bool] ])  =  True++ratioRepetitions (list :: [ [Bool]->[Bool] ])  =  0 % 1+ tiers :: [[Bool]->[Bool]]  =   [ [ \x -> case x of               [] -> []@@ -155,11 +163,3 @@     ]   , ...   ]--map length (tiers :: [[ [Bool]->[Bool] ]])  =  [1,2,4,8,...]--length (list :: [ [Bool]->[Bool] ])  =  Infinity--allUnique (list :: [ [Bool]->[Bool] ])  =  True--ratioRepetitions (list :: [ [Bool]->[Bool] ])  =  0 % 1
tests/diff/tiers-funlistable-Int-Int-Int.out view
@@ -1,6 +1,3 @@-tiers :: [Int->Int->Int]  =-  [[]]- map length (tiers :: [[ Int->Int->Int ]])  =  [0]  length (list :: [ Int->Int->Int ])  =  0@@ -8,3 +5,6 @@ allUnique (list :: [ Int->Int->Int ])  =  True  ratioRepetitions (list :: [ Int->Int->Int ])  =  0 % 1++tiers :: [Int->Int->Int]  =+  [[]]
tests/diff/tiers-funlistable-Int-Int.out view
@@ -1,6 +1,3 @@-tiers :: [Int->Int]  =-  [[]]- map length (tiers :: [[ Int->Int ]])  =  [0]  length (list :: [ Int->Int ])  =  0@@ -8,3 +5,6 @@ allUnique (list :: [ Int->Int ])  =  True  ratioRepetitions (list :: [ Int->Int ])  =  0 % 1++tiers :: [Int->Int]  =+  [[]]
tests/diff/tiers-funlistable-Ints-Ints.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ [Int]->[Int] ]])  =  [1,1,2,4,...]++length (list :: [ [Int]->[Int] ])  =  Infinity++allUnique (list :: [ [Int]->[Int] ])  =  True++ratioRepetitions (list :: [ [Int]->[Int] ])  =  0 % 1+ tiers :: [[Int]->[Int]]  =   [ [ \x -> case x of               [] -> []@@ -85,11 +93,3 @@     ]   , ...   ]--map length (tiers :: [[ [Int]->[Int] ]])  =  [1,1,2,4,...]--length (list :: [ [Int]->[Int] ])  =  Infinity--allUnique (list :: [ [Int]->[Int] ])  =  True--ratioRepetitions (list :: [ [Int]->[Int] ])  =  0 % 1
tests/diff/tiers-funlistable-MBool-Bool.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Maybe Bool->Bool ]])  =  [8]++length (list :: [ Maybe Bool->Bool ])  =  8++allUnique (list :: [ Maybe Bool->Bool ])  =  True++ratioRepetitions (list :: [ Maybe Bool->Bool ])  =  0 % 1+ tiers :: [Maybe Bool->Bool]  =   [ [ \x -> case x of               Nothing -> False@@ -33,11 +41,3 @@               Just True -> True     ]   ]--map length (tiers :: [[ Maybe Bool->Bool ]])  =  [8]--length (list :: [ Maybe Bool->Bool ])  =  8--allUnique (list :: [ Maybe Bool->Bool ])  =  True--ratioRepetitions (list :: [ Maybe Bool->Bool ])  =  0 % 1
tests/diff/tiers-funlistable-MBool-MBool.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Maybe Bool->Maybe Bool ]])  =  [1,6,12,8]++length (list :: [ Maybe Bool->Maybe Bool ])  =  Infinity++allUnique (list :: [ Maybe Bool->Maybe Bool ])  =  True++ratioRepetitions (list :: [ Maybe Bool->Maybe Bool ])  =  0 % 1+ tiers :: [Maybe Bool->Maybe Bool]  =   [ [ \x -> case x of               Nothing -> Nothing@@ -112,11 +120,3 @@               Just True -> Just True     ]   ]--map length (tiers :: [[ Maybe Bool->Maybe Bool ]])  =  [1,6,12,8]--length (list :: [ Maybe Bool->Maybe Bool ])  =  Infinity--allUnique (list :: [ Maybe Bool->Maybe Bool ])  =  True--ratioRepetitions (list :: [ Maybe Bool->Maybe Bool ])  =  0 % 1
tests/diff/tiers-funlistable-Nat,Nat-Nat.out view
@@ -1,6 +1,3 @@-tiers :: [(Nat,Nat)->Nat]  =-  [[]]- map length (tiers :: [[ (Nat,Nat)->Nat ]])  =  [0]  length (list :: [ (Nat,Nat)->Nat ])  =  0@@ -8,3 +5,6 @@ allUnique (list :: [ (Nat,Nat)->Nat ])  =  True  ratioRepetitions (list :: [ (Nat,Nat)->Nat ])  =  0 % 1++tiers :: [(Nat,Nat)->Nat]  =+  [[]]
tests/diff/tiers-funlistable-Nat-Nat-Nat.out view
@@ -1,6 +1,3 @@-tiers :: [Nat->Nat->Nat]  =-  [[]]- map length (tiers :: [[ Nat->Nat->Nat ]])  =  [0]  length (list :: [ Nat->Nat->Nat ])  =  0@@ -8,3 +5,6 @@ allUnique (list :: [ Nat->Nat->Nat ])  =  True  ratioRepetitions (list :: [ Nat->Nat->Nat ])  =  0 % 1++tiers :: [Nat->Nat->Nat]  =+  [[]]
tests/diff/tiers-funlistable-Nat-Nat.out view
@@ -1,6 +1,3 @@-tiers :: [Nat->Nat]  =-  [[]]- map length (tiers :: [[ Nat->Nat ]])  =  [0]  length (list :: [ Nat->Nat ])  =  0@@ -8,3 +5,6 @@ allUnique (list :: [ Nat->Nat ])  =  True  ratioRepetitions (list :: [ Nat->Nat ])  =  0 % 1++tiers :: [Nat->Nat]  =+  [[]]
tests/diff/tiers-funlistable-Nat-U.out view
@@ -1,6 +1,3 @@-tiers :: [Nat->()]  =-  [[]]- map length (tiers :: [[ Nat->() ]])  =  [0]  length (list :: [ Nat->() ])  =  0@@ -8,3 +5,6 @@ allUnique (list :: [ Nat->() ])  =  True  ratioRepetitions (list :: [ Nat->() ])  =  0 % 1++tiers :: [Nat->()]  =+  [[]]
tests/diff/tiers-funlistable-Nat2-Nat2.out view
@@ -1,6 +1,3 @@-tiers :: [Nat2->Nat2]  =-  [[]]- map length (tiers :: [[ Nat2->Nat2 ]])  =  [0]  length (list :: [ Nat2->Nat2 ])  =  0@@ -8,3 +5,6 @@ allUnique (list :: [ Nat2->Nat2 ])  =  True  ratioRepetitions (list :: [ Nat2->Nat2 ])  =  0 % 1++tiers :: [Nat2->Nat2]  =+  [[]]
tests/diff/tiers-funlistable-Nat2-Nat3.out view
@@ -1,6 +1,3 @@-tiers :: [Nat2->Nat3]  =-  [[]]- map length (tiers :: [[ Nat2->Nat3 ]])  =  [0]  length (list :: [ Nat2->Nat3 ])  =  0@@ -8,3 +5,6 @@ allUnique (list :: [ Nat2->Nat3 ])  =  True  ratioRepetitions (list :: [ Nat2->Nat3 ])  =  0 % 1++tiers :: [Nat2->Nat3]  =+  [[]]
tests/diff/tiers-funlistable-Nat3-Nat2.out view
@@ -1,6 +1,3 @@-tiers :: [Nat3->Nat2]  =-  [[]]- map length (tiers :: [[ Nat3->Nat2 ]])  =  [0]  length (list :: [ Nat3->Nat2 ])  =  0@@ -8,3 +5,6 @@ allUnique (list :: [ Nat3->Nat2 ])  =  True  ratioRepetitions (list :: [ Nat3->Nat2 ])  =  0 % 1++tiers :: [Nat3->Nat2]  =+  [[]]
tests/diff/tiers-funlistable-Nat3-Nat3.out view
@@ -1,6 +1,3 @@-tiers :: [Nat3->Nat3]  =-  [[]]- map length (tiers :: [[ Nat3->Nat3 ]])  =  [0]  length (list :: [ Nat3->Nat3 ])  =  0@@ -8,3 +5,6 @@ allUnique (list :: [ Nat3->Nat3 ])  =  True  ratioRepetitions (list :: [ Nat3->Nat3 ])  =  0 % 1++tiers :: [Nat3->Nat3]  =+  [[]]
tests/diff/tiers-funlistable-Nats-Nats.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ [Nat]->[Nat] ]])  =  [1,1,2,4,...]++length (list :: [ [Nat]->[Nat] ])  =  Infinity++allUnique (list :: [ [Nat]->[Nat] ])  =  True++ratioRepetitions (list :: [ [Nat]->[Nat] ])  =  0 % 1+ tiers :: [[Nat]->[Nat]]  =   [ [ \x -> case x of               [] -> []@@ -85,11 +93,3 @@     ]   , ...   ]--map length (tiers :: [[ [Nat]->[Nat] ]])  =  [1,1,2,4,...]--length (list :: [ [Nat]->[Nat] ])  =  Infinity--allUnique (list :: [ [Nat]->[Nat] ])  =  True--ratioRepetitions (list :: [ [Nat]->[Nat] ])  =  0 % 1
tests/diff/tiers-funlistable-U-Bool.out view
@@ -1,11 +1,3 @@-tiers :: [()->Bool]  =-  [ [ \x -> case x of-              () -> False-    , \x -> case x of-              () -> True-    ]-  ]- map length (tiers :: [[ ()->Bool ]])  =  [2]  length (list :: [ ()->Bool ])  =  2@@ -13,3 +5,11 @@ allUnique (list :: [ ()->Bool ])  =  True  ratioRepetitions (list :: [ ()->Bool ])  =  0 % 1++tiers :: [()->Bool]  =+  [ [ \x -> case x of+              () -> False+    , \x -> case x of+              () -> True+    ]+  ]
tests/diff/tiers-funlistable-U-Nat.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ ()->Nat ]])  =  [1,1,1,1,1,1,...]++length (list :: [ ()->Nat ])  =  Infinity++allUnique (list :: [ ()->Nat ])  =  True++ratioRepetitions (list :: [ ()->Nat ])  =  0 % 1+ tiers :: [()->Nat]  =   [ [ \x -> case x of               () -> 0@@ -19,11 +27,3 @@     ]   , ...   ]--map length (tiers :: [[ ()->Nat ]])  =  [1,1,1,1,1,1,...]--length (list :: [ ()->Nat ])  =  Infinity--allUnique (list :: [ ()->Nat ])  =  True--ratioRepetitions (list :: [ ()->Nat ])  =  0 % 1
tests/diff/tiers-funlistable-U-U.out view
@@ -1,9 +1,3 @@-tiers :: [()->()]  =-  [ [ \x -> case x of-              () -> ()-    ]-  ]- map length (tiers :: [[ ()->() ]])  =  [1]  length (list :: [ ()->() ])  =  1@@ -11,3 +5,9 @@ allUnique (list :: [ ()->() ])  =  True  ratioRepetitions (list :: [ ()->() ])  =  0 % 1++tiers :: [()->()]  =+  [ [ \x -> case x of+              () -> ()+    ]+  ]
tests/diff/tiers-funlistable-Us-Us.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ [()]->[()] ]])  =  [1,1,1,1,...]++length (list :: [ [()]->[()] ])  =  Infinity++allUnique (list :: [ [()]->[()] ])  =  True++ratioRepetitions (list :: [ [()]->[()] ])  =  0 % 1+ tiers :: [[()]->[()]]  =   [ [ \x -> case x of               [] -> []@@ -45,11 +53,3 @@     ]   , ...   ]--map length (tiers :: [[ [()]->[()] ]])  =  [1,1,1,1,...]--length (list :: [ [()]->[()] ])  =  Infinity--allUnique (list :: [ [()]->[()] ])  =  True--ratioRepetitions (list :: [ [()]->[()] ])  =  0 % 1
tests/diff/tiers-listsofpairs-Bool-Bool.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Bool->Bool ]])  =  [4]++length (list :: [ Bool->Bool ])  =  4++allUnique (list :: [ Bool->Bool ])  =  True++ratioRepetitions (list :: [ Bool->Bool ])  =  0 % 1+ tiers :: [Bool->Bool]  =   [ [ \x -> case x of               False -> False@@ -13,11 +21,3 @@               True -> True     ]   ]--map length (tiers :: [[ Bool->Bool ]])  =  [4]--length (list :: [ Bool->Bool ])  =  4--allUnique (list :: [ Bool->Bool ])  =  True--ratioRepetitions (list :: [ Bool->Bool ])  =  0 % 1
tests/diff/tiers-listsofpairs-Bool-MBool.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Bool->Maybe Bool ]])  =  [1,4,4]++length (list :: [ Bool->Maybe Bool ])  =  9++allUnique (list :: [ Bool->Maybe Bool ])  =  True++ratioRepetitions (list :: [ Bool->Maybe Bool ])  =  0 % 1+ tiers :: [Bool->Maybe Bool]  =   [ [ \x -> case x of               False -> Nothing@@ -30,11 +38,3 @@               True -> Just True     ]   ]--map length (tiers :: [[ Bool->Maybe Bool ]])  =  [1,4,4]--length (list :: [ Bool->Maybe Bool ])  =  9--allUnique (list :: [ Bool->Maybe Bool ])  =  True--ratioRepetitions (list :: [ Bool->Maybe Bool ])  =  0 % 1
tests/diff/tiers-listsofpairs-Bool-U.out view
@@ -1,10 +1,3 @@-tiers :: [Bool->()]  =-  [ [ \x -> case x of-              False -> ()-              True -> ()-    ]-  ]- map length (tiers :: [[ Bool->() ]])  =  [1]  length (list :: [ Bool->() ])  =  1@@ -12,3 +5,10 @@ allUnique (list :: [ Bool->() ])  =  True  ratioRepetitions (list :: [ Bool->() ])  =  0 % 1++tiers :: [Bool->()]  =+  [ [ \x -> case x of+              False -> ()+              True -> ()+    ]+  ]
tests/diff/tiers-listsofpairs-Bools-Bools.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ [Bool]->[Bool] ]])  =  [1,2,8,26,...]++length (list :: [ [Bool]->[Bool] ])  =  Infinity++allUnique (list :: [ [Bool]->[Bool] ])  =  True++ratioRepetitions (list :: [ [Bool]->[Bool] ])  =  0 % 1+ tiers :: [[Bool]->[Bool]]  =   [ [ \x -> case x of               [] -> []@@ -375,11 +383,3 @@     ]   , ...   ]--map length (tiers :: [[ [Bool]->[Bool] ]])  =  [1,2,8,26,...]--length (list :: [ [Bool]->[Bool] ])  =  Infinity--allUnique (list :: [ [Bool]->[Bool] ])  =  True--ratioRepetitions (list :: [ [Bool]->[Bool] ])  =  0 % 1
tests/diff/tiers-listsofpairs-Int-Int-Int.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Int->Int->Int ]])  =  [1,1,5,13,...]++length (list :: [ Int->Int->Int ])  =  Infinity++allUnique (list :: [ Int->Int->Int ])  =  True++ratioRepetitions (list :: [ Int->Int->Int ])  =  0 % 1+ tiers :: [Int->Int->Int]  =   [ [ \x y -> case (x,y) of                 (0,0) -> 0@@ -205,11 +213,3 @@     ]   , ...   ]--map length (tiers :: [[ Int->Int->Int ]])  =  [1,1,5,13,...]--length (list :: [ Int->Int->Int ])  =  Infinity--allUnique (list :: [ Int->Int->Int ])  =  True--ratioRepetitions (list :: [ Int->Int->Int ])  =  0 % 1
tests/diff/tiers-listsofpairs-Int-Int.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Int->Int ]])  =  [1,1,3,5,10,16,...]++length (list :: [ Int->Int ])  =  Infinity++allUnique (list :: [ Int->Int ])  =  True++ratioRepetitions (list :: [ Int->Int ])  =  0 % 1+ tiers :: [Int->Int]  =   [ [ \x -> case x of               0 -> 0@@ -367,11 +375,3 @@     ]   , ...   ]--map length (tiers :: [[ Int->Int ]])  =  [1,1,3,5,10,16,...]--length (list :: [ Int->Int ])  =  Infinity--allUnique (list :: [ Int->Int ])  =  True--ratioRepetitions (list :: [ Int->Int ])  =  0 % 1
tests/diff/tiers-listsofpairs-Ints-Ints.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ [Int]->[Int] ]])  =  [1,1,4,10,...]++length (list :: [ [Int]->[Int] ])  =  Infinity++allUnique (list :: [ [Int]->[Int] ])  =  True++ratioRepetitions (list :: [ [Int]->[Int] ])  =  0 % 1+ tiers :: [[Int]->[Int]]  =   [ [ \x -> case x of               [] -> []@@ -165,11 +173,3 @@     ]   , ...   ]--map length (tiers :: [[ [Int]->[Int] ]])  =  [1,1,4,10,...]--length (list :: [ [Int]->[Int] ])  =  Infinity--allUnique (list :: [ [Int]->[Int] ])  =  True--ratioRepetitions (list :: [ [Int]->[Int] ])  =  0 % 1
tests/diff/tiers-listsofpairs-MBool-Bool.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Maybe Bool->Bool ]])  =  [8]++length (list :: [ Maybe Bool->Bool ])  =  8++allUnique (list :: [ Maybe Bool->Bool ])  =  True++ratioRepetitions (list :: [ Maybe Bool->Bool ])  =  0 % 1+ tiers :: [Maybe Bool->Bool]  =   [ [ \x -> case x of               Nothing -> False@@ -33,11 +41,3 @@               Just True -> True     ]   ]--map length (tiers :: [[ Maybe Bool->Bool ]])  =  [8]--length (list :: [ Maybe Bool->Bool ])  =  8--allUnique (list :: [ Maybe Bool->Bool ])  =  True--ratioRepetitions (list :: [ Maybe Bool->Bool ])  =  0 % 1
tests/diff/tiers-listsofpairs-MBool-MBool.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Maybe Bool->Maybe Bool ]])  =  [1,6,12,8]++length (list :: [ Maybe Bool->Maybe Bool ])  =  Infinity++allUnique (list :: [ Maybe Bool->Maybe Bool ])  =  True++ratioRepetitions (list :: [ Maybe Bool->Maybe Bool ])  =  0 % 1+ tiers :: [Maybe Bool->Maybe Bool]  =   [ [ \x -> case x of               Nothing -> Nothing@@ -112,11 +120,3 @@               Just True -> Just True     ]   ]--map length (tiers :: [[ Maybe Bool->Maybe Bool ]])  =  [1,6,12,8]--length (list :: [ Maybe Bool->Maybe Bool ])  =  Infinity--allUnique (list :: [ Maybe Bool->Maybe Bool ])  =  True--ratioRepetitions (list :: [ Maybe Bool->Maybe Bool ])  =  0 % 1
tests/diff/tiers-listsofpairs-Nat,Nat-Nat.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ (Nat,Nat)->Nat ]])  =  [1,1,3,7,...]++length (list :: [ (Nat,Nat)->Nat ])  =  Infinity++allUnique (list :: [ (Nat,Nat)->Nat ])  =  True++ratioRepetitions (list :: [ (Nat,Nat)->Nat ])  =  0 % 1+ tiers :: [(Nat,Nat)->Nat]  =   [ [ \x -> case x of               (0,0) -> 0@@ -125,11 +133,3 @@     ]   , ...   ]--map length (tiers :: [[ (Nat,Nat)->Nat ]])  =  [1,1,3,7,...]--length (list :: [ (Nat,Nat)->Nat ])  =  Infinity--allUnique (list :: [ (Nat,Nat)->Nat ])  =  True--ratioRepetitions (list :: [ (Nat,Nat)->Nat ])  =  0 % 1
tests/diff/tiers-listsofpairs-Nat-Nat-Nat.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Nat->Nat->Nat ]])  =  [1,1,5,13,...]++length (list :: [ Nat->Nat->Nat ])  =  Infinity++allUnique (list :: [ Nat->Nat->Nat ])  =  True++ratioRepetitions (list :: [ Nat->Nat->Nat ])  =  0 % 1+ tiers :: [Nat->Nat->Nat]  =   [ [ \x y -> case (x,y) of                 (0,0) -> 0@@ -205,11 +213,3 @@     ]   , ...   ]--map length (tiers :: [[ Nat->Nat->Nat ]])  =  [1,1,5,13,...]--length (list :: [ Nat->Nat->Nat ])  =  Infinity--allUnique (list :: [ Nat->Nat->Nat ])  =  True--ratioRepetitions (list :: [ Nat->Nat->Nat ])  =  0 % 1
tests/diff/tiers-listsofpairs-Nat-Nat.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Nat->Nat ]])  =  [1,1,3,5,10,16,...]++length (list :: [ Nat->Nat ])  =  Infinity++allUnique (list :: [ Nat->Nat ])  =  True++ratioRepetitions (list :: [ Nat->Nat ])  =  0 % 1+ tiers :: [Nat->Nat]  =   [ [ \x -> case x of               0 -> 0@@ -367,11 +375,3 @@     ]   , ...   ]--map length (tiers :: [[ Nat->Nat ]])  =  [1,1,3,5,10,16,...]--length (list :: [ Nat->Nat ])  =  Infinity--allUnique (list :: [ Nat->Nat ])  =  True--ratioRepetitions (list :: [ Nat->Nat ])  =  0 % 1
tests/diff/tiers-listsofpairs-Nat-U.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Nat->() ]])  =  [1,0,0,0,0,0,...]++length (list :: [ Nat->() ])  =  1++allUnique (list :: [ Nat->() ])  =  True++ratioRepetitions (list :: [ Nat->() ])  =  0 % 1+ tiers :: [Nat->()]  =   [ [ \x -> case x of               0 -> ()@@ -17,11 +25,3 @@   , []   , ...   ]--map length (tiers :: [[ Nat->() ]])  =  [1,0,0,0,0,0,...]--length (list :: [ Nat->() ])  =  1--allUnique (list :: [ Nat->() ])  =  True--ratioRepetitions (list :: [ Nat->() ])  =  0 % 1
tests/diff/tiers-listsofpairs-Nat2-Nat2.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Nat2->Nat2 ]])  =  [1,2,1]++length (list :: [ Nat2->Nat2 ])  =  4++allUnique (list :: [ Nat2->Nat2 ])  =  True++ratioRepetitions (list :: [ Nat2->Nat2 ])  =  0 % 1+ tiers :: [Nat2->Nat2]  =   [ [ \x -> case x of               0 -> 0@@ -15,11 +23,3 @@               1 -> 1     ]   ]--map length (tiers :: [[ Nat2->Nat2 ]])  =  [1,2,1]--length (list :: [ Nat2->Nat2 ])  =  4--allUnique (list :: [ Nat2->Nat2 ])  =  True--ratioRepetitions (list :: [ Nat2->Nat2 ])  =  0 % 1
tests/diff/tiers-listsofpairs-Nat2-Nat3.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Nat2->Nat3 ]])  =  [1,2,3,2,1]++length (list :: [ Nat2->Nat3 ])  =  9++allUnique (list :: [ Nat2->Nat3 ])  =  True++ratioRepetitions (list :: [ Nat2->Nat3 ])  =  0 % 1+ tiers :: [Nat2->Nat3]  =   [ [ \x -> case x of               0 -> 0@@ -32,11 +40,3 @@               1 -> 2     ]   ]--map length (tiers :: [[ Nat2->Nat3 ]])  =  [1,2,3,2,1]--length (list :: [ Nat2->Nat3 ])  =  9--allUnique (list :: [ Nat2->Nat3 ])  =  True--ratioRepetitions (list :: [ Nat2->Nat3 ])  =  0 % 1
tests/diff/tiers-listsofpairs-Nat3-Nat2.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Nat3->Nat2 ]])  =  [1,3,3,1]++length (list :: [ Nat3->Nat2 ])  =  8++allUnique (list :: [ Nat3->Nat2 ])  =  True++ratioRepetitions (list :: [ Nat3->Nat2 ])  =  0 % 1+ tiers :: [Nat3->Nat2]  =   [ [ \x -> case x of               0 -> 0@@ -36,11 +44,3 @@               2 -> 1     ]   ]--map length (tiers :: [[ Nat3->Nat2 ]])  =  [1,3,3,1]--length (list :: [ Nat3->Nat2 ])  =  8--allUnique (list :: [ Nat3->Nat2 ])  =  True--ratioRepetitions (list :: [ Nat3->Nat2 ])  =  0 % 1
tests/diff/tiers-listsofpairs-Nat3-Nat3.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Nat3->Nat3 ]])  =  [1,3,6,7,6,3,1]++length (list :: [ Nat3->Nat3 ])  =  Infinity++allUnique (list :: [ Nat3->Nat3 ])  =  True++ratioRepetitions (list :: [ Nat3->Nat3 ])  =  0 % 1+ tiers :: [Nat3->Nat3]  =   [ [ \x -> case x of               0 -> 0@@ -115,11 +123,3 @@               2 -> 2     ]   ]--map length (tiers :: [[ Nat3->Nat3 ]])  =  [1,3,6,7,6,3,1]--length (list :: [ Nat3->Nat3 ])  =  Infinity--allUnique (list :: [ Nat3->Nat3 ])  =  True--ratioRepetitions (list :: [ Nat3->Nat3 ])  =  0 % 1
tests/diff/tiers-listsofpairs-Nats-Nats.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ [Nat]->[Nat] ]])  =  [1,1,4,10,...]++length (list :: [ [Nat]->[Nat] ])  =  Infinity++allUnique (list :: [ [Nat]->[Nat] ])  =  True++ratioRepetitions (list :: [ [Nat]->[Nat] ])  =  0 % 1+ tiers :: [[Nat]->[Nat]]  =   [ [ \x -> case x of               [] -> []@@ -165,11 +173,3 @@     ]   , ...   ]--map length (tiers :: [[ [Nat]->[Nat] ]])  =  [1,1,4,10,...]--length (list :: [ [Nat]->[Nat] ])  =  Infinity--allUnique (list :: [ [Nat]->[Nat] ])  =  True--ratioRepetitions (list :: [ [Nat]->[Nat] ])  =  0 % 1
tests/diff/tiers-listsofpairs-U-Bool.out view
@@ -1,11 +1,3 @@-tiers :: [()->Bool]  =-  [ [ \x -> case x of-              () -> False-    , \x -> case x of-              () -> True-    ]-  ]- map length (tiers :: [[ ()->Bool ]])  =  [2]  length (list :: [ ()->Bool ])  =  2@@ -13,3 +5,11 @@ allUnique (list :: [ ()->Bool ])  =  True  ratioRepetitions (list :: [ ()->Bool ])  =  0 % 1++tiers :: [()->Bool]  =+  [ [ \x -> case x of+              () -> False+    , \x -> case x of+              () -> True+    ]+  ]
tests/diff/tiers-listsofpairs-U-Nat.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ ()->Nat ]])  =  [1,1,1,1,1,1,...]++length (list :: [ ()->Nat ])  =  Infinity++allUnique (list :: [ ()->Nat ])  =  True++ratioRepetitions (list :: [ ()->Nat ])  =  0 % 1+ tiers :: [()->Nat]  =   [ [ \x -> case x of               () -> 0@@ -19,11 +27,3 @@     ]   , ...   ]--map length (tiers :: [[ ()->Nat ]])  =  [1,1,1,1,1,1,...]--length (list :: [ ()->Nat ])  =  Infinity--allUnique (list :: [ ()->Nat ])  =  True--ratioRepetitions (list :: [ ()->Nat ])  =  0 % 1
tests/diff/tiers-listsofpairs-U-U.out view
@@ -1,9 +1,3 @@-tiers :: [()->()]  =-  [ [ \x -> case x of-              () -> ()-    ]-  ]- map length (tiers :: [[ ()->() ]])  =  [1]  length (list :: [ ()->() ])  =  1@@ -11,3 +5,9 @@ allUnique (list :: [ ()->() ])  =  True  ratioRepetitions (list :: [ ()->() ])  =  0 % 1++tiers :: [()->()]  =+  [ [ \x -> case x of+              () -> ()+    ]+  ]
tests/diff/tiers-listsofpairs-Us-Us.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ [()]->[()] ]])  =  [1,1,3,5,...]++length (list :: [ [()]->[()] ])  =  Infinity++allUnique (list :: [ [()]->[()] ])  =  True++ratioRepetitions (list :: [ [()]->[()] ])  =  0 % 1+ tiers :: [[()]->[()]]  =   [ [ \x -> case x of               [] -> []@@ -105,11 +113,3 @@     ]   , ...   ]--map length (tiers :: [[ [()]->[()] ]])  =  [1,1,3,5,...]--length (list :: [ [()]->[()] ])  =  Infinity--allUnique (list :: [ [()]->[()] ])  =  True--ratioRepetitions (list :: [ [()]->[()] ])  =  0 % 1
tests/diff/tiers-mixed-Bool-Bool.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Bool->Bool ]])  =  [8]++length (list :: [ Bool->Bool ])  =  8++allUnique (list :: [ Bool->Bool ])  =  False++ratioRepetitions (list :: [ Bool->Bool ])  =  1 % 2+ tiers :: [Bool->Bool]  =   [ [ \x -> case x of               False -> False@@ -25,11 +33,3 @@               True -> True     ]   ]--map length (tiers :: [[ Bool->Bool ]])  =  [8]--length (list :: [ Bool->Bool ])  =  8--allUnique (list :: [ Bool->Bool ])  =  False--ratioRepetitions (list :: [ Bool->Bool ])  =  1 % 2
tests/diff/tiers-mixed-Bool-MBool.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Bool->Maybe Bool ]])  =  [2,8,8]++length (list :: [ Bool->Maybe Bool ])  =  Infinity++allUnique (list :: [ Bool->Maybe Bool ])  =  False++ratioRepetitions (list :: [ Bool->Maybe Bool ])  =  1 % 2+ tiers :: [Bool->Maybe Bool]  =   [ [ \x -> case x of               False -> Nothing@@ -57,11 +65,3 @@               True -> Just True     ]   ]--map length (tiers :: [[ Bool->Maybe Bool ]])  =  [2,8,8]--length (list :: [ Bool->Maybe Bool ])  =  Infinity--allUnique (list :: [ Bool->Maybe Bool ])  =  False--ratioRepetitions (list :: [ Bool->Maybe Bool ])  =  1 % 2
tests/diff/tiers-mixed-Bool-U.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Bool->() ]])  =  [2]++length (list :: [ Bool->() ])  =  2++allUnique (list :: [ Bool->() ])  =  False++ratioRepetitions (list :: [ Bool->() ])  =  1 % 2+ tiers :: [Bool->()]  =   [ [ \x -> case x of               False -> ()@@ -7,11 +15,3 @@               True -> ()     ]   ]--map length (tiers :: [[ Bool->() ]])  =  [2]--length (list :: [ Bool->() ])  =  2--allUnique (list :: [ Bool->() ])  =  False--ratioRepetitions (list :: [ Bool->() ])  =  1 % 2
tests/diff/tiers-mixed-Bools-Bools.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ [Bool]->[Bool] ]])  =  [2,5,20,83,...]++length (list :: [ [Bool]->[Bool] ])  =  Infinity++allUnique (list :: [ [Bool]->[Bool] ])  =  False++ratioRepetitions (list :: [ [Bool]->[Bool] ])  =  43 % 110+ tiers :: [[Bool]->[Bool]]  =   [ [ \x -> case x of               [] -> []@@ -1105,11 +1113,3 @@     ]   , ...   ]--map length (tiers :: [[ [Bool]->[Bool] ]])  =  [2,5,20,83,...]--length (list :: [ [Bool]->[Bool] ])  =  Infinity--allUnique (list :: [ [Bool]->[Bool] ])  =  False--ratioRepetitions (list :: [ [Bool]->[Bool] ])  =  43 % 110
tests/diff/tiers-mixed-Int-Int-Int.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Int->Int->Int ]])  =  [4,12,58,287,...]++length (list :: [ Int->Int->Int ])  =  Infinity++allUnique (list :: [ Int->Int->Int ])  =  False++ratioRepetitions (list :: [ Int->Int->Int ])  =  315 % 361+ tiers :: [Int->Int->Int]  =   [ [ \x y -> case (x,y) of                 (0,0) -> 0@@ -3615,11 +3623,3 @@     ]   , ...   ]--map length (tiers :: [[ Int->Int->Int ]])  =  [4,12,58,287,...]--length (list :: [ Int->Int->Int ])  =  Infinity--allUnique (list :: [ Int->Int->Int ])  =  False--ratioRepetitions (list :: [ Int->Int->Int ])  =  315 % 361
tests/diff/tiers-mixed-Int-Int.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Int->Int ]])  =  [2,3,8,20,61,204,...]++length (list :: [ Int->Int ])  =  Infinity++allUnique (list :: [ Int->Int ])  =  False++ratioRepetitions (list :: [ Int->Int ])  =  211 % 298+ tiers :: [Int->Int]  =   [ [ \x -> case x of               0 -> 0@@ -2987,11 +2995,3 @@     ]   , ...   ]--map length (tiers :: [[ Int->Int ]])  =  [2,3,8,20,61,204,...]--length (list :: [ Int->Int ])  =  Infinity--allUnique (list :: [ Int->Int ])  =  False--ratioRepetitions (list :: [ Int->Int ])  =  211 % 298
tests/diff/tiers-mixed-Ints-Ints.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ [Int]->[Int] ]])  =  [2,3,10,31,...]++length (list :: [ [Int]->[Int] ])  =  Infinity++allUnique (list :: [ [Int]->[Int] ])  =  False++ratioRepetitions (list :: [ [Int]->[Int] ])  =  13 % 23+ tiers :: [[Int]->[Int]]  =   [ [ \x -> case x of               [] -> []@@ -465,11 +473,3 @@     ]   , ...   ]--map length (tiers :: [[ [Int]->[Int] ]])  =  [2,3,10,31,...]--length (list :: [ [Int]->[Int] ])  =  Infinity--allUnique (list :: [ [Int]->[Int] ])  =  False--ratioRepetitions (list :: [ [Int]->[Int] ])  =  13 % 23
tests/diff/tiers-mixed-MBool-Bool.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Maybe Bool->Bool ]])  =  [16]++length (list :: [ Maybe Bool->Bool ])  =  Infinity++allUnique (list :: [ Maybe Bool->Bool ])  =  False++ratioRepetitions (list :: [ Maybe Bool->Bool ])  =  1 % 2+ tiers :: [Maybe Bool->Bool]  =   [ [ \x -> case x of               Nothing -> False@@ -65,11 +73,3 @@               Just True -> True     ]   ]--map length (tiers :: [[ Maybe Bool->Bool ]])  =  [16]--length (list :: [ Maybe Bool->Bool ])  =  Infinity--allUnique (list :: [ Maybe Bool->Bool ])  =  False--ratioRepetitions (list :: [ Maybe Bool->Bool ])  =  1 % 2
tests/diff/tiers-mixed-MBool-MBool.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Maybe Bool->Maybe Bool ]])  =  [2,12,24,16]++length (list :: [ Maybe Bool->Maybe Bool ])  =  Infinity++allUnique (list :: [ Maybe Bool->Maybe Bool ])  =  False++ratioRepetitions (list :: [ Maybe Bool->Maybe Bool ])  =  1 % 2+ tiers :: [Maybe Bool->Maybe Bool]  =   [ [ \x -> case x of               Nothing -> Nothing@@ -220,11 +228,3 @@               Just True -> Just True     ]   ]--map length (tiers :: [[ Maybe Bool->Maybe Bool ]])  =  [2,12,24,16]--length (list :: [ Maybe Bool->Maybe Bool ])  =  Infinity--allUnique (list :: [ Maybe Bool->Maybe Bool ])  =  False--ratioRepetitions (list :: [ Maybe Bool->Maybe Bool ])  =  1 % 2
tests/diff/tiers-mixed-Nat,Nat-Nat.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ (Nat,Nat)->Nat ]])  =  [2,4,14,53,...]++length (list :: [ (Nat,Nat)->Nat ])  =  Infinity++allUnique (list :: [ (Nat,Nat)->Nat ])  =  False++ratioRepetitions (list :: [ (Nat,Nat)->Nat ])  =  41 % 73+ tiers :: [(Nat,Nat)->Nat]  =   [ [ \x -> case x of               (0,0) -> 0@@ -735,11 +743,3 @@     ]   , ...   ]--map length (tiers :: [[ (Nat,Nat)->Nat ]])  =  [2,4,14,53,...]--length (list :: [ (Nat,Nat)->Nat ])  =  Infinity--allUnique (list :: [ (Nat,Nat)->Nat ])  =  False--ratioRepetitions (list :: [ (Nat,Nat)->Nat ])  =  41 % 73
tests/diff/tiers-mixed-Nat-Nat-Nat.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Nat->Nat->Nat ]])  =  [4,12,58,287,...]++length (list :: [ Nat->Nat->Nat ])  =  Infinity++allUnique (list :: [ Nat->Nat->Nat ])  =  False++ratioRepetitions (list :: [ Nat->Nat->Nat ])  =  313 % 361+ tiers :: [Nat->Nat->Nat]  =   [ [ \x y -> case (x,y) of                 (0,0) -> 0@@ -3615,11 +3623,3 @@     ]   , ...   ]--map length (tiers :: [[ Nat->Nat->Nat ]])  =  [4,12,58,287,...]--length (list :: [ Nat->Nat->Nat ])  =  Infinity--allUnique (list :: [ Nat->Nat->Nat ])  =  False--ratioRepetitions (list :: [ Nat->Nat->Nat ])  =  313 % 361
tests/diff/tiers-mixed-Nat-Nat.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Nat->Nat ]])  =  [2,3,8,20,61,204,...]++length (list :: [ Nat->Nat ])  =  Infinity++allUnique (list :: [ Nat->Nat ])  =  False++ratioRepetitions (list :: [ Nat->Nat ])  =  85 % 149+ tiers :: [Nat->Nat]  =   [ [ \x -> case x of               0 -> 0@@ -2987,11 +2995,3 @@     ]   , ...   ]--map length (tiers :: [[ Nat->Nat ]])  =  [2,3,8,20,61,204,...]--length (list :: [ Nat->Nat ])  =  Infinity--allUnique (list :: [ Nat->Nat ])  =  False--ratioRepetitions (list :: [ Nat->Nat ])  =  85 % 149
tests/diff/tiers-mixed-Nat-U.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Nat->() ]])  =  [2,1,2,5,14,42,...]++length (list :: [ Nat->() ])  =  Infinity++allUnique (list :: [ Nat->() ])  =  False++ratioRepetitions (list :: [ Nat->() ])  =  65 % 66+ tiers :: [Nat->()]  =   [ [ \x -> case x of               0 -> ()@@ -667,11 +675,3 @@     ]   , ...   ]--map length (tiers :: [[ Nat->() ]])  =  [2,1,2,5,14,42,...]--length (list :: [ Nat->() ])  =  Infinity--allUnique (list :: [ Nat->() ])  =  False--ratioRepetitions (list :: [ Nat->() ])  =  65 % 66
tests/diff/tiers-mixed-Nat2-Nat2.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Nat2->Nat2 ]])  =  [2,4,2]++length (list :: [ Nat2->Nat2 ])  =  8++allUnique (list :: [ Nat2->Nat2 ])  =  False++ratioRepetitions (list :: [ Nat2->Nat2 ])  =  1 % 2+ tiers :: [Nat2->Nat2]  =   [ [ \x -> case x of               0 -> 0@@ -27,11 +35,3 @@               1 -> 1     ]   ]--map length (tiers :: [[ Nat2->Nat2 ]])  =  [2,4,2]--length (list :: [ Nat2->Nat2 ])  =  8--allUnique (list :: [ Nat2->Nat2 ])  =  False--ratioRepetitions (list :: [ Nat2->Nat2 ])  =  1 % 2
tests/diff/tiers-mixed-Nat2-Nat3.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Nat2->Nat3 ]])  =  [2,4,6,4,2]++length (list :: [ Nat2->Nat3 ])  =  Infinity++allUnique (list :: [ Nat2->Nat3 ])  =  False++ratioRepetitions (list :: [ Nat2->Nat3 ])  =  1 % 2+ tiers :: [Nat2->Nat3]  =   [ [ \x -> case x of               0 -> 0@@ -59,11 +67,3 @@               1 -> 2     ]   ]--map length (tiers :: [[ Nat2->Nat3 ]])  =  [2,4,6,4,2]--length (list :: [ Nat2->Nat3 ])  =  Infinity--allUnique (list :: [ Nat2->Nat3 ])  =  False--ratioRepetitions (list :: [ Nat2->Nat3 ])  =  1 % 2
tests/diff/tiers-mixed-Nat3-Nat2.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Nat3->Nat2 ]])  =  [2,6,6,2]++length (list :: [ Nat3->Nat2 ])  =  Infinity++allUnique (list :: [ Nat3->Nat2 ])  =  False++ratioRepetitions (list :: [ Nat3->Nat2 ])  =  1 % 2+ tiers :: [Nat3->Nat2]  =   [ [ \x -> case x of               0 -> 0@@ -68,11 +76,3 @@               2 -> 1     ]   ]--map length (tiers :: [[ Nat3->Nat2 ]])  =  [2,6,6,2]--length (list :: [ Nat3->Nat2 ])  =  Infinity--allUnique (list :: [ Nat3->Nat2 ])  =  False--ratioRepetitions (list :: [ Nat3->Nat2 ])  =  1 % 2
tests/diff/tiers-mixed-Nat3-Nat3.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ Nat3->Nat3 ]])  =  [2,6,12,14,12,6,2]++length (list :: [ Nat3->Nat3 ])  =  Infinity++allUnique (list :: [ Nat3->Nat3 ])  =  False++ratioRepetitions (list :: [ Nat3->Nat3 ])  =  1 % 2+ tiers :: [Nat3->Nat3]  =   [ [ \x -> case x of               0 -> 0@@ -223,11 +231,3 @@               2 -> 2     ]   ]--map length (tiers :: [[ Nat3->Nat3 ]])  =  [2,6,12,14,12,6,2]--length (list :: [ Nat3->Nat3 ])  =  Infinity--allUnique (list :: [ Nat3->Nat3 ])  =  False--ratioRepetitions (list :: [ Nat3->Nat3 ])  =  1 % 2
tests/diff/tiers-mixed-Nats-Nats.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ [Nat]->[Nat] ]])  =  [2,3,10,31,...]++length (list :: [ [Nat]->[Nat] ])  =  Infinity++allUnique (list :: [ [Nat]->[Nat] ])  =  False++ratioRepetitions (list :: [ [Nat]->[Nat] ])  =  13 % 23+ tiers :: [[Nat]->[Nat]]  =   [ [ \x -> case x of               [] -> []@@ -465,11 +473,3 @@     ]   , ...   ]--map length (tiers :: [[ [Nat]->[Nat] ]])  =  [2,3,10,31,...]--length (list :: [ [Nat]->[Nat] ])  =  Infinity--allUnique (list :: [ [Nat]->[Nat] ])  =  False--ratioRepetitions (list :: [ [Nat]->[Nat] ])  =  13 % 23
tests/diff/tiers-mixed-U-Bool.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ ()->Bool ]])  =  [4]++length (list :: [ ()->Bool ])  =  4++allUnique (list :: [ ()->Bool ])  =  False++ratioRepetitions (list :: [ ()->Bool ])  =  1 % 2+ tiers :: [()->Bool]  =   [ [ \x -> case x of               () -> False@@ -9,11 +17,3 @@               () -> True     ]   ]--map length (tiers :: [[ ()->Bool ]])  =  [4]--length (list :: [ ()->Bool ])  =  4--allUnique (list :: [ ()->Bool ])  =  False--ratioRepetitions (list :: [ ()->Bool ])  =  1 % 2
tests/diff/tiers-mixed-U-Nat.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ ()->Nat ]])  =  [2,2,2,2,2,2,...]++length (list :: [ ()->Nat ])  =  Infinity++allUnique (list :: [ ()->Nat ])  =  False++ratioRepetitions (list :: [ ()->Nat ])  =  1 % 2+ tiers :: [()->Nat]  =   [ [ \x -> case x of               () -> 0@@ -31,11 +39,3 @@     ]   , ...   ]--map length (tiers :: [[ ()->Nat ]])  =  [2,2,2,2,2,2,...]--length (list :: [ ()->Nat ])  =  Infinity--allUnique (list :: [ ()->Nat ])  =  False--ratioRepetitions (list :: [ ()->Nat ])  =  1 % 2
tests/diff/tiers-mixed-U-U.out view
@@ -1,11 +1,3 @@-tiers :: [()->()]  =-  [ [ \x -> case x of-              () -> ()-    , \x -> case x of-              () -> ()-    ]-  ]- map length (tiers :: [[ ()->() ]])  =  [2]  length (list :: [ ()->() ])  =  2@@ -13,3 +5,11 @@ allUnique (list :: [ ()->() ])  =  False  ratioRepetitions (list :: [ ()->() ])  =  1 % 2++tiers :: [()->()]  =+  [ [ \x -> case x of+              () -> ()+    , \x -> case x of+              () -> ()+    ]+  ]
tests/diff/tiers-mixed-Us-Us.out view
@@ -1,3 +1,11 @@+map length (tiers :: [[ [()]->[()] ]])  =  [2,3,7,13,...]++length (list :: [ [()]->[()] ])  =  Infinity++allUnique (list :: [ [()]->[()] ])  =  False++ratioRepetitions (list :: [ [()]->[()] ])  =  14 % 25+ tiers :: [[()]->[()]]  =   [ [ \x -> case x of               [] -> []@@ -255,11 +263,3 @@     ]   , ...   ]--map length (tiers :: [[ [()]->[()] ]])  =  [2,3,7,13,...]--length (list :: [ [()]->[()] ])  =  Infinity--allUnique (list :: [ [()]->[()] ])  =  False--ratioRepetitions (list :: [ [()]->[()] ])  =  14 % 25
tests/diff/tiers.out view
@@ -1,6 +1,3 @@-tiers :: [()]  =-  [[()]]- map length (tiers :: [[ () ]])  =  [1]  length (list :: [ () ])  =  1@@ -8,3 +5,6 @@ allUnique (list :: [ () ])  =  True  ratioRepetitions (list :: [ () ])  =  0 % 1++tiers :: [()]  =+  [[()]]
tests/test-derive.hs view
@@ -1,4 +1,4 @@--- Copyright (c) 2015-2017 Rudy Matela.+-- Copyright (c) 2015-2018 Rudy Matela. -- Distributed under the 3-Clause BSD licence (see the file LICENSE). {-# LANGUAGE TemplateHaskell, CPP #-} import Test
tests/test-error.hs view
@@ -1,4 +1,4 @@--- Copyright (c) 2015-2017 Rudy Matela.+-- Copyright (c) 2015-2018 Rudy Matela. -- Distributed under the 3-Clause BSD licence (see the file LICENSE). import Test () 
tests/test-fun.hs view
@@ -1,4 +1,4 @@--- Copyright (c) 2015-2017 Rudy Matela.+-- Copyright (c) 2015-2018 Rudy Matela. -- Distributed under the 3-Clause BSD licence (see the file LICENSE). import Test 
tests/test-funshow.hs view
@@ -1,4 +1,4 @@--- Copyright (c) 2015-2017 Rudy Matela.+-- Copyright (c) 2015-2018 Rudy Matela. -- Distributed under the 3-Clause BSD licence (see the file LICENSE). import Test 
tests/test-io.hs view
@@ -1,4 +1,4 @@--- Copyright (c) 2015-2017 Rudy Matela.+-- Copyright (c) 2015-2018 Rudy Matela. -- Distributed under the 3-Clause BSD licence (see the file LICENSE). import Test import Test.LeanCheck.IO
tests/test-operators.hs view
@@ -1,4 +1,4 @@--- Copyright (c) 2015-2017 Rudy Matela.+-- Copyright (c) 2015-2018 Rudy Matela. -- Distributed under the 3-Clause BSD licence (see the file LICENSE). import Test @@ -108,7 +108,15 @@   , holds n $ okEqOrd -:> [bool]   , holds n $ okEqOrd -:> float  -- fails if NaN is included in enumeration   , holds n $ okEqOrd -:> double -- fails if NaN is included in enumeration+  , holds n $ okEqOrd -:> rational +  , holds n $ okNum -:> int+  , holds n $ okNum -:> integer+-- NOTE: the following two fail on Hugs due to a bug on Hugs.+--, holds n $ \x y z -> none isInfinite [x,y,z] ==> okNum x y (z -: float)+--, holds n $ \x y z -> none isInfinite [x,y,z] ==> okNum x y (z -: double)+  , holds n $ okNum -:> rational+   , holds n $ idempotent id   -:> int   , holds n $ idempotent abs  -:> int   , holds n $ idempotent sort -:> [bool]@@ -124,3 +132,6 @@   , fails n $ neverIdentity abs    -:> int   , fails n $ neverIdentity negate -:> int   ]++none :: (a -> Bool) -> [a] -> Bool+none p = not . or . map p
tests/test-sdist view
@@ -2,7 +2,7 @@ # # test-sdist: tests the package generated by "cabal sdist". #-# Copyright (c) 2015-2017 Rudy Matela.+# Copyright (c) 2015-2018 Rudy Matela. # Distributed under the 3-Clause BSD licence. # # TODO: also run "make test"
tests/test-stats.hs view
@@ -1,4 +1,4 @@--- Copyright (c) 2017 Rudy Matela.+-- Copyright (c) 2017-2018 Rudy Matela. -- Distributed under the 3-Clause BSD licence (see the file LICENSE). import Test @@ -21,11 +21,21 @@   putStrLn "take 1 :: [Int] -> [Int]"   classStats 100 (take 1  :: [Int] -> [Int]) -  conditionStats 1000 [ ("odd",odd :: Int -> Bool)-                      , ("even",even) ]+  conditionStats 1000 [ ("odd", odd :: Int -> Bool)+                      , ("even", even) ]    conditionStats 1000 [ ("ordered",ordered :: [Int] -> Bool)                       , ("ordered . reverse", ordered . reverse) ]++  putStrLn "sum :: [Int] -> Bool"+  classStatsT 6 (sum     :: [Int] -> Int)++  putStrLn "length :: [Int] -> Int"+  classStatsT 6 (length  :: [Int] -> Int)++  putStrLn "take 1 :: [Int] -> [Int]"+  classStatsT 6 (take 1  :: [Int] -> [Int])+    case elemIndices False (tests 100) of     [] -> putStrLn "Tests passed!"
tests/test-tiers.hs view
@@ -1,4 +1,4 @@--- Copyright (c) 2015-2017 Rudy Matela.+-- Copyright (c) 2015-2018 Rudy Matela. -- Distributed under the 3-Clause BSD licence (see the file LICENSE). import Test @@ -66,6 +66,7 @@    , holds 100 $ \xss -> ordered . concat $ discardLaterT (<)  (xss::[[Int]])   , holds 100 $ \xss -> ordered . concat $ discardLaterT (<=) (xss::[[Int]])+  , (length . concat $ discardLaterT (<=) [[1..100]]) == 100   , (length . concat $ discardLaterT (<=) [[00..99],[100..199::Int]]) == 200   , holds 100 $ \xss -> nub (concat xss) == concat (nubT xss :: [[Int]])   ]
tests/test-types.hs view
@@ -1,4 +1,4 @@--- Copyright (c) 2015-2017 Rudy Matela.+-- Copyright (c) 2015-2018 Rudy Matela. -- Distributed under the 3-Clause BSD licence (see the file LICENSE). import Test import System.Exit (exitFailure)
tests/test.hs view
@@ -1,4 +1,4 @@--- Copyright (c) 2015-2017 Rudy Matela.+-- Copyright (c) 2015-2018 Rudy Matela. -- Distributed under the 3-Clause BSD licence (see the file LICENSE). import Test @@ -32,7 +32,6 @@   , tNatTripleOrd 200   , tNatQuadrupleOrd 300   , tNatQuintupleOrd 400-  , tNatSixtupleOrd 500   , tNatListOrd 500   , tListsOfNatOrd 500   , listsOf (tiers::[[Nat]]) =| 10 |= tiers@@ -50,7 +49,9 @@   , counterExample 10 (\x y -> x + y == (x::Double)) == Just ["0.0","1.0"]   , holds          50 (\x -> x + 1 /= (x::Int))   , counterExample 50 (\x -> x + 1 /= (x::Float))  == Just ["Infinity"]+    || counterExample 50 (\x -> x + 1 /= (x::Float)) == Just ["inf"] -- bug on Hugs 2006-09?   , counterExample 50 (\x -> x + 1 /= (x::Double)) == Just ["Infinity"]+    || counterExample 50 (\x -> x + 1 /= (x::Float)) == Just ["inf"] -- bug on Hugs 2006-09?   , allUnique (take 100 list :: [Float])   , allUnique (take 500 list :: [Double])