$ /nix/store/vzx1mi9c0xfadmsm9dhd83d005cb1qs9-coreutils-9.8/bin/timeout --kill-after=15s 7200s /nix/store/99b1z08awpxj8b6mzggn59gp1shljnff-nix-2.34.5/bin/nix --extra-experimental-features nix-command --extra-experimental-features flakes --log-format internal-json build --no-link git+https://github.com/NorfairKing/sydtest?ref=per-test-coverage-manifest&rev=0c98514f61d4674ccdd44033a56a0970c338d346#checks.x86_64-linux.mutation-really-safe-money --print-build-logs warning: ignoring untrusted flake configuration setting 'extra-substituters'. Pass '--accept-flake-config' to trust it warning: ignoring untrusted flake configuration setting 'extra-trusted-public-keys'. Pass '--accept-flake-config' to trust it error (ignored): SQLite database '/var/cache/private/nix-ci-worker/eval-cache-v6/0440c31626b8b260f59f5aba34d57ace51c68d1a879d1dbc1e97a5aef9047188.sqlite' is busy  Downloading cached really-safe-money-0.0.0.0-manifest from https://cache.staging.nix-ci.com Downloading cached really-safe-money-gen-source from https://cache.staging.nix-ci.com Downloading cached really-safe-money from https://cache.staging.nix-ci.com Downloading cached genvalidity-sydtest-1.0.1.0-doc from https://cache.staging.nix-ci.com Downloading cached genvalidity-vector-1.0.0.0-doc from https://cache.staging.nix-ci.com Progress: 0 of 6 built, 1 of 7 downloaded from cache (4 downloading) Progress: 0 of 5 built, 2 of 7 downloaded from cache (3 downloading) Progress: 0 of 4 built, 3 of 7 downloaded from cache (2 downloading) Downloading cached genvalidity-sydtest from https://cache.staging.nix-ci.com Progress: 0 of 4 built, 4 of 7 downloaded from cache (2 downloading) Downloading cached genvalidity-vector from https://cache.staging.nix-ci.com Progress: 0 of 4 built, 5 of 7 downloaded from cache (2 downloading) Progress: 0 of 3 built, 6 of 7 downloaded from cache (1 downloading) Progress: 0 of 2 built, 7 of 7 downloaded from cache Building really-safe-money-gen [really-safe-money-gen] Phase: setupCompilerEnvironmentPhase [really-safe-money-gen] Build with /nix/store/s9jd43rkwc2syl9cvgj6f786avy8bgzy-ghc-9.10.3. [really-safe-money-gen] Phase: unpackPhase [really-safe-money-gen] unpacking source archive /nix/store/63wmak6bzfj7m79zx305wv2mlkcngfia-really-safe-money-gen-source-0.0.0.0/really-safe-money-gen-0.0.0.0.tar.gz [really-safe-money-gen] source root is really-safe-money-gen-0.0.0.0 [really-safe-money-gen] setting SOURCE_DATE_EPOCH to timestamp 1778584409 of file "really-safe-money-gen-0.0.0.0/test/Spec.hs" [really-safe-money-gen] Phase: patchPhase [really-safe-money-gen] Phase: compileBuildDriverPhase [really-safe-money-gen] setupCompileFlags: -package-db=/build/tmp.P2VoRuZu5n/setup-package.conf.d -threaded [really-safe-money-gen] [1 of 2] Compiling Main ( Setup.hs, /build/tmp.P2VoRuZu5n/Main.o ) [really-safe-money-gen] [2 of 2] Linking Setup [really-safe-money-gen] Phase: updateAutotoolsGnuConfigScriptsPhase [really-safe-money-gen] Phase: configurePhase [really-safe-money-gen] configureFlags: --verbose --prefix=/nix/store/0lyb7q37r7c71xf1yhvmb6dh8m7dn2zj-really-safe-money-gen-0.0.0.0 --libdir=$prefix/lib/$compiler/lib --libsubdir=$abi/$libname --docdir=/nix/store/i69b5p948bjsqq5ihw81212gg42nxlpv-really-safe-money-gen-0.0.0.0-doc/share/doc/really-safe-money-gen-0.0.0.0 --with-gcc=gcc --package-db=/build/tmp.P2VoRuZu5n/package.conf.d --ghc-option=-j16 --ghc-option=+RTS --ghc-option=-A64M --ghc-option=-RTS --enable-library-profiling --profiling-detail=exported-functions --disable-profiling --enable-shared --disable-coverage --enable-static --disable-executable-dynamic --enable-tests --disable-benchmarks --enable-library-vanilla --disable-library-for-ghci --enable-split-sections --enable-library-stripping --enable-executable-stripping --ghc-option=-haddock --ghc-options=-O2 --ghc-options=-Wall --ghc-options=-Wincomplete-uni-patterns --ghc-options=-Wincomplete-record-updates --ghc-options=-Wpartial-fields --ghc-options=-Widentities --ghc-options=-Wredundant-constraints --ghc-options=-Wcpp-undef --ghc-options=-Werror --extra-lib-dirs=/nix/store/ffyzkisqs4vc4mg28bwwlyqjf8i9ph6b-ncurses-6.5/lib --extra-lib-dirs=/nix/store/n28qgdj8c1q41kf7n4y1jxa6ckp85m3c-libffi-3.5.2/lib --extra-lib-dirs=/nix/store/1b6h99dw7bk4wbn77kbalih42zbc67m1-elfutils-0.194/lib --extra-lib-dirs=/nix/store/hi0ar880110k6jsmmili7dh1gq3cg2a9-gmp-with-cxx-6.3.0/lib --extra-lib-dirs=/nix/store/g09cflpnp4g80q56sj9dng1qzv4v4ybc-numactl-2.0.18/lib --extra-lib-dirs=/nix/store/s9jd43rkwc2syl9cvgj6f786avy8bgzy-ghc-9.10.3/lib [really-safe-money-gen] Using Parsec parser [really-safe-money-gen] Configuring really-safe-money-gen-0.0.0.0... [really-safe-money-gen] Dependency QuickCheck: using QuickCheck-2.15.0.1 [really-safe-money-gen] Dependency base >=4.7 && <5: using base-4.20.2.0 [really-safe-money-gen] Dependency genvalidity: using genvalidity-1.1.1.0 [really-safe-money-gen] Dependency genvalidity-containers: using genvalidity-containers-1.0.0.2 [really-safe-money-gen] Dependency really-safe-money: using really-safe-money-0.0.0.0 [really-safe-money-gen] Dependency base >=4.7 && <5: using base-4.20.2.0 [really-safe-money-gen] Dependency containers: using containers-0.7 [really-safe-money-gen] Dependency genvalidity-sydtest: using genvalidity-sydtest-1.0.1.0 [really-safe-money-gen] Dependency genvalidity-vector: using genvalidity-vector-1.0.0.0 [really-safe-money-gen] Dependency really-safe-money: using really-safe-money-0.0.0.0 [really-safe-money-gen] Dependency really-safe-money-gen: using really-safe-money-gen-0.0.0.0 [really-safe-money-gen] Dependency sydtest: using sydtest-0.23.0.2 [really-safe-money-gen] Dependency vector: using vector-0.13.2.0 [really-safe-money-gen] Source component graph: [really-safe-money-gen]  component lib [really-safe-money-gen]  component test:really-safe-money-test dependency lib [really-safe-money-gen] Configured component graph: [really-safe-money-gen]  component really-safe-money-gen-0.0.0.0-KTRUiMX2w2iErncFnvROeR [really-safe-money-gen]  include QuickCheck-2.15.0.1-8fVC1qSJKj9H9pvMjJXUwU [really-safe-money-gen]  include base-4.20.2.0-64da [really-safe-money-gen]  include genvalidity-1.1.1.0-KJOcA1wEUno9vXRiVdno1L [really-safe-money-gen]  include genvalidity-containers-1.0.0.2-DXaOCEBh8iJ1c8u2LwVlK1 [really-safe-money-gen]  include really-safe-money-0.0.0.0-KH9ltLBvnn0Cn1rgifGPh9 [really-safe-money-gen]  component really-safe-money-gen-0.0.0.0-5RtWE2oTQ4oDcSh2XAEB3R-really-safe-money-test [really-safe-money-gen]  include base-4.20.2.0-64da [really-safe-money-gen]  include containers-0.7-504a [really-safe-money-gen]  include genvalidity-sydtest-1.0.1.0-DnaceRcSjVA3T3KoaUTTYa [really-safe-money-gen]  include genvalidity-vector-1.0.0.0-6KKiduowklk7hSxSW05Gxi [really-safe-money-gen]  include really-safe-money-0.0.0.0-KH9ltLBvnn0Cn1rgifGPh9 [really-safe-money-gen]  include really-safe-money-gen-0.0.0.0-KTRUiMX2w2iErncFnvROeR [really-safe-money-gen]  include sydtest-0.23.0.2-4ibn0aXkbvH1bwl6HX1vB8 [really-safe-money-gen]  include vector-0.13.2.0-GDUCoiHhVuq2SKPTzzTr3a [really-safe-money-gen] Linked component graph: [really-safe-money-gen]  unit really-safe-money-gen-0.0.0.0-KTRUiMX2w2iErncFnvROeR [really-safe-money-gen]  include QuickCheck-2.15.0.1-8fVC1qSJKj9H9pvMjJXUwU [really-safe-money-gen]  include base-4.20.2.0-64da [really-safe-money-gen]  include genvalidity-1.1.1.0-KJOcA1wEUno9vXRiVdno1L [really-safe-money-gen]  include genvalidity-containers-1.0.0.2-DXaOCEBh8iJ1c8u2LwVlK1 [really-safe-money-gen]  include really-safe-money-0.0.0.0-KH9ltLBvnn0Cn1rgifGPh9 [really-safe-money-gen]  Money.Account.Gen=really-safe-money-gen-0.0.0.0-KTRUiMX2w2iErncFnvROeR:Money.Account.Gen,Money.AccountOf.Gen=really-safe-money-gen-0.0.0.0-KTRUiMX2w2iErncFnvROeR:Money.AccountOf.Gen,Money.Amount.Gen=really-safe-money-gen-0.0.0.0-KTRUiMX2w2iErncFnvROeR:Money.Amount.Gen,Money.AmountOf.Gen=really-safe-money-gen-0.0.0.0-KTRUiMX2w2iErncFnvROeR:Money.AmountOf.Gen,Money.ConversionRate.Gen=really-safe-money-gen-0.0.0.0-KTRUiMX2w2iErncFnvROeR:Money.ConversionRate.Gen,Money.ConversionRateOf.Gen=really-safe-money-gen-0.0.0.0-KTRUiMX2w2iErncFnvROeR:Money.ConversionRateOf.Gen,Money.Currency.Gen=really-safe-money-gen-0.0.0.0-KTRUiMX2w2iErncFnvROeR:Money.Currency.Gen,Money.Gen=really-safe-money-gen-0.0.0.0-KTRUiMX2w2iErncFnvROeR:Money.Gen,Money.MultiAccount.Gen=really-safe-money-gen-0.0.0.0-KTRUiMX2w2iErncFnvROeR:Money.MultiAccount.Gen,Money.MultiAmount.Gen=really-safe-money-gen-0.0.0.0-KTRUiMX2w2iErncFnvROeR:Money.MultiAmount.Gen,Money.QuantisationFactor.Gen=really-safe-money-gen-0.0.0.0-KTRUiMX2w2iErncFnvROeR:Money.QuantisationFactor.Gen,Numeric.DecimalLiteral.Gen=really-safe-money-gen-0.0.0.0-KTRUiMX2w2iErncFnvROeR:Numeric.DecimalLiteral.Gen [really-safe-money-gen]  unit really-safe-money-gen-0.0.0.0-5RtWE2oTQ4oDcSh2XAEB3R-really-safe-money-test [really-safe-money-gen]  include base-4.20.2.0-64da [really-safe-money-gen]  include containers-0.7-504a [really-safe-money-gen]  include genvalidity-sydtest-1.0.1.0-DnaceRcSjVA3T3KoaUTTYa [really-safe-money-gen]  include genvalidity-vector-1.0.0.0-6KKiduowklk7hSxSW05Gxi [really-safe-money-gen]  include really-safe-money-0.0.0.0-KH9ltLBvnn0Cn1rgifGPh9 [really-safe-money-gen]  include really-safe-money-gen-0.0.0.0-KTRUiMX2w2iErncFnvROeR [really-safe-money-gen]  include sydtest-0.23.0.2-4ibn0aXkbvH1bwl6HX1vB8 [really-safe-money-gen]  include vector-0.13.2.0-GDUCoiHhVuq2SKPTzzTr3a [really-safe-money-gen] Ready component graph: [really-safe-money-gen]  definite really-safe-money-gen-0.0.0.0-KTRUiMX2w2iErncFnvROeR [really-safe-money-gen]  depends QuickCheck-2.15.0.1-8fVC1qSJKj9H9pvMjJXUwU [really-safe-money-gen]  depends base-4.20.2.0-64da [really-safe-money-gen]  depends genvalidity-1.1.1.0-KJOcA1wEUno9vXRiVdno1L [really-safe-money-gen]  depends genvalidity-containers-1.0.0.2-DXaOCEBh8iJ1c8u2LwVlK1 [really-safe-money-gen]  depends really-safe-money-0.0.0.0-KH9ltLBvnn0Cn1rgifGPh9 [really-safe-money-gen]  definite really-safe-money-gen-0.0.0.0-5RtWE2oTQ4oDcSh2XAEB3R-really-safe-money-test [really-safe-money-gen]  depends base-4.20.2.0-64da [really-safe-money-gen]  depends containers-0.7-504a [really-safe-money-gen]  depends genvalidity-sydtest-1.0.1.0-DnaceRcSjVA3T3KoaUTTYa [really-safe-money-gen]  depends genvalidity-vector-1.0.0.0-6KKiduowklk7hSxSW05Gxi [really-safe-money-gen]  depends really-safe-money-0.0.0.0-KH9ltLBvnn0Cn1rgifGPh9 [really-safe-money-gen]  depends really-safe-money-gen-0.0.0.0-KTRUiMX2w2iErncFnvROeR [really-safe-money-gen]  depends sydtest-0.23.0.2-4ibn0aXkbvH1bwl6HX1vB8 [really-safe-money-gen]  depends vector-0.13.2.0-GDUCoiHhVuq2SKPTzzTr3a [really-safe-money-gen] Using Cabal-3.12.1.0 compiled by ghc-9.10 [really-safe-money-gen] Using compiler: ghc-9.10.3 [really-safe-money-gen] Using install prefix: [really-safe-money-gen] /nix/store/0lyb7q37r7c71xf1yhvmb6dh8m7dn2zj-really-safe-money-gen-0.0.0.0 [really-safe-money-gen] Executables installed in: [really-safe-money-gen] /nix/store/0lyb7q37r7c71xf1yhvmb6dh8m7dn2zj-really-safe-money-gen-0.0.0.0/bin [really-safe-money-gen] Libraries installed in: [really-safe-money-gen] /nix/store/0lyb7q37r7c71xf1yhvmb6dh8m7dn2zj-really-safe-money-gen-0.0.0.0/lib/ghc-9.10.3/lib/x86_64-linux-ghc-9.10.3-05f6/really-safe-money-gen-0.0.0.0-KTRUiMX2w2iErncFnvROeR [really-safe-money-gen] Dynamic Libraries installed in: [really-safe-money-gen] /nix/store/0lyb7q37r7c71xf1yhvmb6dh8m7dn2zj-really-safe-money-gen-0.0.0.0/lib/ghc-9.10.3/lib/x86_64-linux-ghc-9.10.3-05f6 [really-safe-money-gen] Private executables installed in: [really-safe-money-gen] /nix/store/0lyb7q37r7c71xf1yhvmb6dh8m7dn2zj-really-safe-money-gen-0.0.0.0/libexec/x86_64-linux-ghc-9.10.3-05f6/really-safe-money-gen-0.0.0.0 [really-safe-money-gen] Data files installed in: [really-safe-money-gen] /nix/store/0lyb7q37r7c71xf1yhvmb6dh8m7dn2zj-really-safe-money-gen-0.0.0.0/share/x86_64-linux-ghc-9.10.3-05f6/really-safe-money-gen-0.0.0.0 [really-safe-money-gen] Documentation installed in: [really-safe-money-gen] /nix/store/i69b5p948bjsqq5ihw81212gg42nxlpv-really-safe-money-gen-0.0.0.0-doc/share/doc/really-safe-money-gen-0.0.0.0 [really-safe-money-gen] Configuration files installed in: [really-safe-money-gen] /nix/store/0lyb7q37r7c71xf1yhvmb6dh8m7dn2zj-really-safe-money-gen-0.0.0.0/etc [really-safe-money-gen] No alex found [really-safe-money-gen] Using ar found on system at: [really-safe-money-gen] /nix/store/iz5lckcsg66r223si2gck7csk2hihj0m-binutils-wrapper-2.44/bin/ar [really-safe-money-gen] No c2hs found [really-safe-money-gen] No cpphs found [really-safe-money-gen] No doctest found [really-safe-money-gen] Using gcc version 14.3.0 given by user at: [really-safe-money-gen] /nix/store/8v97ngkcpfzgghwnnr7fsz33p2x22gy9-gcc-wrapper-14.3.0/bin/gcc [really-safe-money-gen] Using ghc version 9.10.3 found on system at: [really-safe-money-gen] /nix/store/s9jd43rkwc2syl9cvgj6f786avy8bgzy-ghc-9.10.3/bin/ghc [really-safe-money-gen] Using ghc-pkg version 9.10.3 found on system at: [really-safe-money-gen] /nix/store/s9jd43rkwc2syl9cvgj6f786avy8bgzy-ghc-9.10.3/bin/ghc-pkg-9.10.3 [really-safe-money-gen] No ghcjs found [really-safe-money-gen] No ghcjs-pkg found [really-safe-money-gen] No greencard found [really-safe-money-gen] Using haddock version 2.31.1 found on system at: [really-safe-money-gen] /nix/store/s9jd43rkwc2syl9cvgj6f786avy8bgzy-ghc-9.10.3/bin/haddock-ghc-9.10.3 [really-safe-money-gen] No happy found [really-safe-money-gen] Using haskell-suite found on system at: haskell-suite-dummy-location [really-safe-money-gen] Using haskell-suite-pkg found on system at: haskell-suite-pkg-dummy-location [really-safe-money-gen] No hmake found [really-safe-money-gen] Using hpc version 0.69 found on system at: [really-safe-money-gen] /nix/store/s9jd43rkwc2syl9cvgj6f786avy8bgzy-ghc-9.10.3/bin/hpc-ghc-9.10.3 [really-safe-money-gen] Using hsc2hs version 0.68.10 found on system at: [really-safe-money-gen] /nix/store/s9jd43rkwc2syl9cvgj6f786avy8bgzy-ghc-9.10.3/bin/hsc2hs-ghc-9.10.3 [really-safe-money-gen] Using hscolour version 1.25 found on system at: [really-safe-money-gen] /nix/store/f755skyzf4jvfx3crwq9mmh3x4lsaz8i-hscolour-1.25/bin/HsColour [really-safe-money-gen] No jhc found [really-safe-money-gen] Using ld found on system at: [really-safe-money-gen] /nix/store/8v97ngkcpfzgghwnnr7fsz33p2x22gy9-gcc-wrapper-14.3.0/bin/ld [really-safe-money-gen] No pkg-config found [really-safe-money-gen] Using runghc version 9.10.3 found on system at: [really-safe-money-gen] /nix/store/s9jd43rkwc2syl9cvgj6f786avy8bgzy-ghc-9.10.3/bin/runghc-9.10.3 [really-safe-money-gen] Using strip version 2.44 found on system at: [really-safe-money-gen] /nix/store/8v97ngkcpfzgghwnnr7fsz33p2x22gy9-gcc-wrapper-14.3.0/bin/strip [really-safe-money-gen] Using tar found on system at: [really-safe-money-gen] /nix/store/xl6pd2spjajwcpq09fnmnjv5psqmlmma-gnutar-1.35/bin/tar [really-safe-money-gen] No uhc found [really-safe-money-gen] Phase: buildPhase [really-safe-money-gen] Preprocessing library for really-safe-money-gen-0.0.0.0... [really-safe-money-gen] Building library for really-safe-money-gen-0.0.0.0... [really-safe-money-gen] [ 1 of 13] Compiling Money.Amount.Gen ( src/Money/Amount/Gen.hs, dist/build/Money/Amount/Gen.o, dist/build/Money/Amount/Gen.dyn_o ) [really-safe-money-gen] [ 2 of 13] Compiling Money.Account.Gen ( src/Money/Account/Gen.hs, dist/build/Money/Account/Gen.o, dist/build/Money/Account/Gen.dyn_o ) [really-safe-money-gen] [ 3 of 13] Compiling Money.AccountOf.Gen ( src/Money/AccountOf/Gen.hs, dist/build/Money/AccountOf/Gen.o, dist/build/Money/AccountOf/Gen.dyn_o ) [really-safe-money-gen] [ 4 of 13] Compiling Money.AmountOf.Gen ( src/Money/AmountOf/Gen.hs, dist/build/Money/AmountOf/Gen.o, dist/build/Money/AmountOf/Gen.dyn_o ) [really-safe-money-gen] [ 5 of 13] Compiling Money.ConversionRate.Gen ( src/Money/ConversionRate/Gen.hs, dist/build/Money/ConversionRate/Gen.o, dist/build/Money/ConversionRate/Gen.dyn_o ) [really-safe-money-gen] [ 6 of 13] Compiling Money.ConversionRateOf.Gen ( src/Money/ConversionRateOf/Gen.hs, dist/build/Money/ConversionRateOf/Gen.o, dist/build/Money/ConversionRateOf/Gen.dyn_o ) [really-safe-money-gen] [ 7 of 13] Compiling Money.QuantisationFactor.Gen ( src/Money/QuantisationFactor/Gen.hs, dist/build/Money/QuantisationFactor/Gen.o, dist/build/Money/QuantisationFactor/Gen.dyn_o ) [really-safe-money-gen] [ 8 of 13] Compiling Money.Currency.Gen ( src/Money/Currency/Gen.hs, dist/build/Money/Currency/Gen.o, dist/build/Money/Currency/Gen.dyn_o ) [really-safe-money-gen] [ 9 of 13] Compiling Money.MultiAmount.Gen ( src/Money/MultiAmount/Gen.hs, dist/build/Money/MultiAmount/Gen.o, dist/build/Money/MultiAmount/Gen.dyn_o ) [really-safe-money-gen] [10 of 13] Compiling Money.MultiAccount.Gen ( src/Money/MultiAccount/Gen.hs, dist/build/Money/MultiAccount/Gen.o, dist/build/Money/MultiAccount/Gen.dyn_o ) [really-safe-money-gen] [11 of 13] Compiling Money.Gen ( src/Money/Gen.hs, dist/build/Money/Gen.o, dist/build/Money/Gen.dyn_o ) [really-safe-money-gen] [12 of 13] Compiling Numeric.DecimalLiteral.Gen ( src/Numeric/DecimalLiteral/Gen.hs, dist/build/Numeric/DecimalLiteral/Gen.o, dist/build/Numeric/DecimalLiteral/Gen.dyn_o ) [really-safe-money-gen] [13 of 13] Compiling Paths_really_safe_money_gen ( dist/build/autogen/Paths_really_safe_money_gen.hs, dist/build/Paths_really_safe_money_gen.o, dist/build/Paths_really_safe_money_gen.dyn_o ) [really-safe-money-gen] [ 1 of 13] Compiling Money.Amount.Gen ( src/Money/Amount/Gen.hs, dist/build/Money/Amount/Gen.p_o ) [really-safe-money-gen] [ 2 of 13] Compiling Money.Account.Gen ( src/Money/Account/Gen.hs, dist/build/Money/Account/Gen.p_o ) [really-safe-money-gen] [ 3 of 13] Compiling Money.AccountOf.Gen ( src/Money/AccountOf/Gen.hs, dist/build/Money/AccountOf/Gen.p_o ) [really-safe-money-gen] [ 4 of 13] Compiling Money.AmountOf.Gen ( src/Money/AmountOf/Gen.hs, dist/build/Money/AmountOf/Gen.p_o ) [really-safe-money-gen] [ 5 of 13] Compiling Money.ConversionRate.Gen ( src/Money/ConversionRate/Gen.hs, dist/build/Money/ConversionRate/Gen.p_o ) [really-safe-money-gen] [ 6 of 13] Compiling Money.ConversionRateOf.Gen ( src/Money/ConversionRateOf/Gen.hs, dist/build/Money/ConversionRateOf/Gen.p_o ) [really-safe-money-gen] [ 7 of 13] Compiling Money.QuantisationFactor.Gen ( src/Money/QuantisationFactor/Gen.hs, dist/build/Money/QuantisationFactor/Gen.p_o ) [really-safe-money-gen] [ 8 of 13] Compiling Money.Currency.Gen ( src/Money/Currency/Gen.hs, dist/build/Money/Currency/Gen.p_o ) [really-safe-money-gen] [ 9 of 13] Compiling Money.MultiAmount.Gen ( src/Money/MultiAmount/Gen.hs, dist/build/Money/MultiAmount/Gen.p_o ) [really-safe-money-gen] [10 of 13] Compiling Money.MultiAccount.Gen ( src/Money/MultiAccount/Gen.hs, dist/build/Money/MultiAccount/Gen.p_o ) [really-safe-money-gen] [11 of 13] Compiling Money.Gen ( src/Money/Gen.hs, dist/build/Money/Gen.p_o ) [really-safe-money-gen] [12 of 13] Compiling Numeric.DecimalLiteral.Gen ( src/Numeric/DecimalLiteral/Gen.hs, dist/build/Numeric/DecimalLiteral/Gen.p_o ) [really-safe-money-gen] [13 of 13] Compiling Paths_really_safe_money_gen ( dist/build/autogen/Paths_really_safe_money_gen.hs, dist/build/Paths_really_safe_money_gen.p_o ) [really-safe-money-gen] Preprocessing test suite 'really-safe-money-test' for really-safe-money-gen-0.0.0.0... [really-safe-money-gen] Building test suite 'really-safe-money-test' for really-safe-money-gen-0.0.0.0... [really-safe-money-gen] [ 1 of 14] Compiling Money.AccountSpec ( test/Money/AccountSpec.hs, dist/build/really-safe-money-test/really-safe-money-test-tmp/Money/AccountSpec.o ) [really-safe-money-gen] [ 2 of 14] Compiling Money.AmountSpec ( test/Money/AmountSpec.hs, dist/build/really-safe-money-test/really-safe-money-test-tmp/Money/AmountSpec.o ) [really-safe-money-gen] [ 3 of 14] Compiling Money.ConversionRateSpec ( test/Money/ConversionRateSpec.hs, dist/build/really-safe-money-test/really-safe-money-test-tmp/Money/ConversionRateSpec.o ) [really-safe-money-gen] [ 4 of 14] Compiling Money.Currency.TestUtils ( test/Money/Currency/TestUtils.hs, dist/build/really-safe-money-test/really-safe-money-test-tmp/Money/Currency/TestUtils.o ) [really-safe-money-gen] [ 5 of 14] Compiling Money.ConversionRateOfSpec ( test/Money/ConversionRateOfSpec.hs, dist/build/really-safe-money-test/really-safe-money-test-tmp/Money/ConversionRateOfSpec.o ) [really-safe-money-gen] [ 6 of 14] Compiling Money.AmountOfSpec ( test/Money/AmountOfSpec.hs, dist/build/really-safe-money-test/really-safe-money-test-tmp/Money/AmountOfSpec.o ) [really-safe-money-gen] [ 7 of 14] Compiling Money.AccountOfSpec ( test/Money/AccountOfSpec.hs, dist/build/really-safe-money-test/really-safe-money-test-tmp/Money/AccountOfSpec.o ) [really-safe-money-gen] [ 8 of 14] Compiling Money.CurrencySpec ( test/Money/CurrencySpec.hs, dist/build/really-safe-money-test/really-safe-money-test-tmp/Money/CurrencySpec.o ) [really-safe-money-gen] [ 9 of 14] Compiling Money.MultiAccountSpec ( test/Money/MultiAccountSpec.hs, dist/build/really-safe-money-test/really-safe-money-test-tmp/Money/MultiAccountSpec.o ) [really-safe-money-gen] [10 of 14] Compiling Money.MultiAmountSpec ( test/Money/MultiAmountSpec.hs, dist/build/really-safe-money-test/really-safe-money-test-tmp/Money/MultiAmountSpec.o ) [really-safe-money-gen] [11 of 14] Compiling Money.QuantisationFactorSpec ( test/Money/QuantisationFactorSpec.hs, dist/build/really-safe-money-test/really-safe-money-test-tmp/Money/QuantisationFactorSpec.o ) [really-safe-money-gen] [12 of 14] Compiling Numeric.DecimalLiteralSpec ( test/Numeric/DecimalLiteralSpec.hs, dist/build/really-safe-money-test/really-safe-money-test-tmp/Numeric/DecimalLiteralSpec.o ) [really-safe-money-gen] [13 of 14] Compiling Main ( test/Spec.hs, dist/build/really-safe-money-test/really-safe-money-test-tmp/Main.o ) [really-safe-money-gen] [14 of 14] Compiling Paths_really_safe_money_gen ( dist/build/really-safe-money-test/autogen/Paths_really_safe_money_gen.hs, dist/build/really-safe-money-test/really-safe-money-test-tmp/Paths_really_safe_money_gen.o ) [really-safe-money-gen] [15 of 15] Linking dist/build/really-safe-money-test/really-safe-money-test [really-safe-money-gen] Phase: checkPhase [really-safe-money-gen] mutation-nix: collecting per-test coverage [really-safe-money-gen] mutation-nix: running mutations [really-safe-money-gen] Testing mutation IntLit at src/Money/ConversionRate.hs:116:45-46: [really-safe-money-gen] @@ -113,7 +113,7 @@ [really-safe-money-gen]  -- >>> invert (ConversionRate (1 % 2)) [really-safe-money-gen]  -- ConversionRate {unConversionRate = 2 % 1} [really-safe-money-gen]  invert :: ConversionRate -> ConversionRate [really-safe-money-gen] -invert (ConversionRate r) = ConversionRate (1 / r) [really-safe-money-gen] +invert (ConversionRate r) = ConversionRate (0 / r) [really-safe-money-gen]  [really-safe-money-gen]  -- | Compose two conversion rates [really-safe-money-gen]  -- [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/ConversionRate.hs:116:45-46: [really-safe-money-gen] @@ -113,7 +113,7 @@ [really-safe-money-gen]  -- >>> invert (ConversionRate (1 % 2)) [really-safe-money-gen]  -- ConversionRate {unConversionRate = 2 % 1} [really-safe-money-gen]  invert :: ConversionRate -> ConversionRate [really-safe-money-gen] -invert (ConversionRate r) = ConversionRate (1 / r) [really-safe-money-gen] +invert (ConversionRate r) = ConversionRate (-1 / r) [really-safe-money-gen]  [really-safe-money-gen]  -- | Compose two conversion rates [really-safe-money-gen]  -- [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/ConversionRate.hs:109:27-28: [really-safe-money-gen] @@ -106,7 +106,7 @@ [really-safe-money-gen]  [really-safe-money-gen]  -- | One-to-one conversion rate [really-safe-money-gen]  oneToOne :: ConversionRate [really-safe-money-gen] -oneToOne = ConversionRate 1 [really-safe-money-gen] +oneToOne = ConversionRate 0 [really-safe-money-gen]  [really-safe-money-gen]  -- | Invert a 'ConversionRate', to convert in the other direction. [really-safe-money-gen]  -- [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/ConversionRate.hs:109:27-28: [really-safe-money-gen] @@ -106,7 +106,7 @@ [really-safe-money-gen]  [really-safe-money-gen]  -- | One-to-one conversion rate [really-safe-money-gen]  oneToOne :: ConversionRate [really-safe-money-gen] -oneToOne = ConversionRate 1 [really-safe-money-gen] +oneToOne = ConversionRate -1 [really-safe-money-gen]  [really-safe-money-gen]  -- | Invert a 'ConversionRate', to convert in the other direction. [really-safe-money-gen]  -- [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/ConversionRate.hs:72:25-26: [really-safe-money-gen] @@ -69,7 +69,7 @@ [really-safe-money-gen]  -- >>> fromRational (0 % 1) [really-safe-money-gen]  -- Nothing [really-safe-money-gen]  fromRational :: Rational -> Maybe ConversionRate [really-safe-money-gen] -fromRational r = if r < 0 then Nothing else fromRatio (realToFrac r) [really-safe-money-gen] +fromRational r = if r < 1 then Nothing else fromRatio (realToFrac r) [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn a 'ConversionRate' back into a 'Rational' [really-safe-money-gen]  -- [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/ConversionRate.hs:72:21-26: [really-safe-money-gen] @@ -69,7 +69,7 @@ [really-safe-money-gen]  -- >>> fromRational (0 % 1) [really-safe-money-gen]  -- Nothing [really-safe-money-gen]  fromRational :: Rational -> Maybe ConversionRate [really-safe-money-gen] -fromRational r = if r < 0 then Nothing else fromRatio (realToFrac r) [really-safe-money-gen] +fromRational r = if True then Nothing else fromRatio (realToFrac r) [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn a 'ConversionRate' back into a 'Rational' [really-safe-money-gen]  -- [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/ConversionRate.hs:72:21-26: [really-safe-money-gen] @@ -69,7 +69,7 @@ [really-safe-money-gen]  -- >>> fromRational (0 % 1) [really-safe-money-gen]  -- Nothing [really-safe-money-gen]  fromRational :: Rational -> Maybe ConversionRate [really-safe-money-gen] -fromRational r = if r < 0 then Nothing else fromRatio (realToFrac r) [really-safe-money-gen] +fromRational r = if False then Nothing else fromRatio (realToFrac r) [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn a 'ConversionRate' back into a 'Rational' [really-safe-money-gen]  -- [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/ConversionRate.hs:72:21-26: [really-safe-money-gen] @@ -69,7 +69,7 @@ [really-safe-money-gen]  -- >>> fromRational (0 % 1) [really-safe-money-gen]  -- Nothing [really-safe-money-gen]  fromRational :: Rational -> Maybe ConversionRate [really-safe-money-gen] -fromRational r = if r < 0 then Nothing else fromRatio (realToFrac r) [really-safe-money-gen] +fromRational r = if not (r < 0) then Nothing else fromRatio (realToFrac r) [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn a 'ConversionRate' back into a 'Rational' [really-safe-money-gen]  -- [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Money/ConversionRate.hs:72:18-69: [really-safe-money-gen] @@ -69,7 +69,7 @@ [really-safe-money-gen]  -- >>> fromRational (0 % 1) [really-safe-money-gen]  -- Nothing [really-safe-money-gen]  fromRational :: Rational -> Maybe ConversionRate [really-safe-money-gen] -fromRational r = if r < 0 then Nothing else fromRatio (realToFrac r) [really-safe-money-gen] +fromRational r = if r < 0 then Nothing else fromRatio (realToFrac r) [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn a 'ConversionRate' back into a 'Rational' [really-safe-money-gen]  -- [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/ConversionRate.hs:38:56-57: [really-safe-money-gen] @@ -35,7 +35,7 @@ [really-safe-money-gen]  validate cr@(ConversionRate r) = [really-safe-money-gen]  mconcat [really-safe-money-gen]  [ genericValidate cr, [really-safe-money-gen] - declare "The rate is nonzero" $ numerator r /= 0 [really-safe-money-gen] + declare "The rate is nonzero" $ numerator r /= 1 [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen]  instance NFData ConversionRate [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/ConversionRate.hs:38:41-57: [really-safe-money-gen] @@ -35,7 +35,7 @@ [really-safe-money-gen]  validate cr@(ConversionRate r) = [really-safe-money-gen]  mconcat [really-safe-money-gen]  [ genericValidate cr, [really-safe-money-gen] - declare "The rate is nonzero" $ numerator r /= 0 [really-safe-money-gen] + declare "The rate is nonzero" $ True [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen]  instance NFData ConversionRate [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/ConversionRate.hs:109:27-28: [really-safe-money-gen] @@ -106,7 +106,7 @@ [really-safe-money-gen]  [really-safe-money-gen]  -- | One-to-one conversion rate [really-safe-money-gen]  oneToOne :: ConversionRate [really-safe-money-gen] -oneToOne = ConversionRate 1 [really-safe-money-gen] +oneToOne = ConversionRate 0 [really-safe-money-gen]  [really-safe-money-gen]  -- | Invert a 'ConversionRate', to convert in the other direction. [really-safe-money-gen]  -- [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.MultiAmountSpec [really-safe-money-gen]  convertAll [really-safe-money-gen]  ✓ produces valid results when converting two currencies to one  39.28 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 1000 [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.04 seconds [really-safe-money-gen]  Test suite took:  0.04 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/ConversionRate.hs:109:27-28: [really-safe-money-gen] @@ -106,7 +106,7 @@ [really-safe-money-gen]  [really-safe-money-gen]  -- | One-to-one conversion rate [really-safe-money-gen]  oneToOne :: ConversionRate [really-safe-money-gen] -oneToOne = ConversionRate 1 [really-safe-money-gen] +oneToOne = ConversionRate -1 [really-safe-money-gen]  [really-safe-money-gen]  -- | Invert a 'ConversionRate', to convert in the other direction. [really-safe-money-gen]  -- [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.MultiAmountSpec [really-safe-money-gen]  convertAll [really-safe-money-gen]  ✓ produces valid results when converting two currencies to one  39.05 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 1000 [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.04 seconds [really-safe-money-gen]  Test suite took:  0.04 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/ConversionRate.hs:38:41-57: [really-safe-money-gen] @@ -35,7 +35,7 @@ [really-safe-money-gen]  validate cr@(ConversionRate r) = [really-safe-money-gen]  mconcat [really-safe-money-gen]  [ genericValidate cr, [really-safe-money-gen] - declare "The rate is nonzero" $ numerator r /= 0 [really-safe-money-gen] + declare "The rate is nonzero" $ True [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen]  instance NFData ConversionRate [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.ConversionRateSpec [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  75.47 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  99.39 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  74.80 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  66.99 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  70.94 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  131.11 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  5381.62 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  119.83 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  GenValid ConversionRate [really-safe-money-gen]  genValid :: Gen ConversionRate [really-safe-money-gen]  ✓ only generates valid 'ConversionRate's  61.99 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen] Money.AccountSpec [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ succeeds in converting 1:1 without rounding if the quantisation factor is the same  90.86 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ produces valid amounts  273.42 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ converts this USD to CHF correctly  0.02 ms [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ computes a rate that can be used to do a conversion without rounding  170.15 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  105.84 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ computes this USD to CHF rate correctly  0.01 ms [really-safe-money-gen] Money.AccountOfSpec [really-safe-money-gen]  USD [really-safe-money-gen]  USD [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  2.11 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.54 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.53 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  2.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.50 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.60 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  1.01 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.73 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  2.13 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.52 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  USD [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.98 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.49 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.36 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.33 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.96 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.67 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.97 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.51 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.78 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.49 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  USD [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.48 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.90 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.70 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.51 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.96 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.49 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.48 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.72 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.14 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.73 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  CHF [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.40 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.25 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.68 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.25 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.49 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.41 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.24 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.69 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.28 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.38 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  BTC [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.91 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.43 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.68 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.41 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.44 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.91 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.52 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.79 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.90 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.81 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen] Money.ConversionRateOfSpec [really-safe-money-gen]  INR [really-safe-money-gen]  ADA [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  1.09 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.81 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf INR ADA) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf INR ADA) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf INR ADA)'s  0.67 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  1.10 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  1.23 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  1.03 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.75 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  67.03 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.41 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.44 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.53 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.51 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  1.26 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.54 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.69 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  1.40 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  69.67 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf INR BTC) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf INR BTC) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf INR BTC)'s  0.67 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  1.23 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  67.96 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  1.07 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  1.21 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  1.03 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.11 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.77 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  1.50 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf INR CHF) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf INR CHF) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf INR CHF)'s  0.65 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  GenValid (ConversionRateOf INR USD) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf INR USD) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf INR USD)'s  0.64 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  1.38 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.87 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.76 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  1.01 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.63 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.96 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  73.02 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.11 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  1.25 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.03 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf INR INR) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf INR INR) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf INR INR)'s  0.63 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  1.58 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  69.47 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  1.48 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.78 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.73 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  1.06 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  USD [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.96 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.68 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  1.02 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.68 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  1.01 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  1.09 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf ADA USD) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf ADA USD) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf ADA USD)'s  0.48 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  59.65 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.90 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  56.01 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.85 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  1.37 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  1.11 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.05 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.64 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.98 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf ADA CHF) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf ADA CHF) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf ADA CHF)'s  0.44 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.54 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  GenValid (ConversionRateOf ADA ADA) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf ADA ADA) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf ADA ADA)'s  0.93 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.50 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.43 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.47 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  1.37 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.85 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.88 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  1.28 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  61.86 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  56.37 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.60 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf ADA BTC) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf ADA BTC) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf ADA BTC)'s  0.67 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.55 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  1.01 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.71 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.72 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  1.11 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.67 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  GenValid (ConversionRateOf ADA INR) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf ADA INR) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf ADA INR)'s  0.64 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  0.68 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.92 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.52 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.48 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  1.15 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  61.45 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  1.28 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.55 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  BTC [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.57 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.55 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  1.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  58.36 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.81 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.96 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.47 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.49 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf CHF BTC) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf CHF BTC) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf CHF BTC)'s  0.46 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  1.27 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  56.85 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.52 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.46 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.49 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  1.15 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf CHF ADA) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf CHF ADA) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf CHF ADA)'s  0.45 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.54 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.03 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.52 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf CHF USD) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf CHF USD) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf CHF USD)'s  0.45 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  57.71 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.97 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  1.28 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  0.74 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.63 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  1.40 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.83 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  GenValid (ConversionRateOf CHF CHF) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf CHF CHF) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf CHF CHF)'s  0.74 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  57.90 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.02 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  1.13 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.58 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.54 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  1.09 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.73 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  1.00 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  1.17 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.44 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.78 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.88 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  0.86 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  64.61 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf CHF INR) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf CHF INR) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf CHF INR)'s  0.81 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  1.00 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.30 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  CHF [really-safe-money-gen]  GenValid (ConversionRateOf USD CHF) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf USD CHF) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf USD CHF)'s  0.85 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.73 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  63.28 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.99 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  1.14 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.91 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.50 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.53 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  1.24 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.45 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.53 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  1.25 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  62.32 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.85 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.66 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.73 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  1.25 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf USD USD) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf USD USD) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf USD USD)'s  0.45 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  1.30 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  62.65 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  1.31 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.62 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.76 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.96 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.45 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.56 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf USD INR) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf USD INR) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf USD INR)'s  0.46 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  1.05 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.79 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  1.10 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  1.26 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.60 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf USD BTC) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf USD BTC) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf USD BTC)'s  0.54 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  1.14 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  63.94 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.37 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  GenValid (ConversionRateOf USD ADA) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf USD ADA) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf USD ADA)'s  0.45 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.96 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  62.83 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.33 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  1.23 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.64 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.66 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  1.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.76 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  ADA [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.55 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.93 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  0.97 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  60.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.80 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.55 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf BTC ADA) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf BTC ADA) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf BTC ADA)'s  0.88 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  0.82 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.61 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  1.06 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.74 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  62.34 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.93 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.73 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.15 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  1.00 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.75 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf BTC USD) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf BTC USD) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf BTC USD)'s  1.05 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.99 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf BTC INR) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf BTC INR) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf BTC INR)'s  0.68 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  1.65 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  69.91 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  1.34 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.96 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.06 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  1.09 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.63 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  1.00 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf BTC CHF) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf BTC CHF) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf BTC CHF)'s  0.96 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  1.10 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  73.06 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.81 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.79 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.67 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  1.44 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.15 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.81 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  1.43 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.73 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  1.01 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf BTC BTC) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf BTC BTC) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf BTC BTC)'s  0.97 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  1.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  69.73 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.70 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.75 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen] Money.AmountOfSpec [really-safe-money-gen]  USD [really-safe-money-gen]  CHF [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  1.29 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.55 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.95 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.77 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.83 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.76 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.84 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.77 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.58 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  1.21 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  BTC [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.54 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.85 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  1.17 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.30 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.96 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.92 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  1.22 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.28 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.78 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.92 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  ADA [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.89 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  2.13 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.47 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  1.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.86 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.44 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  1.29 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.70 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.86 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.90 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  INR [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.90 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  2.13 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  2.05 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.92 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.73 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.41 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.11 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.93 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.10 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.62 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  INR [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.29 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.59 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.37 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.62 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.45 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  Testing mutation ConstBool at src/Money/ConversionRate.hs:38:41-57: [really-safe-money-gen] @@ -35,7 +35,7 @@ [really-safe-money-gen]  validate cr@(ConversionRate r) = [really-safe-money-gen]  mconcat [really-safe-money-gen]  [ genericValidate cr, [really-safe-money-gen] - declare "The rate is nonzero" $ numerator r /= 0 [really-safe-money-gen] + declare "The rate is nonzero" $ False [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen]  instance NFData ConversionRate [really-safe-money-gen]  [really-safe-money-gen]  ✓ produces valid amounts  0.61 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.04 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.98 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.60 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.45 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen] Money.AmountSpec [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid conversion rates  151.40 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ computes a rate that can be used to do a conversion without rounding  282.99 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ computes this USD to CHF rate correctly  0.01 ms [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ succeeds in converting 1:1 without rounding if the quantisation factor is the same  80.30 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ converts this USD to CHF correctly  0.01 ms [really-safe-money-gen]  ✓ produces valid amounts  267.38 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 202504 [really-safe-money-gen]  Passed: 346 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 9.39 seconds [really-safe-money-gen]  Test suite took:  9.40 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/ConversionRate.hs:38:41-57: [really-safe-money-gen] @@ -35,7 +35,7 @@ [really-safe-money-gen]  validate cr@(ConversionRate r) = [really-safe-money-gen]  mconcat [really-safe-money-gen]  [ genericValidate cr, [really-safe-money-gen] - declare "The rate is nonzero" $ numerator r /= 0 [really-safe-money-gen] + declare "The rate is nonzero" $ False [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen]  instance NFData ConversionRate [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.ConversionRateSpec [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  80.09 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  101.03 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  78.68 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  62.26 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  69.20 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  120.33 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  5351.50 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  114.09 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  GenValid ConversionRate [really-safe-money-gen]  genValid :: Gen ConversionRate [really-safe-money-gen]  ✓ only generates valid 'ConversionRate's  61.83 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen] Money.AccountSpec [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ succeeds in converting 1:1 without rounding if the quantisation factor is the same  84.27 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ produces valid amounts  264.65 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ converts this USD to CHF correctly  0.02 ms [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ computes a rate that can be used to do a conversion without rounding  173.20 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  100.61 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ computes this USD to CHF rate correctly  0.01 ms [really-safe-money-gen] Money.AccountOfSpec [really-safe-money-gen]  USD [really-safe-money-gen]  USD [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.55 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.40 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.53 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  2.11 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.52 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.29 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.85 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.34 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.43 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.36 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  USD [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.07 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.62 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.34 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.05 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.68 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.49 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.36 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.01 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.65 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  USD [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.36 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.08 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.55 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.36 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  2.05 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.54 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.53 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.87 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.51 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  CHF [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.89 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.32 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.54 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  2.04 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.89 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.46 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.23 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.83 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.61 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.48 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  BTC [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.59 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.43 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.70 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.39 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.44 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.88 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.35 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.21 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.70 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.21 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen] Money.ConversionRateOfSpec [really-safe-money-gen]  INR [really-safe-money-gen]  ADA [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.45 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.82 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf INR ADA) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf INR ADA) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf INR ADA)'s  0.45 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  0.68 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  1.49 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  1.23 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.77 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  62.34 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.56 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.78 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.94 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.88 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  1.42 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.85 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.00 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  1.55 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  63.43 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf INR BTC) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf INR BTC) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf INR BTC)'s  0.69 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  1.10 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  64.81 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.68 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.65 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  1.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.98 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.67 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  1.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf INR CHF) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf INR CHF) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf INR CHF)'s  0.49 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  GenValid (ConversionRateOf INR USD) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf INR USD) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf INR USD)'s  0.43 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  1.17 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.82 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.79 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.99 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.67 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  1.07 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  69.65 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.13 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  1.21 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.92 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf INR INR) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf INR INR) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf INR INR)'s  0.63 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  1.62 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  69.75 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  1.48 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.76 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.64 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.98 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  USD [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  1.00 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.66 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  1.01 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.69 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  0.95 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  1.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf ADA USD) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf ADA USD) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf ADA USD)'s  0.50 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  67.15 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  64.41 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  1.11 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  1.17 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.02 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.67 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.13 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf ADA CHF) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf ADA CHF) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf ADA CHF)'s  0.64 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.75 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  GenValid (ConversionRateOf ADA ADA) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf ADA ADA) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf ADA ADA)'s  0.67 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  1.01 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.50 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.66 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  1.44 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.80 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.92 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  1.46 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  62.74 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  58.00 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.47 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf ADA BTC) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf ADA BTC) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf ADA BTC)'s  0.59 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.67 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.55 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.27 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.82 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  1.00 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.66 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  GenValid (ConversionRateOf ADA INR) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf ADA INR) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf ADA INR)'s  0.52 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  0.79 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  1.03 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.49 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.61 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  1.50 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  62.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  1.25 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.67 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  BTC [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.67 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.21 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  0.97 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  59.30 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.96 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.90 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.47 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.55 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf CHF BTC) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf CHF BTC) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf CHF BTC)'s  0.47 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  1.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  55.73 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  1.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.66 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.58 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  1.25 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf CHF ADA) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf CHF ADA) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf CHF ADA)'s  0.57 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.80 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.13 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.58 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf CHF USD) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf CHF USD) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf CHF USD)'s  0.57 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  59.13 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.99 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  1.38 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  0.83 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.73 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.93 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.44 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  GenValid (ConversionRateOf CHF CHF) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf CHF CHF) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf CHF CHF)'s  0.53 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  59.30 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.01 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  1.13 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.67 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.68 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.96 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.54 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.84 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.99 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.62 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.74 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.64 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  1.31 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  61.23 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf CHF INR) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf CHF INR) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf CHF INR)'s  0.47 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.84 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.80 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  CHF [really-safe-money-gen]  GenValid (ConversionRateOf USD CHF) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf USD CHF) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf USD CHF)'s  0.85 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.65 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  57.08 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.94 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.71 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.48 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.54 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  1.25 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.58 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.51 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  1.56 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  58.63 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  1.21 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.68 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.84 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  1.36 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf USD USD) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf USD USD) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf USD USD)'s  0.47 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  0.95 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  59.47 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  1.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.57 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.82 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.96 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.56 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.55 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf USD INR) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf USD INR) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf USD INR)'s  0.60 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.90 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.54 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.88 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  1.14 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.72 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf USD BTC) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf USD BTC) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf USD BTC)'s  0.48 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  1.11 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  61.49 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.45 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  GenValid (ConversionRateOf USD ADA) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf USD ADA) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf USD ADA)'s  0.51 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.89 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  60.80 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.97 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  1.10 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.50 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.62 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  1.17 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.58 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  ADA [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.53 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.45 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  1.23 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  55.95 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.88 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.59 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf BTC ADA) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf BTC ADA) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf BTC ADA)'s  1.02 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  0.82 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.76 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  1.17 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.96 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  58.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.11 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.56 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.97 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.79 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.50 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf BTC USD) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf BTC USD) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf BTC USD)'s  0.48 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  1.47 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf BTC INR) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf BTC INR) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf BTC INR)'s  0.65 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  1.25 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  55.06 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.98 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.61 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.73 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.81 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.48 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.77 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf BTC CHF) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf BTC CHF) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf BTC CHF)'s  0.46 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  1.25 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  60.74 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.79 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.68 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.66 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  1.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.74 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.62 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  1.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.54 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.75 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf BTC BTC) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf BTC BTC) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf BTC BTC)'s  1.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  1.06 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  64.05 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.70 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.84 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen] Money.AmountOfSpec [really-safe-money-gen]  USD [really-safe-money-gen]  CHF [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  1.33 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.46 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.61 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.65 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.53 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.93 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.85 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.70 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.27 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  1.11 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  BTC [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.38 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.86 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  1.31 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.45 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.59 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.66 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.67 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.59 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.69 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.59 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  ADA [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.66 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.78 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.23 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.77 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  1.21 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  1.09 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.51 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.60 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.86 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  INR [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.90 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.84 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  1.03 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.71 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.66 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.69 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  1.08 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.21 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.68 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  INR [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.41 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  esting mutation Negate at src/Money/ConversionRate.hs:38:41-57: [really-safe-money-gen] @@ -35,7 +35,7 @@ [really-safe-money-gen]  validate cr@(ConversionRate r) = [really-safe-money-gen]  mconcat [really-safe-money-gen]  [ genericValidate cr, [really-safe-money-gen] - declare "The rate is nonzero" $ numerator r /= 0 [really-safe-money-gen] + declare "The rate is nonzero" $ not (numerator r /= 0) [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen]  instance NFData ConversionRate [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ListLit at src/Money/ConversionRate.hs:37:7-8: [really-safe-money-gen] @@ -34,7 +34,7 @@ [really-safe-money-gen]  instance Validity ConversionRate where [really-safe-money-gen]  validate cr@(ConversionRate r) = [really-safe-money-gen]  mconcat [really-safe-money-gen] - [ genericValidate cr, [really-safe-money-gen] + [ genericValidate cr, [really-safe-money-gen]  declare "The rate is nonzero" $ numerator r /= 0 [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] 32m✓ produces valid amounts  0.59 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.74 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.76 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.60 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.59 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.02 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.98 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.58 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.60 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen] Money.AmountSpec [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid conversion rates  152.26 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ computes a rate that can be used to do a conversion without rounding  281.64 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ computes this USD to CHF rate correctly  0.01 ms [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ succeeds in converting 1:1 without rounding if the quantisation factor is the same  85.22 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ converts this USD to CHF correctly  0.01 ms [really-safe-money-gen]  ✓ produces valid amounts  267.02 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 202504 [really-safe-money-gen]  Passed: 346 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 9.26 seconds [really-safe-money-gen]  Test suite took:  9.27 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ListLit at src/Money/ConversionRate.hs:37:7-8: [really-safe-money-gen] @@ -34,7 +34,7 @@ [really-safe-money-gen]  instance Validity ConversionRate where [really-safe-money-gen]  validate cr@(ConversionRate r) = [really-safe-money-gen]  mconcat [really-safe-money-gen] - [ genericValidate cr, [really-safe-money-gen] + [ genericValidate cr, [really-safe-money-gen]  declare "The rate is nonzero" $ numerator r /= 0 [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.ConversionRateSpec [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  68.94 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  80.08 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  18.37 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  45.24 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  18.55 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  63.45 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  5270.17 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  21.30 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  GenValid ConversionRate [really-safe-money-gen]  genValid :: Gen ConversionRate [really-safe-money-gen]  ✓ only generates valid 'ConversionRate's  20.69 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen] Money.AccountSpec [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ succeeds in converting 1:1 without rounding if the quantisation factor is the same  85.69 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ produces valid amounts  196.65 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ converts this USD to CHF correctly  0.01 ms [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ computes a rate that can be used to do a conversion without rounding  143.66 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  54.35 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ computes this USD to CHF rate correctly  0.01 ms [really-safe-money-gen] Money.AccountOfSpec [really-safe-money-gen]  USD [really-safe-money-gen]  USD [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.74 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.44 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.68 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.15 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.10 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.25 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.99 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.81 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.58 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  USD [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.80 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.22 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.73 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.07 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.22 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.70 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.22 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  USD [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.24 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.37 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.87 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.24 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.25 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.86 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.98 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.17 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  CHF [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.89 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.26 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.32 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.75 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.13 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.83 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  BTC [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.11 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.17 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.93 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.25 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.43 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.93 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.22 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.17 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen] Money.ConversionRateOfSpec [really-safe-money-gen]  INR [really-safe-money-gen]  ADA [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.33 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.11 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf INR ADA) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf INR ADA) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf INR ADA)'s  0.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  0.98 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.43 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.14 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.14 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  57.77 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.59 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.44 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.56 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.55 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.67 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  0.80 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  58.91 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf INR BTC) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf INR BTC) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf INR BTC)'s  0.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  1.13 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  57.02 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.77 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.44 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.66 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.17 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf INR CHF) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf INR CHF) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf INR CHF)'s  0.50 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  GenValid (ConversionRateOf INR USD) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf INR USD) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf INR USD)'s  0.13 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  0.51 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.43 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.15 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.74 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  59.64 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.62 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.46 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.50 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf INR INR) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf INR INR) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf INR INR)'s  0.52 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  0.50 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  60.58 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.17 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.11 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.15 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.41 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  USD [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.11 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.75 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.17 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  0.56 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.66 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf ADA USD) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf ADA USD) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf ADA USD)'s  0.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  58.48 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.48 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  56.76 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.67 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.22 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.99 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.67 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.39 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.14 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf ADA CHF) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf ADA CHF) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf ADA CHF)'s  0.56 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  GenValid (ConversionRateOf ADA ADA) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf ADA ADA) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf ADA ADA)'s  0.13 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.11 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.32 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.13 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.94 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.53 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  0.47 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  61.25 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  59.15 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.51 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf ADA BTC) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf ADA BTC) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf ADA BTC)'s  0.14 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.45 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.83 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.13 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.11 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.32 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  GenValid (ConversionRateOf ADA INR) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf ADA INR) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf ADA INR)'s  0.13 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  1.01 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.45 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.29 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.15 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  0.51 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  61.93 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.11 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  BTC [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.93 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.56 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  0.51 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  57.14 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.17 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.30 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.52 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf CHF BTC) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf CHF BTC) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf CHF BTC)'s  0.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  0.46 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  57.48 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.11 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.30 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.15 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf CHF ADA) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf CHF ADA) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf CHF ADA)'s  0.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  1.08 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.74 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf CHF USD) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf CHF USD) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf CHF USD)'s  0.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  58.91 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.65 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  1.13 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.44 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.11 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.35 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  GenValid (ConversionRateOf CHF CHF) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf CHF CHF) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf CHF CHF)'s  0.17 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  63.13 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.48 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  1.02 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.47 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.15 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.13 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.34 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.21 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.66 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.45 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  0.70 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  58.75 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf CHF INR) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf CHF INR) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf CHF INR)'s  0.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.61 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.95 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  CHF [really-safe-money-gen]  GenValid (ConversionRateOf USD CHF) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf USD CHF) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf USD CHF)'s  0.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.14 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  65.41 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.71 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.59 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.74 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.77 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.41 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  1.01 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  69.36 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.96 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.74 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.15 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf USD USD) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf USD USD) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf USD USD)'s  0.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  0.63 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  66.58 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.21 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.99 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.58 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.45 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf USD INR) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf USD INR) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf USD INR)'s  0.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.79 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.17 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  0.69 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.60 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf USD BTC) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf USD BTC) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf USD BTC)'s  0.56 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.14 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  70.47 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.22 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  GenValid (ConversionRateOf USD ADA) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf USD ADA) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf USD ADA)'s  0.27 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.29 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  73.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.65 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.39 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  1.07 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.61 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  ADA [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.38 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  1.07 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  61.03 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.71 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf BTC ADA) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf BTC ADA) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf BTC ADA)'s  0.13 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  0.51 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.46 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.40 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  57.43 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.64 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.39 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.11 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf BTC USD) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf BTC USD) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf BTC USD)'s  0.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.52 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf BTC INR) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf BTC INR) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf BTC INR)'s  0.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  0.55 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  62.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.68 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.63 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.59 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.33 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.13 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf BTC CHF) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf BTC CHF) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf BTC CHF)'s  0.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  0.59 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  62.37 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.13 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.41 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  1.00 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.52 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  0.61 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.83 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.13 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf BTC BTC) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf BTC BTC) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf BTC BTC)'s  0.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  0.50 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  64.02 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.38 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.11 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen] Money.AmountOfSpec [really-safe-money-gen]  USD [really-safe-money-gen]  CHF [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.11 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.68 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.34 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.29 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.28 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.96 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.28 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.22 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  BTC [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.84 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.05 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.85 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.30 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.29 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.23 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.21 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.73 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  ADA [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.26 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.67 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.21 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.30 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.30 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.96 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.23 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.29 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  INR [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.29 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.79 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.21 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.70 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.46 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts Testing mutation ListLit at src/Money/ConversionRate.hs:37:7-8: [really-safe-money-gen] @@ -34,7 +34,7 @@ [really-safe-money-gen]  instance Validity ConversionRate where [really-safe-money-gen]  validate cr@(ConversionRate r) = [really-safe-money-gen]  mconcat [really-safe-money-gen] - [ genericValidate cr, [really-safe-money-gen] + [ genericValidate cr, [really-safe-money-gen]  declare "The rate is nonzero" $ numerator r /= 0 [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]   0.45 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.34 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  INR [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.34 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.24 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.69 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.29 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.15 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.21 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.67 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen] Money.AmountSpec [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid conversion rates  57.38 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ computes a rate that can be used to do a conversion without rounding  212.63 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ computes this USD to CHF rate correctly  0.01 ms [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ succeeds in converting 1:1 without rounding if the quantisation factor is the same  75.80 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ converts this USD to CHF correctly  0.01 ms [really-safe-money-gen]  ✓ produces valid amounts  181.58 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 202504 [really-safe-money-gen]  Passed: 346 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 8.30 seconds [really-safe-money-gen]  Test suite took:  8.31 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ListLit at src/Money/ConversionRate.hs:37:7-8: [really-safe-money-gen] @@ -34,7 +34,7 @@ [really-safe-money-gen]  instance Validity ConversionRate where [really-safe-money-gen]  validate cr@(ConversionRate r) = [really-safe-money-gen]  mconcat [really-safe-money-gen] - [ genericValidate cr, [really-safe-money-gen] + [ genericValidate cr, [really-safe-money-gen]  declare "The rate is nonzero" $ numerator r /= 0 [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.ConversionRateSpec [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  58.64 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  74.26 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  17.89 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  42.82 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  17.74 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  62.57 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  5325.56 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  19.13 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  GenValid ConversionRate [really-safe-money-gen]  genValid :: Gen ConversionRate [really-safe-money-gen]  ✓ only generates valid 'ConversionRate's  18.68 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen] Money.AccountSpec [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ succeeds in converting 1:1 without rounding if the quantisation factor is the same  78.56 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ produces valid amounts  188.41 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ converts this USD to CHF correctly  0.02 ms [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ computes a rate that can be used to do a conversion without rounding  140.23 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  51.83 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ computes this USD to CHF rate correctly  0.01 ms [really-safe-money-gen] Money.AccountOfSpec [really-safe-money-gen]  USD [really-safe-money-gen]  USD [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.97 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.59 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.23 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.76 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.17 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.21 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.24 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.95 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.02 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.65 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  USD [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.89 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.26 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.15 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.10 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.81 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.01 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.69 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.26 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  USD [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.24 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.31 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.80 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.10 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.73 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.10 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.17 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  CHF [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.78 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.17 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.63 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.25 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.29 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.33 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.25 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.88 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.24 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  BTC [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.83 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.40 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.25 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.24 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.01 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.24 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen] Money.ConversionRateOfSpec [really-safe-money-gen]  INR [really-safe-money-gen]  ADA [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.29 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.14 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf INR ADA) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf INR ADA) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf INR ADA)'s  0.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  1.00 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.45 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.15 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.11 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  62.82 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.73 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.34 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.11 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.48 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.13 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.46 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.64 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  0.80 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  60.94 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf INR BTC) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf INR BTC) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf INR BTC)'s  0.28 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  0.95 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  58.84 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.78 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.66 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.74 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf INR CHF) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf INR CHF) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf INR CHF)'s  0.47 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  GenValid (ConversionRateOf INR USD) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf INR USD) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf INR USD)'s  0.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  0.59 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.66 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.85 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.15 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  59.93 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.55 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.49 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.82 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf INR INR) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf INR INR) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf INR INR)'s  0.55 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  0.67 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  59.40 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.15 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.14 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.42 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  USD [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.17 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.77 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  0.73 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.47 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf ADA USD) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf ADA USD) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf ADA USD)'s  0.15 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  58.96 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.61 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  58.24 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.59 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  1.13 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.82 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.39 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf ADA CHF) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf ADA CHF) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf ADA CHF)'s  0.54 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.17 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  GenValid (ConversionRateOf ADA ADA) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf ADA ADA) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf ADA ADA)'s  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.29 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.89 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.55 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  0.48 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  66.37 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  67.34 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.76 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf ADA BTC) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf ADA BTC) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf ADA BTC)'s  0.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.15 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.65 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.27 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.28 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.23 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.52 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  GenValid (ConversionRateOf ADA INR) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf ADA INR) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf ADA INR)'s  0.21 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  1.09 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.68 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.37 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  0.72 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  70.60 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  BTC [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.98 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.80 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  0.73 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  69.94 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.22 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.47 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.63 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf CHF BTC) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf CHF BTC) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf CHF BTC)'s  0.21 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  0.60 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  72.01 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.21 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.46 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.21 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf CHF ADA) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf CHF ADA) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf CHF ADA)'s  0.17 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  1.07 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.87 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf CHF USD) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf CHF USD) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf CHF USD)'s  0.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  59.17 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.80 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.21 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  1.15 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.53 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.40 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  GenValid (ConversionRateOf CHF CHF) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf CHF CHF) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf CHF CHF)'s  0.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  68.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.68 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  1.27 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.66 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.17 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.47 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.61 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.45 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  0.70 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  61.61 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf CHF INR) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf CHF INR) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf CHF INR)'s  0.14 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.46 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.87 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  CHF [really-safe-money-gen]  GenValid (ConversionRateOf USD CHF) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf USD CHF) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf USD CHF)'s  0.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.11 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  55.90 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.78 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.53 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.71 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.72 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.28 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.13 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  0.86 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  59.53 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.14 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.90 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.51 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf USD USD) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf USD USD) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf USD USD)'s  0.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  0.50 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  62.99 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.13 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.94 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.73 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.44 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf USD INR) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf USD INR) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf USD INR)'s  0.15 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.81 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  0.75 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.62 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf USD BTC) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf USD BTC) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf USD BTC)'s  0.54 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.13 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  61.89 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  1.10 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  GenValid (ConversionRateOf USD ADA) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf USD ADA) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf USD ADA)'s  0.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  64.21 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.52 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.32 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  0.97 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.45 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  ADA [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.11 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.31 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  0.86 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  52.90 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.13 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.44 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf BTC ADA) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf BTC ADA) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf BTC ADA)'s  0.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  0.52 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  0.43 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.42 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.77 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  51.52 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.48 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.30 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.11 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf BTC USD) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf BTC USD) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf BTC USD)'s  0.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.42 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf BTC INR) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf BTC INR) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf BTC INR)'s  0.11 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  0.46 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  59.25 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.13 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.56 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.55 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.47 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.34 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf BTC CHF) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf BTC CHF) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf BTC CHF)'s  0.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  0.50 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  63.97 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.14 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ produces valid conversion rates  0.13 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRatio  0.30 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  0.92 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.51 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  invert [really-safe-money-gen]  ✓ produces valid rates  0.13 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Rational [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ produces valid conversion rates  0.72 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toRational  1.04 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  compose [really-safe-money-gen]  ✓ produces valid rates  0.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  GenValid (ConversionRateOf BTC BTC) [really-safe-money-gen]  genValid :: Gen (ConversionRateOf BTC BTC) [really-safe-money-gen]  ✓ only generates valid '(ConversionRateOf BTC BTC)'s  0.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid conversion rates  0.70 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ roundtrips with toDecimalLiteral  64.92 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Ratio [really-safe-money-gen]  fromRatio [really-safe-money-gen]  ✓ roundtrips with toRatio  0.54 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ✓ produces valid conversion rates  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen] Money.AmountOfSpec [really-safe-money-gen]  USD [really-safe-money-gen]  CHF [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.25 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.36 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.05 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.31 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.33 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.22 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.32 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.79 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.14 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.27 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  BTC [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.73 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.99 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.95 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.30 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.31 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.51 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.28 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.87 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  ADA [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.21 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.62 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.23 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.36 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.25 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.92 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.28 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.25 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  INR [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.21 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.70 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.21 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.19Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:396:23-27: [really-safe-money-gen] @@ -393,5 +393,5 @@ [really-safe-money-gen]  DecimalLiteral mS m e -> DecimalLiteral (go mS) m e [really-safe-money-gen]  where [really-safe-money-gen]  go = \case [really-safe-money-gen] - Nothing -> Just True [really-safe-money-gen] + Nothing -> Just True [really-safe-money-gen]  s -> s [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:396:23-27: [really-safe-money-gen] @@ -393,5 +393,5 @@ [really-safe-money-gen]  DecimalLiteral mS m e -> DecimalLiteral (go mS) m e [really-safe-money-gen]  where [really-safe-money-gen]  go = \case [really-safe-money-gen] - Nothing -> Just True [really-safe-money-gen] + Nothing -> Just False [really-safe-money-gen]  s -> s [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Numeric/DecimalLiteral.hs:396:23-27: [really-safe-money-gen] @@ -393,5 +393,5 @@ [really-safe-money-gen]  DecimalLiteral mS m e -> DecimalLiteral (go mS) m e [really-safe-money-gen]  where [really-safe-money-gen]  go = \case [really-safe-money-gen] - Nothing -> Just True [really-safe-money-gen] + Nothing -> Just not (True) [really-safe-money-gen]  s -> s [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:368:10-39: [really-safe-money-gen] @@ -365,7 +365,7 @@ [really-safe-money-gen]  setMinimumDigits wantedDigits dl = [really-safe-money-gen]  let currentDigits :: Word8 [really-safe-money-gen]  currentDigits = digits dl [really-safe-money-gen] - in if wantedDigits <= currentDigits [really-safe-money-gen] + in if True [really-safe-money-gen]  then dl [really-safe-money-gen]  else increaseDigits (wantedDigits - currentDigits) dl [really-safe-money-gen]  where [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:368:10-39: [really-safe-money-gen] @@ -365,7 +365,7 @@ [really-safe-money-gen]  setMinimumDigits wantedDigits dl = [really-safe-money-gen]  let currentDigits :: Word8 [really-safe-money-gen]  currentDigits = digits dl [really-safe-money-gen] - in if wantedDigits <= currentDigits [really-safe-money-gen] + in if False [really-safe-money-gen]  then dl [really-safe-money-gen]  else increaseDigits (wantedDigits - currentDigits) dl [really-safe-money-gen]  where [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Numeric/DecimalLiteral.hs:368:10-39: [really-safe-money-gen] @@ -365,7 +365,7 @@ [really-safe-money-gen]  setMinimumDigits wantedDigits dl = [really-safe-money-gen]  let currentDigits :: Word8 [really-safe-money-gen]  currentDigits = digits dl [really-safe-money-gen] - in if wantedDigits <= currentDigits [really-safe-money-gen] + in if not (wantedDigits <= currentDigits) [really-safe-money-gen]  then dl [really-safe-money-gen]  else increaseDigits (wantedDigits - currentDigits) dl [really-safe-money-gen]  where [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Numeric/DecimalLiteral.hs:368:7-62: [really-safe-money-gen] @@ -365,7 +365,7 @@ [really-safe-money-gen]  setMinimumDigits wantedDigits dl = [really-safe-money-gen]  let currentDigits :: Word8 [really-safe-money-gen]  currentDigits = digits dl [really-safe-money-gen] - in if wantedDigits <= currentDigits [really-safe-money-gen] + in if wantedDigits <= currentDigits [really-safe-money-gen]  then dl [really-safe-money-gen]  else increaseDigits (wantedDigits - currentDigits) dl [really-safe-money-gen]  where [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:375:80-82: [really-safe-money-gen] @@ -372,7 +372,7 @@ [really-safe-money-gen]  increaseDigits :: Word8 -> DecimalLiteral -> DecimalLiteral [really-safe-money-gen]  increaseDigits 0 = id [really-safe-money-gen]  increaseDigits w = \case [really-safe-money-gen] - DecimalLiteral mS m e -> increaseDigits (pred w) (DecimalLiteral mS (m * 10) (succ e)) [really-safe-money-gen] + DecimalLiteral mS m e -> increaseDigits (pred w) (DecimalLiteral mS (m * 0) (succ e)) [really-safe-money-gen]  [really-safe-money-gen]  -- | Ensures that a positive literal has no sign [really-safe-money-gen]  -- [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:375:80-82: [really-safe-money-gen] @@ -372,7 +372,7 @@ [really-safe-money-gen]  increaseDigits :: Word8 -> DecimalLiteral -> DecimalLiteral [really-safe-money-gen]  increaseDigits 0 = id [really-safe-money-gen]  increaseDigits w = \case [really-safe-money-gen] - DecimalLiteral mS m e -> increaseDigits (pred w) (DecimalLiteral mS (m * 10) (succ e)) [really-safe-money-gen] + DecimalLiteral mS m e -> increaseDigits (pred w) (DecimalLiteral mS (m * 1) (succ e)) [really-safe-money-gen]  [really-safe-money-gen]  -- | Ensures that a positive literal has no sign [really-safe-money-gen]  -- [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:337:21-22: [really-safe-money-gen] @@ -334,7 +334,7 @@ [really-safe-money-gen]  pure $ fromIntegral n [really-safe-money-gen]  [really-safe-money-gen]  numSign :: (Ord a, Num a) => a -> Maybe Bool [really-safe-money-gen] -numSign a = if a >= 0 then Nothing else Just False [really-safe-money-gen] +numSign a = if a >= 1 then Nothing else Just False [really-safe-money-gen]  [really-safe-money-gen]  signSignum :: (Num a) => Maybe Bool -> (a -> a) [really-safe-money-gen]  signSignum = \case [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:337:16-22: [really-safe-money-gen] @@ -334,7 +334,7 @@ [really-safe-money-gen]  pure $ fromIntegral n [really-safe-money-gen]  [really-safe-money-gen]  numSign :: (Ord a, Num a) => a -> Maybe Bool [really-safe-money-gen] -numSign a = if a >= 0 then Nothing else Just False [really-safe-money-gen] +numSign a = if True then Nothing else Just False [really-safe-money-gen]  [really-safe-money-gen]  signSignum :: (Num a) => Maybe Bool -> (a -> a) [really-safe-money-gen]  signSignum = \case [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:337:16-22: [really-safe-money-gen] @@ -334,7 +334,7 @@ [really-safe-money-gen]  pure $ fromIntegral n [really-safe-money-gen]  [really-safe-money-gen]  numSign :: (Ord a, Num a) => a -> Maybe Bool [really-safe-money-gen] -numSign a = if a >= 0 then Nothing else Just False [really-safe-money-gen] +numSign a = if False then Nothing else Just False [really-safe-money-gen]  [really-safe-money-gen]  signSignum :: (Num a) => Maybe Bool -> (a -> a) [really-safe-money-gen]  signSignum = \case [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Numeric/DecimalLiteral.hs:337:16-22: [really-safe-money-gen] @@ -334,7 +334,7 @@ [really-safe-money-gen]  pure $ fromIntegral n [really-safe-money-gen]  [really-safe-money-gen]  numSign :: (Ord a, Num a) => a -> Maybe Bool [really-safe-money-gen] -numSign a = if a >= 0 then Nothing else Just False [really-safe-money-gen] +numSign a = if not (a >= 0) then Nothing else Just False [really-safe-money-gen]  [really-safe-money-gen]  signSignum :: (Num a) => Maybe Bool -> (a -> a) [really-safe-money-gen]  signSignum = \case [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:337:46-51: [really-safe-money-gen] @@ -334,7 +334,7 @@ [really-safe-money-gen]  pure $ fromIntegral n [really-safe-money-gen]  [really-safe-money-gen]  numSign :: (Ord a, Num a) => a -> Maybe Bool [really-safe-money-gen] -numSign a = if a >= 0 then Nothing else Just False [really-safe-money-gen] +numSign a = if a >= 0 then Nothing else Just True [really-safe-money-gen]  [really-safe-money-gen]  signSignum :: (Num a) => Maybe Bool -> (a -> a) [really-safe-money-gen]  signSignum = \case [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:337:46-51: [really-safe-money-gen] @@ -334,7 +334,7 @@ [really-safe-money-gen]  pure $ fromIntegral n [really-safe-money-gen]  [really-safe-money-gen]  numSign :: (Ord a, Num a) => a -> Maybe Bool [really-safe-money-gen] -numSign a = if a >= 0 then Nothing else Just False [really-safe-money-gen] +numSign a = if a >= 0 then Nothing else Just False [really-safe-money-gen]  [really-safe-money-gen]  signSignum :: (Num a) => Maybe Bool -> (a -> a) [really-safe-money-gen]  signSignum = \case [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Numeric/DecimalLiteral.hs:337:46-51: [really-safe-money-gen] @@ -334,7 +334,7 @@ [really-safe-money-gen]  pure $ fromIntegral n [really-safe-money-gen]  [really-safe-money-gen]  numSign :: (Ord a, Num a) => a -> Maybe Bool [really-safe-money-gen] -numSign a = if a >= 0 then Nothing else Just False [really-safe-money-gen] +numSign a = if a >= 0 then Nothing else Just not (False) [really-safe-money-gen]  [really-safe-money-gen]  signSignum :: (Num a) => Maybe Bool -> (a -> a) [really-safe-money-gen]  signSignum = \case [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Numeric/DecimalLiteral.hs:337:13-51: [really-safe-money-gen] @@ -334,7 +334,7 @@ [really-safe-money-gen]  pure $ fromIntegral n [really-safe-money-gen]  [really-safe-money-gen]  numSign :: (Ord a, Num a) => a -> Maybe Bool [really-safe-money-gen] -numSign a = if a >= 0 then Nothing else Just False [really-safe-money-gen] +numSign a = if a >= 0 then Nothing else Just False [really-safe-money-gen]  [really-safe-money-gen]  signSignum :: (Num a) => Maybe Bool -> (a -> a) [really-safe-money-gen]  signSignum = \case [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:332:11-46: [really-safe-money-gen] @@ -329,7 +329,7 @@ [really-safe-money-gen]  toInt :: DecimalLiteral -> Maybe Int [really-safe-money-gen]  toInt dl = do [really-safe-money-gen]  n <- toInteger dl [really-safe-money-gen] - guard $ n <= fromIntegral (maxBound :: Int) [really-safe-money-gen] + guard $ True [really-safe-money-gen]  guard $ n >= fromIntegral (minBound :: Int) [really-safe-money-gen]  pure $ fromIntegral n [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.17 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.75 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.23 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.30 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.01 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.27 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  INR [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.15 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  USD [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.67 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.17 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  0.67 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid amounts  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ produces valid amounts  1.24 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen] Money.AmountSpec [really-safe-money-gen]  rate [really-safe-money-gen]  ✓ produces valid conversion rates  57.40 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ computes a rate that can be used to do a conversion without rounding  209.41 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ computes this USD to CHF rate correctly  0.01 ms [really-safe-money-gen]  convert [really-safe-money-gen]  ✓ succeeds in converting 1:1 without rounding if the quantisation factor is the same  72.19 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ converts this USD to CHF correctly  0.01 ms [really-safe-money-gen]  ✓ produces valid amounts  193.15 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 202504 [really-safe-money-gen]  Passed: 346 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 8.33 seconds [really-safe-money-gen]  Test suite took:  8.34 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:396:23-27: [really-safe-money-gen] @@ -393,5 +393,5 @@ [really-safe-money-gen]  DecimalLiteral mS m e -> DecimalLiteral (go mS) m e [really-safe-money-gen]  where [really-safe-money-gen]  go = \case [really-safe-money-gen] - Nothing -> Just True [really-safe-money-gen] + Nothing -> Just True [really-safe-money-gen]  s -> s [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Numeric.DecimalLiteralSpec [really-safe-money-gen]  setSignRequired [really-safe-money-gen]  ✓ produces valid values  0.71 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 100 [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.00 seconds [really-safe-money-gen]  Test suite took:  0.00 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:396:23-27: [really-safe-money-gen] @@ -393,5 +393,5 @@ [really-safe-money-gen]  DecimalLiteral mS m e -> DecimalLiteral (go mS) m e [really-safe-money-gen]  where [really-safe-money-gen]  go = \case [really-safe-money-gen] - Nothing -> Just True [really-safe-money-gen] + Nothing -> Just False [really-safe-money-gen]  s -> s [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Numeric.DecimalLiteralSpec [really-safe-money-gen]  setSignRequired [really-safe-money-gen]  ✓ produces valid values  0.35 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 100 [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.00 seconds [really-safe-money-gen]  Test suite took:  0.00 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Numeric/DecimalLiteral.hs:396:23-27: [really-safe-money-gen] @@ -393,5 +393,5 @@ [really-safe-money-gen]  DecimalLiteral mS m e -> DecimalLiteral (go mS) m e [really-safe-money-gen]  where [really-safe-money-gen]  go = \case [really-safe-money-gen] - Nothing -> Just True [really-safe-money-gen] + Nothing -> Just not (True) [really-safe-money-gen]  s -> s [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Numeric.DecimalLiteralSpec [really-safe-money-gen]  setSignRequired [really-safe-money-gen]  ✓ produces valid values  0.28 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 100 [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.00 seconds [really-safe-money-gen]  Test suite took:  0.00 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:337:21-22: [really-safe-money-gen] @@ -334,7 +334,7 @@ [really-safe-money-gen]  pure $ fromIntegral n [really-safe-money-gen]  [really-safe-money-gen]  numSign :: (Ord a, Num a) => a -> Maybe Bool [really-safe-money-gen] -numSign a = if a >= 0 then Nothing else Just False [really-safe-money-gen] +numSign a = if a >= 1 then Nothing else Just False [really-safe-money-gen]  [really-safe-money-gen]  signSignum :: (Num a) => Maybe Bool -> (a -> a) [really-safe-money-gen]  signSignum = \case [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Numeric.DecimalLiteralSpec [really-safe-money-gen]  Int [really-safe-money-gen]  fromInt [really-safe-money-gen]  ✓ can parse any rendered literal  0.68 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 100 [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.00 seconds [really-safe-money-gen]  Test suite took:  0.00 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:332:11-46: [really-safe-money-gen] @@ -329,7 +329,7 @@ [really-safe-money-gen]  toInt :: DecimalLiteral -> Maybe Int [really-safe-money-gen]  toInt dl = do [really-safe-money-gen]  n <- toInteger dl [really-safe-money-gen] - guard $ n <= fromIntegral (maxBound :: Int) [really-safe-money-gen] + guard $ True [really-safe-money-gen]  guard $ n >= fromIntegral (minBound :: Int) [really-safe-money-gen]  pure $ fromIntegral n [really-safe-money-gen]  [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Numeric.DecimalLiteralSpec [really-safe-money-gen]  Int [really-safe-money-gen]  toInt [really-safe-money-gen]  ✓ renders to valid words  0.75 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  fromInt [really-safe-money-gen]  ✓ Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:332:11-46: [really-safe-money-gen] @@ -329,7 +329,7 @@ [really-safe-money-gen]  toInt :: DecimalLiteral -> Maybe Int [really-safe-money-gen]  toInt dl = do [really-safe-money-gen]  n <- toInteger dl [really-safe-money-gen] - guard $ n <= fromIntegral (maxBound :: Int) [really-safe-money-gen] + guard $ False [really-safe-money-gen]  guard $ n >= fromIntegral (minBound :: Int) [really-safe-money-gen]  pure $ fromIntegral n [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Numeric/DecimalLiteral.hs:332:11-46: [really-safe-money-gen] @@ -329,7 +329,7 @@ [really-safe-money-gen]  toInt :: DecimalLiteral -> Maybe Int [really-safe-money-gen]  toInt dl = do [really-safe-money-gen]  n <- toInteger dl [really-safe-money-gen] - guard $ n <= fromIntegral (maxBound :: Int) [really-safe-money-gen] + guard $ not (n <= fromIntegral (maxBound :: Int)) [really-safe-money-gen]  guard $ n >= fromIntegral (minBound :: Int) [really-safe-money-gen]  pure $ fromIntegral n [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:333:11-46: [really-safe-money-gen] @@ -330,7 +330,7 @@ [really-safe-money-gen]  toInt dl = do [really-safe-money-gen]  n <- toInteger dl [really-safe-money-gen]  guard $ n <= fromIntegral (maxBound :: Int) [really-safe-money-gen] - guard $ n >= fromIntegral (minBound :: Int) [really-safe-money-gen] + guard $ True [really-safe-money-gen]  pure $ fromIntegral n [really-safe-money-gen]  [really-safe-money-gen]  numSign :: (Ord a, Num a) => a -> Maybe Bool [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:333:11-46: [really-safe-money-gen] @@ -330,7 +330,7 @@ [really-safe-money-gen]  toInt dl = do [really-safe-money-gen]  n <- toInteger dl [really-safe-money-gen]  guard $ n <= fromIntegral (maxBound :: Int) [really-safe-money-gen] - guard $ n >= fromIntegral (minBound :: Int) [really-safe-money-gen] + guard $ False [really-safe-money-gen]  pure $ fromIntegral n [really-safe-money-gen]  [really-safe-money-gen]  numSign :: (Ord a, Num a) => a -> Maybe Bool [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Numeric/DecimalLiteral.hs:333:11-46: [really-safe-money-gen] @@ -330,7 +330,7 @@ [really-safe-money-gen]  toInt dl = do [really-safe-money-gen]  n <- toInteger dl [really-safe-money-gen]  guard $ n <= fromIntegral (maxBound :: Int) [really-safe-money-gen] - guard $ n >= fromIntegral (minBound :: Int) [really-safe-money-gen] + guard $ not (n >= fromIntegral (minBound :: Int)) [really-safe-money-gen]  pure $ fromIntegral n [really-safe-money-gen]  [really-safe-money-gen]  numSign :: (Ord a, Num a) => a -> Maybe Bool [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:315:67-68: [really-safe-money-gen] @@ -312,7 +312,7 @@ [really-safe-money-gen]  [really-safe-money-gen]  -- | Construct a 'DecimalLiteral' from an 'Integer' [really-safe-money-gen]  fromInteger :: Integer -> DecimalLiteral [really-safe-money-gen] -fromInteger n = DecimalLiteral (numSign n) (fromIntegral (abs n)) 0 [really-safe-money-gen] +fromInteger n = DecimalLiteral (numSign n) (fromIntegral (abs n)) 1 [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn a 'DecimalLiteral' into an 'Integer' [really-safe-money-gen]  toInteger :: DecimalLiteral -> Maybe Integer [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:304:42-43: [really-safe-money-gen] @@ -301,7 +301,7 @@ [really-safe-money-gen]  [really-safe-money-gen]  -- | Construct a 'DecimalLiteral' from a 'Natural' [really-safe-money-gen]  fromNatural :: Natural -> DecimalLiteral [really-safe-money-gen] -fromNatural n = DecimalLiteral Nothing n 0 [really-safe-money-gen] +fromNatural n = DecimalLiteral Nothing n 1 [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn a 'DecimalLiteral' into a 'Natural' [really-safe-money-gen]  toNatural :: DecimalLiteral -> Maybe Natural [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:299:11-47: [really-safe-money-gen] @@ -296,7 +296,7 @@ [really-safe-money-gen]  toWord :: DecimalLiteral -> Maybe Word [really-safe-money-gen]  toWord dl = do [really-safe-money-gen]  n <- toNatural dl [really-safe-money-gen] - guard $ n <= fromIntegral (maxBound :: Word) [really-safe-money-gen] + guard $ True [really-safe-money-gen]  pure $ fromIntegral n [really-safe-money-gen]  [really-safe-money-gen]  -- | Construct a 'DecimalLiteral' from a 'Natural' [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:299:11-47: [really-safe-money-gen] @@ -296,7 +296,7 @@ [really-safe-money-gen]  toWord :: DecimalLiteral -> Maybe Word [really-safe-money-gen]  toWord dl = do [really-safe-money-gen]  n <- toNatural dl [really-safe-money-gen] - guard $ n <= fromIntegral (maxBound :: Word) [really-safe-money-gen] + guard $ False [really-safe-money-gen]  pure $ fromIntegral n [really-safe-money-gen]  [really-safe-money-gen]  -- | Construct a 'DecimalLiteral' from a 'Natural' [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Numeric/DecimalLiteral.hs:299:11-47: [really-safe-money-gen] @@ -296,7 +296,7 @@ [really-safe-money-gen]  toWord :: DecimalLiteral -> Maybe Word [really-safe-money-gen]  toWord dl = do [really-safe-money-gen]  n <- toNatural dl [really-safe-money-gen] - guard $ n <= fromIntegral (maxBound :: Word) [really-safe-money-gen] + guard $ not (n <= fromIntegral (maxBound :: Word)) [really-safe-money-gen]  pure $ fromIntegral n [really-safe-money-gen]  [really-safe-money-gen]  -- | Construct a 'DecimalLiteral' from a 'Natural' [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:289:33-35: [really-safe-money-gen] @@ -286,7 +286,7 @@ [really-safe-money-gen]  toRatio :: DecimalLiteral -> Maybe (Ratio Natural) [really-safe-money-gen]  toRatio (DecimalLiteral mSign m e) = case mSign of [really-safe-money-gen]  Just False -> Nothing [really-safe-money-gen] - _ -> Just $ fromIntegral m / (10 ^ e) [really-safe-money-gen] + _ -> Just $ fromIntegral m / (0 ^ e) [really-safe-money-gen]  [really-safe-money-gen]  -- | Construct a 'DecimalLiteral' from a 'Word' [really-safe-money-gen]  fromWord :: Word -> DecimalLiteral [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:289:33-35: [really-safe-money-gen] @@ -286,7 +286,7 @@ [really-safe-money-gen]  toRatio :: DecimalLiteral -> Maybe (Ratio Natural) [really-safe-money-gen]  toRatio (DecimalLiteral mSign m e) = case mSign of [really-safe-money-gen]  Just False -> Nothing [really-safe-money-gen] - _ -> Just $ fromIntegral m / (10 ^ e) [really-safe-money-gen] + _ -> Just $ fromIntegral m / (1 ^ e) [really-safe-money-gen]  [really-safe-money-gen]  -- | Construct a 'DecimalLiteral' from a 'Word' [really-safe-money-gen]  fromWord :: Word -> DecimalLiteral [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:289:33-35: [really-safe-money-gen] @@ -286,7 +286,7 @@ [really-safe-money-gen]  toRatio :: DecimalLiteral -> Maybe (Ratio Natural) [really-safe-money-gen]  toRatio (DecimalLiteral mSign m e) = case mSign of [really-safe-money-gen]  Just False -> Nothing [really-safe-money-gen] - _ -> Just $ fromIntegral m / (10 ^ e) [really-safe-money-gen] + _ -> Just $ fromIntegral m / (-10 ^ e) [really-safe-money-gen]  [really-safe-money-gen]  -- | Construct a 'DecimalLiteral' from a 'Word' [really-safe-money-gen]  fromWord :: Word -> DecimalLiteral [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:236:41-44: [really-safe-money-gen] @@ -233,7 +233,7 @@ [really-safe-money-gen]  -- >>> fromRatio (1 % 3) [really-safe-money-gen]  -- Nothing [really-safe-money-gen]  fromRatio :: Ratio Natural -> Maybe DecimalLiteral [really-safe-money-gen] -fromRatio = fromRationalRepetendLimited 256 [really-safe-money-gen] +fromRatio = fromRationalRepetendLimited 0 [really-safe-money-gen]  where [really-safe-money-gen]  fromRationalRepetendLimited :: [really-safe-money-gen]  -- limit [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:236:41-44: [really-safe-money-gen] @@ -233,7 +233,7 @@ [really-safe-money-gen]  -- >>> fromRatio (1 % 3) [really-safe-money-gen]  -- Nothing [really-safe-money-gen]  fromRatio :: Ratio Natural -> Maybe DecimalLiteral [really-safe-money-gen] -fromRatio = fromRationalRepetendLimited 256 [really-safe-money-gen] +fromRatio = fromRationalRepetendLimited 1 [really-safe-money-gen]  where [really-safe-money-gen]  fromRationalRepetendLimited :: [really-safe-money-gen]  -- limit [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:236:41-44: [really-safe-money-gen] @@ -233,7 +233,7 @@ [really-safe-money-gen]  -- >>> fromRatio (1 % 3) [really-safe-money-gen]  -- Nothing [really-safe-money-gen]  fromRatio :: Ratio Natural -> Maybe DecimalLiteral [really-safe-money-gen] -fromRatio = fromRationalRepetendLimited 256 [really-safe-money-gen] +fromRatio = fromRationalRepetendLimited -256 [really-safe-money-gen]  where [really-safe-money-gen]  fromRationalRepetendLimited :: [really-safe-money-gen]  -- limit [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:244:14-15: [really-safe-money-gen] @@ -241,7 +241,7 @@ [really-safe-money-gen]  Ratio Natural -> [really-safe-money-gen]  Maybe DecimalLiteral [really-safe-money-gen]  fromRationalRepetendLimited l rational [really-safe-money-gen] - | d == 0 = Nothing [really-safe-money-gen] + | d == 1 = Nothing [really-safe-money-gen]  | otherwise = toLiteral Nothing <$> longDiv num [really-safe-money-gen]  where [really-safe-money-gen]  toLiteral mSign (m, e) = DecimalLiteral mSign m (fromIntegral e) [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:244:9-15: [really-safe-money-gen] @@ -241,7 +241,7 @@ [really-safe-money-gen]  Ratio Natural -> [really-safe-money-gen]  Maybe DecimalLiteral [really-safe-money-gen]  fromRationalRepetendLimited l rational [really-safe-money-gen] - | d == 0 = Nothing [really-safe-money-gen] + | True = Nothing [really-safe-money-gen]  | otherwise = toLiteral Nothing <$> longDiv num [really-safe-money-gen]  where [really-safe-money-gen]  toLiteral mSign (m, e) = DecimalLiteral mSign m (fromIntegral e) [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:244:9-15: [really-safe-money-gen] @@ -241,7 +241,7 @@ [really-safe-money-gen]  Ratio Natural -> [really-safe-money-gen]  Maybe DecimalLiteral [really-safe-money-gen]  fromRationalRepetendLimited l rational [really-safe-money-gen] - | d == 0 = Nothing [really-safe-money-gen] + | False = Nothing [really-safe-money-gen]  | otherwise = toLiteral Nothing <$> longDiv num [really-safe-money-gen]  where [really-safe-money-gen]  toLiteral mSign (m, e) = DecimalLiteral mSign m (fromIntegral e) [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Numeric/DecimalLiteral.hs:244:9-15: [really-safe-money-gen] @@ -241,7 +241,7 @@ [really-safe-money-gen]  Ratio Natural -> [really-safe-money-gen]  Maybe DecimalLiteral [really-safe-money-gen]  fromRationalRepetendLimited l rational [really-safe-money-gen] - | d == 0 = Nothing [really-safe-money-gen] + | not (d == 0) = Nothing [really-safe-money-gen]  | otherwise = toLiteral Nothing <$> longDiv num [really-safe-money-gen]  where [really-safe-money-gen]  toLiteral mSign (m, e) = DecimalLiteral mSign m (fromIntegral e) [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:245:9-18: [really-safe-money-gen] @@ -242,7 +242,7 @@ [really-safe-money-gen]  Maybe DecimalLiteral [really-safe-money-gen]  fromRationalRepetendLimited l rational [really-safe-money-gen]  | d == 0 = Nothing [really-safe-money-gen] - | otherwise = toLiteral Nothing <$> longDiv num [really-safe-money-gen] + | True = toLiteral Nothing <$> longDiv num [really-safe-money-gen]  where [really-safe-money-gen]  toLiteral mSign (m, e) = DecimalLiteral mSign m (fromIntegral e) [really-safe-money-gen]  d = denominator rational [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:245:9-18: [really-safe-money-gen] @@ -242,7 +242,7 @@ [really-safe-money-gen]  Maybe DecimalLiteral [really-safe-money-gen]  fromRationalRepetendLimited l rational [really-safe-money-gen]  | d == 0 = Nothing [really-safe-money-gen] - | otherwise = toLiteral Nothing <$> longDiv num [really-safe-money-gen] + | False = toLiteral Nothing <$> longDiv num [really-safe-money-gen]  where [really-safe-money-gen]  toLiteral mSign (m, e) = DecimalLiteral mSign m (fromIntegral e) [really-safe-money-gen]  d = denominator rational [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Numeric/DecimalLiteral.hs:245:9-18: [really-safe-money-gen] @@ -242,7 +242,7 @@ [really-safe-money-gen]  Maybe DecimalLiteral [really-safe-money-gen]  fromRationalRepetendLimited l rational [really-safe-money-gen]  | d == 0 = Nothing [really-safe-money-gen] - | otherwise = toLiteral Nothing <$> longDiv num [really-safe-money-gen] + | not (otherwise) = toLiteral Nothing <$> longDiv num [really-safe-money-gen]  where [really-safe-money-gen]  toLiteral mSign (m, e) = DecimalLiteral mSign m (fromIntegral e) [really-safe-money-gen]  d = denominator rational [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:264:13-26: [really-safe-money-gen] @@ -261,7 +261,7 @@ [really-safe-money-gen]  Just (c, e) [really-safe-money-gen]  longDivWithLimit !c !e ns !n [really-safe-money-gen]  -- If there's a repetend, we can't turn it into a decimal literal [really-safe-money-gen] - | S.member n ns = Nothing [really-safe-money-gen] + | True = Nothing [really-safe-money-gen]  -- Over the limit, stop trying [really-safe-money-gen]  | e >= l = Nothing [really-safe-money-gen]  | n < d = [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:264:13-26: [really-safe-money-gen] @@ -261,7 +261,7 @@ [really-safe-money-gen]  Just (c, e) [really-safe-money-gen]  longDivWithLimit !c !e ns !n [really-safe-money-gen]  -- If there's a repetend, we can't turn it into a decimal literal [really-safe-money-gen] - | S.member n ns = Nothing [really-safe-money-gen] + | False = Nothing [really-safe-money-gen]  -- Over the limit, stop trying [really-safe-money-gen]  | e >= l = Nothing [really-safe-money-gen]  | n < d = [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Numeric/DecimalLiteral.hs:264:13-26: [really-safe-money-gen] @@ -261,7 +261,7 @@ [really-safe-money-gen]  Just (c, e) [really-safe-money-gen]  longDivWithLimit !c !e ns !n [really-safe-money-gen]  -- If there's a repetend, we can't turn it into a decimal literal [really-safe-money-gen] - | S.member n ns = Nothing [really-safe-money-gen] + | not (S.member n ns) = Nothing [really-safe-money-gen]  -- Over the limit, stop trying [really-safe-money-gen]  | e >= l = Nothing [really-safe-money-gen]  | n < d = [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:266:13-19: [really-safe-money-gen] @@ -263,7 +263,7 @@ [really-safe-money-gen]  -- If there's a repetend, we can't turn it into a decimal literal [really-safe-money-gen]  | S.member n ns = Nothing [really-safe-money-gen]  -- Over the limit, stop trying [really-safe-money-gen] - | e >= l = Nothing [really-safe-money-gen] + | True = Nothing [really-safe-money-gen]  | n < d = [really-safe-money-gen]  let !ns' = S.insert n ns [really-safe-money-gen]  in longDivWithLimit (c * 10) (succ e) ns' (n * 10) [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:266:13-19: [really-safe-money-gen] @@ -263,7 +263,7 @@ [really-safe-money-gen]  -- If there's a repetend, we can't turn it into a decimal literal [really-safe-money-gen]  | S.member n ns = Nothing [really-safe-money-gen]  -- Over the limit, stop trying [really-safe-money-gen] - | e >= l = Nothing [really-safe-money-gen] + | False = Nothing [really-safe-money-gen]  | n < d = [really-safe-money-gen]  let !ns' = S.insert n ns [really-safe-money-gen]  in longDivWithLimit (c * 10) (succ e) ns' (n * 10) [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Numeric/DecimalLiteral.hs:266:13-19: [really-safe-money-gen] @@ -263,7 +263,7 @@ [really-safe-money-gen]  -- If there's a repetend, we can't turn it into a decimal literal [really-safe-money-gen]  | S.member n ns = Nothing [really-safe-money-gen]  -- Over the limit, stop trying [really-safe-money-gen] - | e >= l = Nothing [really-safe-money-gen] + | not (e >= l) = Nothing [really-safe-money-gen]  | n < d = [really-safe-money-gen]  let !ns' = S.insert n ns [really-safe-money-gen]  in longDivWithLimit (c * 10) (succ e) ns' (n * 10) [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:267:13-18: [really-safe-money-gen] @@ -264,7 +264,7 @@ [really-safe-money-gen]  | S.member n ns = Nothing [really-safe-money-gen]  -- Over the limit, stop trying [really-safe-money-gen]  | e >= l = Nothing [really-safe-money-gen] - | n < d = [really-safe-money-gen] + | True = [really-safe-money-gen]  let !ns' = S.insert n ns [really-safe-money-gen]  in longDivWithLimit (c * 10) (succ e) ns' (n * 10) [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:267:13-18: [really-safe-money-gen] @@ -264,7 +264,7 @@ [really-safe-money-gen]  | S.member n ns = Nothing [really-safe-money-gen]  -- Over the limit, stop trying [really-safe-money-gen]  | e >= l = Nothing [really-safe-money-gen] - | n < d = [really-safe-money-gen] + | False = [really-safe-money-gen]  let !ns' = S.insert n ns [really-safe-money-gen]  in longDivWithLimit (c * 10) (succ e) ns' (n * 10) [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Numeric/DecimalLiteral.hs:267:13-18: [really-safe-money-gen] @@ -264,7 +264,7 @@ [really-safe-money-gen]  | S.member n ns = Nothing [really-safe-money-gen]  -- Over the limit, stop trying [really-safe-money-gen]  | e >= l = Nothing [really-safe-money-gen] - | n < d = [really-safe-money-gen] + | not (n < d) = [really-safe-money-gen]  let !ns' = S.insert n ns [really-safe-money-gen]  in longDivWithLimit (c * 10) (succ e) ns' (n * 10) [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:269:41-43: [really-safe-money-gen] @@ -266,7 +266,7 @@ [really-safe-money-gen]  | e >= l = Nothing [really-safe-money-gen]  | n < d = [really-safe-money-gen]  let !ns' = S.insert n ns [really-safe-money-gen] - in longDivWithLimit (c * 10) (succ e) ns' (n * 10) [really-safe-money-gen] + in longDivWithLimit (c * 0) (succ e) ns' (n * 10) [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  let (q, r') = n `quotRem` d [really-safe-money-gen]  in longDivWithLimit (c + q) e ns r' [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:269:41-43: [really-safe-money-gen] @@ -266,7 +266,7 @@ [really-safe-money-gen]  | e >= l = Nothing [really-safe-money-gen]  | n < d = [really-safe-money-gen]  let !ns' = S.insert n ns [really-safe-money-gen] - in longDivWithLimit (c * 10) (succ e) ns' (n * 10) [really-safe-money-gen] + in longDivWithLimit (c * 1) (succ e) ns' (n * 10) [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  let (q, r') = n `quotRem` d [really-safe-money-gen]  in longDivWithLimit (c + q) e ns r' [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:269:63-65: [really-safe-money-gen] @@ -266,7 +266,7 @@ [really-safe-money-gen]  | e >= l = Nothing [really-safe-money-gen]  | n < d = [really-safe-money-gen]  let !ns' = S.insert n ns [really-safe-money-gen] - in longDivWithLimit (c * 10) (succ e) ns' (n * 10) [really-safe-money-gen] + in longDivWithLimit (c * 10) (succ e) ns' (n * 0) [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  let (q, r') = n `quotRem` d [really-safe-money-gen]  in longDivWithLimit (c + q) e ns r' [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:269:63-65: [really-safe-money-gen] @@ -266,7 +266,7 @@ [really-safe-money-gen]  | e >= l = Nothing [really-safe-money-gen]  | n < d = [really-safe-money-gen]  let !ns' = S.insert n ns [really-safe-money-gen] - in longDivWithLimit (c * 10) (succ e) ns' (n * 10) [really-safe-money-gen] + in longDivWithLimit (c * 10) (succ e) ns' (n * 1) [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  let (q, r') = n `quotRem` d [really-safe-money-gen]  in longDivWithLimit (c + q) e ns r' [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:270:13-22: [really-safe-money-gen] @@ -267,7 +267,7 @@ [really-safe-money-gen]  | n < d = [really-safe-money-gen]  let !ns' = S.insert n ns [really-safe-money-gen]  in longDivWithLimit (c * 10) (succ e) ns' (n * 10) [really-safe-money-gen] - | otherwise = [really-safe-money-gen] + | True = [really-safe-money-gen]  let (q, r') = n `quotRem` d [really-safe-money-gen]  in longDivWithLimit (c + q) e ns r' [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] can parse any rendered literal  0.34 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 200 [really-safe-money-gen]  Passed: 2 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.00 seconds [really-safe-money-gen]  Test suite took:  0.00 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:332:11-46: [really-safe-money-gen] @@ -329,7 +329,7 @@ [really-safe-money-gen]  toInt :: DecimalLiteral -> Maybe Int [really-safe-money-gen]  toInt dl = do [really-safe-money-gen]  n <- toInteger dl [really-safe-money-gen] - guard $ n <= fromIntegral (maxBound :: Int) [really-safe-money-gen] + guard $ False [really-safe-money-gen]  guard $ n >= fromIntegral (minBound :: Int) [really-safe-money-gen]  pure $ fromIntegral n [really-safe-money-gen]  [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Numeric.DecimalLiteralSpec [really-safe-money-gen]  Int [really-safe-money-gen]  toInt [really-safe-money-gen]  ✓ renders to valid words  0.57 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  fromInt [really-safe-money-gen]  ✓ can parse any rendered literal  0.33 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 200 [really-safe-money-gen]  Passed: 2 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.00 seconds [really-safe-money-gen]  Test suite took:  0.00 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:333:11-46: [really-safe-money-gen] @@ -330,7 +330,7 @@ [really-safe-money-gen]  toInt dl = do [really-safe-money-gen]  n <- toInteger dl [really-safe-money-gen]  guard $ n <= fromIntegral (maxBound :: Int) [really-safe-money-gen] - guard $ n >= fromIntegral (minBound :: Int) [really-safe-money-gen] + guard $ True [really-safe-money-gen]  pure $ fromIntegral n [really-safe-money-gen]  [really-safe-money-gen]  numSign :: (Ord a, Num a) => a -> Maybe Bool [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Numeric.DecimalLiteralSpec [really-safe-money-gen]  Int [really-safe-money-gen]  toInt [really-safe-money-gen]  ✓ renders to valid words  0.60 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  fromInt [really-safe-money-gen]  ✓ can parse any rendered literal  0.46 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 200 [really-safe-money-gen]  Passed: 2 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.00 seconds [really-safe-money-gen]  Test suite took:  0.00 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:333:11-46: [really-safe-money-gen] @@ -330,7 +330,7 @@ [really-safe-money-gen]  toInt dl = do [really-safe-money-gen]  n <- toInteger dl [really-safe-money-gen]  guard $ n <= fromIntegral (maxBound :: Int) [really-safe-money-gen] - guard $ n >= fromIntegral (minBound :: Int) [really-safe-money-gen] + guard $ False [really-safe-money-gen]  pure $ fromIntegral n [really-safe-money-gen]  [really-safe-money-gen]  numSign :: (Ord a, Num a) => a -> Maybe Bool [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Numeric.DecimalLiteralSpec [really-safe-money-gen]  Int [really-safe-money-gen]  toInt [really-safe-money-gen]  ✓ renders to valid words  0.79 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  fromInt [really-safe-money-gen]  ✓ can parse any rendered literal  0.62 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 200 [really-safe-money-gen]  Passed: 2 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.00 seconds [really-safe-money-gen]  Test suite took:  0.00 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:304:42-43: [really-safe-money-gen] @@ -301,7 +301,7 @@ [really-safe-money-gen]  [really-safe-money-gen]  -- | Construct a 'DecimalLiteral' from a 'Natural' [really-safe-money-gen]  fromNatural :: Natural -> DecimalLiteral [really-safe-money-gen] -fromNatural n = DecimalLiteral Nothing n 0 [really-safe-money-gen] +fromNatural n = DecimalLiteral Nothing n 1 [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn a 'DecimalLiteral' into a 'Natural' [really-safe-money-gen]  toNatural :: DecimalLiteral -> Maybe Natural [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Numeric.DecimalLiteralSpec [really-safe-money-gen]  Natural [really-safe-money-gen]  fromNatural [really-safe-money-gen]  ✓ renders to valid decimal literals  0.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 100 [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.00 seconds [really-safe-money-gen]  Test suite took:  0.00 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:299:11-47: [really-safe-money-gen] @@ -296,7 +296,7 @@ [really-safe-money-gen]  toWord :: DecimalLiteral -> Maybe Word [really-safe-money-gen]  toWord dl = do [really-safe-money-gen]  n <- toNatural dl [really-safe-money-gen] - guard $ n <= fromIntegral (maxBound :: Word) [really-safe-money-gen] + guard $ True [really-safe-money-gen]  pure $ fromIntegral n [really-safe-money-gen]  [really-safe-money-gen]  -- | Construct a 'DecimalLiteral' from a 'Natural' [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Numeric.DecimalLiteralSpec [really-safe-money-gen]  Natural [really-safe-money-gen]  fromNatural [really-safe-money-gen]  ✓ can parse any rendered literal  0.21 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Word [really-safe-money-gen]  fromWord [really-safe-money-gen]  ✓ can parse any rendered literal  0.61 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 200 [really-safe-money-gen]  Passed: 2 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.00 seconds [really-safe-money-gen]  Test suite took:  0.00 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:299:11-47: [really-safe-money-gen] @@ -296,7 +296,7 @@ [really-safe-money-gen]  toWord :: DecimalLiteral -> Maybe Word [really-safe-money-gen]  toWord dl = do [really-safe-money-gen]  n <- toNatural dl [really-safe-money-gen] - guard $ n <= fromIntegral (maxBound :: Word) [really-safe-money-gen] + guard $ False [really-safe-money-gen]  pure $ fromIntegral n [really-safe-money-gen]  [really-safe-money-gen]  -- | Construct a 'DecimalLiteral' from a 'Natural' [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Numeric.DecimalLiteralSpec [really-safe-money-gen]  Natural [really-safe-money-gen]  fromNatural [really-safe-money-gen]  ✓ can parse any rendered literal  0.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  Word [really-safe-money-gen]  fromWord [really-safe-money-gen]  ✓ can parse any rendered literal  0.61 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 200 [really-safe-money-gen]  Passed: 2 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.00 seconds [really-safe-money-gen]  Test suite took:  0.00 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:245:9-18: [really-safe-money-gen] @@ -242,7 +242,7 @@ [really-safe-money-gen]  Maybe DecimalLiteral [really-safe-money-gen]  fromRationalRepetendLimited l rational [really-safe-money-gen]  | d == 0 = Nothing [really-safe-money-gen] - | otherwise = toLiteral Nothing <$> longDiv num [really-safe-money-gen] + | True = toLiteral Nothing <$> longDiv num [really-safe-money-gen]  where [really-safe-money-gen]  toLiteral mSign (m, e) = DecimalLiteral mSign m (fromIntegral e) [really-safe-money-gen]  d = denominator rational [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Numeric.DecimalLiteralSpec [really-safe-money-gen]  Rational [really-safe-money-gen]  ✓ can turn rational 400 % 1 into DecimalLiteral Nothing 400 0  0.04 ms [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.00 seconds [really-safe-money-gen]  Test suite took:  0.00 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:245:9-18: [really-safe-money-gen] @@ -242,7 +242,7 @@ [really-safe-money-gen]  Maybe DecimalLiteral [really-safe-money-gen]  fromRationalRepetendLimited l rational [really-safe-money-gen]  | d == 0 = Nothing [really-safe-money-gen] - | otherwise = toLiteral Nothing <$> longDiv num [really-safe-money-gen] + | False = toLiteral Nothing <$> longDiv num [really-safe-money-gen]  where [really-safe-money-gen]  toLiteral mSign (m, e) = DecimalLiteral mSign m (fromIntegral e) [really-safe-money-gen]  d = denominator rational [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Numeric.DecimalLiteralSpec [really-safe-money-gen]  Rational [really-safe-money-gen]  ✓ can turn rational 400 % 1 into DecimalLiteral Nothing 400 0  0.06 ms [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.00 seconds [really-safe-money-gen]  Test suite took:  0.00 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:270:13-22: [really-safe-money-gen] @@ -267,7 +267,7 @@ [really-safe-money-gen]  | n < d = [really-safe-money-gen]  let !ns' = S.insert n ns [really-safe-money-gen]  in longDivWithLimit (c * 10) (succ e) ns' (n * 10) [really-safe-money-gen] - | otherwise = [really-safe-money-gen] + | True = [really-safe-money-gen]  let (q, r') = n `quotRem` d [really-safe-money-gen]  in longDivWithLimit (c + q) e ns r' [really-safe-money-gen]  [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Numeric.DecimalLiteralSpec [really-safe-money-gen]  Rational [really-safe-money-gen]  ✓ can turn rational 400 % 1 into DecimalLiteral Nothing 400 0  0.0Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:270:13-22: [really-safe-money-gen] @@ -267,7 +267,7 @@ [really-safe-money-gen]  | n < d = [really-safe-money-gen]  let !ns' = S.insert n ns [really-safe-money-gen]  in longDivWithLimit (c * 10) (succ e) ns' (n * 10) [really-safe-money-gen] - | otherwise = [really-safe-money-gen] + | False = [really-safe-money-gen]  let (q, r') = n `quotRem` d [really-safe-money-gen]  in longDivWithLimit (c + q) e ns r' [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Numeric/DecimalLiteral.hs:270:13-22: [really-safe-money-gen] @@ -267,7 +267,7 @@ [really-safe-money-gen]  | n < d = [really-safe-money-gen]  let !ns' = S.insert n ns [really-safe-money-gen]  in longDivWithLimit (c * 10) (succ e) ns' (n * 10) [really-safe-money-gen] - | otherwise = [really-safe-money-gen] + | not (otherwise) = [really-safe-money-gen]  let (q, r') = n `quotRem` d [really-safe-money-gen]  in longDivWithLimit (c + q) e ns r' [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:252:36-37: [really-safe-money-gen] @@ -249,7 +249,7 @@ [really-safe-money-gen]  num = numerator rational [really-safe-money-gen]  [really-safe-money-gen]  longDiv :: Natural -> Maybe (Natural, Int) [really-safe-money-gen] - longDiv = longDivWithLimit 0 0 S.empty [really-safe-money-gen] + longDiv = longDivWithLimit 1 0 S.empty [really-safe-money-gen]  [really-safe-money-gen]  longDivWithLimit :: [really-safe-money-gen]  Natural -> [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:252:38-39: [really-safe-money-gen] @@ -249,7 +249,7 @@ [really-safe-money-gen]  num = numerator rational [really-safe-money-gen]  [really-safe-money-gen]  longDiv :: Natural -> Maybe (Natural, Int) [really-safe-money-gen] - longDiv = longDivWithLimit 0 0 S.empty [really-safe-money-gen] + longDiv = longDivWithLimit 0 1 S.empty [really-safe-money-gen]  [really-safe-money-gen]  longDivWithLimit :: [really-safe-money-gen]  Natural -> [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:223:39-41: [really-safe-money-gen] @@ -220,7 +220,7 @@ [really-safe-money-gen]  -- (-3) % 10 [really-safe-money-gen]  toRational :: DecimalLiteral -> Rational [really-safe-money-gen]  toRational (DecimalLiteral mSign m e) = [really-safe-money-gen] - signSignum mSign (fromIntegral m / (10 ^ e)) [really-safe-money-gen] + signSignum mSign (fromIntegral m / (0 ^ e)) [really-safe-money-gen]  [really-safe-money-gen]  -- | Parse a 'DecimalLiteral' from a 'Ratio Natural' [really-safe-money-gen]  -- [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:223:39-41: [really-safe-money-gen] @@ -220,7 +220,7 @@ [really-safe-money-gen]  -- (-3) % 10 [really-safe-money-gen]  toRational :: DecimalLiteral -> Rational [really-safe-money-gen]  toRational (DecimalLiteral mSign m e) = [really-safe-money-gen] - signSignum mSign (fromIntegral m / (10 ^ e)) [really-safe-money-gen] + signSignum mSign (fromIntegral m / (1 ^ e)) [really-safe-money-gen]  [really-safe-money-gen]  -- | Parse a 'DecimalLiteral' from a 'Ratio Natural' [really-safe-money-gen]  -- [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:223:39-41: [really-safe-money-gen] @@ -220,7 +220,7 @@ [really-safe-money-gen]  -- (-3) % 10 [really-safe-money-gen]  toRational :: DecimalLiteral -> Rational [really-safe-money-gen]  toRational (DecimalLiteral mSign m e) = [really-safe-money-gen] - signSignum mSign (fromIntegral m / (10 ^ e)) [really-safe-money-gen] + signSignum mSign (fromIntegral m / (-10 ^ e)) [really-safe-money-gen]  [really-safe-money-gen]  -- | Parse a 'DecimalLiteral' from a 'Ratio Natural' [really-safe-money-gen]  -- [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:208:9-10: [really-safe-money-gen] @@ -205,7 +205,7 @@ [really-safe-money-gen]  -- Nothing [really-safe-money-gen]  fromRational :: Rational -> Maybe DecimalLiteral [really-safe-money-gen]  fromRational (n :% d) [really-safe-money-gen] - | n < 0 = (\(DecimalLiteral _ m e) -> DecimalLiteral (Just False) m e) <$> fromRatio (fromIntegral (abs n) % fromIntegral d) [really-safe-money-gen] + | n < 1 = (\(DecimalLiteral _ m e) -> DecimalLiteral (Just False) m e) <$> fromRatio (fromIntegral (abs n) % fromIntegral d) [really-safe-money-gen]  | otherwise = fromRatio (fromIntegral n % fromIntegral d) [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn a 'DecimalLiteral' into a 'Rational' [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:208:5-10: [really-safe-money-gen] @@ -205,7 +205,7 @@ [really-safe-money-gen]  -- Nothing [really-safe-money-gen]  fromRational :: Rational -> Maybe DecimalLiteral [really-safe-money-gen]  fromRational (n :% d) [really-safe-money-gen] - | n < 0 = (\(DecimalLiteral _ m e) -> DecimalLiteral (Just False) m e) <$> fromRatio (fromIntegral (abs n) % fromIntegral d) [really-safe-money-gen] + | True = (\(DecimalLiteral _ m e) -> DecimalLiteral (Just False) m e) <$> fromRatio (fromIntegral (abs n) % fromIntegral d) [really-safe-money-gen]  | otherwise = fromRatio (fromIntegral n % fromIntegral d) [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn a 'DecimalLiteral' into a 'Rational' [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:208:5-10: [really-safe-money-gen] @@ -205,7 +205,7 @@ [really-safe-money-gen]  -- Nothing [really-safe-money-gen]  fromRational :: Rational -> Maybe DecimalLiteral [really-safe-money-gen]  fromRational (n :% d) [really-safe-money-gen] - | n < 0 = (\(DecimalLiteral _ m e) -> DecimalLiteral (Just False) m e) <$> fromRatio (fromIntegral (abs n) % fromIntegral d) [really-safe-money-gen] + | False = (\(DecimalLiteral _ m e) -> DecimalLiteral (Just False) m e) <$> fromRatio (fromIntegral (abs n) % fromIntegral d) [really-safe-money-gen]  | otherwise = fromRatio (fromIntegral n % fromIntegral d) [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn a 'DecimalLiteral' into a 'Rational' [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Numeric/DecimalLiteral.hs:208:5-10: [really-safe-money-gen] @@ -205,7 +205,7 @@ [really-safe-money-gen]  -- Nothing [really-safe-money-gen]  fromRational :: Rational -> Maybe DecimalLiteral [really-safe-money-gen]  fromRational (n :% d) [really-safe-money-gen] - | n < 0 = (\(DecimalLiteral _ m e) -> DecimalLiteral (Just False) m e) <$> fromRatio (fromIntegral (abs n) % fromIntegral d) [really-safe-money-gen] + | not (n < 0) = (\(DecimalLiteral _ m e) -> DecimalLiteral (Just False) m e) <$> fromRatio (fromIntegral (abs n) % fromIntegral d) [really-safe-money-gen]  | otherwise = fromRatio (fromIntegral n % fromIntegral d) [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn a 'DecimalLiteral' into a 'Rational' [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:208:62-67: [really-safe-money-gen] @@ -205,7 +205,7 @@ [really-safe-money-gen]  -- Nothing [really-safe-money-gen]  fromRational :: Rational -> Maybe DecimalLiteral [really-safe-money-gen]  fromRational (n :% d) [really-safe-money-gen] - | n < 0 = (\(DecimalLiteral _ m e) -> DecimalLiteral (Just False) m e) <$> fromRatio (fromIntegral (abs n) % fromIntegral d) [really-safe-money-gen] + | n < 0 = (\(DecimalLiteral _ m e) -> DecimalLiteral (Just True) m e) <$> fromRatio (fromIntegral (abs n) % fromIntegral d) [really-safe-money-gen]  | otherwise = fromRatio (fromIntegral n % fromIntegral d) [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn a 'DecimalLiteral' into a 'Rational' [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:208:62-67: [really-safe-money-gen] @@ -205,7 +205,7 @@ [really-safe-money-gen]  -- Nothing [really-safe-money-gen]  fromRational :: Rational -> Maybe DecimalLiteral [really-safe-money-gen]  fromRational (n :% d) [really-safe-money-gen] - | n < 0 = (\(DecimalLiteral _ m e) -> DecimalLiteral (Just False) m e) <$> fromRatio (fromIntegral (abs n) % fromIntegral d) [really-safe-money-gen] + | n < 0 = (\(DecimalLiteral _ m e) -> DecimalLiteral (Just False) m e) <$> fromRatio (fromIntegral (abs n) % fromIntegral d) [really-safe-money-gen]  | otherwise = fromRatio (fromIntegral n % fromIntegral d) [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn a 'DecimalLiteral' into a 'Rational' [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Numeric/DecimalLiteral.hs:208:62-67: [really-safe-money-gen] @@ -205,7 +205,7 @@ [really-safe-money-gen]  -- Nothing [really-safe-money-gen]  fromRational :: Rational -> Maybe DecimalLiteral [really-safe-money-gen]  fromRational (n :% d) [really-safe-money-gen] - | n < 0 = (\(DecimalLiteral _ m e) -> DecimalLiteral (Just False) m e) <$> fromRatio (fromIntegral (abs n) % fromIntegral d) [really-safe-money-gen] + | n < 0 = (\(DecimalLiteral _ m e) -> DecimalLiteral (Just not (False)) m e) <$> fromRatio (fromIntegral (abs n) % fromIntegral d) [really-safe-money-gen]  | otherwise = fromRatio (fromIntegral n % fromIntegral d) [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn a 'DecimalLiteral' into a 'Rational' [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:209:5-14: [really-safe-money-gen] @@ -206,7 +206,7 @@ [really-safe-money-gen]  fromRational :: Rational -> Maybe DecimalLiteral [really-safe-money-gen]  fromRational (n :% d) [really-safe-money-gen]  | n < 0 = (\(DecimalLiteral _ m e) -> DecimalLiteral (Just False) m e) <$> fromRatio (fromIntegral (abs n) % fromIntegral d) [really-safe-money-gen] - | otherwise = fromRatio (fromIntegral n % fromIntegral d) [really-safe-money-gen] + | True = fromRatio (fromIntegral n % fromIntegral d) [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn a 'DecimalLiteral' into a 'Rational' [really-safe-money-gen]  -- [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:209:5-14: [really-safe-money-gen] @@ -206,7 +206,7 @@ [really-safe-money-gen]  fromRational :: Rational -> Maybe DecimalLiteral [really-safe-money-gen]  fromRational (n :% d) [really-safe-money-gen]  | n < 0 = (\(DecimalLiteral _ m e) -> DecimalLiteral (Just False) m e) <$> fromRatio (fromIntegral (abs n) % fromIntegral d) [really-safe-money-gen] - | otherwise = fromRatio (fromIntegral n % fromIntegral d) [really-safe-money-gen] + | False = fromRatio (fromIntegral n % fromIntegral d) [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn a 'DecimalLiteral' into a 'Rational' [really-safe-money-gen]  -- [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Numeric/DecimalLiteral.hs:209:5-14: [really-safe-money-gen] @@ -206,7 +206,7 @@ [really-safe-money-gen]  fromRational :: Rational -> Maybe DecimalLiteral [really-safe-money-gen]  fromRational (n :% d) [really-safe-money-gen]  | n < 0 = (\(DecimalLiteral _ m e) -> DecimalLiteral (Just False) m e) <$> fromRatio (fromIntegral (abs n) % fromIntegral d) [really-safe-money-gen] - | otherwise = fromRatio (fromIntegral n % fromIntegral d) [really-safe-money-gen] + | not (otherwise) = fromRatio (fromIntegral n % fromIntegral d) [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn a 'DecimalLiteral' into a 'Rational' [really-safe-money-gen]  -- [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ListLit at src/Numeric/DecimalLiteral.hs:186:15-25: [really-safe-money-gen] @@ -183,7 +183,7 @@ [really-safe-money-gen]  [really-safe-money-gen]  goFrac m e = reverse (go e (reverse (show m))) [really-safe-money-gen]  go :: Word8 -> String -> String [really-safe-money-gen] - go 0 [] = ['.', '0'] [really-safe-money-gen] + go 0 [] = ['.', '0'] [really-safe-money-gen]  go 0 s = '.' : s [really-safe-money-gen]  go e [] = '0' : go (pred e) [] [really-safe-money-gen]  go e (c : cs) = c : go (pred e) cs [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ListLit at src/Numeric/DecimalLiteral.hs:186:15-25: [really-safe-money-gen] @@ -183,7 +183,7 @@ [really-safe-money-gen]  [really-safe-money-gen]  goFrac m e = reverse (go e (reverse (show m))) [really-safe-money-gen]  go :: Word8 -> String -> String [really-safe-money-gen] - go 0 [] = ['.', '0'] [really-safe-money-gen] + go 0 [] = ['.', '0'] [really-safe-money-gen]  go 0 s = '.' : s [really-safe-money-gen]  go e [] = '0' : go (pred e) [] [really-safe-money-gen]  go e (c : cs) = c : go (pred e) cs [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:145:28-30: [really-safe-money-gen] @@ -142,7 +142,7 @@ [really-safe-money-gen]  parseDigits :: (a -> Int -> Maybe a) -> a -> ReadP a [really-safe-money-gen]  parseDigits f z = do [really-safe-money-gen]  c <- ReadP.satisfy Char.isDigit [really-safe-money-gen] - let digit = Char.ord c - 48 [really-safe-money-gen] + let digit = Char.ord c - 0 [really-safe-money-gen]  case f z digit of [really-safe-money-gen]  Nothing -> fail "Failed to step the first digit" [really-safe-money-gen]  Just a -> ReadP.look >>= go a [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:145:28-30: [really-safe-money-gen] @@ -142,7 +142,7 @@ [really-safe-money-gen]  parseDigits :: (a -> Int -> Maybe a) -> a -> ReadP a [really-safe-money-gen]  parseDigits f z = do [really-safe-money-gen]  c <- ReadP.satisfy Char.isDigit [really-safe-money-gen] - let digit = Char.ord c - 48 [really-safe-money-gen] + let digit = Char.ord c - 1 [really-safe-money-gen]  case f z digit of [really-safe-money-gen]  Nothing -> fail "Failed to step the first digit" [really-safe-money-gen]  Just a -> ReadP.look >>= go a [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:145:28-30: [really-safe-money-gen] @@ -142,7 +142,7 @@ [really-safe-money-gen]  parseDigits :: (a -> Int -> Maybe a) -> a -> ReadP a [really-safe-money-gen]  parseDigits f z = do [really-safe-money-gen]  c <- ReadP.satisfy Char.isDigit [really-safe-money-gen] - let digit = Char.ord c - 48 [really-safe-money-gen] + let digit = Char.ord c - -48 [really-safe-money-gen]  case f z digit of [really-safe-money-gen]  Nothing -> fail "Failed to step the first digit" [really-safe-money-gen]  Just a -> ReadP.look >>= go a [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:152:9-23: [really-safe-money-gen] @@ -149,7 +149,7 @@ [really-safe-money-gen]  where [really-safe-money-gen]  go !a [] = return a [really-safe-money-gen]  go !a (c : cs) [really-safe-money-gen] - | Char.isDigit c = do [really-safe-money-gen] + | True = do [really-safe-money-gen]  _ <- ReadP.get [really-safe-money-gen]  let digit = Char.ord c - 48 [really-safe-money-gen]  case f a digit of [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:152:9-23: [really-safe-money-gen] @@ -149,7 +149,7 @@ [really-safe-money-gen]  where [really-safe-money-gen]  go !a [] = return a [really-safe-money-gen]  go !a (c : cs) [really-safe-money-gen] - | Char.isDigit c = do [really-safe-money-gen] + | False = do [really-safe-money-gen]  _ <- ReadP.get [really-safe-money-gen]  let digit = Char.ord c - 48 [really-safe-money-gen]  case f a digit of [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Numeric/DecimalLiteral.hs:152:9-23: [really-safe-money-gen] @@ -149,7 +149,7 @@ [really-safe-money-gen]  where [really-safe-money-gen]  go !a [] = return a [really-safe-money-gen]  go !a (c : cs) [really-safe-money-gen] - | Char.isDigit c = do [really-safe-money-gen] + | not (Char.isDigit c) = do [really-safe-money-gen]  _ <- ReadP.get [really-safe-money-gen]  let digit = Char.ord c - 48 [really-safe-money-gen]  case f a digit of [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:154:36-38: [really-safe-money-gen] @@ -151,7 +151,7 @@ [really-safe-money-gen]  go !a (c : cs) [really-safe-money-gen]  | Char.isDigit c = do [really-safe-money-gen]  _ <- ReadP.get [really-safe-money-gen] - let digit = Char.ord c - 48 [really-safe-money-gen] + let digit = Char.ord c - 0 [really-safe-money-gen]  case f a digit of [really-safe-money-gen]  Nothing -> fail "Failed to step the digit" [really-safe-money-gen]  Just a' -> go a' cs [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:154:36-38: [really-safe-money-gen] @@ -151,7 +151,7 @@ [really-safe-money-gen]  go !a (c : cs) [really-safe-money-gen]  | Char.isDigit c = do [really-safe-money-gen]  _ <- ReadP.get [really-safe-money-gen] - let digit = Char.ord c - 48 [really-safe-money-gen] + let digit = Char.ord c - 1 [really-safe-money-gen]  case f a digit of [really-safe-money-gen]  Nothing -> fail "Failed to step the digit" [really-safe-money-gen]  Just a' -> go a' cs [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:154:36-38: [really-safe-money-gen] @@ -151,7 +151,7 @@ [really-safe-money-gen]  go !a (c : cs) [really-safe-money-gen]  | Char.isDigit c = do [really-safe-money-gen]  _ <- ReadP.get [really-safe-money-gen] - let digit = Char.ord c - 48 [really-safe-money-gen] + let digit = Char.ord c - -48 [really-safe-money-gen]  case f a digit of [really-safe-money-gen]  Nothing -> fail "Failed to step the digit" [really-safe-money-gen]  Just a' -> go a' cs [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:158:9-18: [really-safe-money-gen] @@ -155,7 +155,7 @@ [really-safe-money-gen]  case f a digit of [really-safe-money-gen]  Nothing -> fail "Failed to step the digit" [really-safe-money-gen]  Just a' -> go a' cs [really-safe-money-gen] - | otherwise = return a [really-safe-money-gen] + | True = return a [really-safe-money-gen]  [really-safe-money-gen]  -- | Render a decimal literal to a string [really-safe-money-gen]  -- [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:158:9-18: [really-safe-money-gen] @@ -155,7 +155,7 @@ [really-safe-money-gen]  case f a digit of [really-safe-money-gen]  Nothing -> fail "Failed to step the digit" [really-safe-money-gen]  Just a' -> go a' cs [really-safe-money-gen] - | otherwise = return a [really-safe-money-gen] + | False = return a [really-safe-money-gen]  [really-safe-money-gen]  -- | Render a decimal literal to a string [really-safe-money-gen]  -- [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Numeric/DecimalLiteral.hs:158:9-18: [really-safe-money-gen] @@ -155,7 +155,7 @@ [really-safe-money-gen]  case f a digit of [really-safe-money-gen]  Nothing -> fail "Failed to step the digit" [really-safe-money-gen]  Just a' -> go a' cs [really-safe-money-gen] - | otherwise = return a [really-safe-money-gen] + | not (otherwise) = return a [really-safe-money-gen]  [really-safe-money-gen]  -- | Render a decimal literal to a string [really-safe-money-gen]  -- [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:139:27-29: [really-safe-money-gen] @@ -136,7 +136,7 @@ [really-safe-money-gen]  stepFraction (m, e) digit = Just (m * 10 + fromIntegral digit, succ e) [really-safe-money-gen]  [really-safe-money-gen]  step :: Natural -> Int -> Maybe Natural [really-safe-money-gen] -step a digit = Just $ a * 10 + fromIntegral digit [really-safe-money-gen] +step a digit = Just $ a * 0 + fromIntegral digit [really-safe-money-gen]  {-# INLINE step #-} [really-safe-money-gen]  [really-safe-money-gen]  parseDigits :: (a -> Int -> Maybe a) -> a -> ReadP a [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:139:27-29: [really-safe-money-gen] @@ -136,7 +136,7 @@ [really-safe-money-gen]  stepFraction (m, e) digit = Just (m * 10 + fromIntegral digit, succ e) [really-safe-money-gen]  [really-safe-money-gen]  step :: Natural -> Int -> Maybe Natural [really-safe-money-gen] -step a digit = Just $ a * 10 + fromIntegral digit [really-safe-money-gen] +step a digit = Just $ a * 1 + fromIntegral digit [really-safe-money-gen]  {-# INLINE step #-} [really-safe-money-gen]  [really-safe-money-gen]  parseDigits :: (a -> Int -> Maybe a) -> a -> ReadP a [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:136:39-41: [really-safe-money-gen] @@ -133,7 +133,7 @@ [really-safe-money-gen]  [really-safe-money-gen]  stepFraction :: (Natural, Word8) -> Int -> Maybe (Natural, Word8) [really-safe-money-gen]  stepFraction (_, 255) _ = Nothing [really-safe-money-gen] -stepFraction (m, e) digit = Just (m * 10 + fromIntegral digit, succ e) [really-safe-money-gen] +stepFraction (m, e) digit = Just (m * 0 + fromIntegral digit, succ e) [really-safe-money-gen]  [really-safe-money-gen]  step :: Natural -> Int -> Maybe Natural [really-safe-money-gen]  step a digit = Just $ a * 10 + fromIntegral digit [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:136:39-41: [really-safe-money-gen] @@ -133,7 +133,7 @@ [really-safe-money-gen]  [really-safe-money-gen]  stepFraction :: (Natural, Word8) -> Int -> Maybe (Natural, Word8) [really-safe-money-gen]  stepFraction (_, 255) _ = Nothing [really-safe-money-gen] -stepFraction (m, e) digit = Just (m * 10 + fromIntegral digit, succ e) [really-safe-money-gen] +stepFraction (m, e) digit = Just (m * 1 + fromIntegral digit, succ e) [really-safe-money-gen]  [really-safe-money-gen]  step :: Natural -> Int -> Maybe Natural [really-safe-money-gen]  step a digit = Just $ a * 10 + fromIntegral digit [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:119:22-30: [really-safe-money-gen] @@ -116,7 +116,7 @@ [really-safe-money-gen]  decimalLiteralP :: ReadP DecimalLiteral [really-safe-money-gen]  decimalLiteralP = do [really-safe-money-gen]  let isSignChar :: Char -> Bool [really-safe-money-gen] - isSignChar c = c == '-' || c == '+' [really-safe-money-gen] + isSignChar c = True || c == '+' [really-safe-money-gen]  [really-safe-money-gen]  mSign <- ReadP.option Nothing $ do [really-safe-money-gen]  signChar <- ReadP.satisfy isSignChar [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:119:22-30: [really-safe-money-gen] @@ -116,7 +116,7 @@ [really-safe-money-gen]  decimalLiteralP :: ReadP DecimalLiteral [really-safe-money-gen]  decimalLiteralP = do [really-safe-money-gen]  let isSignChar :: Char -> Bool [really-safe-money-gen] - isSignChar c = c == '-' || c == '+' [really-safe-money-gen] + isSignChar c = False || c == '+' [really-safe-money-gen]  [really-safe-money-gen]  mSign <- ReadP.option Nothing $ do [really-safe-money-gen]  signChar <- ReadP.satisfy isSignChar [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Numeric/DecimalLiteral.hs:119:22-30: [really-safe-money-gen] @@ -116,7 +116,7 @@ [really-safe-money-gen]  decimalLiteralP :: ReadP DecimalLiteral [really-safe-money-gen]  decimalLiteralP = do [really-safe-money-gen]  let isSignChar :: Char -> Bool [really-safe-money-gen] - isSignChar c = c == '-' || c == '+' [really-safe-money-gen] + isSignChar c = not (c == '-') || c == '+' [really-safe-money-gen]  [really-safe-money-gen]  mSign <- ReadP.option Nothing $ do [really-safe-money-gen]  signChar <- ReadP.satisfy isSignChar [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:119:34-42: [really-safe-money-gen] @@ -116,7 +116,7 @@ [really-safe-money-gen]  decimalLiteralP :: ReadP DecimalLiteral [really-safe-money-gen]  decimalLiteralP = do [really-safe-money-gen]  let isSignChar :: Char -> Bool [really-safe-money-gen] - isSignChar c = c == '-' || c == '+' [really-safe-money-gen] + isSignChar c = c == '-' || True [really-safe-money-gen]  [really-safe-money-gen]  mSign <- ReadP.option Nothing $ do [really-safe-money-gen]  signChar <- ReadP.satisfy isSignChar [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:119:34-42: [really-safe-money-gen] @@ -116,7 +116,7 @@ [really-safe-money-gen]  decimalLiteralP :: ReadP DecimalLiteral [really-safe-money-gen]  decimalLiteralP = do [really-safe-money-gen]  let isSignChar :: Char -> Bool [really-safe-money-gen] - isSignChar c = c == '-' || c == '+' [really-safe-money-gen] + isSignChar c = c == '-' || False [really-safe-money-gen]  [really-safe-money-gen]  mSign <- ReadP.option Nothing $ do [really-safe-money-gen]  signChar <- ReadP.satisfy isSignChar [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Numeric/DecimalLiteral.hs:119:34-42: [really-safe-money-gen] @@ -116,7 +116,7 @@ [really-safe-money-gen]  decimalLiteralP :: ReadP DecimalLiteral [really-safe-money-gen]  decimalLiteralP = do [really-safe-money-gen]  let isSignChar :: Char -> Bool [really-safe-money-gen] - isSignChar c = c == '-' || c == '+' [really-safe-money-gen] + isSignChar c = c == '-' || not (c == '+') [really-safe-money-gen]  [really-safe-money-gen]  mSign <- ReadP.option Nothing $ do [really-safe-money-gen]  signChar <- ReadP.satisfy isSignChar [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:119:22-42: [really-safe-money-gen] @@ -116,7 +116,7 @@ [really-safe-money-gen]  decimalLiteralP :: ReadP DecimalLiteral [really-safe-money-gen]  decimalLiteralP = do [really-safe-money-gen]  let isSignChar :: Char -> Bool [really-safe-money-gen] - isSignChar c = c == '-' || c == '+' [really-safe-money-gen] + isSignChar c = True [really-safe-money-gen]  [really-safe-money-gen]  mSign <- ReadP.option Nothing $ do [really-safe-money-gen]  signChar <- ReadP.satisfy isSignChar [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:119:22-42: [really-safe-money-gen] @@ -116,7 +116,7 @@ [really-safe-money-gen]  decimalLiteralP :: ReadP DecimalLiteral [really-safe-money-gen]  decimalLiteralP = do [really-safe-money-gen]  let isSignChar :: Char -> Bool [really-safe-money-gen] - isSignChar c = c == '-' || c == '+' [really-safe-money-gen] + isSignChar c = False [really-safe-money-gen]  [really-safe-money-gen]  mSign <- ReadP.option Nothing $ do [really-safe-money-gen]  signChar <- ReadP.satisfy isSignChar [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Numeric/DecimalLiteral.hs:119:22-42: [really-safe-money-gen] @@ -116,7 +116,7 @@ [really-safe-money-gen]  decimalLiteralP :: ReadP DecimalLiteral [really-safe-money-gen]  decimalLiteralP = do [really-safe-money-gen]  let isSignChar :: Char -> Bool [really-safe-money-gen] - isSignChar c = c == '-' || c == '+' [really-safe-money-gen] + isSignChar c = not (c == '-' || c == '+') [really-safe-money-gen]  [really-safe-money-gen]  mSign <- ReadP.option Nothing $ do [really-safe-money-gen]  signChar <- ReadP.satisfy isSignChar [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:123:19-34: [really-safe-money-gen] @@ -120,7 +120,7 @@ [really-safe-money-gen]  [really-safe-money-gen]  mSign <- ReadP.option Nothing $ do [really-safe-money-gen]  signChar <- ReadP.satisfy isSignChar [really-safe-money-gen] - pure $ Just $ signChar == '+' [really-safe-money-gen] + pure $ Just $ True [really-safe-money-gen]  [really-safe-money-gen]  units <- parseDigits step 0 [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:123:19-34: [really-safe-money-gen] @@ -120,7 +120,7 @@ [really-safe-money-gen]  [really-safe-money-gen]  mSign <- ReadP.option Nothing $ do [really-safe-money-gen]  signChar <- ReadP.satisfy isSignChar [really-safe-money-gen] - pure $ Just $ signChar == '+' [really-safe-money-gen] + pure $ Just $ False [really-safe-money-gen]  [really-safe-money-gen]  units <- parseDigits step 0 [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Numeric/DecimalLiteral.hs:123:19-34: [really-safe-money-gen] @@ -120,7 +120,7 @@ [really-safe-money-gen]  [really-safe-money-gen]  mSign <- ReadP.option Nothing $ do [really-safe-money-gen]  signChar <- ReadP.satisfy isSignChar [really-safe-money-gen] - pure $ Just $ signChar == '+' [really-safe-money-gen] + pure $ Just $ not (signChar == '+') [really-safe-money-gen]  [really-safe-money-gen]  units <- parseDigits step 0 [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:125:29-30: [really-safe-money-gen] @@ -122,7 +122,7 @@ [really-safe-money-gen]  signChar <- ReadP.satisfy isSignChar [really-safe-money-gen]  pure $ Just $ signChar == '+' [really-safe-money-gen]  [really-safe-money-gen] - units <- parseDigits step 0 [really-safe-money-gen] + units <- parseDigits step 1 [really-safe-money-gen]  [really-safe-money-gen]  ReadP.option (DecimalLiteral mSign units 0) $ do [really-safe-money-gen]  _ <- ReadP.satisfy (== '.') [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:127:44-45: [really-safe-money-gen] @@ -124,7 +124,7 @@ [really-safe-money-gen]  [really-safe-money-gen]  units <- parseDigits step 0 [really-safe-money-gen]  [really-safe-money-gen] - ReadP.option (DecimalLiteral mSign units 0) $ do [really-safe-money-gen] + ReadP.option (DecimalLiteral mSign units 1) $ do [really-safe-money-gen]  _ <- ReadP.satisfy (== '.') [really-safe-money-gen]  [really-safe-money-gen]  (m, e) <- parseDigits stepFraction (units, 0) [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:130:48-49: [really-safe-money-gen] @@ -127,7 +127,7 @@ [really-safe-money-gen]  ReadP.option (DecimalLiteral mSign units 0) $ do [really-safe-money-gen]  _ <- ReadP.satisfy (== '.') [really-safe-money-gen]  [really-safe-money-gen] - (m, e) <- parseDigits stepFraction (units, 0) [really-safe-money-gen] + (m, e) <- parseDigits stepFraction (units, 1) [really-safe-money-gen]  [really-safe-money-gen]  pure $ DecimalLiteral mSign m e [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/MultiAccount.hs:134:12-29: [really-safe-money-gen] @@ -131,7 +131,7 @@ [really-safe-money-gen]  Just a -> do [really-safe-money-gen]  r <- Account.subtract a account [really-safe-money-gen]  Just $ [really-safe-money-gen] - if r == Account.zero [really-safe-money-gen] + if True [really-safe-money-gen]  then M.delete currency m [really-safe-money-gen]  else M.insert currency r m [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/MultiAccount.hs:134:12-29: [really-safe-money-gen] @@ -131,7 +131,7 @@ [really-safe-money-gen]  Just a -> do [really-safe-money-gen]  r <- Account.subtract a account [really-safe-money-gen]  Just $ [really-safe-money-gen] - if r == Account.zero [really-safe-money-gen] + if False [really-safe-money-gen]  then M.delete currency m [really-safe-money-gen]  else M.insert currency r m [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/MultiAccount.hs:134:12-29: [really-safe-money-gen] @@ -131,7 +131,7 @@ [really-safe-money-gen]  Just a -> do [really-safe-money-gen]  r <- Account.subtract a account [really-safe-money-gen]  Just $ [really-safe-money-gen] - if r == Account.zero [really-safe-money-gen] + if not (r == Account.zero) [really-safe-money-gen]  then M.delete currency m [really-safe-money-gen]  else M.insert currency r m [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Money/MultiAccount.hs:134:9-37: [really-safe-money-gen] @@ -131,7 +131,7 @@ [really-safe-money-gen]  Just a -> do [really-safe-money-gen]  r <- Account.subtract a account [really-safe-money-gen]  Just $ [really-safe-money-gen] - if r == Account.zero [really-safe-money-gen] + if r == Account.zero [really-safe-money-gen]  then M.delete currency m [really-safe-money-gen]  else M.insert currency r m [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/MultiAccount.hs:120:12-29: [really-safe-money-gen] @@ -117,7 +117,7 @@ [really-safe-money-gen]  Just a -> do [really-safe-money-gen]  r <- Account.add a account [really-safe-money-gen]  Just $ [really-safe-money-gen] - if r == Account.zero [really-safe-money-gen] + if True [really-safe-money-gen]  then M.delete currency m [really-safe-money-gen]  else M.insert currency r m [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/MultiAccount.hs:120:12-29: [really-safe-money-gen] @@ -117,7 +117,7 @@ [really-safe-money-gen]  Just a -> do [really-safe-money-gen]  r <- Account.add a account [really-safe-money-gen]  Just $ [really-safe-money-gen] - if r == Account.zero [really-safe-money-gen] + if False [really-safe-money-gen]  then M.delete currency m [really-safe-money-gen]  else M.insert currency r m [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/MultiAccount.hs:120:12-29: [really-safe-money-gen] @@ -117,7 +117,7 @@ [really-safe-money-gen]  Just a -> do [really-safe-money-gen]  r <- Account.add a account [really-safe-money-gen]  Just $ [really-safe-money-gen] - if r == Account.zero [really-safe-money-gen] + if not (r == Account.zero) [really-safe-money-gen]  then M.delete currency m [really-safe-money-gen]  else M.insert currency r m [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Money/MultiAccount.hs:120:9-37: [really-safe-money-gen] @@ -117,7 +117,7 @@ [really-safe-money-gen]  Just a -> do [really-safe-money-gen]  r <- Account.add a account [really-safe-money-gen]  Just $ [really-safe-money-gen] - if r == Account.zero [really-safe-money-gen] + if r == Account.zero [really-safe-money-gen]  then M.delete currency m [really-safe-money-gen]  else M.insert currency r m [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/MultiAccount.hs:78:6-28: [really-safe-money-gen] @@ -75,7 +75,7 @@ [really-safe-money-gen]  [really-safe-money-gen]  fromAccount :: currency -> Account -> MultiAccount currency [really-safe-money-gen]  fromAccount currency amount = [really-safe-money-gen] - if amount == Account.zero [really-safe-money-gen] + if True [really-safe-money-gen]  then zero [really-safe-money-gen]  else MultiAccount $ M.singleton currency amount [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] 5 ms [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.00 seconds [really-safe-money-gen]  Test suite took:  0.00 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:270:13-22: [really-safe-money-gen] @@ -267,7 +267,7 @@ [really-safe-money-gen]  | n < d = [really-safe-money-gen]  let !ns' = S.insert n ns [really-safe-money-gen]  in longDivWithLimit (c * 10) (succ e) ns' (n * 10) [really-safe-money-gen] - | otherwise = [really-safe-money-gen] + | False = [really-safe-money-gen]  let (q, r') = n `quotRem` d [really-safe-money-gen]  in longDivWithLimit (c + q) e ns r' [really-safe-money-gen]  [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Numeric.DecimalLiteralSpec [really-safe-money-gen]  Rational [really-safe-money-gen]  ✓ can turn rational 400 % 1 into DecimalLiteral Nothing 400 0  0.05 ms [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.00 seconds [really-safe-money-gen]  Test suite took:  0.00 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:208:9-10: [really-safe-money-gen] @@ -205,7 +205,7 @@ [really-safe-money-gen]  -- Nothing [really-safe-money-gen]  fromRational :: Rational -> Maybe DecimalLiteral [really-safe-money-gen]  fromRational (n :% d) [really-safe-money-gen] - | n < 0 = (\(DecimalLiteral _ m e) -> DecimalLiteral (Just False) m e) <$> fromRatio (fromIntegral (abs n) % fromIntegral d) [really-safe-money-gen] + | n < 1 = (\(DecimalLiteral _ m e) -> DecimalLiteral (Just False) m e) <$> fromRatio (fromIntegral (abs n) % fromIntegral d) [really-safe-money-gen]  | otherwise = fromRatio (fromIntegral n % fromIntegral d) [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn a 'DecimalLiteral' into a 'Rational' [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Numeric.DecimalLiteralSpec [really-safe-money-gen]  Rational [really-safe-money-gen]  ✓ can turn rational 400 % 1 into DecimalLiteral Nothing 400 0  0.05 ms [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.00 seconds [really-safe-money-gen]  Test suite took:  0.00 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:209:5-14: [really-safe-money-gen] @@ -206,7 +206,7 @@ [really-safe-money-gen]  fromRational :: Rational -> Maybe DecimalLiteral [really-safe-money-gen]  fromRational (n :% d) [really-safe-money-gen]  | n < 0 = (\(DecimalLiteral _ m e) -> DecimalLiteral (Just False) m e) <$> fromRatio (fromIntegral (abs n) % fromIntegral d) [really-safe-money-gen] - | otherwise = fromRatio (fromIntegral n % fromIntegral d) [really-safe-money-gen] + | True = fromRatio (fromIntegral n % fromIntegral d) [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn a 'DecimalLiteral' into a 'Rational' [really-safe-money-gen]  -- [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Numeric.DecimalLiteralSpec [really-safe-money-gen]  Rational [really-safe-money-gen]  ✓ can turn rational 400 % 1 into DecimalLiteral Nothing 400 0  0.05 ms [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.00 seconds [really-safe-money-gen]  Test suite took:  0.00 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:209:5-14: [really-safe-money-gen] @@ -206,7 +206,7 @@ [really-safe-money-gen]  fromRational :: Rational -> Maybe DecimalLiteral [really-safe-money-gen]  fromRational (n :% d) [really-safe-money-gen]  | n < 0 = (\(DecimalLiteral _ m e) -> DecimalLiteral (Just False) m e) <$> fromRatio (fromIntegral (abs n) % fromIntegral d) [really-safe-money-gen] - | otherwise = fromRatio (fromIntegral n % fromIntegral d) [really-safe-money-gen] + | False = fromRatio (fromIntegral n % fromIntegral d) [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn a 'DecimalLiteral' into a 'Rational' [really-safe-money-gen]  -- [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Numeric.DecimalLiteralSpec [really-safe-money-gen]  Rational [really-safe-money-gen]  ✓ can turn rational 400 % 1 into DecimalLiteral Nothing 400 0  0.04 ms [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.00 seconds [really-safe-money-gen]  Test suite took:  0.00 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:145:28-30: [really-safe-money-gen] @@ -142,7 +142,7 @@ [really-safe-money-gen]  parseDigits :: (a -> Int -> Maybe a) -> a -> ReadP a [really-safe-money-gen]  parseDigits f z = do [really-safe-money-gen]  c <- ReadP.satisfy Char.isDigit [really-safe-money-gen] - let digit = Char.ord c - 48 [really-safe-money-gen] + let digit = Char.ord c - 0 [really-safe-money-gen]  case f z digit of [really-safe-money-gen]  Nothing -> fail "Failed to step the first digit" [really-safe-money-gen]  Just a -> ReadP.look >>= go a [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Numeric.DecimalLiteralSpec [really-safe-money-gen]  DecimalLiteral.fromString [really-safe-money-gen]  ✓ fails to parse scientific notation  0.02 ms [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.00 seconds [really-safe-money-gen]  Test suite took:  0.00 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:145:28-30: [really-safe-money-gen] @@ -142,7 +142,7 @@ [really-safe-money-gen]  parseDigits :: (a -> Int -> Maybe a) -> a -> ReadP a [really-safe-money-gen]  parseDigits f z = do [really-safe-money-gen]  c <- ReadP.satisfy Char.isDigit [really-safe-money-gen] - let digit = Char.ord c - 48 [really-safe-money-gen] + let digit = Char.ord c - 1 [really-safe-money-gen]  case f z digit of [really-safe-money-gen]  Nothing -> fail "Failed to step the first digit" [really-safe-money-gen]  Just a -> ReadP.look >>= go a [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Numeric.DecimalLiteralSpec [really-safe-money-gen]  DecimalLiteral.fromString [really-safe-money-gen]  ✓ fails to parse scientific notation  0.02 ms [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.00 seconds [really-safe-money-gen]  Test suite took:  0.00 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:145:28-30: [really-safe-money-gen] @@ -142,7 +142,7 @@ [really-safe-money-gen]  parseDigits :: (a -> Int -> Maybe a) -> a -> ReadP a [really-safe-money-gen]  parseDigits f z = do [really-safe-money-gen]  c <- ReadP.satisfy Char.isDigit [really-safe-money-gen] - let digit = Char.ord c - 48 [really-safe-money-gen] + let digit = Char.ord c - -48 [really-safe-money-gen]  case f z digit of [really-safe-money-gen]  Nothing -> fail "Failed to step the first digit" [really-safe-money-gen]  Just a -> ReadP.look >>= go a [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Numeric.DecimalLiteralSpec [really-safe-money-gen]  DecimalLiteral.fromString [really-safe-money-gen]  ✓ fails to parse scientific notation  0.02 ms [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.00 seconds [really-safe-money-gen]  Test suite took:  0.00 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:158:9-18: [really-safe-money-gen] @@ -155,7 +155,7 @@ [really-safe-money-gen]  case f a digit of [really-safe-money-gen]  Nothing -> fail "Failed to step the digit" [really-safe-money-gen]  Just a' -> go a' cs [really-safe-money-gen] - | otherwise = return a [really-safe-money-gen] + | True = return a [really-safe-money-gen]  [really-safe-money-gen]  -- | Render a decimal literal to a string [really-safe-money-gen]  -- [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Numeric.DecimalLiteralSpec [really-safe-money-gen]  DecimalLiteral.fromString [really-safe-money-gen]  ✓ fails to parse scientific notation  0.02 ms [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.00 seconds [really-safe-money-gen]  Test suite took:  0.00 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Numeric/DecimalLiteral.hs:158:9-18: [really-safe-money-gen] @@ -155,7 +155,7 @@ [really-safe-money-gen]  case f a digit of [really-safe-money-gen]  Nothing -> fail "Failed to step the digit" [really-safe-money-gen]  Just a' -> go a' cs [really-safe-money-gen] - | otherwise = return a [really-safe-money-gen] + | False = return a [really-safe-money-gen]  [really-safe-money-gen]  -- | Render a decimal literal to a string [really-safe-money-gen]  -- [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Numeric.DecimalLiteralSpec [really-safe-money-gen]  DecimalLiteral.fromString [really-safe-money-gen]  ✓ fails to parse scientific notation  0.03 ms [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.00 seconds [really-safe-money-gen]  Test suite took:  0.00 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Numeric/DecimalLiteral.hs:125:29-30: [really-safe-money-gen] @@ -122,7 +122,7 @@ [really-safe-money-gen]  signChar <- ReadP.satisfy isSignChar [really-safe-money-gen]  pure $ Just $ signChar == '+' [really-safe-money-gen]  [really-safe-money-gen] - units <- parseDigits step 0 [really-safe-money-gen] + units <- parseDigits step 1 [really-safe-money-gen]  [really-safe-money-gen]  ReadP.option (DecimalLiteral mSign units 0) $ do [really-safe-money-gen]  _ <- ReadP.satisfy (== '.') [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Numeric.DecimalLiteralSpec [really-safe-money-gen]  DecimalLiteral.fromString [really-safe-money-gen]  ✓ fails to parse scientific notation  0.02 ms [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.00 seconds [really-safe-money-gen]  Test suite took:  0.00 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/MultiAccount.hs:78:6-28: [really-safe-money-gen] @@ -75,7 +75,7 @@ [really-safe-money-gen]  [really-safe-money-gen]  fromAccount :: currency -> Account -> MultiAccount currency [really-safe-money-gen]  fromAccount currency amount = [really-safe-money-gen] - if amount == Account.zero [really-safe-money-gen] + if True [really-safe-money-gen]  then zero [really-safe-money-gen]  else MultiAccount $ M.singleton currency aTesting mutation ConstBool at src/Money/MultiAccount.hs:78:6-28: [really-safe-money-gen] @@ -75,7 +75,7 @@ [really-safe-money-gen]  [really-safe-money-gen]  fromAccount :: currency -> Account -> MultiAccount currency [really-safe-money-gen]  fromAccount currency amount = [really-safe-money-gen] - if amount == Account.zero [really-safe-money-gen] + if False [really-safe-money-gen]  then zero [really-safe-money-gen]  else MultiAccount $ M.singleton currency amount [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/MultiAccount.hs:78:6-28: [really-safe-money-gen] @@ -75,7 +75,7 @@ [really-safe-money-gen]  [really-safe-money-gen]  fromAccount :: currency -> Account -> MultiAccount currency [really-safe-money-gen]  fromAccount currency amount = [really-safe-money-gen] - if amount == Account.zero [really-safe-money-gen] + if not (amount == Account.zero) [really-safe-money-gen]  then zero [really-safe-money-gen]  else MultiAccount $ M.singleton currency amount [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Money/MultiAccount.hs:78:3-52: [really-safe-money-gen] @@ -75,7 +75,7 @@ [really-safe-money-gen]  [really-safe-money-gen]  fromAccount :: currency -> Account -> MultiAccount currency [really-safe-money-gen]  fromAccount currency amount = [really-safe-money-gen] - if amount == Account.zero [really-safe-money-gen] + if amount == Account.zero [really-safe-money-gen]  then zero [really-safe-money-gen]  else MultiAccount $ M.singleton currency amount [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/MultiAccount.hs:69:13-30: [really-safe-money-gen] @@ -66,7 +66,7 @@ [really-safe-money-gen]  [ genericValidate ma, [really-safe-money-gen]  decorateMap m $ \_ a -> [really-safe-money-gen]  declare "The account is not zero" $ [really-safe-money-gen] - a /= Account.zero [really-safe-money-gen] + True [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen]  -- TODO no empty currencies [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/MultiAccount.hs:69:13-30: [really-safe-money-gen] @@ -66,7 +66,7 @@ [really-safe-money-gen]  [ genericValidate ma, [really-safe-money-gen]  decorateMap m $ \_ a -> [really-safe-money-gen]  declare "The account is not zero" $ [really-safe-money-gen] - a /= Account.zero [really-safe-money-gen] + False [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen]  -- TODO no empty currencies [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/MultiAccount.hs:69:13-30: [really-safe-money-gen] @@ -66,7 +66,7 @@ [really-safe-money-gen]  [ genericValidate ma, [really-safe-money-gen]  decorateMap m $ \_ a -> [really-safe-money-gen]  declare "The account is not zero" $ [really-safe-money-gen] - a /= Account.zero [really-safe-money-gen] + not (a /= Account.zero) [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen]  -- TODO no empty currencies [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ListLit at src/Money/MultiAccount.hs:66:7-8: [really-safe-money-gen] @@ -63,7 +63,7 @@ [really-safe-money-gen]  instance (Validity currency, Show currency, Ord currency) => Validity (MultiAccount currency) where [really-safe-money-gen]  validate ma@(MultiAccount m) = [really-safe-money-gen]  mconcat [really-safe-money-gen] - [ genericValidate ma, [really-safe-money-gen] + [ genericValidate ma, [really-safe-money-gen]  decorateMap m $ \_ a -> [really-safe-money-gen]  declare "The account is not zero" $ [really-safe-money-gen]  a /= Account.zero [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ListLit at src/Money/MultiAccount.hs:66:7-8: [really-safe-money-gen] @@ -63,7 +63,7 @@ [really-safe-money-gen]  instance (Validity currency, Show currency, Ord currency) => Validity (MultiAccount currency) where [really-safe-money-gen]  validate ma@(MultiAccount m) = [really-safe-money-gen]  mconcat [really-safe-money-gen] - [ genericValidate ma, [really-safe-money-gen] + [ genericValidate ma, [really-safe-money-gen]  decorateMap m $ \_ a -> [really-safe-money-gen]  declare "The account is not zero" $ [really-safe-money-gen]  a /= Account.zero [really-safe-money-gen]  [really-safe-money-gen] mount [really-safe-money-gen]  [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.MultiAccountSpec [really-safe-money-gen]  fromAccount [really-safe-money-gen]  ✓ produces valid amounts  3.19 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 1000 [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.00 seconds [really-safe-money-gen]  Test suite took:  0.01 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/MultiAccount.hs:78:6-28: [really-safe-money-gen] @@ -75,7 +75,7 @@ [really-safe-money-gen]  [really-safe-money-gen]  fromAccount :: currency -> Account -> MultiAccount currency [really-safe-money-gen]  fromAccount currency amount = [really-safe-money-gen] - if amount == Account.zero [really-safe-money-gen] + if False [really-safe-money-gen]  then zero [really-safe-money-gen]  else MultiAccount $ M.singleton currency amount [really-safe-money-gen]  [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.MultiAccountSpec [really-safe-money-gen]  fromAccount [really-safe-money-gen]  ✓ produces valid amounts  2.93 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 1000 [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.00 seconds [really-safe-money-gen]  Test suite took:  0.01 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/MultiAccount.hs:69:13-30: [really-safe-money-gen] @@ -66,7 +66,7 @@ [really-safe-money-gen]  [ genericValidate ma, [really-safe-money-gen]  decorateMap m $ \_ a -> [really-safe-money-gen]  declare "The account is not zero" $ [really-safe-money-gen] - a /= Account.zero [really-safe-money-gen] + True [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen]  -- TODO no empty currencies [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.MultiAccountSpec [really-safe-money-gen]  subtractAmount [really-safe-money-gen]  ✓ produces valid amounts  40.02 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  add [really-safe-money-gen]  ✓ produces valid amounts  67.91 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  GenValid (MultiAccount Currency) [really-safe-money-gen]  genValid :: Gen (MultiAccount Currency) [really-safe-money-gen]  ✓ only generates valid '(MultiAccount Currency)'s  59.43 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  sum [really-safe-money-gen]  ✓ produces valid amounts  99.10 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  fromAccount [really-safe-money-gen]  ✓ produces valid amounts  7.06 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  addAccount [really-safe-money-gen]  ✓ produces valid amounts  37.40 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ produces valid amounts  71.78 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  addAmount [really-safe-money-gen]  ✓ produces valid amounts  40.72 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtractAccount [really-safe-money-gen]  ✓ produces valid amounts  39.53 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 9000 [really-safe-money-gen]  Passed: 9 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.46 seconds [really-safe-money-gen]  Test suite took:  0.47 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/MultiAccount.hs:69:13-30: [really-safe-money-gen] @@ -66,7 +66,7 @@ [really-safe-money-gen]  [ genericValidate ma, [really-safe-money-gen]  decorateMap m $ \_ a -> [really-safe-money-gen]  declare "The account is not zero" $ [really-safe-money-gen] - a /= Account.zero [really-safe-money-gen] + False [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen]  -- TODO no empty currencies [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.MultiAccountSpec [really-safe-money-gen]  subtractAmount [really-safe-money-gen]  ✓ produces valid amounts  38.57 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  add [really-safe-money-gen]  ✓ produces valid amounts  68.64 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  GenValid (MultiAccount Currency) [really-safe-money-gen]  genValid :: Gen (MultiAccount Currency) [really-safe-money-gen]  ✓ only generates valid '(MultiAccount Currency)'s  63.55 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  sum [really-safe-money-gen]  ✓ produces valid amounts  103.75 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  fromAccount [really-safe-money-gen]  ✓ produces valid amounts  8.12 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  addAccount [really-safe-money-gen]  ✓ produces valid amounts  39.57 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ produces valid amounts  66.51 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  addAmount [really-safe-money-gen]  ✓ produces valid amounts  38.52 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtractAccount [really-safe-money-gen]  ✓ produces valid amounts  40.06 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 9000 [really-safe-money-gen]  Passed: 9 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.47 seconds [really-safe-money-gen]  Test suite took:  0.47 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ListLit at src/Money/MultiAccount.hs:66:7-8: [really-safe-money-gen] @@ -63,7 +63,7 @@ [really-safe-money-gen]  instance (Validity currency, Show currency, Ord currency) => Validity (MultiAccount currency) where [really-safe-money-gen]  validate ma@(MultiAccount m) = [really-safe-money-gen]  mconcat [really-safe-money-gen] - [ genericValidate ma, [really-safe-money-gen] + [ genericValidate ma, [really-safe-money-gen]  decorateMap m $ \_ a -> [really-safe-money-gen]  declare "The account is not zero" $ [really-safe-money-gen]  a /= Account.zero [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.MultiAccountSpec [really-safe-money-gen]  subtractAmount [really-safe-money-gen]  ✓ produces valid amounts  13.28 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  add [really-safe-money-gen]  ✓ produces valid amounts  25.61 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  GenValid (MultiAccount Currency) [really-safe-money-gen]  genValid :: Gen (MultiAccount Currency) [really-safe-money-gen]  ✓ only generates valid '(MultiAccount Currency)'s  2.10 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  sum [really-safe-money-gen]  ✓ produces valid amounts  50.24 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  zero [really-safe-money-gen]  ✓ is valid  0.00 ms [really-safe-money-gen]  fromAccount [really-safe-money-gen]  ✓ produces valid amounts  1.62 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  addAccount [really-safe-money-gen]  ✓ produces valid amounts  13.46 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ produces valid amounts  24.85 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  addAmount [really-safe-money-gen]  ✓ produces valid amounts  13.55 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtractAccount [really-safe-money-gen]  ✓ produces valid amounts  12.40 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 9001 [really-safe-money-gen]  Passed: 10 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.16 seconds [really-safe-money-gen]  Test suite took:  0.16 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ListLit at src/Money/MultiAccount.hs:66:7-8: [really-safe-money-gen] @@ -63,7 +63,7 @@ [really-safe-money-gen]  inTesting mutation IntLit at src/Money/Account.hs:421:32-33: [really-safe-money-gen] @@ -418,7 +418,7 @@ [really-safe-money-gen]  multiply :: Int32 -> Account -> Maybe Account [really-safe-money-gen]  multiply factor account = [really-safe-money-gen]  let af = (fromIntegral :: Int32 -> Word32) ((Prelude.abs :: Int32 -> Int32) factor) [really-safe-money-gen] - f = case (compare factor 0, compare account zero) of [really-safe-money-gen] + f = case (compare factor 1, compare account zero) of [really-safe-money-gen]  (EQ, _) -> const zero [really-safe-money-gen]  (_, EQ) -> const zero [really-safe-money-gen]  (GT, GT) -> Positive [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Account.hs:451:14-23: [really-safe-money-gen] @@ -448,7 +448,7 @@ [really-safe-money-gen]  DistributedIntoZeroChunks -> DistributedIntoZeroChunks [really-safe-money-gen]  DistributedZero -> DistributedZero [really-safe-money-gen]  DistributedIntoEqualChunks numberOfChunks chunk -> [really-safe-money-gen] - if a >= zero [really-safe-money-gen] + if True [really-safe-money-gen]  then DistributedIntoEqualChunks numberOfChunks (Positive chunk) [really-safe-money-gen]  else DistributedIntoEqualChunks numberOfChunks (Negative chunk) [really-safe-money-gen]  DistributedIntoUnequalChunks numberOfLargerChunks largerChunk numberOfSmallerChunks smallerChunk -> [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Account.hs:451:14-23: [really-safe-money-gen] @@ -448,7 +448,7 @@ [really-safe-money-gen]  DistributedIntoZeroChunks -> DistributedIntoZeroChunks [really-safe-money-gen]  DistributedZero -> DistributedZero [really-safe-money-gen]  DistributedIntoEqualChunks numberOfChunks chunk -> [really-safe-money-gen] - if a >= zero [really-safe-money-gen] + if False [really-safe-money-gen]  then DistributedIntoEqualChunks numberOfChunks (Positive chunk) [really-safe-money-gen]  else DistributedIntoEqualChunks numberOfChunks (Negative chunk) [really-safe-money-gen]  DistributedIntoUnequalChunks numberOfLargerChunks largerChunk numberOfSmallerChunks smallerChunk -> [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/Account.hs:451:14-23: [really-safe-money-gen] @@ -448,7 +448,7 @@ [really-safe-money-gen]  DistributedIntoZeroChunks -> DistributedIntoZeroChunks [really-safe-money-gen]  DistributedZero -> DistributedZero [really-safe-money-gen]  DistributedIntoEqualChunks numberOfChunks chunk -> [really-safe-money-gen] - if a >= zero [really-safe-money-gen] + if not (a >= zero) [really-safe-money-gen]  then DistributedIntoEqualChunks numberOfChunks (Positive chunk) [really-safe-money-gen]  else DistributedIntoEqualChunks numberOfChunks (Negative chunk) [really-safe-money-gen]  DistributedIntoUnequalChunks numberOfLargerChunks largerChunk numberOfSmallerChunks smallerChunk -> [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Money/Account.hs:451:11-76: [really-safe-money-gen] @@ -448,7 +448,7 @@ [really-safe-money-gen]  DistributedIntoZeroChunks -> DistributedIntoZeroChunks [really-safe-money-gen]  DistributedZero -> DistributedZero [really-safe-money-gen]  DistributedIntoEqualChunks numberOfChunks chunk -> [really-safe-money-gen] - if a >= zero [really-safe-money-gen] + if a >= zero [really-safe-money-gen]  then DistributedIntoEqualChunks numberOfChunks (Positive chunk) [really-safe-money-gen]  else DistributedIntoEqualChunks numberOfChunks (Negative chunk) [really-safe-money-gen]  DistributedIntoUnequalChunks numberOfLargerChunks largerChunk numberOfSmallerChunks smallerChunk -> [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Account.hs:455:14-23: [really-safe-money-gen] @@ -452,7 +452,7 @@ [really-safe-money-gen]  then DistributedIntoEqualChunks numberOfChunks (Positive chunk) [really-safe-money-gen]  else DistributedIntoEqualChunks numberOfChunks (Negative chunk) [really-safe-money-gen]  DistributedIntoUnequalChunks numberOfLargerChunks largerChunk numberOfSmallerChunks smallerChunk -> [really-safe-money-gen] - if a >= zero [really-safe-money-gen] + if True [really-safe-money-gen]  then DistributedIntoUnequalChunks numberOfLargerChunks (Positive largerChunk) numberOfSmallerChunks (Positive smallerChunk) [really-safe-money-gen]  else DistributedIntoUnequalChunks numberOfSmallerChunks (Negative smallerChunk) numberOfLargerChunks (Negative largerChunk) [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Account.hs:455:14-23: [really-safe-money-gen] @@ -452,7 +452,7 @@ [really-safe-money-gen]  then DistributedIntoEqualChunks numberOfChunks (Positive chunk) [really-safe-money-gen]  else DistributedIntoEqualChunks numberOfChunks (Negative chunk) [really-safe-money-gen]  DistributedIntoUnequalChunks numberOfLargerChunks largerChunk numberOfSmallerChunks smallerChunk -> [really-safe-money-gen] - if a >= zero [really-safe-money-gen] + if False [really-safe-money-gen]  then DistributedIntoUnequalChunks numberOfLargerChunks (Positive largerChunk) numberOfSmallerChunks (Positive smallerChunk) [really-safe-money-gen]  else DistributedIntoUnequalChunks numberOfSmallerChunks (Negative smallerChunk) numberOfLargerChunks (Negative largerChunk) [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/Account.hs:455:14-23: [really-safe-money-gen] @@ -452,7 +452,7 @@ [really-safe-money-gen]  then DistributedIntoEqualChunks numberOfChunks (Positive chunk) [really-safe-money-gen]  else DistributedIntoEqualChunks numberOfChunks (Negative chunk) [really-safe-money-gen]  DistributedIntoUnequalChunks numberOfLargerChunks largerChunk numberOfSmallerChunks smallerChunk -> [really-safe-money-gen] - if a >= zero [really-safe-money-gen] + if not (a >= zero) [really-safe-money-gen]  then DistributedIntoUnequalChunks numberOfLargerChunks (Positive largerChunk) numberOfSmallerChunks (Positive smallerChunk) [really-safe-money-gen]  else DistributedIntoUnequalChunks numberOfSmallerChunks (Negative smallerChunk) numberOfLargerChunks (Negative largerChunk) [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Money/Account.hs:455:11-136: [really-safe-money-gen] @@ -452,7 +452,7 @@ [really-safe-money-gen]  then DistributedIntoEqualChunks numberOfChunks (Positive chunk) [really-safe-money-gen]  else DistributedIntoEqualChunks numberOfChunks (Negative chunk) [really-safe-money-gen]  DistributedIntoUnequalChunks numberOfLargerChunks largerChunk numberOfSmallerChunks smallerChunk -> [really-safe-money-gen] - if a >= zero [really-safe-money-gen] + if a >= zero [really-safe-money-gen]  then DistributedIntoUnequalChunks numberOfLargerChunks (Positive largerChunk) numberOfSmallerChunks (Positive smallerChunk) [really-safe-money-gen]  else DistributedIntoUnequalChunks numberOfSmallerChunks (Negative smallerChunk) numberOfLargerChunks (Negative largerChunk) [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Account.hs:495:17-18: [really-safe-money-gen] @@ -492,7 +492,7 @@ [really-safe-money-gen]  fraction rounding account f = [really-safe-money-gen]  let af = (realToFrac :: Rational -> Ratio Natural) ((Prelude.abs :: Rational -> Rational) f) [really-safe-money-gen]  ro = [really-safe-money-gen] - if f >= 0 [really-safe-money-gen] + if f >= 1 [really-safe-money-gen]  then rounding [really-safe-money-gen]  else case rounding of [really-safe-money-gen]  RoundUp -> RoundDown [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Account.hs:495:12-18: [really-safe-money-gen] @@ -492,7 +492,7 @@ [really-safe-money-gen]  fraction rounding account f = [really-safe-money-gen]  let af = (realToFrac :: Rational -> Ratio Natural) ((Prelude.abs :: Rational -> Rational) f) [really-safe-money-gen]  ro = [really-safe-money-gen] - if f >= 0 [really-safe-money-gen] + if True [really-safe-money-gen]  then rounding [really-safe-money-gen]  else case rounding of [really-safe-money-gen]  RoundUp -> RoundDown [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Account.hs:495:12-18: [really-safe-money-gen] @@ -492,7 +492,7 @@ [really-safe-money-gen]  fraction rounding account f = [really-safe-money-gen]  let af = (realToFrac :: Rational -> Ratio Natural) ((Prelude.abs :: Rational -> Rational) f) [really-safe-money-gen]  ro = [really-safe-money-gen] - if f >= 0 [really-safe-money-gen] + if False [really-safe-money-gen]  then rounding [really-safe-money-gen]  else case rounding of [really-safe-money-gen]  RoundUp -> RoundDown [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/Account.hs:495:12-18: [really-safe-money-gen] @@ -492,7 +492,7 @@ [really-safe-money-gen]  fraction rounding account f = [really-safe-money-gen]  let af = (realToFrac :: Rational -> Ratio Natural) ((Prelude.abs :: Rational -> Rational) f) [really-safe-money-gen]  ro = [really-safe-money-gen] - if f >= 0 [really-safe-money-gen] + if not (f >= 0) [really-safe-money-gen]  then rounding [really-safe-money-gen]  else case rounding of [really-safe-money-gen]  RoundUp -> RoundDown [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Money/Account.hs:495:9-41: [really-safe-money-gen] @@ -492,7 +492,7 @@ [really-safe-money-gen]  fraction rounding account f = [really-safe-money-gen]  let af = (realToFrac :: Rational -> Ratio Natural) ((Prelude.abs :: Rational -> Rational) f) [really-safe-money-gen]  ro = [really-safe-money-gen] - if f >= 0 [really-safe-money-gen] + if f >= 0 [really-safe-money-gen]  then rounding [really-safe-money-gen]  else case rounding of [really-safe-money-gen]  RoundUp -> RoundDown [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Account.hs:503:15-16: [really-safe-money-gen] @@ -500,7 +500,7 @@ [really-safe-money-gen]  RoundNearest -> RoundNearest [really-safe-money-gen]  (ma, ar) = fractionRatio ro account af [really-safe-money-gen]  r = (realToFrac :: Ratio Natural -> Rational) ar [really-safe-money-gen] - in if f >= 0 [really-safe-money-gen] + in if f >= 1 [really-safe-money-gen]  then (ma, r) [really-safe-money-gen]  else (negate <$> ma, -r) [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Account.hs:503:10-16: [really-safe-money-gen] @@ -500,7 +500,7 @@ [really-safe-money-gen]  RoundNearest -> RoundNearest [really-safe-money-gen]  (ma, ar) = fractionRatio ro account af [really-safe-money-gen]  r = (realToFrac :: Ratio Natural -> Rational) ar [really-safe-money-gen] - in if f >= 0 [really-safe-money-gen] + in if True [really-safe-money-gen]  then (ma, r) [really-safe-money-gen]  else (negate <$> ma, -r) [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Account.hs:503:10-16: [really-safe-money-gen] @@ -500,7 +500,7 @@ [really-safe-money-gen]  RoundNearest -> RoundNearest [really-safe-money-gen]  (ma, ar) = fractionRatio ro account af [really-safe-money-gen]  r = (realToFrac :: Ratio Natural -> Rational) ar [really-safe-money-gen] - in if f >= 0 [really-safe-money-gen] + in if False [really-safe-money-gen]  then (ma, r) [really-safe-money-gen]  else (negate <$> ma, -r) [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/Account.hs:503:10-16: [really-safe-money-gen] @@ -500,7 +500,7 @@ [really-safe-money-gen]  RoundNearest -> RoundNearest [really-safe-money-gen]  (ma, ar) = fractionRatio ro account af [really-safe-money-gen]  r = (realToFrac :: Ratio Natural -> Rational) ar [really-safe-money-gen] - in if f >= 0 [really-safe-money-gen] + in if not (f >= 0) [really-safe-money-gen]  then (ma, r) [really-safe-money-gen]  else (negate <$> ma, -r) [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Money/Account.hs:503:7-33: [really-safe-money-gen] @@ -500,7 +500,7 @@ [really-safe-money-gen]  RoundNearest -> RoundNearest [really-safe-money-gen]  (ma, ar) = fractionRatio ro account af [really-safe-money-gen]  r = (realToFrac :: Ratio Natural -> Rational) ar [really-safe-money-gen] - in if f >= 0 [really-safe-money-gen] + in if f >= 0 [really-safe-money-gen]  then (ma, r) [really-safe-money-gen]  else (negate <$> ma, -r) [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Account.hs:233:19-20: [really-safe-money-gen] @@ -230,7 +230,7 @@ [really-safe-money-gen]  fromRational :: QuantisationFactor -> Rational -> Maybe Account [really-safe-money-gen]  fromRational quantisationFactor r = [really-safe-money-gen]  let r' = Prelude.abs r [really-safe-money-gen] - f = if r >= 0 then Positive else Negative [really-safe-money-gen] + f = if r >= 1 then Positive else Negative [really-safe-money-gen]  in f <$> Amount.fromRational quantisationFactor r' [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn a 'Rational' into an amount of money. [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Account.hs:233:14-20: [really-safe-money-gen] @@ -230,7 +230,7 @@ [really-safe-money-gen]  fromRational :: QuantisationFactor -> Rational -> Maybe Account [really-safe-money-gen]  fromRational quantisationFactor r = [really-safe-money-gen]  let r' = Prelude.abs r [really-safe-money-gen] - f = if r >= 0 then Positive else Negative [really-safe-money-gen] + f = if True then Positive else Negative [really-safe-money-gen]  in f <$> Amount.fromRational quantisationFactor r' [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn a 'Rational' into an amount of money. [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Account.hs:233:14-20: [really-safe-money-gen] @@ -230,7 +230,7 @@ [really-safe-money-gen]  fromRational :: QuantisationFactor -> Rational -> Maybe Account [really-safe-money-gen]  fromRational quantisationFactor r = [really-safe-money-gen]  let r' = Prelude.abs r [really-safe-money-gen] - f = if r >= 0 then Positive else Negative [really-safe-money-gen] + f = if False then Positive else Negative [really-safe-money-gen]  in f <$> Amount.fromRational quantisationFactor r' [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn a 'Rational' into an amount of money. [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/Account.hs:233:14-20: [really-safe-money-gen] @@ -230,7 +230,7 @@ [really-safe-money-gen]  fromRational :: QuantisationFactor -> Rational -> Maybe Account [really-safe-money-gen]  fromRational quantisationFactor r = [really-safe-money-gen]  let r' = Prelude.abs r [really-safe-money-gen] - f = if r >= 0 then Positive else Negative [really-safe-money-gen] + f = if not (r >= 0) then Positive else Negative [really-safe-money-gen]  in f <$> Amount.fromRational quantisationFactor r' [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn a 'Rational' into an amount of money. [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Money/Account.hs:233:11-48: [really-safe-money-gen] @@ -230,7 +230,7 @@ [really-safe-money-gen]  fromRational :: QuantisationFactor -> Rational -> Maybe Account [really-safe-money-gen]  fromRational quantisationFactor r = [really-safe-money-gen]  let r' = Prelude.abs r [really-safe-money-gen] - f = if r >= 0 then Positive else Negative [really-safe-money-gen] + f = if r >= 0 then Positive else Negative [really-safe-money-gen]  in f <$> Amount.fromRational quantisationFactor r' [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn a 'Rational' into an amount of money. [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Account.hs:197:19-20: [really-safe-money-gen] @@ -194,7 +194,7 @@ [really-safe-money-gen]  fromDouble :: QuantisationFactor -> Double -> Maybe Account [really-safe-money-gen]  fromDouble quantisationFactor d = [really-safe-money-gen]  let d' = Prelude.abs d [really-safe-money-gen] - f = if d >= 0 then Positive else Negative [really-safe-money-gen] + f = if d >= 1 then Positive else Negative [really-safe-money-gen]  in f <$> Amount.fromDouble quantisationFactor d' [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn an amount of money into a 'Rational'. [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Account.hs:197:14-20: [really-safe-money-gen] @@ -194,7 +194,7 @@ [really-safe-money-gen]  fromDouble :: QuantisationFactor -> Double -> Maybe Account [really-safe-money-gen]  fromDouble quantisationFactor d = [really-safe-money-gen]  let d' = Prelude.abs d [really-safe-money-gen] - f = if d >= 0 then Positive else Negative [really-safe-money-gen] + f = if True then Positive else Negative [really-safe-money-gen]  in f <$> Amount.fromDouble quantisationFactor d' [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn an amount of money into a 'Rational'. [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Account.hs:197:14-20: [really-safe-money-gen] @@ -194,7 +194,7 @@ [really-safe-money-gen]  fromDouble :: QuantisationFactor -> Double -> Maybe Account [really-safe-money-gen]  fromDouble quantisationFactor d = [really-safe-money-gen]  let d' = Prelude.abs d [really-safe-money-gen] - f = if d >= 0 then Positive else Negative [really-safe-money-gen] + f = if False then Positive else Negative [really-safe-money-gen]  in f <$> Amount.fromDouble quantisationFactor d' [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn an amount of money into a 'Rational'. [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/Account.hs:197:14-20: [really-safe-money-gen] @@ -194,7 +194,7 @@ [really-safe-money-gen]  fromDouble :: QuantisationFactor -> Double -> Maybe Account [really-safe-money-gen]  fromDouble quantisationFactor d = [really-safe-money-gen]  let d' = Prelude.abs d [really-safe-money-gen] - f = if d >= 0 then Positive else Negative [really-safe-money-gen] + f = if not (d >= 0) then Positive else Negative [really-safe-money-gen]  in f <$> Amount.fromDouble quantisationFactor d' [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn an amount of money into a 'Rational'. [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Money/Account.hs:197:11-48: [really-safe-money-gen] @@ -194,7 +194,7 @@ [really-safe-money-gen]  fromDouble :: QuantisationFactor -> Double -> Maybe Account [really-safe-money-gen]  fromDouble quantisationFactor d = [really-safe-money-gen]  let d' = Prelude.abs d [really-safe-money-gen] - f = if d >= 0 then Positive else Negative [really-safe-money-gen] + f = if d >= 0 then Positive else Negative [really-safe-money-gen]  in f <$> Amount.fromDouble quantisationFactor d' [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn an amount of money into a 'Rational'. [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Account.hs:123:10-23: [really-safe-money-gen] @@ -120,7 +120,7 @@ [really-safe-money-gen]  maxBoundI = (toInteger :: Word64 -> Integer) (maxBound :: Word64) [really-safe-money-gen]  a :: Integer [really-safe-money-gen]  a = (Prelude.abs :: Integer -> Integer) i [really-safe-money-gen] - in if a > maxBoundI [really-safe-money-gen] + in if True [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else [really-safe-money-gen]  let w :: Word64 [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Account.hs:123:10-23: [really-safe-money-gen] @@ -120,7 +120,7 @@ [really-safe-money-gen]  maxBoundI = (toInteger :: Word64 -> Integer) (maxBound :: Word64) [really-safe-money-gen]  a :: Integer [really-safe-money-gen]  a = (Prelude.abs :: Integer -> Integer) i [really-safe-money-gen] - in if a > maxBoundI [really-safe-money-gen] + in if False [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else [really-safe-money-gen]  let w :: Word64 [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/Account.hs:123:10-23: [really-safe-money-gen] @@ -120,7 +120,7 @@ [really-safe-money-gen]  maxBoundI = (toInteger :: Word64 -> Integer) (maxBound :: Word64) [really-safe-money-gen]  a :: Integer [really-safe-money-gen]  a = (Prelude.abs :: Integer -> Integer) i [really-safe-money-gen] - in if a > maxBoundI [really-safe-money-gen] + in if not (a > maxBoundI) [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else [really-safe-money-gen]  let w :: Word64 [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Account.hs:131:25-26: [really-safe-money-gen] @@ -128,7 +128,7 @@ [really-safe-money-gen]  amount :: Amount [really-safe-money-gen]  amount = Amount.fromMinimalQuantisations w [really-safe-money-gen]  in Just $ [really-safe-money-gen] - if i >= 0 [really-safe-money-gen] + if i >= 1 [really-safe-money-gen]  then Positive amount [really-safe-money-gen]  else Negative amount [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Account.hs:131:20-26: [really-safe-money-gen] @@ -128,7 +128,7 @@ [really-safe-money-gen]  amount :: Amount [really-safe-money-gen]  amount = Amount.fromMinimalQuantisations w [really-safe-money-gen]  in Just $ [really-safe-money-gen] - if i >= 0 [really-safe-money-gen] + if True [really-safe-money-gen]  then Positive amount [really-safe-money-gen]  else Negative amount [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Account.hs:131:20-26: [really-safe-money-gen] @@ -128,7 +128,7 @@ [really-safe-money-gen]  amount :: Amount [really-safe-money-gen]  amount = Amount.fromMinimalQuantisations w [really-safe-money-gen]  in Just $ [really-safe-money-gen] - if i >= 0 [really-safe-money-gen] + if False [really-safe-money-gen]  then Positive amount [really-safe-money-gen]  else Negative amount [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/Account.hs:131:20-26: [really-safe-money-gen] @@ -128,7 +128,7 @@ [really-safe-money-gen]  amount :: Amount [really-safe-money-gen]  amount = Amount.fromMinimalQuantisations w [really-safe-money-gen]  in Just $ [really-safe-money-gen] - if i >= 0 [really-safe-money-gen] + if not (i >= 0) [really-safe-money-gen]  then Positive amount [really-safe-money-gen]  else Negative amount [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Money/Account.hs:131:17-39: [really-safe-money-gen] @@ -128,7 +128,7 @@ [really-safe-money-gen]  amount :: Amount [really-safe-money-gen]  amount = Amount.fromMinimalQuantisations w [really-safe-money-gen]  in Just $ [really-safe-money-gen] - if i >= 0 [really-safe-money-gen] + if i >= 0 [really-safe-money-gen]  then Positive amount [really-safe-money-gen]  else Negative amount [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Money/Account.hs:123:7-39: [really-safe-money-gen] @@ -120,7 +120,7 @@ [really-safe-money-gen]  maxBoundI = (toInteger :: Word64 -> Integer) (maxBound :: Word64) [really-safe-money-gen]  a :: Integer [really-safe-money-gen]  a = (Prelude.abs :: Integer -> Integer) i [really-safe-money-gen] - in if a > maxBoundI [really-safe-money-gen] + in if a > maxBoundI [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else [really-safe-money-gen]  let w :: Word64 [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Amount.hs:801:36-38: [really-safe-money-gen] @@ -798,7 +798,7 @@ [really-safe-money-gen]  quantisationFactorFormatString (QuantisationFactor 0) = "%f" [really-safe-money-gen]  quantisationFactorFormatString (QuantisationFactor qf) = [really-safe-money-gen]  let decimals :: Int [really-safe-money-gen] - decimals = ceiling $ logBase 10 (fromIntegral qf :: Float) [really-safe-money-gen] + decimals = ceiling $ logBase 0 (fromIntegral qf :: Float) [really-safe-money-gen]  in printf "%%0.%df" decimals [really-safe-money-gen]  [really-safe-money-gen]  -- | Validate that an 'Amount' is strictly positive. I.e. not 'zero'. [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Amount.hs:801:36-38: [really-safe-money-gen] @@ -798,7 +798,7 @@ [really-safe-money-gen]  quantisationFactorFormatString (QuantisationFactor 0) = "%f" [really-safe-money-gen]  quantisationFactorFormatString (QuantisationFactor qf) = [really-safe-money-gen]  let decimals :: Int [really-safe-money-gen] - decimals = ceiling $ logBase 10 (fromIntegral qf :: Float) [really-safe-money-gen] + decimals = ceiling $ logBase 1 (fromIntegral qf :: Float) [really-safe-money-gen]  in printf "%%0.%df" decimals [really-safe-money-gen]  [really-safe-money-gen]  -- | Validate that an 'Amount' is strictly positive. I.e. not 'zero'. [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Amount.hs:801:36-38: [really-safe-money-gen] @@ -798,7 +798,7 @@ [really-safe-money-gen]  quantisationFactorFormatString (QuantisationFactor 0) = "%f" [really-safe-money-gen]  quantisationFactorFormatString (QuantisationFactor qf) = [really-safe-money-gen]  let decimals :: Int [really-safe-money-gen] - decimals = ceiling $ logBase 10 (fromIntegral qf :: Float) [really-safe-money-gen] + decimals = ceiling $ logBase -10 (fromIntegral qf :: Float) [really-safe-money-gen]  in printf "%%0.%df" decimals [really-safe-money-gen]  [really-safe-money-gen]  -- | Validate that an 'Amount' is strictly positive. I.e. not 'zero'. [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Amount.hs:569:18-19: [really-safe-money-gen] @@ -566,7 +566,7 @@ [really-safe-money-gen]  (smallerChunkSize, rest) = divMod a ((fromIntegral :: Word32 -> Word64) f) [really-safe-money-gen]  smallerChunk :: Amount [really-safe-money-gen]  smallerChunk = Amount smallerChunkSize [really-safe-money-gen] - in if rest == 0 [really-safe-money-gen] + in if rest == 1 [really-safe-money-gen]  then DistributedIntoEqualChunks f smallerChunk [really-safe-money-gen]  else [really-safe-money-gen]  let -- This 'fromIntegral' is theoretically not safe, but it's [really-safe-money-gen]  [really-safe-money-gen] stance (Validity currency, Show currency, Ord currency) => Validity (MultiAccount currency) where [really-safe-money-gen]  validate ma@(MultiAccount m) = [really-safe-money-gen]  mconcat [really-safe-money-gen] - [ genericValidate ma, [really-safe-money-gen] + [ genericValidate ma, [really-safe-money-gen]  decorateMap m $ \_ a -> [really-safe-money-gen]  declare "The account is not zero" $ [really-safe-money-gen]  a /= Account.zero [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.MultiAccountSpec [really-safe-money-gen]  subtractAmount [really-safe-money-gen]  ✓ produces valid amounts  12.23 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  add [really-safe-money-gen]  ✓ produces valid amounts  25.32 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  GenValid (MultiAccount Currency) [really-safe-money-gen]  genValid :: Gen (MultiAccount Currency) [really-safe-money-gen]  ✓ only generates valid '(MultiAccount Currency)'s  2.57 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  sum [really-safe-money-gen]  ✓ produces valid amounts  61.53 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  zero [really-safe-money-gen]  ✓ is valid  0.01 ms [really-safe-money-gen]  fromAccount [really-safe-money-gen]  ✓ produces valid amounts  1.59 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  addAccount [really-safe-money-gen]  ✓ produces valid amounts  15.25 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ produces valid amounts  30.74 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  addAmount [really-safe-money-gen]  ✓ produces valid amounts  15.58 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtractAccount [really-safe-money-gen]  ✓ produces valid amounts  14.23 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 9001 [really-safe-money-gen]  Passed: 10 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.18 seconds [really-safe-money-gen]  Test suite took:  0.18 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Account.hs:495:17-18: [really-safe-money-gen] @@ -492,7 +492,7 @@ [really-safe-money-gen]  fraction rounding account f = [really-safe-money-gen]  let af = (realToFrac :: Rational -> Ratio Natural) ((Prelude.abs :: Rational -> Rational) f) [really-safe-money-gen]  ro = [really-safe-money-gen] - if f >= 0 [really-safe-money-gen] + if f >= 1 [really-safe-money-gen]  then rounding [really-safe-money-gen]  else case rounding of [really-safe-money-gen]  RoundUp -> RoundDown [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.AccountSpec [really-safe-money-gen]  fraction [really-safe-money-gen]  ✓ Correctly fractions 101 with 1 % 100  0.03 ms [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.00 seconds [really-safe-money-gen]  Test suite took:  0.00 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Account.hs:197:19-20: [really-safe-money-gen] @@ -194,7 +194,7 @@ [really-safe-money-gen]  fromDouble :: QuantisationFactor -> Double -> Maybe Account [really-safe-money-gen]  fromDouble quantisationFactor d = [really-safe-money-gen]  let d' = Prelude.abs d [really-safe-money-gen] - f = if d >= 0 then Positive else Negative [really-safe-money-gen] + f = if d >= 1 then Positive else Negative [really-safe-money-gen]  in f <$> Amount.fromDouble quantisationFactor d' [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn an amount of money into a 'Rational'. [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.AccountSpec [really-safe-money-gen]  fromDouble [really-safe-money-gen]  ✓ produces valid rational  44.76 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 10000 [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.04 seconds [really-safe-money-gen]  Test suite took:  0.05 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Account.hs:131:25-26: [really-safe-money-gen] @@ -128,7 +128,7 @@ [really-safe-money-gen]  amount :: Amount [really-safe-money-gen]  amount = Amount.fromMinimalQuantisations w [really-safe-money-gen]  in Just $ [really-safe-money-gen] - if i >= 0 [really-safe-money-gen] + if i >= 1 [really-safe-money-gen]  then Positive amount [really-safe-money-gen]  else Negative amount [really-safe-money-gen]  [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.AccountSpec [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces results that sum up to the greater whole  64.91 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 10000 [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.06 seconds [really-safe-money-gen]  Test suite took:  0.07 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Amount.hs:801:36-38: [really-safe-money-gen] @@ -798,7 +798,7 @@ [really-safe-money-gen]  quantisationFactorFormatString (QuantisationFactor 0) = "%f" [really-safe-money-gen]  quantisationFactorFormatString (QuantisationFactor qf) = [really-safe-money-gen]  let decimals :: Int [really-safe-money-gen] - decimals = ceiling $ logBase 10 (fromIntegral qf :: Float) [really-safe-money-gen] + decimals = ceiling $ logBase 0 (fromIntegral qf :: Float) [really-safe-money-gen]  in printf "%%0.%df" decimals [really-safe-money-gen]  [really-safe-money-gen]  -- | Validate that an 'Amount' is strictly positive. I.e. not 'zero'. [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.AccountSpec [really-safe-money-gen]  format [really-safe-money-gen]  ✓ produces valid strings  74.95 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 10000 [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.07 seconds [really-safe-money-gen]  Test suite took:  0.08 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Amount.hs:801:36-38: [really-safe-money-gen] @@ -798,7 +798,7 @@ [really-safe-money-gen]  quantisationFactorFormatString (QuantisationFactor 0) = "%f" [really-safe-money-gen]  quantisationFactorFormatString (QuantisationFactor qf) = [really-safe-money-gen]  let decimals :: Int [really-safe-money-gen] - decimals = ceiling $ logBase 10 (fromIntegral qf :: Float) [really-safe-money-gen] + decimals = ceiling $ logBase 1 (fromIntegral qf :: Float) [really-safe-money-gen]  in printf "%%0.%df" decimals [really-safe-money-gen]  [really-safe-money-gen]  -- | Validate that an 'Amount' is strictly positive. I.e. not 'zero'. [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.AccountSpec [really-safe-money-gen]  format [really-safe-money-gen]  ✓ produces valid strings  78.45 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 10000 [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.08 seconds [really-safe-money-gen]  Test suite took:  0.08 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Amount.hs:801:36-38: [really-safe-money-gen] @@ -798,7 +798,7 @@ [really-safe-money-gen]  quantisationFactorFormatString (QuantisationFactor 0) = "%f" [really-safe-money-gen]  quantisationFactorFormatString (QuantisationFactor qf) = [really-safe-money-gen]  let decimals :: Int [really-safe-money-gen] - decimals = ceiling $ logBase 10 (fromIntegral qf :: Float) [really-safe-money-gen] + decimals = ceiling $ logBase -10 (fromIntegral qf :: Float) [really-safe-money-gen]  in printf "%%0.%df" decimals [really-safe-money-gen]  [really-safe-money-gen]  -- | Validate that an 'Amount' is strictly positive. I.e. not 'zero'. [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.AccountSpec [really-safe-money-gen]  format [really-safe-money-gen]  ✓ produces valid strings  86.76 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 10000 [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.09 seconds [really-safe-money-gen]  Test suite took:  0.09 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Amount.hs:569:18-19: [really-safe-money-gen] @@ -566,7 +566,7 @@ [really-safe-money-gen]  (smallerChunkSize, rest) = divMod a ((fromIntegral :: Word32 -> Word64) f) [really-safe-money-gen]  smallerChunk :: Amount [really-safe-money-gen]  smallerChunk = Amount smallerChunkSize [really-safe-money-gen] - in if rest == 0 [really-safe-money-gen] + in if rest == 1 [really-safe-money-gen]  then DistributedIntoEqualChunks f smallerChunk [really-safe-money-gen]  else [really-safe-money-gen]  let -- This 'fromIntegral' is theoretically not safe, but it's [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.AccountSpec [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ correctly distributes 5 into 3  0.06 ms [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.00 secoTesting mutation ConstBool at src/Money/Amount.hs:569:10-19: [really-safe-money-gen] @@ -566,7 +566,7 @@ [really-safe-money-gen]  (smallerChunkSize, rest) = divMod a ((fromIntegral :: Word32 -> Word64) f) [really-safe-money-gen]  smallerChunk :: Amount [really-safe-money-gen]  smallerChunk = Amount smallerChunkSize [really-safe-money-gen] - in if rest == 0 [really-safe-money-gen] + in if True [really-safe-money-gen]  then DistributedIntoEqualChunks f smallerChunk [really-safe-money-gen]  else [really-safe-money-gen]  let -- This 'fromIntegral' is theoretically not safe, but it's [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:569:10-19: [really-safe-money-gen] @@ -566,7 +566,7 @@ [really-safe-money-gen]  (smallerChunkSize, rest) = divMod a ((fromIntegral :: Word32 -> Word64) f) [really-safe-money-gen]  smallerChunk :: Amount [really-safe-money-gen]  smallerChunk = Amount smallerChunkSize [really-safe-money-gen] - in if rest == 0 [really-safe-money-gen] + in if False [really-safe-money-gen]  then DistributedIntoEqualChunks f smallerChunk [really-safe-money-gen]  else [really-safe-money-gen]  let -- This 'fromIntegral' is theoretically not safe, but it's [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/Amount.hs:569:10-19: [really-safe-money-gen] @@ -566,7 +566,7 @@ [really-safe-money-gen]  (smallerChunkSize, rest) = divMod a ((fromIntegral :: Word32 -> Word64) f) [really-safe-money-gen]  smallerChunk :: Amount [really-safe-money-gen]  smallerChunk = Amount smallerChunkSize [really-safe-money-gen] - in if rest == 0 [really-safe-money-gen] + in if not (rest == 0) [really-safe-money-gen]  then DistributedIntoEqualChunks f smallerChunk [really-safe-money-gen]  else [really-safe-money-gen]  let -- This 'fromIntegral' is theoretically not safe, but it's [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Money/Amount.hs:569:7-29: [really-safe-money-gen] @@ -566,7 +566,7 @@ [really-safe-money-gen]  (smallerChunkSize, rest) = divMod a ((fromIntegral :: Word32 -> Word64) f) [really-safe-money-gen]  smallerChunk :: Amount [really-safe-money-gen]  smallerChunk = Amount smallerChunkSize [really-safe-money-gen] - in if rest == 0 [really-safe-money-gen] + in if rest == 0 [really-safe-money-gen]  then DistributedIntoEqualChunks f smallerChunk [really-safe-money-gen]  else [really-safe-money-gen]  let -- This 'fromIntegral' is theoretically not safe, but it's [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:544:10-23: [really-safe-money-gen] @@ -541,7 +541,7 @@ [really-safe-money-gen]  maxBoundI = (fromIntegral :: Word64 -> Integer) (maxBound :: Word64) [really-safe-money-gen]  r :: Integer [really-safe-money-gen]  r = (fromIntegral :: Word32 -> Integer) f * (fromIntegral :: Word64 -> Integer) a [really-safe-money-gen] - in if r > maxBoundI [really-safe-money-gen] + in if True [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just (Amount ((fromInteger :: Integer -> Word64) r)) [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:544:10-23: [really-safe-money-gen] @@ -541,7 +541,7 @@ [really-safe-money-gen]  maxBoundI = (fromIntegral :: Word64 -> Integer) (maxBound :: Word64) [really-safe-money-gen]  r :: Integer [really-safe-money-gen]  r = (fromIntegral :: Word32 -> Integer) f * (fromIntegral :: Word64 -> Integer) a [really-safe-money-gen] - in if r > maxBoundI [really-safe-money-gen] + in if False [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just (Amount ((fromInteger :: Integer -> Word64) r)) [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/Amount.hs:544:10-23: [really-safe-money-gen] @@ -541,7 +541,7 @@ [really-safe-money-gen]  maxBoundI = (fromIntegral :: Word64 -> Integer) (maxBound :: Word64) [really-safe-money-gen]  r :: Integer [really-safe-money-gen]  r = (fromIntegral :: Word32 -> Integer) f * (fromIntegral :: Word64 -> Integer) a [really-safe-money-gen] - in if r > maxBoundI [really-safe-money-gen] + in if not (r > maxBoundI) [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just (Amount ((fromInteger :: Integer -> Word64) r)) [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Money/Amount.hs:544:7-66: [really-safe-money-gen] @@ -541,7 +541,7 @@ [really-safe-money-gen]  maxBoundI = (fromIntegral :: Word64 -> Integer) (maxBound :: Word64) [really-safe-money-gen]  r :: Integer [really-safe-money-gen]  r = (fromIntegral :: Word32 -> Integer) f * (fromIntegral :: Word64 -> Integer) a [really-safe-money-gen] - in if r > maxBoundI [really-safe-money-gen] + in if r > maxBoundI [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just (Amount ((fromInteger :: Integer -> Word64) r)) [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Amount.hs:518:14-15: [really-safe-money-gen] @@ -515,7 +515,7 @@ [really-safe-money-gen]  i2 = (fromIntegral :: Word64 -> Integer) a2 [really-safe-money-gen]  r :: Integer [really-safe-money-gen]  r = i1 - i2 [really-safe-money-gen] - in if r < 0 [really-safe-money-gen] + in if r < 1 [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just (Amount ((fromInteger :: Integer -> Word64) r)) [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:518:10-15: [really-safe-money-gen] @@ -515,7 +515,7 @@ [really-safe-money-gen]  i2 = (fromIntegral :: Word64 -> Integer) a2 [really-safe-money-gen]  r :: Integer [really-safe-money-gen]  r = i1 - i2 [really-safe-money-gen] - in if r < 0 [really-safe-money-gen] + in if True [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just (Amount ((fromInteger :: Integer -> Word64) r)) [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:518:10-15: [really-safe-money-gen] @@ -515,7 +515,7 @@ [really-safe-money-gen]  i2 = (fromIntegral :: Word64 -> Integer) a2 [really-safe-money-gen]  r :: Integer [really-safe-money-gen]  r = i1 - i2 [really-safe-money-gen] - in if r < 0 [really-safe-money-gen] + in if False [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just (Amount ((fromInteger :: Integer -> Word64) r)) [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/Amount.hs:518:10-15: [really-safe-money-gen] @@ -515,7 +515,7 @@ [really-safe-money-gen]  i2 = (fromIntegral :: Word64 -> Integer) a2 [really-safe-money-gen]  r :: Integer [really-safe-money-gen]  r = i1 - i2 [really-safe-money-gen] - in if r < 0 [really-safe-money-gen] + in if not (r < 0) [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just (Amount ((fromInteger :: Integer -> Word64) r)) [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Money/Amount.hs:518:7-66: [really-safe-money-gen] @@ -515,7 +515,7 @@ [really-safe-money-gen]  i2 = (fromIntegral :: Word64 -> Integer) a2 [really-safe-money-gen]  r :: Integer [really-safe-money-gen]  r = i1 - i2 [really-safe-money-gen] - in if r < 0 [really-safe-money-gen] + in if r < 0 [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just (Amount ((fromInteger :: Integer -> Word64) r)) [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:476:10-23: [really-safe-money-gen] @@ -473,7 +473,7 @@ [really-safe-money-gen]  maxBoundI = fromIntegral (maxBound :: Word64) [really-safe-money-gen]  r :: Integer [really-safe-money-gen]  r = i1 + i2 [really-safe-money-gen] - in if r > maxBoundI [really-safe-money-gen] + in if True [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just (Amount ((fromInteger :: Integer -> Word64) r)) [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:476:10-23: [really-safe-money-gen] @@ -473,7 +473,7 @@ [really-safe-money-gen]  maxBoundI = fromIntegral (maxBound :: Word64) [really-safe-money-gen]  r :: Integer [really-safe-money-gen]  r = i1 + i2 [really-safe-money-gen] - in if r > maxBoundI [really-safe-money-gen] + in if False [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just (Amount ((fromInteger :: Integer -> Word64) r)) [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/Amount.hs:476:10-23: [really-safe-money-gen] @@ -473,7 +473,7 @@ [really-safe-money-gen]  maxBoundI = fromIntegral (maxBound :: Word64) [really-safe-money-gen]  r :: Integer [really-safe-money-gen]  r = i1 + i2 [really-safe-money-gen] - in if r > maxBoundI [really-safe-money-gen] + in if not (r > maxBoundI) [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just (Amount ((fromInteger :: Integer -> Word64) r)) [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Money/Amount.hs:476:7-66: [really-safe-money-gen] @@ -473,7 +473,7 @@ [really-safe-money-gen]  maxBoundI = fromIntegral (maxBound :: Word64) [really-safe-money-gen]  r :: Integer [really-safe-money-gen]  r = i1 + i2 [really-safe-money-gen] - in if r > maxBoundI [really-safe-money-gen] + in if r > maxBoundI [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just (Amount ((fromInteger :: Integer -> Word64) r)) [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:388:5-16: [really-safe-money-gen] @@ -385,7 +385,7 @@ [really-safe-money-gen]  -- Nothing [really-safe-money-gen]  fromRational :: QuantisationFactor -> Rational -> Maybe Amount [really-safe-money-gen]  fromRational (QuantisationFactor qf) r [really-safe-money-gen] - | isInvalid r = Nothing [really-safe-money-gen] + | True = Nothing [really-safe-money-gen]  | r < 0 = Nothing [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  let resultRational :: Rational [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:388:5-16: [really-safe-money-gen] @@ -385,7 +385,7 @@ [really-safe-money-gen]  -- Nothing [really-safe-money-gen]  fromRational :: QuantisationFactor -> Rational -> Maybe Amount [really-safe-money-gen]  fromRational (QuantisationFactor qf) r [really-safe-money-gen] - | isInvalid r = Nothing [really-safe-money-gen] + | False = Nothing [really-safe-money-gen]  | r < 0 = Nothing [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  let resultRational :: Rational [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/Amount.hs:388:5-16: [really-safe-money-gen] @@ -385,7 +385,7 @@ [really-safe-money-gen]  -- Nothing [really-safe-money-gen]  fromRational :: QuantisationFactor -> Rational -> Maybe Amount [really-safe-money-gen]  fromRational (QuantisationFactor qf) r [really-safe-money-gen] - | isInvalid r = Nothing [really-safe-money-gen] + | not (isInvalid r) = Nothing [really-safe-money-gen]  | r < 0 = Nothing [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  let resultRational :: Rational [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Amount.hs:389:9-10: [really-safe-money-gen] @@ -386,7 +386,7 @@ [really-safe-money-gen]  fromRational :: QuantisationFactor -> Rational -> Maybe Amount [really-safe-money-gen]  fromRational (QuantisationFactor qf) r [really-safe-money-gen]  | isInvalid r = Nothing [really-safe-money-gen] - | r < 0 = Nothing [really-safe-money-gen] + | r < 1 = Nothing [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  let resultRational :: Rational [really-safe-money-gen]  resultRational = r * (fromIntegral :: Word32 -> Rational) qf [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:389:5-10: [really-safe-money-gen] @@ -386,7 +386,7 @@ [really-safe-money-gen]  fromRational :: QuantisationFactor -> Rational -> Maybe Amount [really-safe-money-gen]  fromRational (QuantisationFactor qf) r [really-safe-money-gen]  | isInvalid r = Nothing [really-safe-money-gen] - | r < 0 = Nothing [really-safe-money-gen] + | True = Nothing [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  let resultRational :: Rational [really-safe-money-gen]  resultRational = r * (fromIntegral :: Word32 -> Rational) qf [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:389:5-10: [really-safe-money-gen] @@ -386,7 +386,7 @@ [really-safe-money-gen]  fromRational :: QuantisationFactor -> Rational -> Maybe Amount [really-safe-money-gen]  fromRational (QuantisationFactor qf) r [really-safe-money-gen]  | isInvalid r = Nothing [really-safe-money-gen] - | r < 0 = Nothing [really-safe-money-gen] + | False = Nothing [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  let resultRational :: Rational [really-safe-money-gen]  resultRational = r * (fromIntegral :: Word32 -> Rational) qf [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/Amount.hs:389:5-10: [really-safe-money-gen] @@ -386,7 +386,7 @@ [really-safe-money-gen]  fromRational :: QuantisationFactor -> Rational -> Maybe Amount [really-safe-money-gen]  fromRational (QuantisationFactor qf) r [really-safe-money-gen]  | isInvalid r = Nothing [really-safe-money-gen] - | r < 0 = Nothing [really-safe-money-gen] + | not (r < 0) = Nothing [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  let resultRational :: Rational [really-safe-money-gen]  resultRational = r * (fromIntegral :: Word32 -> Rational) qf [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:390:5-14: [really-safe-money-gen] @@ -387,7 +387,7 @@ [really-safe-money-gen]  fromRational (QuantisationFactor qf) r [really-safe-money-gen]  | isInvalid r = Nothing [really-safe-money-gen]  | r < 0 = Nothing [really-safe-money-gen] - | otherwise = [really-safe-money-gen] + | True = [really-safe-money-gen]  let resultRational :: Rational [really-safe-money-gen]  resultRational = r * (fromIntegral :: Word32 -> Rational) qf [really-safe-money-gen]  ceiled :: Natural [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:390:5-14: [really-safe-money-gen] @@ -387,7 +387,7 @@ [really-safe-money-gen]  fromRational (QuantisationFactor qf) r [really-safe-money-gen]  | isInvalid r = Nothing [really-safe-money-gen]  | r < 0 = Nothing [really-safe-money-gen] - | otherwise = [really-safe-money-gen] + | False = [really-safe-money-gen]  let resultRational :: Rational [really-safe-money-gen]  resultRational = r * (fromIntegral :: Word32 -> Rational) qf [really-safe-money-gen]  ceiled :: Natural [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/Amount.hs:390:5-14: [really-safe-money-gen] @@ -387,7 +387,7 @@ [really-safe-money-gen]  fromRational (QuantisationFactor qf) r [really-safe-money-gen]  | isInvalid r = Nothing [really-safe-money-gen]  | r < 0 = Nothing [really-safe-money-gen] - | otherwise = [really-safe-money-gen] + | not (otherwise) = [really-safe-money-gen]  let resultRational :: Rational [really-safe-money-gen]  resultRational = r * (fromIntegral :: Word32 -> Rational) qf [really-safe-money-gen]  ceiled :: Natural [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:397:14-31: [really-safe-money-gen] @@ -394,7 +394,7 @@ [really-safe-money-gen]  ceiled = (ceiling :: Rational -> Natural) resultRational [really-safe-money-gen]  floored :: Natural [really-safe-money-gen]  floored = (floor :: Rational -> Natural) resultRational [really-safe-money-gen] - in if ceiled == floored [really-safe-money-gen] + in if True [really-safe-money-gen]  then [really-safe-money-gen]  if ceiled > (fromIntegral :: Word64 -> Natural) (maxBound :: Word64) [really-safe-money-gen]  then Nothing [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:397:14-31: [really-safe-money-gen] @@ -394,7 +394,7 @@ [really-safe-money-gen]  ceiled = (ceiling :: Rational -> Natural) resultRational [really-safe-money-gen]  floored :: Natural [really-safe-money-gen]  floored = (floor :: Rational -> Natural) resultRational [really-safe-money-gen] - in if ceiled == floored [really-safe-money-gen] + in if False [really-safe-money-gen]  then [really-safe-money-gen]  if ceiled > (fromIntegral :: Word64 -> Natural) (maxBound :: Word64) [really-safe-money-gen]  then Nothing [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/Amount.hs:397:14-31: [really-safe-money-gen] @@ -394,7 +394,7 @@ [really-safe-money-gen]  ceiled = (ceiling :: Rational -> Natural) resultRational [really-safe-money-gen]  floored :: Natural [really-safe-money-gen]  floored = (floor :: Rational -> Natural) resultRational [really-safe-money-gen] - in if ceiled == floored [really-safe-money-gen] + in if not (ceiled == floored) [really-safe-money-gen]  then [really-safe-money-gen]  if ceiled > (fromIntegral :: Word64 -> Natural) (maxBound :: Word64) [really-safe-money-gen]  then Nothing [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:399:18-83: [really-safe-money-gen] @@ -396,7 +396,7 @@ [really-safe-money-gen]  floored = (floor :: Rational -> Natural) resultRational [really-safe-money-gen]  in if ceiled == floored [really-safe-money-gen]  then [really-safe-money-gen] - if ceiled > (fromIntegral :: Word64 -> Natural) (maxBound :: Word64) [really-safe-money-gen] + if True [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just $ Amount (fromIntegral ceiled) [really-safe-money-gen]  else Nothing [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:399:18-83: [really-safe-money-gen] @@ -396,7 +396,7 @@ [really-safe-money-gen]  floored = (floor :: Rational -> Natural) resultRational [really-safe-money-gen]  in if ceiled == floored [really-safe-money-gen]  then [really-safe-money-gen] - if ceiled > (fromIntegral :: Word64 -> Natural) (maxBound :: Word64) [really-safe-money-gen] + if False [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just $ Amount (fromIntegral ceiled) [really-safe-money-gen]  else Nothing [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/Amount.hs:399:18-83: [really-safe-money-gen] @@ -396,7 +396,7 @@ [really-safe-money-gen]  floored = (floor :: Rational -> Natural) resultRational [really-safe-money-gen]  in if ceiled == floored [really-safe-money-gen]  then [really-safe-money-gen] - if ceiled > (fromIntegral :: Word64 -> Natural) (maxBound :: Word64) [really-safe-money-gen] + if not (ceiled > (fromIntegral :: Word64 -> Natural) (maxBound :: Word64)) [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just $ Amount (fromIntegral ceiled) [really-safe-money-gen]  else Nothing [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Money/Amount.hs:399:15-57: [really-safe-money-gen] @@ -396,7 +396,7 @@ [really-safe-money-gen]  floored = (floor :: Rational -> Natural) resultRational [really-safe-money-gen]  in if ceiled == floored [really-safe-money-gen]  then [really-safe-money-gen] - if ceiled > (fromIntegral :: Word64 -> Natural) (maxBound :: Word64) [really-safe-money-gen] + if ceiled > (fromIntegral :: Word64 -> Natural) (maxBound :: Word64) [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just $ Amount (fromIntegral ceiled) [really-safe-money-gen]  else Nothing [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Money/Amount.hs:397:11-25: [really-safe-money-gen] @@ -394,7 +394,7 @@ [really-safe-money-gen]  ceiled = (ceiling :: Rational -> Natural) resultRational [really-safe-money-gen]  floored :: Natural [really-safe-money-gen]  floored = (floor :: Rational -> Natural) resultRational [really-safe-money-gen] - in if ceiled == floored [really-safe-money-gen] + in if ceiled == floored [really-safe-money-gen]  then [really-safe-money-gen]  if ceiled > (fromIntegral :: Word64 -> Natural) (maxBound :: Word64) [really-safe-money-gen]  then Nothing [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Amount.hs:320:9-10: [really-safe-money-gen] @@ -317,7 +317,7 @@ [really-safe-money-gen]  Double -> [really-safe-money-gen]  Maybe Amount [really-safe-money-gen]  fromDouble (QuantisationFactor qf) d [really-safe-money-gen] - | d < 0 = Nothing [really-safe-money-gen] + | d < 1 = Nothing [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  let resultDouble :: Double [really-safe-money-gen]  resultDouble = d * (fromIntegral :: Word32 -> Double) qf [really-safe-money-gen]  [really-safe-money-gen] nds [really-safe-money-gen]  Test suite took:  0.00 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Amount.hs:518:14-15: [really-safe-money-gen] @@ -515,7 +515,7 @@ [really-safe-money-gen]  i2 = (fromIntegral :: Word64 -> Integer) a2 [really-safe-money-gen]  r :: Integer [really-safe-money-gen]  r = i1 - i2 [really-safe-money-gen] - in if r < 0 [really-safe-money-gen] + in if r < 1 [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just (Amount ((fromInteger :: Integer -> Word64) r)) [really-safe-money-gen]  [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.MultiAmountSpec [really-safe-money-gen]  subtractAmount [really-safe-money-gen]  ✓ produces valid amounts  13.85 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 1000 [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.01 seconds [really-safe-money-gen]  Test suite took:  0.02 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:518:10-15: [really-safe-money-gen] @@ -515,7 +515,7 @@ [really-safe-money-gen]  i2 = (fromIntegral :: Word64 -> Integer) a2 [really-safe-money-gen]  r :: Integer [really-safe-money-gen]  r = i1 - i2 [really-safe-money-gen] - in if r < 0 [really-safe-money-gen] + in if True [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just (Amount ((fromInteger :: Integer -> Word64) r)) [really-safe-money-gen]  [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.MultiAmountSpec [really-safe-money-gen]  subtractAmount [really-safe-money-gen]  ✓ produces valid amounts  13.73 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ produces valid amounts  22.22 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen] Money.AmountOfSpec [really-safe-money-gen]  USD [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ matches what you would get with Integer, if nothing fails  0.23 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ matches what you would get with Integer, if nothing fails  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ matches what you would get with Integer, if nothing fails  0.21 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ matches what you would get with Integer, if nothing fails  0.64 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ matches what you would get with Integer, if nothing fails  0.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen] Money.AmountSpec [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ fails for 0 - maxBound  0.01 ms [really-safe-money-gen]  ✓ fails for 0 - 1  0.01 ms [really-safe-money-gen]  ✓ matches what you would get with Integer, if nothing fails  29.43 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 12502 [really-safe-money-gen]  Passed: 10 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.07 seconds [really-safe-money-gen]  Test suite took:  0.07 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:518:10-15: [really-safe-money-gen] @@ -515,7 +515,7 @@ [really-safe-money-gen]  i2 = (fromIntegral :: Word64 -> Integer) a2 [really-safe-money-gen]  r :: Integer [really-safe-money-gen]  r = i1 - i2 [really-safe-money-gen] - in if r < 0 [really-safe-money-gen] + in if False [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just (Amount ((fromInteger :: Integer -> Word64) r)) [really-safe-money-gen]  [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.MultiAmountSpec [really-safe-money-gen]  subtractAmount [really-safe-money-gen]  ✓ produces valid amounts  15.15 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ produces valid amounts  23.31 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen] Money.AmountOfSpec [really-safe-money-gen]  USD [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ matches what you would get with Integer, if nothing fails  0.30 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ matches what you would get with Integer, if nothing fails  0.31 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ matches what you would get with Integer, if nothing fails  0.25 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ matches what you would get with Integer, if nothing fails  0.47 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ matches what you would get with Integer, if nothing fails  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen] Money.AmountSpec [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ fails for 0 - maxBound  0.00 ms [really-safe-money-gen]  ✓ fails for 0 - 1  0.00 ms [really-safe-money-gen]  ✓ matches what you would get with Integer, if nothing fails  27.53 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 12502 [really-safe-money-gen]  Passed: 10 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.07 seconds [really-safe-money-gen]  Test suite took:  0.07 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Amount.hs:389:9-10: [really-safe-money-gen] @@ -386,7 +386,7 @@ [really-safe-money-gen]  fromRational :: QuantisationFactor -> Rational -> Maybe Amount [really-safe-money-gen]  fromRational (QuantisationFactor qf) r [really-safe-money-gen]  | isInvalid r = Nothing [really-safe-money-gen] - | r < 0 = Nothing [really-safe-money-gen] + | r < 1 = Nothing [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  let resultRational :: Rational [really-safe-money-gen]  resultRational = r * (fromIntegral :: Word32 -> Rational) qf [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.AccountSpec [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  80.18 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 10000 [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.08 seconds [really-safe-money-gen]  Test suite took:  0.08 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:390:5-14: [really-safe-money-gen] @@ -387,7 +387,7 @@ [really-safe-money-gen]  fromRational (QuantisationFactor qf) r [really-safe-money-gen]  | isInvalid r = Nothing [really-safe-money-gen]  | r < 0 = Nothing [really-safe-money-gen] - | otherwise = [really-safe-money-gen] + | True = [really-safe-money-gen]  let resultRational :: Rational [really-safe-money-gen]  resultRational = r * (fromIntegral :: Word32 -> Rational) qf [really-safe-money-gen]  ceiled :: Natural [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.AccountSpec [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  89.58 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 10000 [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.09 seconds [really-safe-money-gen]  Test suite took:  0.09 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:390:5-14: [really-safe-money-gen] @@ -387,7 +387,7 @@ [really-safe-money-gen]  fromRational (QuantisationFactor qf) r [really-safe-money-gen]  | isInvalid r = Nothing [really-safe-money-gen]  | r < 0 = Nothing [really-safe-money-gen] - | otherwise = [really-safe-money-gen] + | False = [really-safe-money-gen]  let resultRational :: Rational [really-safe-money-gen]  resultRational = r * (fromIntegral :: Word32 -> Rational) qf [really-safe-money-gen]  ceiled :: Natural [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.AccountSpec [really-safe-money-gen]  fromRational [really-safe-money-gen]  ✓ roundtrips with toRational  89.36 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 10000 [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.09 seconds [really-safe-money-gen]  Test suite took:  0.09 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Amount.hs:320:9-10: [really-safe-money-gen] @@ -317,7 +317,7 @@ [really-safe-money-gen]  Double -> [really-safe-money-gen]  Maybe Amount [really-safe-money-gen]  fromDouble (QuantisationFactor qf) d [really-safe-money-gen] - | d < 0 = Nothing [really-safe-money-gen] + | d < 1 = Nothing [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  let resultDouble :: Double [really-safe-money-gen]  resultDouble = d * (fromIntegral :: Word32 ->Testing mutation ConstBool at src/Money/Amount.hs:320:5-10: [really-safe-money-gen] @@ -317,7 +317,7 @@ [really-safe-money-gen]  Double -> [really-safe-money-gen]  Maybe Amount [really-safe-money-gen]  fromDouble (QuantisationFactor qf) d [really-safe-money-gen] - | d < 0 = Nothing [really-safe-money-gen] + | True = Nothing [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  let resultDouble :: Double [really-safe-money-gen]  resultDouble = d * (fromIntegral :: Word32 -> Double) qf [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:320:5-10: [really-safe-money-gen] @@ -317,7 +317,7 @@ [really-safe-money-gen]  Double -> [really-safe-money-gen]  Maybe Amount [really-safe-money-gen]  fromDouble (QuantisationFactor qf) d [really-safe-money-gen] - | d < 0 = Nothing [really-safe-money-gen] + | False = Nothing [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  let resultDouble :: Double [really-safe-money-gen]  resultDouble = d * (fromIntegral :: Word32 -> Double) qf [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/Amount.hs:320:5-10: [really-safe-money-gen] @@ -317,7 +317,7 @@ [really-safe-money-gen]  Double -> [really-safe-money-gen]  Maybe Amount [really-safe-money-gen]  fromDouble (QuantisationFactor qf) d [really-safe-money-gen] - | d < 0 = Nothing [really-safe-money-gen] + | not (d < 0) = Nothing [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  let resultDouble :: Double [really-safe-money-gen]  resultDouble = d * (fromIntegral :: Word32 -> Double) qf [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:321:5-14: [really-safe-money-gen] @@ -318,7 +318,7 @@ [really-safe-money-gen]  Maybe Amount [really-safe-money-gen]  fromDouble (QuantisationFactor qf) d [really-safe-money-gen]  | d < 0 = Nothing [really-safe-money-gen] - | otherwise = [really-safe-money-gen] + | True = [really-safe-money-gen]  let resultDouble :: Double [really-safe-money-gen]  resultDouble = d * (fromIntegral :: Word32 -> Double) qf [really-safe-money-gen]  in go resultDouble [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:321:5-14: [really-safe-money-gen] @@ -318,7 +318,7 @@ [really-safe-money-gen]  Maybe Amount [really-safe-money-gen]  fromDouble (QuantisationFactor qf) d [really-safe-money-gen]  | d < 0 = Nothing [really-safe-money-gen] - | otherwise = [really-safe-money-gen] + | False = [really-safe-money-gen]  let resultDouble :: Double [really-safe-money-gen]  resultDouble = d * (fromIntegral :: Word32 -> Double) qf [really-safe-money-gen]  in go resultDouble [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/Amount.hs:321:5-14: [really-safe-money-gen] @@ -318,7 +318,7 @@ [really-safe-money-gen]  Maybe Amount [really-safe-money-gen]  fromDouble (QuantisationFactor qf) d [really-safe-money-gen]  | d < 0 = Nothing [really-safe-money-gen] - | otherwise = [really-safe-money-gen] + | not (otherwise) = [really-safe-money-gen]  let resultDouble :: Double [really-safe-money-gen]  resultDouble = d * (fromIntegral :: Word32 -> Double) qf [really-safe-money-gen]  in go resultDouble [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:327:9-16: [really-safe-money-gen] @@ -324,7 +324,7 @@ [really-safe-money-gen]  in go resultDouble [really-safe-money-gen]  where [really-safe-money-gen]  go resultDouble [really-safe-money-gen] - | isNaN d = Nothing [really-safe-money-gen] + | True = Nothing [really-safe-money-gen]  | isInfinite d = Nothing [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  -- Shortcut for numbers that are way too big anyway [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:327:9-16: [really-safe-money-gen] @@ -324,7 +324,7 @@ [really-safe-money-gen]  in go resultDouble [really-safe-money-gen]  where [really-safe-money-gen]  go resultDouble [really-safe-money-gen] - | isNaN d = Nothing [really-safe-money-gen] + | False = Nothing [really-safe-money-gen]  | isInfinite d = Nothing [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  -- Shortcut for numbers that are way too big anyway [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/Amount.hs:327:9-16: [really-safe-money-gen] @@ -324,7 +324,7 @@ [really-safe-money-gen]  in go resultDouble [really-safe-money-gen]  where [really-safe-money-gen]  go resultDouble [really-safe-money-gen] - | isNaN d = Nothing [really-safe-money-gen] + | not (isNaN d) = Nothing [really-safe-money-gen]  | isInfinite d = Nothing [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  -- Shortcut for numbers that are way too big anyway [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:328:9-21: [really-safe-money-gen] @@ -325,7 +325,7 @@ [really-safe-money-gen]  where [really-safe-money-gen]  go resultDouble [really-safe-money-gen]  | isNaN d = Nothing [really-safe-money-gen] - | isInfinite d = Nothing [really-safe-money-gen] + | True = Nothing [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  -- Shortcut for numbers that are way too big anyway [really-safe-money-gen]  -- so that we don't have to compute the according 'Natural' values. [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:328:9-21: [really-safe-money-gen] @@ -325,7 +325,7 @@ [really-safe-money-gen]  where [really-safe-money-gen]  go resultDouble [really-safe-money-gen]  | isNaN d = Nothing [really-safe-money-gen] - | isInfinite d = Nothing [really-safe-money-gen] + | False = Nothing [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  -- Shortcut for numbers that are way too big anyway [really-safe-money-gen]  -- so that we don't have to compute the according 'Natural' values. [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/Amount.hs:328:9-21: [really-safe-money-gen] @@ -325,7 +325,7 @@ [really-safe-money-gen]  where [really-safe-money-gen]  go resultDouble [really-safe-money-gen]  | isNaN d = Nothing [really-safe-money-gen] - | isInfinite d = Nothing [really-safe-money-gen] + | not (isInfinite d) = Nothing [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  -- Shortcut for numbers that are way too big anyway [really-safe-money-gen]  -- so that we don't have to compute the according 'Natural' values. [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:329:9-18: [really-safe-money-gen] @@ -326,7 +326,7 @@ [really-safe-money-gen]  go resultDouble [really-safe-money-gen]  | isNaN d = Nothing [really-safe-money-gen]  | isInfinite d = Nothing [really-safe-money-gen] - | otherwise = [really-safe-money-gen] + | True = [really-safe-money-gen]  -- Shortcut for numbers that are way too big anyway [really-safe-money-gen]  -- so that we don't have to compute the according 'Natural' values. [really-safe-money-gen]  if exponent resultDouble > 65 [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:329:9-18: [really-safe-money-gen] @@ -326,7 +326,7 @@ [really-safe-money-gen]  go resultDouble [really-safe-money-gen]  | isNaN d = Nothing [really-safe-money-gen]  | isInfinite d = Nothing [really-safe-money-gen] - | otherwise = [really-safe-money-gen] + | False = [really-safe-money-gen]  -- Shortcut for numbers that are way too big anyway [really-safe-money-gen]  -- so that we don't have to compute the according 'Natural' values. [really-safe-money-gen]  if exponent resultDouble > 65 [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/Amount.hs:329:9-18: [really-safe-money-gen] @@ -326,7 +326,7 @@ [really-safe-money-gen]  go resultDouble [really-safe-money-gen]  | isNaN d = Nothing [really-safe-money-gen]  | isInfinite d = Nothing [really-safe-money-gen] - | otherwise = [really-safe-money-gen] + | not (otherwise) = [really-safe-money-gen]  -- Shortcut for numbers that are way too big anyway [really-safe-money-gen]  -- so that we don't have to compute the according 'Natural' values. [really-safe-money-gen]  if exponent resultDouble > 65 [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Amount.hs:332:38-40: [really-safe-money-gen] @@ -329,7 +329,7 @@ [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  -- Shortcut for numbers that are way too big anyway [really-safe-money-gen]  -- so that we don't have to compute the according 'Natural' values. [really-safe-money-gen] - if exponent resultDouble > 65 [really-safe-money-gen] + if exponent resultDouble > 0 [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else [really-safe-money-gen]  let ceiled :: Natural [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Amount.hs:332:38-40: [really-safe-money-gen] @@ -329,7 +329,7 @@ [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  -- Shortcut for numbers that are way too big anyway [really-safe-money-gen]  -- so that we don't have to compute the according 'Natural' values. [really-safe-money-gen] - if exponent resultDouble > 65 [really-safe-money-gen] + if exponent resultDouble > 1 [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else [really-safe-money-gen]  let ceiled :: Natural [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Amount.hs:332:38-40: [really-safe-money-gen] @@ -329,7 +329,7 @@ [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  -- Shortcut for numbers that are way too big anyway [really-safe-money-gen]  -- so that we don't have to compute the according 'Natural' values. [really-safe-money-gen] - if exponent resultDouble > 65 [really-safe-money-gen] + if exponent resultDouble > -65 [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else [really-safe-money-gen]  let ceiled :: Natural [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:332:14-40: [really-safe-money-gen] @@ -329,7 +329,7 @@ [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  -- Shortcut for numbers that are way too big anyway [really-safe-money-gen]  -- so that we don't have to compute the according 'Natural' values. [really-safe-money-gen] - if exponent resultDouble > 65 [really-safe-money-gen] + if True [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else [really-safe-money-gen]  let ceiled :: Natural [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:332:14-40: [really-safe-money-gen] @@ -329,7 +329,7 @@ [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  -- Shortcut for numbers that are way too big anyway [really-safe-money-gen]  -- so that we don't have to compute the according 'Natural' values. [really-safe-money-gen] - if exponent resultDouble > 65 [really-safe-money-gen] + if False [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else [really-safe-money-gen]  let ceiled :: Natural [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/Amount.hs:332:14-40: [really-safe-money-gen] @@ -329,7 +329,7 @@ [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  -- Shortcut for numbers that are way too big anyway [really-safe-money-gen]  -- so that we don't have to compute the according 'Natural' values. [really-safe-money-gen] - if exponent resultDouble > 65 [really-safe-money-gen] + if not (exponent resultDouble > 65) [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else [really-safe-money-gen]  let ceiled :: Natural [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:339:22-39: [really-safe-money-gen] @@ -336,7 +336,7 @@ [really-safe-money-gen]  ceiled = (ceiling :: Double -> Natural) resultDouble [really-safe-money-gen]  floored :: Natural [really-safe-money-gen]  floored = (floor :: Double -> Natural) resultDouble [really-safe-money-gen] - in if ceiled == floored [really-safe-money-gen] + in if True [really-safe-money-gen]  then [really-safe-money-gen]  if ceiled > (fromIntegral :: Word64 -> Natural) (maxBound :: Word64) [really-safe-money-gen]  then Nothing [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:339:22-39: [really-safe-money-gen] @@ -336,7 +336,7 @@ [really-safe-money-gen]  ceiled = (ceiling :: Double -> Natural) resultDouble [really-safe-money-gen]  floored :: Natural [really-safe-money-gen]  floored = (floor :: Double -> Natural) resultDouble [really-safe-money-gen] - in if ceiled == floored [really-safe-money-gen] + in if False [really-safe-money-gen]  then [really-safe-money-gen]  if ceiled > (fromIntegral :: Word64 -> Natural) (maxBound :: Word64) [really-safe-money-gen]  then Nothing [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/Amount.hs:339:22-39: [really-safe-money-gen] @@ -336,7 +336,7 @@ [really-safe-money-gen]  ceiled = (ceiling :: Double -> Natural) resultDouble [really-safe-money-gen]  floored :: Natural [really-safe-money-gen]  floored = (floor :: Double -> Natural) resultDouble [really-safe-money-gen] - in if ceiled == floored [really-safe-money-gen] + in if not (ceiled == floored) [really-safe-money-gen]  then [really-safe-money-gen]  if ceiled > (fromIntegral :: Word64 -> Natural) (maxBound :: Word64) [really-safe-money-gen]  then Nothing [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:341:26-91: [really-safe-money-gen] @@ -338,7 +338,7 @@ [really-safe-money-gen]  floored = (floor :: Double -> Natural) resultDouble [really-safe-money-gen]  in if ceiled == floored [really-safe-money-gen]  then [really-safe-money-gen] - if ceiled > (fromIntegral :: Word64 -> Natural) (maxBound :: Word64) [really-safe-money-gen] + if True [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just $ Amount (fromIntegral ceiled) [really-safe-money-gen]  else Nothing [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:341:26-91: [really-safe-money-gen] @@ -338,7 +338,7 @@ [really-safe-money-gen]  floored = (floor :: Double -> Natural) resultDouble [really-safe-money-gen]  in if ceiled == floored [really-safe-money-gen]  then [really-safe-money-gen] - if ceiled > (fromIntegral :: Word64 -> Natural) (maxBound :: Word64) [really-safe-money-gen] + if False [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just $ Amount (fromIntegral ceiled) [really-safe-money-gen]  else Nothing [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/Amount.hs:341:26-91: [really-safe-money-gen] @@ -338,7 +338,7 @@ [really-safe-money-gen]  floored = (floor :: Double -> Natural) resultDouble [really-safe-money-gen]  in if ceiled == floored [really-safe-money-gen]  then [really-safe-money-gen] - if ceiled > (fromIntegral :: Word64 -> Natural) (maxBound :: Word64) [really-safe-money-gen] + if not (ceiled > (fromIntegral :: Word64 -> Natural) (maxBound :: Word64)) [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just $ Amount (fromIntegral ceiled) [really-safe-money-gen]  else Nothing [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Money/Amount.hs:341:23-65: [really-safe-money-gen] @@ -338,7 +338,7 @@ [really-safe-money-gen]  floored = (floor :: Double -> Natural) resultDouble [really-safe-money-gen]  in if ceiled == floored [really-safe-money-gen]  then [really-safe-money-gen] - if ceiled > (fromIntegral :: Word64 -> Natural) (maxBound :: Word64) [really-safe-money-gen] + if ceiled > (fromIntegral :: Word64 -> Natural) (maxBound :: Word64) [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just $ Amount (fromIntegral ceiled) [really-safe-money-gen]  else Nothing [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Money/Amount.hs:339:19-33: [really-safe-money-gen] @@ -336,7 +336,7 @@ [really-safe-money-gen]  ceiled = (ceiling :: Double -> Natural) resultDouble [really-safe-money-gen]  floored :: Natural [really-safe-money-gen]  floored = (floor :: Double -> Natural) resultDouble [really-safe-money-gen] - in if ceiled == floored [really-safe-money-gen] + in if ceiled == floored [really-safe-money-gen]  then [really-safe-money-gen]  if ceiled > (fromIntegral :: Word64 -> Natural) (maxBound :: Word64) [really-safe-money-gen]  then Nothing [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Money/Amount.hs:332:11-33: [really-safe-money-gen] @@ -329,7 +329,7 @@ [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  -- Shortcut for numbers that are way too big anyway [really-safe-money-gen]  -- so that we don't have to compute the according 'Natural' values. [really-safe-money-gen] - if exponent resultDouble > 65 [really-safe-money-gen] + if exponent resultDouble > 65 [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else [really-safe-money-gen]  let ceiled :: Natural [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Amount.hs:290:79-80: [really-safe-money-gen] @@ -287,7 +287,7 @@ [really-safe-money-gen]  -- >>> toRatio (QuantisationFactor 100) (Amount 1) [really-safe-money-gen]  -- 1 % 100 [really-safe-money-gen]  toRatio :: QuantisationFactor -> Amount -> Ratio Natural [really-safe-money-gen] -toRatio (QuantisationFactor 0) a = fromIntegral (toMinimalQuantisations a) :% 0 [really-safe-money-gen] +toRatio (QuantisationFactor 0) a = fromIntegral (toMinimalQuantisations a) :% 1 [really-safe-money-gen]  toRatio (QuantisationFactor quantisationFactor) a = [really-safe-money-gen]  (fromIntegral :: Word64 -> Natural) (toMinimalQuantisations a) [really-safe-money-gen]  % (fromIntegral :: Word32 -> Natural) quantisationFactor [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Amount.hs:494:96-97: [really-safe-money-gen] @@ -491,7 +491,7 @@ [really-safe-money-gen]  let maxBoundI :: Integer [really-safe-money-gen]  maxBoundI = fromIntegral (maxBound :: Word64) [really-safe-money-gen]  r :: Integer [really-safe-money-gen] - r = foldl' (\acc a -> (toInteger :: Word64 -> Integer) (toMinimalQuantisations a) + acc) 0 l [really-safe-money-gen] + r = foldl' (\acc a -> (toInteger :: Word64 -> Integer) (toMinimalQuantisations a) + acc) 1 l [really-safe-money-gen]  in if r > maxBoundI [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just (Amount ((fromInteger :: Integer -> Word64) r)) [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:495:10-23: [really-safe-money-gen] @@ -492,7 +492,7 @@ [really-safe-money-gen]  maxBoundI = fromIntegral (maxBound :: Word64) [really-safe-money-gen]  r :: Integer [really-safe-money-gen]  r = foldl' (\acc a -> (toInteger :: Word64 -> Integer) (toMinimalQuantisations a) + acc) 0 l [really-safe-money-gen] - in if r > maxBoundI [really-safe-money-gen] + in if True [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just (Amount ((fromInteger :: Integer -> Word64) r)) [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:495:10-23: [really-safe-money-gen] @@ -492,7 +492,7 @@ [really-safe-money-gen]  maxBoundI = fromIntegral (maxBound :: Word64) [really-safe-money-gen]  r :: Integer [really-safe-money-gen]  r = foldl' (\acc a -> (toInteger :: Word64 -> Integer) (toMinimalQuantisations a) + acc) 0 l [really-safe-money-gen] - in if r > maxBoundI [really-safe-money-gen] + in if False [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just (Amount ((fromInteger :: Integer -> Word64) r)) [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/Amount.hs:495:10-23: [really-safe-money-gen] @@ -492,7 +492,7 @@ [really-safe-money-gen]  maxBoundI = fromIntegral (maxBound :: Word64) [really-safe-money-gen]  r :: Integer [really-safe-money-gen]  r = foldl' (\acc a -> (toInteger :: Word64 -> Integer) (toMinimalQuantisations a) + acc) 0 l [really-safe-money-gen] - in if r > maxBoundI [really-safe-money-gen] + in if not (r > maxBoundI) [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just (Amount ((fromInteger :: Integer -> Word64) r)) [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Money/Amount.hs:495:7-66: [really-safe-money-gen] @@ -492,7 +492,7 @@ [really-safe-money-gen]  maxBoundI = fromIntegral (maxBound :: Word64) [really-safe-money-gen]  r :: Integer [really-safe-money-gen]  r = foldl' (\acc a -> (toInteger :: Word64 -> Integer) (toMinimalQuantisations a) + acc) 0 l [really-safe-money-gen] - in if r > maxBoundI [really-safe-money-gen] + in if r > maxBoundI [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just (Amount ((fromInteger :: Integer -> Word64) r)) [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Amount.hs:250:15-16: [really-safe-money-gen] @@ -247,7 +247,7 @@ [really-safe-money-gen]  -- >>> zero [really-safe-money-gen]  -- Amount 0 [really-safe-money-gen]  zero :: Amount [really-safe-money-gen] -zero = Amount 0 [really-safe-money-gen] +zero = Amount 1 [really-safe-money-gen]  [really-safe-money-gen]  -- | Turn an amount into a number of minimal quantisations. [really-safe-money-gen]  -- [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Amount.hs:661:30-31: [really-safe-money-gen] @@ -658,7 +658,7 @@ [really-safe-money-gen]  -- | The amount and the real rate that was used, considering the 'Rounding' [really-safe-money-gen]  (Maybe Amount, Ratio Natural) [really-safe-money-gen]  fraction _ (Amount 0) f = (Just zero, f) [really-safe-money-gen] -fraction _ _ 0 = (Just zero, 0) [really-safe-money-gen] +fraction _ _ 0 = (Just zero, 1) [really-safe-money-gen]  fraction r (Amount a) f = [really-safe-money-gen]  let amountAsRatio :: Ratio Natural [really-safe-money-gen]  amountAsRatio = (fromIntegral :: Word64 -> Ratio Natural) a [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:681:12-37: [really-safe-money-gen] @@ -678,7 +678,7 @@ [really-safe-money-gen]  maxBoundN :: Natural [really-safe-money-gen]  maxBoundN = fromIntegral (maxBound :: Word64) [really-safe-money-gen]  result = Amount ((fromIntegral :: Natural -> Word64) roundedResult) [really-safe-money-gen] - in ( if roundedResult > maxBoundN [really-safe-money-gen] + in ( if True [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just result, [really-safe-money-gen]  actualRate [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:681:12-37: [really-safe-money-gen] @@ -678,7 +678,7 @@ [really-safe-money-gen]  maxBoundN :: Natural [really-safe-money-gen]  maxBoundN = fromIntegral (maxBound :: Word64) [really-safe-money-gen]  result = Amount ((fromIntegral :: Natural -> Word64) roundedResult) [really-safe-money-gen] - in ( if roundedResult > maxBoundN [really-safe-money-gen] + in ( if False [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just result, [really-safe-money-gen]  actualRate [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/Amount.hs:681:12-37: [really-safe-money-gen] @@ -678,7 +678,7 @@ [really-safe-money-gen]  maxBoundN :: Natural [really-safe-money-gen]  maxBoundN = fromIntegral (maxBound :: Word64) [really-safe-money-gen]  result = Amount ((fromIntegral :: Natural -> Word64) roundedResult) [really-safe-money-gen] - in ( if roundedResult > maxBoundN [really-safe-money-gen] + in ( if not (roundedResult > maxBoundN) [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just result, [really-safe-money-gen]  actualRate [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Money/Amount.hs:681:9-27: [really-safe-money-gen] @@ -678,7 +678,7 @@ [really-safe-money-gen]  maxBoundN :: Natural [really-safe-money-gen]  maxBoundN = fromIntegral (maxBound :: Word64) [really-safe-money-gen]  result = Amount ((fromIntegral :: Natural -> Word64) roundedResult) [really-safe-money-gen] - in ( if roundedResult > maxBoundN [really-safe-money-gen] + in ( if roundedResult > maxBoundN [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just result, [really-safe-money-gen]  actualRate [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:806:79-92: [really-safe-money-gen] @@ -803,4 +803,4 @@ [really-safe-money-gen]  [really-safe-money-gen]  -- | Validate that an 'Amount' is strictly positive. I.e. not 'zero'. [really-safe-money-gen]  validateStrictlyPositive :: Amount -> Validation [really-safe-money-gen] -validateStrictlyPositive amount = declare "The Amount is strictly positive" $ amount > zero [really-safe-money-gen] +validateStrictlyPositive amount = declare "The Amount is strictly positive" $ True [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:806:79-92: [really-safe-money-gen] @@ -803,4 +803,4 @@ [really-safe-money-gen]  [really-safe-money-gen]  -- | Validate that an 'Amount' is strictly positive. I.e. not 'zero'. [really-safe-money-gen]  validateStrictlyPositive :: Amount -> Validation [really-safe-money-gen] -validateStrictlyPositive amount = declare "The Amount is strictly positive" $ amount > zero [really-safe-money-gen] +validateStrictlyPositive amount = declare "The Amount is strictly positive" $ False [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/Amount.hs:806:79-92: [really-safe-money-gen] @@ -803,4 +803,4 @@ [really-safe-money-gen]  [really-safe-money-gen]  -- | Validate that an 'Amount' is strictly positive. I.e. not 'zero'. [really-safe-money-gen]  validateStrictlyPositive :: Amount -> Validation [really-safe-money-gen] -validateStrictlyPositive amount = declare "The Amount is strictly positive" $ amount > zero [really-safe-money-gen] +validateStrictlyPositive amount = declare "The Amount is strictly positive" $ not (amount > zero) [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:607:15-22: [really-safe-money-gen] @@ -604,7 +604,7 @@ [really-safe-money-gen]  case ad of [really-safe-money-gen]  DistributedIntoUnequalChunks _ a1 _ a2 -> [really-safe-money-gen]  declare "The larger chunks are larger" $ [really-safe-money-gen] - a1 > a2 [really-safe-money-gen] + True [really-safe-money-gen]  _ -> valid [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Double) qf [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.AccountSpec [really-safe-money-gen]  fromDouble [really-safe-money-gen]  ✓ produces valid rational  36.51 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 10000 [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.04 seconds [really-safe-money-gen]  Test suite took:  0.04 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:321:5-14: [really-safe-money-gen] @@ -318,7 +318,7 @@ [really-safe-money-gen]  Maybe Amount [really-safe-money-gen]  fromDouble (QuantisationFactor qf) d [really-safe-money-gen]  | d < 0 = Nothing [really-safe-money-gen] - | otherwise = [really-safe-money-gen] + | True = [really-safe-money-gen]  let resultDouble :: Double [really-safe-money-gen]  resultDouble = d * (fromIntegral :: Word32 -> Double) qf [really-safe-money-gen]  in go resultDouble [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.AccountSpec [really-safe-money-gen]  fromDouble [really-safe-money-gen]  ✓ produces valid rational  47.45 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 10000 [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.05 seconds [really-safe-money-gen]  Test suite took:  0.05 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:321:5-14: [really-safe-money-gen] @@ -318,7 +318,7 @@ [really-safe-money-gen]  Maybe Amount [really-safe-money-gen]  fromDouble (QuantisationFactor qf) d [really-safe-money-gen]  | d < 0 = Nothing [really-safe-money-gen] - | otherwise = [really-safe-money-gen] + | False = [really-safe-money-gen]  let resultDouble :: Double [really-safe-money-gen]  resultDouble = d * (fromIntegral :: Word32 -> Double) qf [really-safe-money-gen]  in go resultDouble [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.AccountSpec [really-safe-money-gen]  fromDouble [really-safe-money-gen]  ✓ produces valid rational  52.47 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 10000 [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.05 seconds [really-safe-money-gen]  Test suite took:  0.06 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:329:9-18: [really-safe-money-gen] @@ -326,7 +326,7 @@ [really-safe-money-gen]  go resultDouble [really-safe-money-gen]  | isNaN d = Nothing [really-safe-money-gen]  | isInfinite d = Nothing [really-safe-money-gen] - | otherwise = [really-safe-money-gen] + | True = [really-safe-money-gen]  -- Shortcut for numbers that are way too big anyway [really-safe-money-gen]  -- so that we don't have to compute the according 'Natural' values. [really-safe-money-gen]  if exponent resultDouble > 65 [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.AccountSpec [really-safe-money-gen]  fromDouble [really-safe-money-gen]  ✓ produces valid rational  52.33 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 10000 [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.05 seconds [really-safe-money-gen]  Test suite took:  0.05 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:329:9-18: [really-safe-money-gen] @@ -326,7 +326,7 @@ [really-safe-money-gen]  go resultDouble [really-safe-money-gen]  | isNaN d = Nothing [really-safe-money-gen]  | isInfinite d = Nothing [really-safe-money-gen] - | otherwise = [really-safe-money-gen] + | False = [really-safe-money-gen]  -- Shortcut for numbers that are way too big anyway [really-safe-money-gen]  -- so that we don't have to compute the according 'Natural' values. [really-safe-money-gen]  if exponent resultDouble > 65 [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.AccountSpec [really-safe-money-gen]  fromDouble [really-safe-money-gen]  ✓ produces valid rational  54.44 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 10000 [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.05 seconds [really-safe-money-gen]  Test suite took:  0.06 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Amount.hs:332:38-40: [really-safe-money-gen] @@ -329,7 +329,7 @@ [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  -- Shortcut for numbers that are way too big anyway [really-safe-money-gen]  -- so that we don't have to compute the according 'Natural' values. [really-safe-money-gen] - if exponent resultDouble > 65 [really-safe-money-gen] + if exponent resultDouble > 0 [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else [really-safe-money-gen]  let ceiled :: Natural [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.AccountSpec [really-safe-money-gen]  fromDouble [really-safe-money-gen]  ✓ produces valid rational  46.32 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 10000 [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.05 seconds [really-safe-money-gen]  Test suite took:  0.05 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Amount.hs:332:38-40: [really-safe-money-gen] @@ -329,7 +329,7 @@ [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  -- Shortcut for numbers that are way too big anyway [really-safe-money-gen]  -- so that we don't have to compute the according 'Natural' values. [really-safe-money-gen] - if exponent resultDouble > 65 [really-safe-money-gen] + if exponent resultDouble > 1 [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else [really-safe-money-gen]  let ceiled :: Natural [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.AccountSpec [really-safe-money-gen]  fromDouble [really-safe-money-gen]  ✓ produces valid rational  46.32 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 10000 [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.05 seconds [really-safe-money-gen]  Test suite took:  0.05 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Amount.hs:332:38-40: [really-safe-money-gen] @@ -329,7 +329,7 @@ [really-safe-money-gen]  | otherwise = [really-safe-money-gen]  -- Shortcut for numbers that are way too big anyway [really-safe-money-gen]  -- so that we don't have to compute the according 'Natural' values. [really-safe-money-gen] - if exponent resultDouble > 65 [really-safe-money-gen] + if exponent resultDouble > -65 [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else [really-safe-money-gen]  let ceiled :: Natural [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.AccountSpec [really-safe-money-gen]  fromDouble [really-safe-money-gen]  ✓ produces valid rational  45.93 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 10000 [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.05 seconds [really-safe-money-gen]  Test suite took:  0.05 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Amount.hs:494:96-97: [really-safe-money-gen] @@ -491,7 +491,7 @@ [really-safe-money-gen]  let maxBoundI :: Integer [really-safe-money-gen]  maxBoundI = fromIntegral (maxBound :: Word64) [really-safe-money-gen]  r :: Integer [really-safe-money-gen] - r = foldl' (\acc a -> (toInteger :: Word64 -> Integer) (toMinimalQuantisations a) + acc) 0 l [really-safe-money-gen] + r = foldl' (\acc a -> (toInteger :: Word64 -> Integer) (toMinimalQuantisations a) + acc) 1 l [really-safe-money-gen]  in if r > maxBoundI [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just (Amount ((fromInteger :: Integer -> Word64) r)) [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.AmountOfSpec [really-safe-money-gen]  USD [really-safe-money-gen]  sum [really-safe-money-gen]  ✓ produces valid amounts  1.33 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 100 [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.00 seconds [really-safe-money-gen]  Test suite took:  0.00 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/Amount.hs:661:30-31: [really-safe-money-gen] @@ -658,7 +658,7 @@ [really-safe-money-gen]  -- | The amount and the real rate that was used, considering the 'Rounding' [really-safe-money-gen]  (Maybe Amount, Ratio Natural) [really-safe-money-gen]  fraction _ (Amount 0) f = (Just zero, f) [really-safe-money-gen] -fraction _ _ 0 = (Just zero, 0) [really-safe-money-gen] +fraction _ _ 0 = (Just zero, 1) [really-safe-money-gen]  fraction r (Amount a) f = [really-safe-money-gen]  let amountAsRatio :: Ratio Natural [really-safe-money-gen]  amountAsRatio = (fromIntegral :: Word64 -> Ratio Natural) a [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.AccountSpec [really-safe-money-gen]  fractionRatio [really-safe-money-gen]  ✓ produces valid amounts  106.69 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 10000 [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.11 seconds [really-safe-money-gen]  Test suite took:  0.11 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:607:15-22: [really-safe-money-gen] @Testing mutation ConstBool at src/Money/Amount.hs:607:15-22: [really-safe-money-gen] @@ -604,7 +604,7 @@ [really-safe-money-gen]  case ad of [really-safe-money-gen]  DistributedIntoUnequalChunks _ a1 _ a2 -> [really-safe-money-gen]  declare "The larger chunks are larger" $ [really-safe-money-gen] - a1 > a2 [really-safe-money-gen] + False [really-safe-money-gen]  _ -> valid [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/Amount.hs:607:15-22: [really-safe-money-gen] @@ -604,7 +604,7 @@ [really-safe-money-gen]  case ad of [really-safe-money-gen]  DistributedIntoUnequalChunks _ a1 _ a2 -> [really-safe-money-gen]  declare "The larger chunks are larger" $ [really-safe-money-gen] - a1 > a2 [really-safe-money-gen] + not (a1 > a2) [really-safe-money-gen]  _ -> valid [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ListLit at src/Money/Amount.hs:603:7-8: [really-safe-money-gen] @@ -600,7 +600,7 @@ [really-safe-money-gen]  instance (Validity amount, Ord amount) => Validity (Distribution amount) where [really-safe-money-gen]  validate ad = [really-safe-money-gen]  mconcat [really-safe-money-gen] - [ genericValidate ad, [really-safe-money-gen] + [ genericValidate ad, [really-safe-money-gen]  case ad of [really-safe-money-gen]  DistributedIntoUnequalChunks _ a1 _ a2 -> [really-safe-money-gen]  declare "The larger chunks are larger" $ [really-safe-money-gen]  [really-safe-money-gen] @ -604,7 +604,7 @@ [really-safe-money-gen]  case ad of [really-safe-money-gen]  DistributedIntoUnequalChunks _ a1 _ a2 -> [really-safe-money-gen]  declare "The larger chunks are larger" $ [really-safe-money-gen] - a1 > a2 [really-safe-money-gen] + True [really-safe-money-gen]  _ -> valid [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.AccountSpec [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  42.89 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen] Money.AccountOfSpec [really-safe-money-gen]  USD [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.40 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.35 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.75 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.36 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.46 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen] Money.AmountOfSpec [really-safe-money-gen]  USD [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.27 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.30 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.41 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.68 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.41 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen] Money.AmountSpec [really-safe-money-gen]  distribute [really-safe-money-gen]  GenValid (Distribution Amount) [really-safe-money-gen]  genValid :: Gen (Distribution Amount) [really-safe-money-gen]  ✓ only generates valid '(Distribution Amount)'s  27.21 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ produces valid amounts  35.89 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 31000 [really-safe-money-gen]  Passed: 13 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.11 seconds [really-safe-money-gen]  Test suite took:  0.12 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/Amount.hs:607:15-22: [really-safe-money-gen] @@ -604,7 +604,7 @@ [really-safe-money-gen]  case ad of [really-safe-money-gen]  DistributedIntoUnequalChunks _ a1 _ a2 -> [really-safe-money-gen]  declare "The larger chunks are larger" $ [really-safe-money-gen] - a1 > a2 [really-safe-money-gen] + False [really-safe-money-gen]  _ -> valid [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.AccountSpec [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  44.16 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen] Money.AccountOfSpec [really-safe-money-gen]  USD [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.33 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.32 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.88 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.34 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.30 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen] Money.AmountOfSpec [really-safe-money-gen]  USD [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.33 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.26 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.27 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.92 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.47 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen] Money.AmountSpec [really-safe-money-gen]  distribute [really-safe-money-gen]  GenValid (Distribution Amount) [really-safe-money-gen]  genValid :: Gen (Distribution Amount) [really-safe-money-gen]  ✓ only generates valid '(Distribution Amount)'s  30.43 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ produces valid amounts  35.75 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 31000 [really-safe-money-gen]  Passed: 13 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.11 seconds [really-safe-money-gen]  Test suite took:  0.12 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ListLit at src/Money/Amount.hs:603:7-8: [really-safe-money-gen] @@ -600,7 +600,7 @@ [really-safe-money-gen]  instance (Validity amount, Ord amount) => Validity (Distribution amount) where [really-safe-money-gen]  validate ad = [really-safe-money-gen]  mconcat [really-safe-money-gen] - [ genericValidate ad, [really-safe-money-gen] + [ genericValidate ad, [really-safe-money-gen]  case ad of [really-safe-money-gen]  DistributedIntoUnequalChunks _ a1 _ a2 -> [really-safe-money-gen]  declare "The larger chunks are larger" $ [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.AccountSpec [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  19.56 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen] Money.AccountOfSpec [really-safe-money-gen]  USD [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.17 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.14 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.57 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen] Money.AmountOfSpec [really-safe-money-gen]  USD [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts Testing mutation ListLit at src/Money/Amount.hs:603:7-8: [really-safe-money-gen] @@ -600,7 +600,7 @@ [really-safe-money-gen]  instance (Validity amount, Ord amount) => Validity (Distribution amount) where [really-safe-money-gen]  validate ad = [really-safe-money-gen]  mconcat [really-safe-money-gen] - [ genericValidate ad, [really-safe-money-gen] + [ genericValidate ad, [really-safe-money-gen]  case ad of [really-safe-money-gen]  DistributedIntoUnequalChunks _ a1 _ a2 -> [really-safe-money-gen]  declare "The larger chunks are larger" $ [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/QuantisationFactor.hs:87:27-28: [really-safe-money-gen] @@ -84,7 +84,7 @@ [really-safe-money-gen]  fromDecimalLiteral dl = do [really-safe-money-gen]  irat <- [really-safe-money-gen]  let r = DecimalLiteral.toRational dl [really-safe-money-gen] - in if numerator r == 0 [really-safe-money-gen] + in if numerator r == 1 [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else pure r [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/QuantisationFactor.hs:87:12-28: [really-safe-money-gen] @@ -84,7 +84,7 @@ [really-safe-money-gen]  fromDecimalLiteral dl = do [really-safe-money-gen]  irat <- [really-safe-money-gen]  let r = DecimalLiteral.toRational dl [really-safe-money-gen] - in if numerator r == 0 [really-safe-money-gen] + in if True [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else pure r [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/QuantisationFactor.hs:87:12-28: [really-safe-money-gen] @@ -84,7 +84,7 @@ [really-safe-money-gen]  fromDecimalLiteral dl = do [really-safe-money-gen]  irat <- [really-safe-money-gen]  let r = DecimalLiteral.toRational dl [really-safe-money-gen] - in if numerator r == 0 [really-safe-money-gen] + in if False [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else pure r [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/QuantisationFactor.hs:87:12-28: [really-safe-money-gen] @@ -84,7 +84,7 @@ [really-safe-money-gen]  fromDecimalLiteral dl = do [really-safe-money-gen]  irat <- [really-safe-money-gen]  let r = DecimalLiteral.toRational dl [really-safe-money-gen] - in if numerator r == 0 [really-safe-money-gen] + in if not (numerator r == 0) [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else pure r [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Money/QuantisationFactor.hs:87:9-22: [really-safe-money-gen] @@ -84,7 +84,7 @@ [really-safe-money-gen]  fromDecimalLiteral dl = do [really-safe-money-gen]  irat <- [really-safe-money-gen]  let r = DecimalLiteral.toRational dl [really-safe-money-gen] - in if numerator r == 0 [really-safe-money-gen] + in if numerator r == 0 [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else pure r [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/QuantisationFactor.hs:92:13-14: [really-safe-money-gen] @@ -89,7 +89,7 @@ [really-safe-money-gen]  else pure r [really-safe-money-gen]  [really-safe-money-gen]  rat <- [really-safe-money-gen] - let r = 1 / irat [really-safe-money-gen] + let r = 0 / irat [really-safe-money-gen]  in if r < 0 [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just r [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/QuantisationFactor.hs:92:13-14: [really-safe-money-gen] @@ -89,7 +89,7 @@ [really-safe-money-gen]  else pure r [really-safe-money-gen]  [really-safe-money-gen]  rat <- [really-safe-money-gen] - let r = 1 / irat [really-safe-money-gen] + let r = -1 / irat [really-safe-money-gen]  in if r < 0 [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just r [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/QuantisationFactor.hs:93:16-17: [really-safe-money-gen] @@ -90,7 +90,7 @@ [really-safe-money-gen]  [really-safe-money-gen]  rat <- [really-safe-money-gen]  let r = 1 / irat [really-safe-money-gen] - in if r < 0 [really-safe-money-gen] + in if r < 1 [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just r [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/QuantisationFactor.hs:93:12-17: [really-safe-money-gen] @@ -90,7 +90,7 @@ [really-safe-money-gen]  [really-safe-money-gen]  rat <- [really-safe-money-gen]  let r = 1 / irat [really-safe-money-gen] - in if r < 0 [really-safe-money-gen] + in if True [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just r [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/QuantisationFactor.hs:93:12-17: [really-safe-money-gen] @@ -90,7 +90,7 @@ [really-safe-money-gen]  [really-safe-money-gen]  rat <- [really-safe-money-gen]  let r = 1 / irat [really-safe-money-gen] - in if r < 0 [really-safe-money-gen] + in if False [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just r [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/QuantisationFactor.hs:93:12-17: [really-safe-money-gen] @@ -90,7 +90,7 @@ [really-safe-money-gen]  [really-safe-money-gen]  rat <- [really-safe-money-gen]  let r = 1 / irat [really-safe-money-gen] - in if r < 0 [really-safe-money-gen] + in if not (r < 0) [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just r [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Money/QuantisationFactor.hs:93:9-22: [really-safe-money-gen] @@ -90,7 +90,7 @@ [really-safe-money-gen]  [really-safe-money-gen]  rat <- [really-safe-money-gen]  let r = 1 / irat [really-safe-money-gen] - in if r < 0 [really-safe-money-gen] + in if r < 0 [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just r [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/QuantisationFactor.hs:98:27-28: [really-safe-money-gen] @@ -95,7 +95,7 @@ [really-safe-money-gen]  else Just r [really-safe-money-gen]  [really-safe-money-gen]  fac <- [really-safe-money-gen] - if denominator rat == 1 [really-safe-money-gen] + if denominator rat == 0 [really-safe-money-gen]  then Just (numerator rat) [really-safe-money-gen]  else Nothing [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/QuantisationFactor.hs:98:27-28: [really-safe-money-gen] @@ -95,7 +95,7 @@ [really-safe-money-gen]  else Just r [really-safe-money-gen]  [really-safe-money-gen]  fac <- [really-safe-money-gen] - if denominator rat == 1 [really-safe-money-gen] + if denominator rat == -1 [really-safe-money-gen]  then Just (numerator rat) [really-safe-money-gen]  else Nothing [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/QuantisationFactor.hs:98:8-28: [really-safe-money-gen] @@ -95,7 +95,7 @@ [really-safe-money-gen]  else Just r [really-safe-money-gen]  [really-safe-money-gen]  fac <- [really-safe-money-gen] - if denominator rat == 1 [really-safe-money-gen] + if True [really-safe-money-gen]  then Just (numerator rat) [really-safe-money-gen]  else Nothing [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/QuantisationFactor.hs:98:8-28: [really-safe-money-gen] @@ -95,7 +95,7 @@ [really-safe-money-gen]  else Just r [really-safe-money-gen]  [really-safe-money-gen]  fac <- [really-safe-money-gen] - if denominator rat == 1 [really-safe-money-gen] + if False [really-safe-money-gen]  then Just (numerator rat) [really-safe-money-gen]  else Nothing [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/QuantisationFactor.hs:98:8-28: [really-safe-money-gen] @@ -95,7 +95,7 @@ [really-safe-money-gen]  else Just r [really-safe-money-gen]  [really-safe-money-gen]  fac <- [really-safe-money-gen] - if denominator rat == 1 [really-safe-money-gen] + if not (denominator rat == 1) [really-safe-money-gen]  then Just (numerator rat) [really-safe-money-gen]  else Nothing [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Money/QuantisationFactor.hs:98:5-19: [really-safe-money-gen] @@ -95,7 +95,7 @@ [really-safe-money-gen]  else Just r [really-safe-money-gen]  [really-safe-money-gen]  fac <- [really-safe-money-gen] - if denominator rat == 1 [really-safe-money-gen] + if denominator rat == 1 [really-safe-money-gen]  then Just (numerator rat) [really-safe-money-gen]  else Nothing [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/QuantisationFactor.hs:102:6-46: [really-safe-money-gen] @@ -99,6 +99,6 @@ [really-safe-money-gen]  then Just (numerator rat) [really-safe-money-gen]  else Nothing [really-safe-money-gen]  [really-safe-money-gen] - if fac <= fromIntegral (maxBound :: Word32) [really-safe-money-gen] + if True [really-safe-money-gen]  then Just (QuantisationFactor (fromIntegral fac)) [really-safe-money-gen]  else Nothing [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/QuantisationFactor.hs:102:6-46: [really-safe-money-gen] @@ -99,6 +99,6 @@ [really-safe-money-gen]  then Just (numerator rat) [really-safe-money-gen]  else Nothing [really-safe-money-gen]  [really-safe-money-gen] - if fac <= fromIntegral (maxBound :: Word32) [really-safe-money-gen] + if False [really-safe-money-gen]  then Just (QuantisationFactor (fromIntegral fac)) [really-safe-money-gen]  else Nothing [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/QuantisationFactor.hs:102:6-46: [really-safe-money-gen] @@ -99,6 +99,6 @@ [really-safe-money-gen]  then Just (numerator rat) [really-safe-money-gen]  else Nothing [really-safe-money-gen]  [really-safe-money-gen] - if fac <= fromIntegral (maxBound :: Word32) [really-safe-money-gen] + if not (fac <= fromIntegral (maxBound :: Word32)) [really-safe-money-gen]  then Just (QuantisationFactor (fromIntegral fac)) [really-safe-money-gen]  else Nothing [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/QuantisationFactor.hs:67:67-68: [really-safe-money-gen] @@ -64,7 +64,7 @@ [really-safe-money-gen]  -- Just (DecimalLiteral Nothing 1 0) [really-safe-money-gen]  toDecimalLiteral :: QuantisationFactor -> Maybe DecimalLiteral [really-safe-money-gen]  toDecimalLiteral (QuantisationFactor qfw) = [really-safe-money-gen] - DecimalLiteral.setSignOptional <$> DecimalLiteral.fromRational (1 % fromIntegral qfw) [really-safe-money-gen] + DecimalLiteral.setSignOptional <$> DecimalLiteral.fromRational (0 % fromIntegral qfw) [really-safe-money-gen]  [really-safe-money-gen]  -- | Parse a 'QuantisationFactor' from a 'DecimalLiteral' that represents the smallest unit [really-safe-money-gen]  -- TODO explain that it's the inverse. [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/QuantisationFactor.hs:67:67-68: [really-safe-money-gen] @@ -64,7 +64,7 @@ [really-safe-money-gen]  -- Just (DecimalLiteral Nothing 1 0) [really-safe-money-gen]  toDecimalLiteral :: QuantisationFactor -> Maybe DecimalLiteral [really-safe-money-gen]  toDecimalLiteral (QuantisationFactor qfw) = [really-safe-money-gen] - DecimalLiteral.setSignOptional <$> DecimalLiteral.fromRational (1 % fromIntegral qfw) [really-safe-money-gen] + DecimalLiteral.setSignOptional <$> DecimalLiteral.fromRational (-1 % fromIntegral qfw) [really-safe-money-gen]  [really-safe-money-gen]  -- | Parse a 'QuantisationFactor' from a 'DecimalLiteral' that represents the smallest unit [really-safe-money-gen]  -- TODO explain that it's the inverse. [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/QuantisationFactor.hs:40:62-63: [really-safe-money-gen] @@ -37,7 +37,7 @@ [really-safe-money-gen]  validate qf@(QuantisationFactor w) = [really-safe-money-gen]  mconcat [really-safe-money-gen]  [ genericValidate qf, [really-safe-money-gen] - declare "The quantisation factor is not zero" $ w /= 0 [really-safe-money-gen] + declare "The quantisation factor is not zero" $ w /= 1 [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen]  instance NFData QuantisationFactor [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/QuantisationFactor.hs:40:57-63: [really-safe-money-gen] @@ -37,7 +37,7 @@ [really-safe-money-gen]  validate qf@(QuantisationFactor w) = [really-safe-money-gen]  mconcat [really-safe-money-gen]  [ genericValidate qf, [really-safe-money-gen] - declare "The quantisation factor is not zero" $ w /= 0 [really-safe-money-gen] + declare "The quantisation factor is not zero" $ True [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen]  instance NFData QuantisationFactor [really-safe-money-gen]  [really-safe-money-gen]   0.11 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.11 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.11 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.12 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen] Money.AmountSpec [really-safe-money-gen]  distribute [really-safe-money-gen]  GenValid (Distribution Amount) [really-safe-money-gen]  genValid :: Gen (Distribution Amount) [really-safe-money-gen]  ✓ only generates valid '(Distribution Amount)'s  18.96 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ produces valid amounts  18.80 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 31000 [really-safe-money-gen]  Passed: 13 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.06 seconds [really-safe-money-gen]  Test suite took:  0.06 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ListLit at src/Money/Amount.hs:603:7-8: [really-safe-money-gen] @@ -600,7 +600,7 @@ [really-safe-money-gen]  instance (Validity amount, Ord amount) => Validity (Distribution amount) where [really-safe-money-gen]  validate ad = [really-safe-money-gen]  mconcat [really-safe-money-gen] - [ genericValidate ad, [really-safe-money-gen] + [ genericValidate ad, [really-safe-money-gen]  case ad of [really-safe-money-gen]  DistributedIntoUnequalChunks _ a1 _ a2 -> [really-safe-money-gen]  declare "The larger chunks are larger" $ [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.AccountSpec [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  18.56 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen] Money.AccountOfSpec [really-safe-money-gen]  USD [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.22 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.19 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.51 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen] Money.AmountOfSpec [really-safe-money-gen]  USD [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.20 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  ADA [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.14 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  INR [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.16 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  BTC [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.22 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen]  CHF [really-safe-money-gen]  distribute [really-safe-money-gen]  ✓ produces valid amounts  0.18 ms [really-safe-money-gen]  passed for all of 100 inputs. [really-safe-money-gen] Money.AmountSpec [really-safe-money-gen]  distribute [really-safe-money-gen]  GenValid (Distribution Amount) [really-safe-money-gen]  genValid :: Gen (Distribution Amount) [really-safe-money-gen]  ✓ only generates valid '(Distribution Amount)'s  18.70 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  ✓ produces valid amounts  18.81 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 31000 [really-safe-money-gen]  Passed: 13 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.06 seconds [really-safe-money-gen]  Test suite took:  0.06 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/QuantisationFactor.hs:87:27-28: [really-safe-money-gen] @@ -84,7 +84,7 @@ [really-safe-money-gen]  fromDecimalLiteral dl = do [really-safe-money-gen]  irat <- [really-safe-money-gen]  let r = DecimalLiteral.toRational dl [really-safe-money-gen] - in if numerator r == 0 [really-safe-money-gen] + in if numerator r == 1 [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else pure r [really-safe-money-gen]  [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.QuantisationFactorSpec [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ fails to render a non-1 integer  60.55 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 10000 [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.06 seconds [really-safe-money-gen]  Test suite took:  0.06 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/QuantisationFactor.hs:93:16-17: [really-safe-money-gen] @@ -90,7 +90,7 @@ [really-safe-money-gen]  [really-safe-money-gen]  rat <- [really-safe-money-gen]  let r = 1 / irat [really-safe-money-gen] - in if r < 0 [really-safe-money-gen] + in if r < 1 [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just r [really-safe-money-gen]  [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.QuantisationFactorSpec [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ fails to render a non-1 integer  51.07 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 10000 [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.05 seconds [really-safe-money-gen]  Test suite took:  0.05 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/QuantisationFactor.hs:98:27-28: [really-safe-money-gen] @@ -95,7 +95,7 @@ [really-safe-money-gen]  else Just r [really-safe-money-gen]  [really-safe-money-gen]  fac <- [really-safe-money-gen] - if denominator rat == 1 [really-safe-money-gen] + if denominator rat == 0 [really-safe-money-gen]  then Just (numerator rat) [really-safe-money-gen]  else Nothing [really-safe-money-gen]  [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.QuantisationFactorSpec [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ fails to render a non-1 integer  60.98 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 10000 [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.06 seconds [really-safe-money-gen]  Test suite took:  0.06 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation IntLit at src/Money/QuantisationFactor.hs:98:27-28: [really-safe-money-gen] @@ -95,7 +95,7 @@ [really-safe-money-gen]  else Just r [really-safe-money-gen]  [really-safe-money-gen]  fac <- [really-safe-money-gen] - if denominator rat == 1 [really-safe-money-gen] + if denominator rat == -1 [really-safe-money-gen]  then Just (numerator rat) [really-safe-money-gen]  else Nothing [really-safe-money-gen]  [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.QuantisationFactorSpec [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ fails to render a non-1 integer  59.23 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 10000 [really-safe-money-gen]  Passed: 1 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.06 seconds [really-safe-money-gen]  Test suite took:  0.06 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/QuantisationFactor.hs:40:57-63: [really-safe-money-gen] @@ -37,7 +37,7 @@ [really-safe-money-gen]  validate qf@(QuantisationFactor w) = [really-safe-money-gen]  mconcat [really-safe-money-gen]  [ genericValidate qf, [really-safe-money-gen] - declare "The quantisation factor is not zero" $ w /= 0 [really-safe-money-gen] + declare "The quantisation factor is not zero" $ True [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen]  instance NFData QuantisationFactor [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.MultiAmountSpec [really-safe-money-gen]  fromAmount [really-safe-money-gen]  ✓ produces valid amounts  6.62 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  sum [really-safe-money-gen]  ✓ Testing mutation ConstBool at src/Money/QuantisationFactor.hs:40:57-63: [really-safe-money-gen] @@ -37,7 +37,7 @@ [really-safe-money-gen]  validate qf@(QuantisationFactor w) = [really-safe-money-gen]  mconcat [really-safe-money-gen]  [ genericValidate qf, [really-safe-money-gen] - declare "The quantisation factor is not zero" $ w /= 0 [really-safe-money-gen] + declare "The quantisation factor is not zero" $ False [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen]  instance NFData QuantisationFactor [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/QuantisationFactor.hs:40:57-63: [really-safe-money-gen] @@ -37,7 +37,7 @@ [really-safe-money-gen]  validate qf@(QuantisationFactor w) = [really-safe-money-gen]  mconcat [really-safe-money-gen]  [ genericValidate qf, [really-safe-money-gen] - declare "The quantisation factor is not zero" $ w /= 0 [really-safe-money-gen] + declare "The quantisation factor is not zero" $ not (w /= 0) [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen]  instance NFData QuantisationFactor [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ListLit at src/Money/QuantisationFactor.hs:39:7-8: [really-safe-money-gen] @@ -36,7 +36,7 @@ [really-safe-money-gen]  instance Validity QuantisationFactor where [really-safe-money-gen]  validate qf@(QuantisationFactor w) = [really-safe-money-gen]  mconcat [really-safe-money-gen] - [ genericValidate qf, [really-safe-money-gen] + [ genericValidate qf, [really-safe-money-gen]  declare "The quantisation factor is not zero" $ w /= 0 [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] produces valid amounts  102.48 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  add [really-safe-money-gen]  ✓ produces valid amounts  70.57 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  addAmount [really-safe-money-gen]  ✓ produces valid amounts  41.61 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtractAmount [really-safe-money-gen]  ✓ produces valid amounts  14.83 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  GenValid (MultiAmount Currency) [really-safe-money-gen]  genValid :: Gen (MultiAmount Currency) [really-safe-money-gen]  ✓ only generates valid '(MultiAmount Currency)'s  64.30 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ produces valid amounts  22.80 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen] Money.QuantisationFactorSpec [really-safe-money-gen]  fromWord32 [really-safe-money-gen]  ✓ produces valid quantisation factors  28.46 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid factors  83.17 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  GenValid QuantisationFactor [really-safe-money-gen]  genValid :: Gen QuantisationFactor [really-safe-money-gen]  ✓ only generates valid 'QuantisationFactor's  29.54 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen] Money.MultiAccountSpec [really-safe-money-gen]  subtractAmount [really-safe-money-gen]  ✓ produces valid amounts  41.66 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  add [really-safe-money-gen]  ✓ produces valid amounts  72.49 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  GenValid (MultiAccount Currency) [really-safe-money-gen]  genValid :: Gen (MultiAccount Currency) [really-safe-money-gen]  ✓ only generates valid '(MultiAccount Currency)'s  62.53 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  sum [really-safe-money-gen]  ✓ produces valid amounts  105.73 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  fromAccount [really-safe-money-gen]  ✓ produces valid amounts  7.37 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  addAccount [really-safe-money-gen]  ✓ produces valid amounts  42.43 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ produces valid amounts  79.40 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  addAmount [really-safe-money-gen]  ✓ produces valid amounts  46.02 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtractAccount [really-safe-money-gen]  ✓ produces valid amounts  47.30 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 46000 [really-safe-money-gen]  Passed: 19 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.97 seconds [really-safe-money-gen]  Test suite took:  0.97 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/QuantisationFactor.hs:40:57-63: [really-safe-money-gen] @@ -37,7 +37,7 @@ [really-safe-money-gen]  validate qf@(QuantisationFactor w) = [really-safe-money-gen]  mconcat [really-safe-money-gen]  [ genericValidate qf, [really-safe-money-gen] - declare "The quantisation factor is not zero" $ w /= 0 [really-safe-money-gen] + declare "The quantisation factor is not zero" $ False [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen]  instance NFData QuantisationFactor [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.MultiAmountSpec [really-safe-money-gen]  fromAmount [really-safe-money-gen]  ✓ produces valid amounts  7.62 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  sum [really-safe-money-gen]  ✓ produces valid amounts  120.48 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  add [really-safe-money-gen]  ✓ produces valid amounts  81.36 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  addAmount [really-safe-money-gen]  ✓ produces valid amounts  41.75 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtractAmount [really-safe-money-gen]  ✓ produces valid amounts  13.97 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  GenValid (MultiAmount Currency) [really-safe-money-gen]  genValid :: Gen (MultiAmount Currency) [really-safe-money-gen]  ✓ only generates valid '(MultiAmount Currency)'s  61.63 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ produces valid amounts  22.05 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen] Money.QuantisationFactorSpec [really-safe-money-gen]  fromWord32 [really-safe-money-gen]  ✓ produces valid quantisation factors  26.55 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid factors  84.42 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  GenValid QuantisationFactor [really-safe-money-gen]  genValid :: Gen QuantisationFactor [really-safe-money-gen]  ✓ only generates valid 'QuantisationFactor's  30.70 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen] Money.MultiAccountSpec [really-safe-money-gen]  subtractAmount [really-safe-money-gen]  ✓ produces valid amounts  44.00 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  add [really-safe-money-gen]  ✓ produces valid amounts  73.92 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  GenValid (MultiAccount Currency) [really-safe-money-gen]  genValid :: Gen (MultiAccount Currency) [really-safe-money-gen]  ✓ only generates valid '(MultiAccount Currency)'s  67.71 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  sum [really-safe-money-gen]  ✓ produces valid amounts  110.80 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  fromAccount [really-safe-money-gen]  ✓ produces valid amounts  7.71 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  addAccount [really-safe-money-gen]  ✓ produces valid amounts  39.30 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ produces valid amounts  73.20 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  addAmount [really-safe-money-gen]  ✓ produces valid amounts  44.82 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtractAccount [really-safe-money-gen]  ✓ produces valid amounts  44.79 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 46000 [really-safe-money-gen]  Passed: 19 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 1.00 seconds [really-safe-money-gen]  Test suite took:  1.00 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ListLit at src/Money/QuantisationFactor.hs:39:7-8: [really-safe-money-gen] @@ -36,7 +36,7 @@ [really-safe-money-gen]  instance Validity QuantisationFactor where [really-safe-money-gen]  validate qf@(QuantisationFactor w) = [really-safe-money-gen]  mconcat [really-safe-money-gen] - [ genericValidate qf, [really-safe-money-gen] + [ generTesting mutation ListLit at src/Money/QuantisationFactor.hs:39:7-8: [really-safe-money-gen] @@ -36,7 +36,7 @@ [really-safe-money-gen]  instance Validity QuantisationFactor where [really-safe-money-gen]  validate qf@(QuantisationFactor w) = [really-safe-money-gen]  mconcat [really-safe-money-gen] - [ genericValidate qf, [really-safe-money-gen] + [ genericValidate qf, [really-safe-money-gen]  declare "The quantisation factor is not zero" $ w /= 0 [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] icValidate qf, [really-safe-money-gen]  declare "The quantisation factor is not zero" $ w /= 0 [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.MultiAmountSpec [really-safe-money-gen]  fromAmount [really-safe-money-gen]  ✓ produces valid amounts  7.13 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  sum [really-safe-money-gen]  ✓ produces valid amounts  95.92 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  add [really-safe-money-gen]  ✓ produces valid amounts  62.24 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  addAmount [really-safe-money-gen]  ✓ produces valid amounts  37.42 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtractAmount [really-safe-money-gen]  ✓ produces valid amounts  15.32 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  GenValid (MultiAmount Currency) [really-safe-money-gen]  genValid :: Gen (MultiAmount Currency) [really-safe-money-gen]  ✓ only generates valid '(MultiAmount Currency)'s  63.41 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ produces valid amounts  24.05 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen] Money.QuantisationFactorSpec [really-safe-money-gen]  fromWord32 [really-safe-money-gen]  ✓ produces valid quantisation factors  19.61 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid factors  74.77 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  GenValid QuantisationFactor [really-safe-money-gen]  genValid :: Gen QuantisationFactor [really-safe-money-gen]  ✓ only generates valid 'QuantisationFactor's  18.84 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen] Money.MultiAccountSpec [really-safe-money-gen]  subtractAmount [really-safe-money-gen]  ✓ produces valid amounts  39.00 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  add [really-safe-money-gen]  ✓ produces valid amounts  74.57 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  GenValid (MultiAccount Currency) [really-safe-money-gen]  genValid :: Gen (MultiAccount Currency) [really-safe-money-gen]  ✓ only generates valid '(MultiAccount Currency)'s  59.54 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  sum [really-safe-money-gen]  ✓ produces valid amounts  82.72 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  fromAccount [really-safe-money-gen]  ✓ produces valid amounts  5.83 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  addAccount [really-safe-money-gen]  ✓ produces valid amounts  34.93 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ produces valid amounts  59.72 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  addAmount [really-safe-money-gen]  ✓ produces valid amounts  35.82 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtractAccount [really-safe-money-gen]  ✓ produces valid amounts  36.21 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 46000 [really-safe-money-gen]  Passed: 19 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.85 seconds [really-safe-money-gen]  Test suite took:  0.85 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ListLit at src/Money/QuantisationFactor.hs:39:7-8: [really-safe-money-gen] @@ -36,7 +36,7 @@ [really-safe-money-gen]  instance Validity QuantisationFactor where [really-safe-money-gen]  validate qf@(QuantisationFactor w) = [really-safe-money-gen]  mconcat [really-safe-money-gen] - [ genericValidate qf, [really-safe-money-gen] + [ genericValidate qf, [really-safe-money-gen]  declare "The quantisation factor is not zero" $ w /= 0 [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.MultiAmountSpec [really-safe-money-gen]  fromAmount [really-safe-money-gen]  ✓ produces valid amounts  6.68 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  sum [really-safe-money-gen]  ✓ produces valid amounts  88.45 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  add [really-safe-money-gen]  ✓ produces valid amounts  58.17 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  addAmount [really-safe-money-gen]  ✓ produces valid amounts  33.86 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtractAmount [really-safe-money-gen]  ✓ produces valid amounts  13.91 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  GenValid (MultiAmount Currency) [really-safe-money-gen]  genValid :: Gen (MultiAmount Currency) [really-safe-money-gen]  ✓ only generates valid '(MultiAmount Currency)'s  55.65 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ produces valid amounts  25.31 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen] Money.QuantisationFactorSpec [really-safe-money-gen]  fromWord32 [really-safe-money-gen]  ✓ produces valid quantisation factors  18.51 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  DecimalLiteral [really-safe-money-gen]  fromDecimalLiteral [really-safe-money-gen]  ✓ produces valid factors  83.34 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen]  GenValid QuantisationFactor [really-safe-money-gen]  genValid :: Gen QuantisationFactor [really-safe-money-gen]  ✓ only generates valid 'QuantisationFactor's  19.12 ms [really-safe-money-gen]  passed for all of 10000 inputs. [really-safe-money-gen] Money.MultiAccountSpec [really-safe-money-gen]  subtractAmount [really-safe-money-gen]  ✓ produces valid amounts  35.57 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  add [really-safe-money-gen]  ✓ produces valid amounts  64.48 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  GenValid (MultiAccount Currency) [really-safe-money-gen]  genValid :: Gen (MultiAccount Currency) [really-safe-money-gen]  ✓ only generates valid '(MultiAccount Currency)'s  55.99 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  sum [really-safe-money-gen]  ✓ produces valid amounts  95.43 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  fromAccount [really-safe-money-gen]  ✓ produces valid amounts  6.59 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  addAccount [really-safe-money-gen]  ✓ produces valid amounts  36.89 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ produces valid amounts  66.49 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  addAmount [really-safe-money-gen]  ✓ produces valid amounts  36.30 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtractAccount [really-safe-money-gen]  ✓ produces valid amounts  36.24 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 46000 [really-safe-money-gen]  Passed: 19 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.84 secondsTesting mutation ConstBool at src/Money/MultiAmount.hs:168:20-45: [really-safe-money-gen] @@ -165,7 +165,7 @@ [really-safe-money-gen]  maxBoundN :: Natural [really-safe-money-gen]  maxBoundN = fromIntegral (maxBound :: Word64) [really-safe-money-gen]  actualResult = [really-safe-money-gen] - if roundedResult > maxBoundN [really-safe-money-gen] + if True [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just (fromIntegral roundedResult) [really-safe-money-gen]  rounded = case compare (fromIntegral roundedResult) theoreticalResult of [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/MultiAmount.hs:168:20-45: [really-safe-money-gen] @@ -165,7 +165,7 @@ [really-safe-money-gen]  maxBoundN :: Natural [really-safe-money-gen]  maxBoundN = fromIntegral (maxBound :: Word64) [really-safe-money-gen]  actualResult = [really-safe-money-gen] - if roundedResult > maxBoundN [really-safe-money-gen] + if False [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just (fromIntegral roundedResult) [really-safe-money-gen]  rounded = case compare (fromIntegral roundedResult) theoreticalResult of [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/MultiAmount.hs:168:20-45: [really-safe-money-gen] @@ -165,7 +165,7 @@ [really-safe-money-gen]  maxBoundN :: Natural [really-safe-money-gen]  maxBoundN = fromIntegral (maxBound :: Word64) [really-safe-money-gen]  actualResult = [really-safe-money-gen] - if roundedResult > maxBoundN [really-safe-money-gen] + if not (roundedResult > maxBoundN) [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just (fromIntegral roundedResult) [really-safe-money-gen]  rounded = case compare (fromIntegral roundedResult) theoreticalResult of [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Money/MultiAmount.hs:168:17-57: [really-safe-money-gen] @@ -165,7 +165,7 @@ [really-safe-money-gen]  maxBoundN :: Natural [really-safe-money-gen]  maxBoundN = fromIntegral (maxBound :: Word64) [really-safe-money-gen]  actualResult = [really-safe-money-gen] - if roundedResult > maxBoundN [really-safe-money-gen] + if roundedResult > maxBoundN [really-safe-money-gen]  then Nothing [really-safe-money-gen]  else Just (fromIntegral roundedResult) [really-safe-money-gen]  rounded = case compare (fromIntegral roundedResult) theoreticalResult of [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/MultiAmount.hs:119:12-28: [really-safe-money-gen] @@ -116,7 +116,7 @@ [really-safe-money-gen]  Just a -> do [really-safe-money-gen]  r <- Amount.subtract a amount [really-safe-money-gen]  Just $ [really-safe-money-gen] - if r == Amount.zero [really-safe-money-gen] + if True [really-safe-money-gen]  then M.delete currency m [really-safe-money-gen]  else M.insert currency r m [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/MultiAmount.hs:119:12-28: [really-safe-money-gen] @@ -116,7 +116,7 @@ [really-safe-money-gen]  Just a -> do [really-safe-money-gen]  r <- Amount.subtract a amount [really-safe-money-gen]  Just $ [really-safe-money-gen] - if r == Amount.zero [really-safe-money-gen] + if False [really-safe-money-gen]  then M.delete currency m [really-safe-money-gen]  else M.insert currency r m [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/MultiAmount.hs:119:12-28: [really-safe-money-gen] @@ -116,7 +116,7 @@ [really-safe-money-gen]  Just a -> do [really-safe-money-gen]  r <- Amount.subtract a amount [really-safe-money-gen]  Just $ [really-safe-money-gen] - if r == Amount.zero [really-safe-money-gen] + if not (r == Amount.zero) [really-safe-money-gen]  then M.delete currency m [really-safe-money-gen]  else M.insert currency r m [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Money/MultiAmount.hs:119:9-37: [really-safe-money-gen] @@ -116,7 +116,7 @@ [really-safe-money-gen]  Just a -> do [really-safe-money-gen]  r <- Amount.subtract a amount [really-safe-money-gen]  Just $ [really-safe-money-gen] - if r == Amount.zero [really-safe-money-gen] + if r == Amount.zero [really-safe-money-gen]  then M.delete currency m [really-safe-money-gen]  else M.insert currency r m [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/MultiAmount.hs:106:12-28: [really-safe-money-gen] @@ -103,7 +103,7 @@ [really-safe-money-gen]  Just a -> do [really-safe-money-gen]  r <- Amount.add a amount [really-safe-money-gen]  Just $ [really-safe-money-gen] - if r == Amount.zero [really-safe-money-gen] + if True [really-safe-money-gen]  then M.delete currency m [really-safe-money-gen]  else M.insert currency r m [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/MultiAmount.hs:106:12-28: [really-safe-money-gen] @@ -103,7 +103,7 @@ [really-safe-money-gen]  Just a -> do [really-safe-money-gen]  r <- Amount.add a amount [really-safe-money-gen]  Just $ [really-safe-money-gen] - if r == Amount.zero [really-safe-money-gen] + if False [really-safe-money-gen]  then M.delete currency m [really-safe-money-gen]  else M.insert currency r m [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/MultiAmount.hs:106:12-28: [really-safe-money-gen] @@ -103,7 +103,7 @@ [really-safe-money-gen]  Just a -> do [really-safe-money-gen]  r <- Amount.add a amount [really-safe-money-gen]  Just $ [really-safe-money-gen] - if r == Amount.zero [really-safe-money-gen] + if not (r == Amount.zero) [really-safe-money-gen]  then M.delete currency m [really-safe-money-gen]  else M.insert currency r m [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Money/MultiAmount.hs:106:9-37: [really-safe-money-gen] @@ -103,7 +103,7 @@ [really-safe-money-gen]  Just a -> do [really-safe-money-gen]  r <- Amount.add a amount [really-safe-money-gen]  Just $ [really-safe-money-gen] - if r == Amount.zero [really-safe-money-gen] + if r == Amount.zero [really-safe-money-gen]  then M.delete currency m [really-safe-money-gen]  else M.insert currency r m [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/MultiAmount.hs:73:6-27: [really-safe-money-gen] @@ -70,7 +70,7 @@ [really-safe-money-gen]  [really-safe-money-gen]  fromAmount :: currency -> Amount -> MultiAmount currency [really-safe-money-gen]  fromAmount currency amount = [really-safe-money-gen] - if amount == Amount.zero [really-safe-money-gen] + if True [really-safe-money-gen]  then zero [really-safe-money-gen]  else MultiAmount $ M.singleton currency amount [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/MultiAmount.hs:73:6-27: [really-safe-money-gen] @@ -70,7 +70,7 @@ [really-safe-money-gen]  [really-safe-money-gen]  fromAmount :: currency -> Amount -> MultiAmount currency [really-safe-money-gen]  fromAmount currency amount = [really-safe-money-gen] - if amount == Amount.zero [really-safe-money-gen] + if False [really-safe-money-gen]  then zero [really-safe-money-gen]  else MultiAmount $ M.singleton currency amount [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/MultiAmount.hs:73:6-27: [really-safe-money-gen] @@ -70,7 +70,7 @@ [really-safe-money-gen]  [really-safe-money-gen]  fromAmount :: currency -> Amount -> MultiAmount currency [really-safe-money-gen]  fromAmount currency amount = [really-safe-money-gen] - if amount == Amount.zero [really-safe-money-gen] + if not (amount == Amount.zero) [really-safe-money-gen]  then zero [really-safe-money-gen]  else MultiAmount $ M.singleton currency amount [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Money/MultiAmount.hs:73:3-51: [really-safe-money-gen] @@ -70,7 +70,7 @@ [really-safe-money-gen]  [really-safe-money-gen]  fromAmount :: currency -> Amount -> MultiAmount currency [really-safe-money-gen]  fromAmount currency amount = [really-safe-money-gen] - if amount == Amount.zero [really-safe-money-gen] + if amount == Amount.zero [really-safe-money-gen]  then zero [really-safe-money-gen]  else MultiAmount $ M.singleton currency amount [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/MultiAmount.hs:66:13-29: [really-safe-money-gen] @@ -63,7 +63,7 @@ [really-safe-money-gen]  [ genericValidate ma, [really-safe-money-gen]  decorateMap m $ \_ a -> [really-safe-money-gen]  declare "The amount is not zero" $ [really-safe-money-gen] - a /= Amount.zero [really-safe-money-gen] + True [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen]  instance (NFData currency) => NFData (MultiAmount currency) [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/MultiAmount.hs:66:13-29: [really-safe-money-gen] @@ -63,7 +63,7 @@ [really-safe-money-gen]  [ genericValidate ma, [really-safe-money-gen]  decorateMap m $ \_ a -> [really-safe-money-gen]  declare "The amount is not zero" $ [really-safe-money-gen] - a /= Amount.zero [really-safe-money-gen] + False [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen]  instance (NFData currency) => NFData (MultiAmount currency) [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/MultiAmount.hs:66:13-29: [really-safe-money-gen] @@ -63,7 +63,7 @@ [really-safe-money-gen]  [ genericValidate ma, [really-safe-money-gen]  decorateMap m $ \_ a -> [really-safe-money-gen]  declare "The amount is not zero" $ [really-safe-money-gen] - a /= Amount.zero [really-safe-money-gen] + not (a /= Amount.zero) [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen]  instance (NFData currency) => NFData (MultiAmount currency) [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ListLit at src/Money/MultiAmount.hs:63:7-8: [really-safe-money-gen] @@ -60,7 +60,7 @@ [really-safe-money-gen]  instance (Validity currency, Show currency, Ord currency) => Validity (MultiAmount currency) where [really-safe-money-gen]  validate ma@(MultiAmount m) = [really-safe-money-gen]  mconcat [really-safe-money-gen] - [ genericValidate ma, [really-safe-money-gen] + [ genericValidate ma, [really-safe-money-gen]  decorateMap m $ \_ a -> [really-safe-money-gen]  declare "The amount is not zero" $ [really-safe-money-gen]  a /= Amount.zero [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Test suite took:  0.84 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/MultiAmount.hs:119:12-28: [really-safe-money-gen] @@ -116,7 +116,7 @@ [really-safe-money-gen]  Just a -> do [really-safe-money-gen]  r <- Amount.subtract a amount [really-safe-money-gen]  Just $ [really-safe-money-gen] - if r == Amount.zero [really-safe-money-gen] + if True [really-safe-money-gen]  then M.delete currency m [really-safe-money-gen]  else M.insert currency r m [really-safe-money-gen]  [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.MultiAmountSpec [really-safe-money-gen]  subtractAmount [really-safe-money-gen]  ✓ produces valid amounts  15.93 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ produces valid amounts  24.31 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 2000 [really-safe-money-gen]  Passed: 2 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.04 seconds [really-safe-money-gen]  Test suite took:  0.04 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/MultiAmount.hs:119:12-28: [really-safe-money-gen] @@ -116,7 +116,7 @@ [really-safe-money-gen]  Just a -> do [really-safe-money-gen]  r <- Amount.subtract a amount [really-safe-money-gen]  Just $ [really-safe-money-gen] - if r == Amount.zero [really-safe-money-gen] + if False [really-safe-money-gen]  then M.delete currency m [really-safe-money-gen]  else M.insert currency r m [really-safe-money-gen]  [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.MultiAmountSpec [really-safe-money-gen]  subtractAmount [really-safe-money-gen]  ✓ produces valid amounts  13.66 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ produces valid amounts  20.85 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 2000 [really-safe-money-gen]  Passed: 2 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.03 seconds [really-safe-money-gen]  Test suite took:  0.04 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation Negate at src/Money/MultiAmount.hs:119:12-28: [really-safe-money-gen] @@ -116,7 +116,7 @@ [really-safe-money-gen]  Just a -> do [really-safe-money-gen]  r <- Amount.subtract a amount [really-safe-money-gen]  Just $ [really-safe-money-gen] - if r == Amount.zero [really-safe-money-gen] + if not (r == Amount.zero) [really-safe-money-gen]  then M.delete currency m [really-safe-money-gen]  else M.insert currency r m [really-safe-money-gen]  [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.MultiAmountSpec [really-safe-money-gen]  subtractAmount [really-safe-money-gen]  ✓ produces valid amounts  13.53 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ produces valid amounts  23.47 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 2000 [really-safe-money-gen]  Passed: 2 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.04 seconds [really-safe-money-gen]  Test suite took:  0.04 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation CondFlip at src/Money/MultiAmount.hs:119:9-37: [really-safe-money-gen] @@ -116,7 +116,7 @@ [really-safe-money-gen]  Just a -> do [really-safe-money-gen]  r <- Amount.subtract a amount [really-safe-money-gen]  Just $ [really-safe-money-gen] - if r == Amount.zero [really-safe-money-gen] + if r == Amount.zero [really-safe-money-gen]  then M.delete currency m [really-safe-money-gen]  else M.insert currency r m [really-safe-money-gen]  [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.MultiAmountSpec [really-safe-money-gen]  subtractAmount [really-safe-money-gen]  ✓ produces valid amounts  14.08 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ produces valid amounts  21.18 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 2000 [really-safe-money-gen]  Passed: 2 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.04 seconds [really-safe-money-gen]  Test suite took:  0.04 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/MultiAmount.hs:66:13-29: [really-safe-money-gen] @@ -63,7 +63,7 @@ [really-safe-money-gen]  [ genericValidate ma, [really-safe-money-gen]  decorateMap m $ \_ a -> [really-safe-money-gen]  declare "The amount is not zero" $ [really-safe-money-gen] - a /= Amount.zero [really-safe-money-gen] + True [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen]  instance (NFData currency) => NFData (MultiAmount currency) [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.MultiAmountSpec [really-safe-money-gen]  fromAmount [really-safe-money-gen]  ✓ produces valid amounts  8.06 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  sum [really-safe-money-gen]  ✓ produces valid amounts  106.73 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  add [really-safe-money-gen]  ✓ produces valid amounts  70.24 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  addAmount [really-safe-money-gen]  ✓ produces valid amounts  44.25 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtractAmount [really-safe-money-gen]  ✓ produces valid amounts  14.51 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  GenValid (MultiAmount Currency) [really-safe-money-gen]  genValid :: Gen (MultiAmount Currency) [really-safe-money-gen]  ✓ only generates valid '(MultiAmount Currency)'s  57.30 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ produces valid amounts  19.88 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 7000 [really-safe-money-gen]  Passed: 7 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.32 seconds [really-safe-money-gen]  Test suite took:  0.32 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ConstBool at src/Money/MultiAmount.hs:66:13-29: [really-safe-money-gen] @@ -63,7 +63,7 @@ [really-safe-money-gen]  [ genericValidate ma, [really-safe-money-gen]  decorateMap m $ \_ a -> [really-safe-money-gen]  declare "The amount is not zero" $ [really-safe-money-gen] - a /= Amount.zero [really-safe-money-gen] + False [really-safe-money-gen]  ] [really-safe-money-gen]  [really-safe-money-gen]  instance (NFData currency) => NFData (MultiAmount currency) [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.MultiAmountSpec [really-safe-money-gen]  fromAmount [really-safe-money-gen]  ✓ produces valid amounts  7.69 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  sum [really-safe-money-gen]  ✓ produces valid amounts  90.92 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  add [really-safe-money-gen]  ✓ produces valid amounts  64.21 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  addAmount [really-safe-money-gen]  ✓ produces valid amounts  38.69 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtractAmount [really-safe-money-gen]  ✓ produces valid amounts  12.77 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  GenValid (MultiAmount Currency) [really-safe-money-gen]  genValid :: Gen (MultiAmount Currency) [really-safe-money-gen]  ✓ only generates valid '(MultiAmount Currency)'s  58.99 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ produces valid amounts  22.38 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 7000 [really-safe-money-gen]  Passed: 7 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.30 seconds [really-safe-money-gen]  Test suite took:  0.30 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ListLit at src/Money/MultiAmount.hs:63:7-8: [really-safe-money-gen] @@ -60,7 +60,7 @@ [really-safe-money-gen]  instance (Validity currency, Show currency, Ord currency) => Validity (MultiAmount currency) where [really-safe-money-gen]  validate ma@(MultiAmount m) = [really-safe-money-gen]  mconcat [really-safe-money-gen] - [ genericValidate ma, [really-safe-money-gen] + [ genericValidate ma, [really-safe-money-gen]  decorateMap m $ \_ a -> [really-safe-money-gen]  declare "The amount is not zero" $ [really-safe-money-gen]  a /= Amount.zero [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.MultiAmountSpec [really-safe-money-gen]  fromAmount [really-safe-money-gen]  ✓ produces valid amounts  1.91 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  zero [really-safe-money-gen]  ✓ is valid Testing mutation ListLit at src/Money/MultiAmount.hs:63:7-8: [really-safe-money-gen] @@ -60,7 +60,7 @@ [really-safe-money-gen]  instance (Validity currency, Show currency, Ord currency) => Validity (MultiAmount currency) where [really-safe-money-gen]  validate ma@(MultiAmount m) = [really-safe-money-gen]  mconcat [really-safe-money-gen] - [ genericValidate ma, [really-safe-money-gen] + [ genericValidate ma, [really-safe-money-gen]  decorateMap m $ \_ a -> [really-safe-money-gen]  declare "The amount is not zero" $ [really-safe-money-gen]  a /= Amount.zero [really-safe-money-gen]  [really-safe-money-gen]   0.00 ms [really-safe-money-gen]  sum [really-safe-money-gen]  ✓ produces valid amounts  48.70 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  add [really-safe-money-gen]  ✓ produces valid amounts  24.85 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  addAmount [really-safe-money-gen]  ✓ produces valid amounts  12.31 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtractAmount [really-safe-money-gen]  ✓ produces valid amounts  12.07 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  GenValid (MultiAmount Currency) [really-safe-money-gen]  genValid :: Gen (MultiAmount Currency) [really-safe-money-gen]  ✓ only generates valid '(MultiAmount Currency)'s  1.42 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ produces valid amounts  21.18 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 7001 [really-safe-money-gen]  Passed: 8 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.12 seconds [really-safe-money-gen]  Test suite took:  0.13 seconds [really-safe-money-gen]  [really-safe-money-gen] Testing mutation ListLit at src/Money/MultiAmount.hs:63:7-8: [really-safe-money-gen] @@ -60,7 +60,7 @@ [really-safe-money-gen]  instance (Validity currency, Show currency, Ord currency) => Validity (MultiAmount currency) where [really-safe-money-gen]  validate ma@(MultiAmount m) = [really-safe-money-gen]  mconcat [really-safe-money-gen] - [ genericValidate ma, [really-safe-money-gen] + [ genericValidate ma, [really-safe-money-gen]  decorateMap m $ \_ a -> [really-safe-money-gen]  declare "The amount is not zero" $ [really-safe-money-gen]  a /= Amount.zero [really-safe-money-gen] Tests: [really-safe-money-gen]  [really-safe-money-gen] Money.MultiAmountSpec [really-safe-money-gen]  fromAmount [really-safe-money-gen]  ✓ produces valid amounts  2.09 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  zero [really-safe-money-gen]  ✓ is valid  0.02 ms [really-safe-money-gen]  sum [really-safe-money-gen]  ✓ produces valid amounts  51.08 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  add [really-safe-money-gen]  ✓ produces valid amounts  25.82 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  addAmount [really-safe-money-gen]  ✓ produces valid amounts  14.26 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtractAmount [really-safe-money-gen]  ✓ produces valid amounts  13.08 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  GenValid (MultiAmount Currency) [really-safe-money-gen]  genValid :: Gen (MultiAmount Currency) [really-safe-money-gen]  ✓ only generates valid '(MultiAmount Currency)'s  1.55 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  subtract [really-safe-money-gen]  ✓ produces valid amounts  19.85 ms [really-safe-money-gen]  passed for all of 1000 inputs. [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  [really-safe-money-gen]  Examples: 7001 [really-safe-money-gen]  Passed: 8 [really-safe-money-gen]  Failed: 0 [really-safe-money-gen]  Sum of test runtimes: 0.13 seconds [really-safe-money-gen]  Test suite took:  0.13 seconds [really-safe-money-gen]  [really-safe-money-gen] Killed: 233 [really-safe-money-gen] Survived: 79 [really-safe-money-gen] Uncovered: 3 [really-safe-money-gen] checkPhase completed in 7 minutes 57 seconds [really-safe-money-gen] Phase: haddockPhase [really-safe-money-gen] Preprocessing library for really-safe-money-gen-0.0.0.0... [really-safe-money-gen] Running Haddock on library for really-safe-money-gen-0.0.0.0... [really-safe-money-gen] Warning: The documentation for the following packages are not installed. No [really-safe-money-gen] links will be generated to these packages: really-safe-money-0.0.0.0 [really-safe-money-gen] [ 1 of 13] Compiling Money.Amount.Gen ( src/Money/Amount/Gen.hs, nothing ) [really-safe-money-gen] [ 2 of 13] Compiling Money.Account.Gen ( src/Money/Account/Gen.hs, nothing ) [really-safe-money-gen] [ 3 of 13] Compiling Money.AccountOf.Gen ( src/Money/AccountOf/Gen.hs, nothing ) [really-safe-money-gen] [ 4 of 13] Compiling Money.AmountOf.Gen ( src/Money/AmountOf/Gen.hs, nothing ) [really-safe-money-gen] [ 5 of 13] Compiling Money.ConversionRate.Gen ( src/Money/ConversionRate/Gen.hs, nothing ) [really-safe-money-gen] [ 6 of 13] Compiling Money.ConversionRateOf.Gen ( src/Money/ConversionRateOf/Gen.hs, nothing ) [really-safe-money-gen] [ 7 of 13] Compiling Money.QuantisationFactor.Gen ( src/Money/QuantisationFactor/Gen.hs, nothing ) [really-safe-money-gen] [ 8 of 13] Compiling Money.Currency.Gen ( src/Money/Currency/Gen.hs, nothing ) [really-safe-money-gen] [ 9 of 13] Compiling Money.MultiAmount.Gen ( src/Money/MultiAmount/Gen.hs, nothing ) [really-safe-money-gen] [10 of 13] Compiling Money.MultiAccount.Gen ( src/Money/MultiAccount/Gen.hs, nothing ) [really-safe-money-gen] [11 of 13] Compiling Money.Gen ( src/Money/Gen.hs, nothing ) [really-safe-money-gen] [12 of 13] Compiling Numeric.DecimalLiteral.Gen ( src/Numeric/DecimalLiteral/Gen.hs, nothing ) [really-safe-money-gen] [13 of 13] Compiling Paths_really_safe_money_gen ( dist/build/autogen/Paths_really_safe_money_gen.hs, nothing ) [really-safe-money-gen] Haddock coverage: [really-safe-money-gen]  0% ( 0 / 1) in 'Money.Amount.Gen' [really-safe-money-gen]  Missing documentation for: [really-safe-money-gen]  Module header [really-safe-money-gen]  0% ( 0 / 1) in 'Money.Account.Gen' [really-safe-money-gen]  Missing documentation for: [really-safe-money-gen]  Module header [really-safe-money-gen]  0% ( 0 / 1) in 'Money.AccountOf.Gen' [really-safe-money-gen]  Missing documentation for: [really-safe-money-gen]  Module header [really-safe-money-gen]  0% ( 0 / 1) in 'Money.AmountOf.Gen' [really-safe-money-gen]  Missing documentation for: [really-safe-money-gen]  Module header [really-safe-money-gen]  0% ( 0 / 1) in 'Money.ConversionRate.Gen' [really-safe-money-gen]  Missing documentation for: [really-safe-money-gen]  Module header [really-safe-money-gen]  0% ( 0 / 1) in 'Money.ConversionRateOf.Gen' [really-safe-money-gen]  Missing documentation for: [really-safe-money-gen]  Module header [really-safe-money-gen]  0% ( 0 / 1) in 'Money.QuantisationFactor.Gen' [really-safe-money-gen]  Missing documentation for: [really-safe-money-gen]  Module header [really-safe-money-gen]  0% ( 0 / 1) in 'Money.Currency.Gen' [really-safe-money-gen]  Missing documentation for: [really-safe-money-gen]  Module header [really-safe-money-gen]  0% ( 0 / 1) in 'Money.MultiAmount.Gen' [really-safe-money-gen]  Missing documentation for: [really-safe-money-gen]  Module header [really-safe-money-gen]  0% ( 0 / 1) in 'Money.MultiAccount.Gen' [really-safe-money-gen]  Missing documentation for: [really-safe-money-gen]  Module header [really-safe-money-gen] Warning: Money.Gen: Could not find documentation for exported module: Money.Gen [really-safe-money-gen]  90% ( 10 / 11) in 'Money.Gen' [really-safe-money-gen]  Missing documentation for: [really-safe-money-gen]  Module header [really-safe-money-gen]  0% ( 0 / 2) in 'Numeric.DecimalLiteral.Gen' [really-safe-money-gen]  Missing documentation for: [really-safe-money-gen]  Module header [really-safe-money-gen]  shrinkSign (src/Numeric/DecimalLiteral/Gen.hs:16) [really-safe-money-gen] Warning: Money.Amount.Gen: could not find link destinations for: [really-safe-money-gen]  - Money.Amount.Amount [really-safe-money-gen]  - Money.Amount.Distribution [really-safe-money-gen]  - Money.Amount.Rounding [really-safe-money-gen] Warning: Money.Account.Gen: could not find link destinations for: [really-safe-money-gen]  - Money.Account.Account [really-safe-money-gen] Warning: Money.AccountOf.Gen: could not find link destinations for: [really-safe-money-gen]  - Money.AccountOf.AccountOf [really-safe-money-gen] Warning: Money.AmountOf.Gen: could not find link destinations for: [really-safe-money-gen]  - Money.AmountOf.AmountOf [really-safe-money-gen] Warning: Money.ConversionRate.Gen: could not find link destinations for: [really-safe-money-gen]  - Money.ConversionRate.ConversionRate [really-safe-money-gen] Warning: Money.ConversionRateOf.Gen: could not find link destinations for: [really-safe-money-gen]  - Money.ConversionRateOf.ConversionRateOf [really-safe-money-gen] Warning: Money.QuantisationFactor.Gen: could not find link destinations for: [really-safe-money-gen]  - Money.QuantisationFactor.QuantisationFactor [really-safe-money-gen] Warning: Money.Currency.Gen: could not find link destinations for: [really-safe-money-gen]  - Money.Currency.Currency [really-safe-money-gen] Warning: Money.MultiAmount.Gen: could not find link destinations for: [really-safe-money-gen]  - Money.MultiAmount.MultiAmount [really-safe-money-gen] Warning: Money.MultiAccount.Gen: could not find link destinations for: [really-safe-money-gen]  - Money.MultiAccount.MultiAccount [really-safe-money-gen] Warning: Numeric.DecimalLiteral.Gen: could not find link destinations for: [really-safe-money-gen]  - Numeric.DecimalLiteral.DecimalLiteral [really-safe-money-gen] Documentation created: dist/doc/html/really-safe-money-gen/, [really-safe-money-gen] dist/doc/html/really-safe-money-gen/really-safe-money-gen.txt [really-safe-money-gen] Preprocessing test suite 'really-safe-money-test' for really-safe-money-gen-0.0.0.0... [really-safe-money-gen] Phase: installPhase [really-safe-money-gen] Installing library in /nix/store/0lyb7q37r7c71xf1yhvmb6dh8m7dn2zj-really-safe-money-gen-0.0.0.0/lib/ghc-9.10.3/lib/x86_64-linux-ghc-9.10.3-05f6/really-safe-money-gen-0.0.0.0-KTRUiMX2w2iErncFnvROeR [really-safe-money-gen] Phase: fixupPhase [really-safe-money-gen] shrinking RPATHs of ELF executables and libraries in /nix/store/0lyb7q37r7c71xf1yhvmb6dh8m7dn2zj-really-safe-money-gen-0.0.0.0 [really-safe-money-gen] shrinking /nix/store/0lyb7q37r7c71xf1yhvmb6dh8m7dn2zj-really-safe-money-gen-0.0.0.0/lib/ghc-9.10.3/lib/x86_64-linux-ghc-9.10.3-05f6/libHSreally-safe-money-gen-0.0.0.0-KTRUiMX2w2iErncFnvROeR-ghc9.10.3.so [really-safe-money-gen] checking for references to /build/ in /nix/store/0lyb7q37r7c71xf1yhvmb6dh8m7dn2zj-really-safe-money-gen-0.0.0.0... [really-safe-money-gen] patching script interpreter paths in /nix/store/0lyb7q37r7c71xf1yhvmb6dh8m7dn2zj-really-safe-money-gen-0.0.0.0 [really-safe-money-gen] stripping (with command strip and flags -S -p) in /nix/store/0lyb7q37r7c71xf1yhvmb6dh8m7dn2zj-really-safe-money-gen-0.0.0.0/lib [really-safe-money-gen] shrinking RPATHs of ELF executables and libraries in /nix/store/i69b5p948bjsqq5ihw81212gg42nxlpv-really-safe-money-gen-0.0.0.0-doc [really-safe-money-gen] checking for references to /build/ in /nix/store/i69b5p948bjsqq5ihw81212gg42nxlpv-really-safe-money-gen-0.0.0.0-doc... [really-safe-money-gen] patching script interpreter paths in /nix/store/i69b5p948bjsqq5ihw81212gg42nxlpv-really-safe-money-gen-0.0.0.0-doc [really-safe-money-gen] shrinking RPATHs of ELF executables and libraries in /nix/store/abzs9d51wjw5m3mjrrgh8bbffm679daj-really-safe-money-gen-0.0.0.0-report [really-safe-money-gen] checking for references to /build/ in /nix/store/abzs9d51wjw5m3mjrrgh8bbffm679daj-really-safe-money-gen-0.0.0.0-report... [really-safe-money-gen] patching script interpreter paths in /nix/store/abzs9d51wjw5m3mjrrgh8bbffm679daj-really-safe-money-gen-0.0.0.0-report [post-build-hook] Uploading to cachix cache "sydtest": /nix/store/0lyb7q37r7c71xf1yhvmb6dh8m7dn2zj-really-safe-money-gen-0.0.0.0 /nix/store/abzs9d51wjw5m3mjrrgh8bbffm679daj-really-safe-money-gen-0.0.0.0-report /nix/store/i69b5p948bjsqq5ihw81212gg42nxlpv-really-safe-money-gen-0.0.0.0-doc [post-build-hook] Pushing 8 paths (181 are already present) using zstd to cache sydtest ⏳ [post-build-hook]  [post-build-hook] Pushing /nix/store/0lyb7q37r7c71xf1yhvmb6dh8m7dn2zj-really-safe-money-gen-0.0.0.0 (1.27 MiB) [post-build-hook] Pushing /nix/store/b84444n2il2fkz6n6wbincfddc0hgg1k-genvalidity-containers-1.0.0.2 (868.72 KiB) [post-build-hook] Pushing /nix/store/8277qhdm7ld6sxwga3d8a7pzsz6lxy72-genvalidity-1.1.1.0 (3.07 MiB) [post-build-hook] Pushing /nix/store/i69b5p948bjsqq5ihw81212gg42nxlpv-really-safe-money-gen-0.0.0.0-doc (288.17 KiB) [post-build-hook] Pushing /nix/store/r40wa6qpnxgljdybl25rlh3x84azspl4-genvalidity-1.1.1.0-doc (890.45 KiB) [post-build-hook] Pushing /nix/store/abzs9d51wjw5m3mjrrgh8bbffm679daj-really-safe-money-gen-0.0.0.0-report (762.70 KiB) [post-build-hook] Pushing /nix/store/xsvws95rpgksxq95mxhmz5w6gb0gwvyp-really-safe-money-0.0.0.0 (104.51 MiB) [post-build-hook] Pushing /nix/store/r5wk7b4f69qw0i0jqv37zakfsghxdkha-genvalidity-containers-1.0.0.2-doc (305.05 KiB) [post-build-hook]  [post-build-hook] All done. [post-build-hook] Uploading to the NixCI staging cache: /nix/store/0lyb7q37r7c71xf1yhvmb6dh8m7dn2zj-really-safe-money-gen-0.0.0.0 /nix/store/abzs9d51wjw5m3mjrrgh8bbffm679daj-really-safe-money-gen-0.0.0.0-report /nix/store/i69b5p948bjsqq5ihw81212gg42nxlpv-really-safe-money-gen-0.0.0.0-doc [post-build-hook] warning: 'warn-short-path-literals' is deprecated, use 'lint-short-path-literals = ignore' instead [post-build-hook] copying 3 paths... [post-build-hook] copying path '/nix/store/i69b5p948bjsqq5ihw81212gg42nxlpv-really-safe-money-gen-0.0.0.0-doc' to 'https://cache.staging.nix-ci.com'... [post-build-hook] copying path '/nix/store/abzs9d51wjw5m3mjrrgh8bbffm679daj-really-safe-money-gen-0.0.0.0-report' to 'https://cache.staging.nix-ci.com'... [post-build-hook] copying path '/nix/store/0lyb7q37r7c71xf1yhvmb6dh8m7dn2zj-really-safe-money-gen-0.0.0.0' to 'https://cache.staging.nix-ci.com'... [post-build-hook] warning: 'warn-short-path-literals' is deprecated, use 'lint-short-path-literals = ignore' instead [post-build-hook] copying 1 paths... [post-build-hook] copying path '/nix/store/5yphx350k5jx3xf3y72g63mvdlzxcjks-really-safe-money-gen-0.0.0.0.drv' to 'https://cache.staging.nix-ci.com'... Progress: 1 of 2 built, 7 of 7 downloaded from cache