Sha256: ba13ebdffb29054a43783c288f771d34ea7497e981e09ca350d5b0a6651ce759

Contents?: true

Size: 1.96 KB

Versions: 229

Compression:

Stored size: 1.96 KB

Contents

import Test.Hspec        (Spec, it, shouldBe)
import Test.Hspec.Runner (configFastFail, defaultConfig, hspecWith)

import Cipher (caesarDecode, caesarEncode, caesarEncodeRandom)

main :: IO ()
main = hspecWith defaultConfig {configFastFail = True} specs

specs :: Spec
specs = do

    it "no-op encode" $ do
      caesarEncode         "a"  ['a'..'z'] `shouldBe` ['a'..'z']
      caesarEncode (repeat 'a') ['a'..'z'] `shouldBe` ['a'..'z']

    it "no-op decode" $ do
      caesarDecode         "a"  ['a'..'z'] `shouldBe` ['a'..'z']
      caesarDecode (repeat 'a') ['a'..'z'] `shouldBe` ['a'..'z']

    it "reversible" $ do
      let k0 = "alkjsdhflkjahsuid"
          k1 = ['z','y'..'a']
      caesarDecode k0 (caesarEncode k0 "asdf") `shouldBe` "asdf"
      caesarDecode k1 (caesarEncode k1 "asdf") `shouldBe` "asdf"

    it "known cipher" $ do
      let k = ['a'..'j']
          encode = caesarEncode k
          decode = caesarDecode k
      encode "aaaaaaaaaa"        `shouldBe` k
      decode k                   `shouldBe` "aaaaaaaaaa"
      decode (encode ['a'..'z']) `shouldBe` ['a'..'z']
      encode "zzzzzzzzzz"        `shouldBe` 'z':['a'..'i']

    it "double shift" $ do
      let plaintext  = "iamapandabear"
          ciphertext = "qayaeaagaciai"
      caesarEncode plaintext plaintext `shouldBe` ciphertext

    it "shift cipher" $ do
      let encode = caesarEncode "d"
          decode = caesarDecode "d"
      encode "aaaaaaaaaa"        `shouldBe` "dddddddddd"
      decode "dddddddddd"        `shouldBe` "aaaaaaaaaa"
      encode ['a'..'j']          `shouldBe` ['d'..'m']
      decode (encode ['a'..'j']) `shouldBe` ['a'..'j']

    it "random tests" $ do
      let plaintext = take 1000 (cycle ['a'..'z'])
      p1 <- caesarEncodeRandom plaintext
      uncurry caesarDecode p1 `shouldBe` plaintext
      p2 <- caesarEncodeRandom plaintext
      uncurry caesarDecode p2 `shouldBe` plaintext
      -- There's a small chance this could fail, since it's random.
      (p1 == p2) `shouldBe` False

Version data entries

229 entries across 229 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/haskell/exercises/simple-cipher/test/Tests.hs
trackler-2.2.1.179 tracks/haskell/exercises/simple-cipher/test/Tests.hs
trackler-2.2.1.178 tracks/haskell/exercises/simple-cipher/test/Tests.hs
trackler-2.2.1.177 tracks/haskell/exercises/simple-cipher/test/Tests.hs
trackler-2.2.1.176 tracks/haskell/exercises/simple-cipher/test/Tests.hs
trackler-2.2.1.175 tracks/haskell/exercises/simple-cipher/test/Tests.hs
trackler-2.2.1.174 tracks/haskell/exercises/simple-cipher/test/Tests.hs
trackler-2.2.1.173 tracks/haskell/exercises/simple-cipher/test/Tests.hs
trackler-2.2.1.172 tracks/haskell/exercises/simple-cipher/test/Tests.hs
trackler-2.2.1.171 tracks/haskell/exercises/simple-cipher/test/Tests.hs
trackler-2.2.1.170 tracks/haskell/exercises/simple-cipher/test/Tests.hs
trackler-2.2.1.169 tracks/haskell/exercises/simple-cipher/test/Tests.hs
trackler-2.2.1.167 tracks/haskell/exercises/simple-cipher/test/Tests.hs
trackler-2.2.1.166 tracks/haskell/exercises/simple-cipher/test/Tests.hs
trackler-2.2.1.165 tracks/haskell/exercises/simple-cipher/test/Tests.hs
trackler-2.2.1.164 tracks/haskell/exercises/simple-cipher/test/Tests.hs
trackler-2.2.1.163 tracks/haskell/exercises/simple-cipher/test/Tests.hs
trackler-2.2.1.162 tracks/haskell/exercises/simple-cipher/test/Tests.hs
trackler-2.2.1.161 tracks/haskell/exercises/simple-cipher/test/Tests.hs
trackler-2.2.1.160 tracks/haskell/exercises/simple-cipher/test/Tests.hs