module Test.Hspec.Core.ShuffleSpec (spec) where import Prelude () import Helper import qualified Test.Hspec.Core.Shuffle as H import Test.Hspec.Core.Tree import Data.Array.ST import Control.Monad.ST import Data.STRef import System.Random spec :: Spec spec = do describe "shuffleForest" $ do let shuffleForest :: Int -> [Tree () Int] -> [Tree () Int] shuffleForest seed xs = runST $ do gen <- newSTRef (mkStdGen seed) H.shuffleForest gen xs it "shuffles a forest" $ do shuffleForest 2 [Leaf 1, Leaf 2, Leaf 3] `shouldBe` [Leaf 3, Leaf 1, Leaf 2] it "recurses into Node" $ do shuffleForest 1 [Node "foo" [Node "bar" [Leaf 1, Leaf 2, Leaf 3]]] `shouldBe` [Node "foo" [Node "bar" [Leaf 2, Leaf 3, Leaf 1]]] it "recurses into NodeWithCleanup" $ do shuffleForest 1 [NodeWithCleanup () [NodeWithCleanup () [Leaf 1, Leaf 2, Leaf 3]]] `shouldBe` [NodeWithCleanup () [NodeWithCleanup () [Leaf 2, Leaf 3, Leaf 1]]] describe "shuffle" $ do it "shuffles a list" $ do runST $ do gen <- newSTRef (mkStdGen 2) H.shuffle gen [1, 2, 3 :: Int] `shouldBe` [3, 1, 2] describe "mkArray" $ do it "creates an STArray from a list" $ do runST (H.mkArray [1, 2, 3 :: Int] >>= getElems) `shouldBe` [1, 2, 3]