ulid-0.3.0.0: test/Data/ULID/Base32Spec.hs
module Data.ULID.Base32Spec where
import Data.ULID.Base32
import Test.Hspec
-- | Known examples from
-- https://web.archive.org/web/20171219211624/crockfordbase32.codeplex.com
spec :: Spec
spec = do
describe "encode" $ do
it "compare to known examples" $ do
encode 1 1 `shouldBe` "1"
encode 2 194 `shouldBe` "62"
encode 11 3838385658376483 `shouldBe` "3D2ZQ6TVC93"
encode 13 18446744073709551615 `shouldBe` "FZZZZZZZZZZZZ"
it "compare to known examples (padded)" $ do
encode 3 1 `shouldBe` "001"
encode 3 194 `shouldBe` "062"
encode 15 3838385658376483 `shouldBe` "00003D2ZQ6TVC93"
describe "decode" $ do
it "compare to known examples" $ do
decode 1 "1" `shouldBe` [(1, "")]
decode 2 "62" `shouldBe` [(194, "")]
decode 11 "3D2ZQ6TVC93" `shouldBe` [(3838385658376483, "")]
decode 13 "FZZZZZZZZZZZZ" `shouldBe` [(18446744073709551615, "")]
it "compare to known examples (padded)" $ do
decode 3 "001" `shouldBe` [(1, "")]
decode 3 "062" `shouldBe` [(194, "")]
decode 15 "00003D2ZQ6TVC93" `shouldBe` [(3838385658376483, "")]
it "gives remainder text" $ do
decode 3 "001ABC" `shouldBe` [(1, "ABC")]
decode 3 "062DEF" `shouldBe` [(194, "DEF")]
decode 15 "00003D2ZQ6TVC93X1" `shouldBe` [(3838385658376483, "X1")]
it "gives empty list if invalid" $ do
decode 3 "U01ABC" `shouldBe` []
decode 2 "!01DEF" `shouldBe` []