module Saturn.Unstable.Extra.TupleSpec where

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

spec :: Hspec.Spec
spec :: Spec
spec = forall a. HasCallStack => [Char] -> SpecWith a -> SpecWith a
Hspec.describe [Char]
"Saturn.Unstable.Extra.Tuple" forall a b. (a -> b) -> a -> b
$ do
  forall a. HasCallStack => [Char] -> SpecWith a -> SpecWith a
Hspec.describe [Char]
"mapBoth" forall a b. (a -> b) -> a -> b
$ do
    forall a.
(HasCallStack, Example a) =>
[Char] -> a -> SpecWith (Arg a)
Hspec.it [Char]
"works" forall a b. (a -> b) -> a -> b
$ do
      forall a b. (a -> b) -> (a, a) -> (b, b)
Tuple.mapBoth forall a. Enum a => a -> a
succ (Char
'A', Char
'a') forall a. (HasCallStack, Show a, Eq a) => a -> a -> Expectation
`Hspec.shouldBe` (Char
'B', Char
'b')

  forall a. HasCallStack => [Char] -> SpecWith a -> SpecWith a
Hspec.describe [Char]
"toSequence" forall a b. (a -> b) -> a -> b
$ do
    forall a.
(HasCallStack, Example a) =>
[Char] -> a -> SpecWith (Arg a)
Hspec.it [Char]
"works" forall a b. (a -> b) -> a -> b
$ do
      forall a. Enum a => (a, a) -> [a]
Tuple.toSequence (Char
'b', Char
'd') forall a. (HasCallStack, Show a, Eq a) => a -> a -> Expectation
`Hspec.shouldBe` [Char]
"bcd"

    forall a.
(HasCallStack, Example a) =>
[Char] -> a -> SpecWith (Arg a)
Hspec.it [Char]
"works with singleton" forall a b. (a -> b) -> a -> b
$ do
      forall a. Enum a => (a, a) -> [a]
Tuple.toSequence (Char
'a', Char
'a') forall a. (HasCallStack, Show a, Eq a) => a -> a -> Expectation
`Hspec.shouldBe` [Char]
"a"

    forall a.
(HasCallStack, Example a) =>
[Char] -> a -> SpecWith (Arg a)
Hspec.it [Char]
"works with empty" forall a b. (a -> b) -> a -> b
$ do
      forall a. Enum a => (a, a) -> [a]
Tuple.toSequence (Char
'b', Char
'a') forall a. (HasCallStack, Show a, Eq a) => a -> a -> Expectation
`Hspec.shouldBe` [Char]
""