module Saturn.Unstable.Extra.IntSpec where

import qualified Saturn.Unstable.Extra.Int as Int
import qualified Test.Hspec as Hspec

spec :: Hspec.Spec
spec :: Spec
spec = forall a. HasCallStack => String -> SpecWith a -> SpecWith a
Hspec.describe String
"Saturn.Unstable.Extra.Int" forall a b. (a -> b) -> a -> b
$ do
  forall a. HasCallStack => String -> SpecWith a -> SpecWith a
Hspec.describe String
"fromWord8" forall a b. (a -> b) -> a -> b
$ do
    forall a.
(HasCallStack, Example a) =>
String -> a -> SpecWith (Arg a)
Hspec.it String
"works" forall a b. (a -> b) -> a -> b
$ do
      Word8 -> Int
Int.fromWord8 Word8
0 forall a. (HasCallStack, Show a, Eq a) => a -> a -> Expectation
`Hspec.shouldBe` Int
0

  forall a. HasCallStack => String -> SpecWith a -> SpecWith a
Hspec.describe String
"toWord8" forall a b. (a -> b) -> a -> b
$ do
    forall a.
(HasCallStack, Example a) =>
String -> a -> SpecWith (Arg a)
Hspec.it String
"succeeds with minimum" forall a b. (a -> b) -> a -> b
$ do
      Int -> Maybe Word8
Int.toWord8 Int
0 forall a. (HasCallStack, Show a, Eq a) => a -> a -> Expectation
`Hspec.shouldBe` forall a. a -> Maybe a
Just Word8
0

    forall a.
(HasCallStack, Example a) =>
String -> a -> SpecWith (Arg a)
Hspec.it String
"succeeds with maximum" forall a b. (a -> b) -> a -> b
$ do
      Int -> Maybe Word8
Int.toWord8 Int
255 forall a. (HasCallStack, Show a, Eq a) => a -> a -> Expectation
`Hspec.shouldBe` forall a. a -> Maybe a
Just Word8
255

    forall a.
(HasCallStack, Example a) =>
String -> a -> SpecWith (Arg a)
Hspec.it String
"fails below minimum" forall a b. (a -> b) -> a -> b
$ do
      Int -> Maybe Word8
Int.toWord8 (-Int
1) forall a. (HasCallStack, Show a, Eq a) => a -> a -> Expectation
`Hspec.shouldBe` forall a. Maybe a
Nothing

    forall a.
(HasCallStack, Example a) =>
String -> a -> SpecWith (Arg a)
Hspec.it String
"fails above maximum" forall a b. (a -> b) -> a -> b
$ do
      Int -> Maybe Word8
Int.toWord8 Int
256 forall a. (HasCallStack, Show a, Eq a) => a -> a -> Expectation
`Hspec.shouldBe` forall a. Maybe a
Nothing