Skip to content

Commit fcbbf1e

Browse files
committed
Tests.QuickCheckUtils: i Arbitrary (NotEmpty {,L}Text): refact
1 parent 85316fc commit fcbbf1e

File tree

1 file changed

+14
-6
lines changed

1 file changed

+14
-6
lines changed

tests/Tests/QuickCheckUtils.hs

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -110,16 +110,24 @@ instance Arbitrary BigInt where
110110
newtype NotEmpty a = NotEmpty { notEmpty :: a }
111111
deriving (Eq, Ord, Show)
112112

113+
toNotEmptyBy :: Functor m => ([Char] -> a) -> m (NonEmptyList Char) -> m (NotEmpty a)
114+
toNotEmptyBy f = fmap (coerce f)
115+
116+
arbitraryNotEmptyBy :: ([Char] -> a) -> Gen (NotEmpty a)
117+
arbitraryNotEmptyBy f = toNotEmptyBy f arbitrary
118+
119+
shrinkNotEmptyBy :: ([Char] -> a) -> (a -> [Char]) -> NotEmpty a -> [NotEmpty a]
120+
shrinkNotEmptyBy g f =
121+
toNotEmptyBy g . shrink . coerce f
113122

114123
instance Arbitrary (NotEmpty T.Text) where
115-
arbitrary = fmap (NotEmpty . T.pack . getNonEmpty) arbitrary
116-
shrink = fmap (NotEmpty . T.pack . getNonEmpty)
117-
. shrink . NonEmpty . T.unpack . notEmpty
124+
arbitrary = arbitraryNotEmptyBy T.pack
125+
shrink = shrinkNotEmptyBy T.pack T.unpack
118126

119127
instance Arbitrary (NotEmpty TL.Text) where
120-
arbitrary = fmap (NotEmpty . TL.pack . getNonEmpty) arbitrary
121-
shrink = fmap (NotEmpty . TL.pack . getNonEmpty)
122-
. shrink . NonEmpty . TL.unpack . notEmpty
128+
arbitrary = arbitraryNotEmptyBy TL.pack
129+
shrink = shrinkNotEmptyBy TL.pack TL.unpack
130+
123131

124132
data DecodeErr = Lenient | Ignore | Strict | Replace
125133
deriving (Show, Eq, Bounded, Enum)

0 commit comments

Comments
 (0)