module Saturn.Unstable.RenderSpec where

import qualified Saturn.Unstable.Render as Render
import qualified Saturn.Unstable.Type.ScheduleSpec as ScheduleSpec
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.Render" forall a b. (a -> b) -> a -> b
$ do
  forall a. HasCallStack => String -> SpecWith a -> SpecWith a
Hspec.describe String
"toString" forall a b. (a -> b) -> a -> b
$ do
    forall a.
(HasCallStack, Example a) =>
String -> a -> SpecWith (Arg a)
Hspec.it String
"works with wildcards" forall a b. (a -> b) -> a -> b
$ do
      Schedule
schedule <- forall (m :: * -> *).
MonadFail m =>
[[Word8]]
-> [[Word8]] -> [[Word8]] -> [[Word8]] -> [[Word8]] -> m Schedule
ScheduleSpec.new [] [] [] [] []
      Schedule -> String
Render.toString Schedule
schedule forall a. (HasCallStack, Show a, Eq a) => a -> a -> IO ()
`Hspec.shouldBe` String
"* * * * *"

    forall a.
(HasCallStack, Example a) =>
String -> a -> SpecWith (Arg a)
Hspec.it String
"works with numbers" forall a b. (a -> b) -> a -> b
$ do
      Schedule
schedule <- forall (m :: * -> *).
MonadFail m =>
[[Word8]]
-> [[Word8]] -> [[Word8]] -> [[Word8]] -> [[Word8]] -> m Schedule
ScheduleSpec.new [[Word8
4]] [[Word8
3]] [[Word8
2]] [[Word8
1]] [[Word8
0]]
      Schedule -> String
Render.toString Schedule
schedule forall a. (HasCallStack, Show a, Eq a) => a -> a -> IO ()
`Hspec.shouldBe` String
"4 3 2 1 0"

    forall a.
(HasCallStack, Example a) =>
String -> a -> SpecWith (Arg a)
Hspec.it String
"works with ranges" forall a b. (a -> b) -> a -> b
$ do
      Schedule
schedule <- forall (m :: * -> *).
MonadFail m =>
[[Word8]]
-> [[Word8]] -> [[Word8]] -> [[Word8]] -> [[Word8]] -> m Schedule
ScheduleSpec.new [[Word8
8, Word8
9]] [[Word8
6, Word8
7]] [[Word8
4, Word8
5]] [[Word8
2, Word8
3]] [[Word8
0, Word8
1]]
      Schedule -> String
Render.toString Schedule
schedule forall a. (HasCallStack, Show a, Eq a) => a -> a -> IO ()
`Hspec.shouldBe` String
"8-9 6-7 4-5 2-3 0-1"

    forall a.
(HasCallStack, Example a) =>
String -> a -> SpecWith (Arg a)
Hspec.it String
"works with choices" forall a b. (a -> b) -> a -> b
$ do
      Schedule
schedule <- forall (m :: * -> *).
MonadFail m =>
[[Word8]]
-> [[Word8]] -> [[Word8]] -> [[Word8]] -> [[Word8]] -> m Schedule
ScheduleSpec.new [[Word8
8], [Word8
9]] [[Word8
6], [Word8
7]] [[Word8
4], [Word8
5]] [[Word8
2], [Word8
3]] [[Word8
0], [Word8
1]]
      Schedule -> String
Render.toString Schedule
schedule forall a. (HasCallStack, Show a, Eq a) => a -> a -> IO ()
`Hspec.shouldBe` String
"8,9 6,7 4,5 2,3 0,1"