packages feed

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` []