module Saturn.Unstable.Type.NumberSpec where import qualified Data.Text.Lazy.Builder as Builder import qualified Saturn.Unstable.Type.Number as Number import qualified Test.Hspec as Hspec import qualified Test.QuickCheck as QuickCheck import qualified Text.Parsec as Parsec spec :: Hspec.Spec spec :: Spec spec = forall a. HasCallStack => String -> SpecWith a -> SpecWith a Hspec.describe String "Saturn.Unstable.Type.Number" forall a b. (a -> b) -> a -> b $ do forall a. (HasCallStack, Example a) => String -> a -> SpecWith (Arg a) Hspec.it String "round trips" forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a prop. (Show a, Testable prop) => Gen a -> (a -> [a]) -> (a -> prop) -> Property QuickCheck.forAllShrink Gen Number arbitrary Number -> [Number] shrink forall a b. (a -> b) -> a -> b $ \Number x -> do forall s t a. Stream s Identity t => Parsec s () a -> String -> s -> Either ParseError a Parsec.parse forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Number Number.parsec String "" (Builder -> Text Builder.toLazyText forall a b. (a -> b) -> a -> b $ Number -> Builder Number.toBuilder Number x) forall a. (HasCallStack, Show a, Eq a) => a -> a -> Expectation `Hspec.shouldBe` forall a b. b -> Either a b Right Number x arbitrary :: QuickCheck.Gen Number.Number arbitrary :: Gen Number arbitrary = Word8 -> Number Number.fromWord8 forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> forall a. Arbitrary a => Gen a QuickCheck.arbitrary shrink :: Number.Number -> [Number.Number] shrink :: Number -> [Number] shrink = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap Word8 -> Number Number.fromWord8 forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a. Arbitrary a => a -> [a] QuickCheck.shrink forall b c a. (b -> c) -> (a -> b) -> a -> c . Number -> Word8 Number.toWord8