packages feed

ulid-0.3.0.0: test/Data/ULID/RandomSpec.hs

module Data.ULID.RandomSpec where

import           Data.Binary
import qualified Data.ByteString.Lazy as LBS

import           Data.ULID.Random

import           Test.Hspec


spec :: Spec
spec = do
  describe "show/read" $ do
    it "has show/read symmetry" $ do
        a1 <- getULIDRandom
        a2 <- getULIDRandom
        a1 == a2 `shouldBe` False
        read (show a1) `shouldBe` a1
        read (show a2) `shouldBe` a2

    it "has correct show length" $ do
        a1 <- getULIDRandom
        length (show a1) `shouldBe` 16

  describe "encode/decode" $ do
    it "has correct binary length" $ do
        a1 <- getULIDRandom
        LBS.length (encode a1) `shouldBe` 10 -- 80 bit

    it "has encode/decode symmetry" $ do
        a1 <- getULIDRandom
        a2 <- getULIDRandom
        a1 == a2 `shouldBe` False
        decode (encode a1) `shouldBe` a1
        decode (encode a2) `shouldBe` a2