monoidmap 0.0.1.0 → 0.0.1.1
raw patch · 4 files changed
+62/−30 lines, 4 filesdep ~nothunksdep ~pretty-showPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: nothunks, pretty-show
API changes (from Hackage documentation)
Files
- CHANGELOG.md +4/−0
- monoidmap.cabal +4/−3
- src/test/Data/MonoidMap/ClassSpec.hs +10/−27
- src/test/Test/Combinators/NonZero.hs +44/−0
CHANGELOG.md view
@@ -1,3 +1,7 @@+# 0.0.1.1++- Updated version bounds for dependencies.+ # 0.0.1.0 - Added support for GHC 9.8.
monoidmap.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: monoidmap-version: 0.0.1.0+version: 0.0.1.1 bug-reports: https://github.com/jonathanknowles/monoidmap/issues license: Apache-2.0 license-file: LICENSE@@ -31,9 +31,9 @@ common dependency-nonempty-containers build-depends:nonempty-containers >= 0.3.4.4 && < 0.4 common dependency-nothunks- build-depends:nothunks >= 0.1.3 && < 0.2+ build-depends:nothunks >= 0.1.3 && < 0.3 common dependency-pretty-show- build-depends:pretty-show >= 1.10 && < 1.20+ build-depends:pretty-show >= 1.10 && < 1.11 common dependency-QuickCheck build-depends:QuickCheck >= 2.14.2 && < 2.15 common dependency-quickcheck-classes@@ -174,6 +174,7 @@ Data.MonoidMap.ValiditySpec Examples.MultiMapSpec Examples.RecoveredMapSpec+ Test.Combinators.NonZero Test.Common Test.QuickCheck.Classes.Hspec Test.Hspec.Unit
src/test/Data/MonoidMap/ClassSpec.hs view
@@ -9,10 +9,6 @@ import Prelude -import Data.Group- ( Group )-import Data.Maybe- ( mapMaybe ) import Data.Monoid ( Product (..), Sum (..) ) import Data.Monoid.Null@@ -21,8 +17,6 @@ ( MonoidMap ) import Data.Proxy ( Proxy (..) )-import Data.Semigroup.Cancellative- ( Commutative ) import Data.Set ( Set ) import Data.Typeable@@ -33,8 +27,10 @@ ( Natural ) import Test.Hspec ( Spec, describe )+import Test.Combinators.NonZero+ ( NonZero, genNonZero, shrinkNonZero ) import Test.QuickCheck- ( Arbitrary (..), listOf, scale, shrinkMapBy, suchThatMap )+ ( Arbitrary (..), listOf, scale, shrinkMapBy ) import Test.QuickCheck.Classes ( eqLaws , isListLaws@@ -157,7 +153,10 @@ , semigroupMonoidLaws , showReadLaws ]- testLawsMany @(MonoidMap k (Wrapped (Product Rational)))+ -- Here we restrict the generator and shrinker so that they can never+ -- produce zero values, to avoid running into cases of ArithException+ -- caused by operations that may produce zero demoninators:+ testLawsMany @(MonoidMap k (NonZero (Product Rational))) [ commutativeLaws , eqLaws , groupLaws@@ -340,16 +339,9 @@ -- Arbitrary instances -------------------------------------------------------------------------------- -newtype Wrapped a = Wrapped a- deriving newtype (Eq, Num, Read, Show, IsList)- deriving newtype (Semigroup, Commutative, Monoid, MonoidNull, Group)--instance Arbitrary (Wrapped (Product Rational)) where- -- Here we restrict the generator and shrinker so that they can never- -- produce zero values, to avoid running into cases of ArithException- -- caused by operations that may produce zero demoninators:- arbitrary = Wrapped <$> suchThatMap arbitrary maybeNonZero- shrink = mapMaybe maybeNonZero . shrink+instance (Arbitrary a, Eq a, Num a) => Arbitrary (NonZero a) where+ arbitrary = genNonZero arbitrary+ shrink = shrinkNonZero shrink instance (Arbitrary k, Ord k, Arbitrary v, MonoidNull v) => Arbitrary (MonoidMap k v)@@ -358,12 +350,3 @@ fromList <$> scale (`mod` 16) (listOf ((,) <$> arbitrary <*> arbitrary)) shrink = shrinkMapBy MonoidMap.fromMap MonoidMap.toMap shrink------------------------------------------------------------------------------------- Utilities-----------------------------------------------------------------------------------maybeNonZero :: (Eq a, Num a) => a -> Maybe a-maybeNonZero p- | p == 0 = Nothing- | otherwise = Just p
+ src/test/Test/Combinators/NonZero.hs view
@@ -0,0 +1,44 @@+-- |+-- Copyright: © 2022–2024 Jonathan Knowles+-- License: Apache-2.0+--+module Test.Combinators.NonZero+ ( NonZero+ , genNonZero+ , getNonZero+ , maybeNonZero+ , shrinkNonZero+ )+ where++import Prelude++import Data.Group+ ( Group )+import Data.Maybe+ ( mapMaybe )+import Data.Monoid.Null+ ( MonoidNull )+import Data.Semigroup.Cancellative+ ( Commutative )+import Test.QuickCheck+ ( Gen, suchThatMap )++-- | A combinator for non-zero values.+newtype NonZero a = NonZero a+ deriving newtype (Eq, Num, Read, Show)+ deriving newtype (Semigroup, Commutative, Monoid, MonoidNull, Group)++genNonZero :: (Eq a, Num a) => Gen a -> Gen (NonZero a)+genNonZero genA = suchThatMap genA maybeNonZero++getNonZero :: NonZero a -> a+getNonZero (NonZero a) = a++maybeNonZero :: (Eq a, Num a) => a -> Maybe (NonZero a)+maybeNonZero p+ | p == 0 = Nothing+ | otherwise = Just (NonZero p)++shrinkNonZero :: (Eq a, Num a) => (a -> [a]) -> NonZero a -> [NonZero a]+shrinkNonZero shrinkA = mapMaybe maybeNonZero . shrinkA . getNonZero