relude-1.2.2.2: test/Test/Relude/Container/One.hs
module Test.Relude.Container.One
( oneProps
) where
import Relude
import Hedgehog (Gen, Group (..), Property, forAll, property, (===))
import Test.Relude.Gen (genInt, genUtf8Text)
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as LBS
import qualified Data.ByteString.Short as SBS
import qualified Data.IntSet as IntSet
import qualified Data.Text as T
import qualified Data.Text.Lazy as TL
import qualified Hedgehog.Gen as Gen
import qualified Hedgehog.Range as Range
oneProps :: Group
oneProps = Group "'One' typeclass property tests"
[ ( "length (one @[a] x) ≡ 1", oneListProp)
, ( "length (one @(NonEmpty a) x) ≡ 1", oneNonEmptyProp)
, ( "length (one @(Seq a) x) ≡ 1", oneSeqProp)
, ( "length (one @Text x) ≡ 1", oneTextProp)
, ( "length (one @LText x) ≡ 1", oneLTextProp)
, ( "length (one @ByteString x) ≡ 1", oneByteStringProp)
, ( "length (one @LByteString x) ≡ 1", oneLByteStringProp)
, ( "length (one @ShortByteString x) ≡ 1", oneShortByteStringProp)
, ( "length (one @(Map k v) x) ≡ 1", oneMapProp)
, ( "length (one @(HashMap k v) x) ≡ 1", oneHashMapProp)
, ( "length (one @(IntMap v) x) ≡ 1", oneIntMapProp)
, ( "length (one @(Set a) x) ≡ 1", oneSetProp)
, ( "length (one @(HashSet a) x) ≡ 1", oneHashSetProp)
, ( "length (one @(IntSet x) ≡ 1", oneIntSetProp)
]
oneListProp :: Property
oneListProp = property $ do
x <- forAll genInt
length (one @[Int] x) === 1
oneNonEmptyProp :: Property
oneNonEmptyProp = property $ do
x <- forAll genInt
length (one @(NonEmpty Int) x) === 1
oneSeqProp :: Property
oneSeqProp = property $ do
x <- forAll genInt
length (one @(Seq Int) x) === 1
oneTextProp :: Property
oneTextProp = property $ do
x <- forAll Gen.unicode
T.length (one @Text x) === 1
oneLTextProp :: Property
oneLTextProp = property $ do
x <- forAll Gen.unicode
TL.length (one @LText x) === 1
oneByteStringProp :: Property
oneByteStringProp = property $ do
x <- forAll genWord8
BS.length (one @ByteString x) === 1
oneLByteStringProp :: Property
oneLByteStringProp = property $ do
x <- forAll genWord8
LBS.length (one @LByteString x) === 1
oneShortByteStringProp :: Property
oneShortByteStringProp = property $ do
x <- forAll genWord8
SBS.length (one @ShortByteString x) === 1
oneMapProp :: Property
oneMapProp = property $ do
k <- forAll genUtf8Text
v <- forAll genInt
length (one @(Map Text Int) (k, v)) === 1
oneHashMapProp :: Property
oneHashMapProp = property $ do
k <- forAll genUtf8Text
v <- forAll genInt
length (one @(HashMap Text Int) (k, v)) === 1
oneIntMapProp :: Property
oneIntMapProp = property $ do
k <- forAll genInt
v <- forAll genUtf8Text
length (one @(IntMap Text) (k, v)) === 1
oneSetProp :: Property
oneSetProp = property $ do
v <- forAll genUtf8Text
length (one @(Set Text) v) === 1
oneHashSetProp :: Property
oneHashSetProp = property $ do
v <- forAll genUtf8Text
length (one @(HashSet Text) v) === 1
oneIntSetProp :: Property
oneIntSetProp = property $ do
v <- forAll genInt
IntSet.size (one v) === 1
genWord8 :: Gen Word8
genWord8 = Gen.word8 Range.constantBounded