module Saturn.Unstable.Type.MinuteSpec where import qualified Data.Maybe as Maybe import qualified Data.Text.Lazy.Builder as Builder import qualified Data.Word as Word import qualified Saturn.Unstable.Type.FieldSpec as FieldSpec import qualified Saturn.Unstable.Type.Minute as Minute 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.Minute" 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 Minute arbitrary Minute -> [Minute] shrink forall a b. (a -> b) -> a -> b $ \Minute 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 Minute Minute.parsec String "" (Builder -> Text Builder.toLazyText forall a b. (a -> b) -> a -> b $ Minute -> Builder Minute.toBuilder Minute x) forall a. (HasCallStack, Show a, Eq a) => a -> a -> Expectation `Hspec.shouldBe` forall a b. b -> Either a b Right Minute x arbitrary :: QuickCheck.Gen Minute.Minute arbitrary :: Gen Minute arbitrary = forall a b. Gen a -> (a -> Maybe b) -> Gen b QuickCheck.suchThatMap Gen Field FieldSpec.arbitrary Field -> Maybe Minute Minute.fromField shrink :: Minute.Minute -> [Minute.Minute] shrink :: Minute -> [Minute] shrink = forall a b. (a -> Maybe b) -> [a] -> [b] Maybe.mapMaybe Field -> Maybe Minute Minute.fromField forall b c a. (b -> c) -> (a -> b) -> a -> c . Field -> [Field] FieldSpec.shrink forall b c a. (b -> c) -> (a -> b) -> a -> c . Minute -> Field Minute.toField new :: (MonadFail m) => [[Word.Word8]] -> m Minute.Minute new :: forall (m :: * -> *). MonadFail m => [[Word8]] -> m Minute new [[Word8]] xs = do Field field <- forall (m :: * -> *). MonadFail m => [[Word8]] -> m Field FieldSpec.new [[Word8]] xs forall b a. b -> (a -> b) -> Maybe a -> b maybe (forall (m :: * -> *) a. MonadFail m => String -> m a fail forall a b. (a -> b) -> a -> b $ String "invalid Minute: " forall a. Semigroup a => a -> a -> a <> forall a. Show a => a -> String show [[Word8]] xs) forall (f :: * -> *) a. Applicative f => a -> f a pure forall a b. (a -> b) -> a -> b $ Field -> Maybe Minute Minute.fromField Field field