Sha256: fd0848eb9c6de0f6c306efe6715ae66ad94a88a8551cade5253a0f4838a5c5a6

Contents?: true

Size: 1.88 KB

Versions: 164

Compression:

Stored size: 1.88 KB

Contents

{-# LANGUAGE RecordWildCards #-}

import Data.Char         (isSpace)
import Data.Foldable     (for_)
import Data.Function     (on)
import Test.Hspec        (Spec, describe, it, shouldBe, shouldMatchList)
import Test.Hspec.Runner (configFastFail, defaultConfig, hspecWith)

import CryptoSquare (encode)

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

specs :: Spec
specs = describe "crypto-square" $
          describe "encode" $ for_ cases test
  where

    test Case{..} = describe description $ do

      let shouldMatchWords  = shouldBe        `on` words
          shouldMatchString = shouldBe        `on` filter (not . isSpace)
          shouldMatchChars  = shouldMatchList `on` filter (not . isSpace)

      it "normalizes the input"    $ encode input `shouldMatchChars`  expected
      it "reorders the characters" $ encode input `shouldMatchString` expected
      it "groups the output"       $ encode input `shouldMatchWords`  expected

-- Test cases created from scratch on 2016-10-05, diverging from `x-common`.

data Case = Case { description :: String
                 , input       :: String
                 , expected    :: String
                 }

cases :: [Case]
cases = [ Case { description = "perfect square, all lowercase with space"
               , input       = "a dog"
               , expected    = "ao dg"
               }
        , Case { description = "perfect rectangle, mixed case"
               , input       = "A camel"
               , expected    = "am ce al"
               }
        , Case { description = "incomplete square with punctuation"
               , input       = "Wait, fox!"
               , expected    = "wtx af io"
               }
        , Case { description = "incomplete rectangle with symbols"
               , input       = "cat | cut -d@ -f1 | sort | uniq"
               , expected    = "ctoi adrq tft c1u usn"
               }
        ]

Version data entries

164 entries across 164 versions & 1 rubygems

Version Path
trackler-2.1.0.9 tracks/haskell/exercises/crypto-square/test/Tests.hs
trackler-2.1.0.8 tracks/haskell/exercises/crypto-square/test/Tests.hs
trackler-2.1.0.7 tracks/haskell/exercises/crypto-square/test/Tests.hs
trackler-2.1.0.6 tracks/haskell/exercises/crypto-square/test/Tests.hs
trackler-2.1.0.5 tracks/haskell/exercises/crypto-square/test/Tests.hs
trackler-2.1.0.4 tracks/haskell/exercises/crypto-square/test/Tests.hs
trackler-2.1.0.3 tracks/haskell/exercises/crypto-square/test/Tests.hs
trackler-2.1.0.2 tracks/haskell/exercises/crypto-square/test/Tests.hs
trackler-2.1.0.1 tracks/haskell/exercises/crypto-square/test/Tests.hs
trackler-2.1.0.0 tracks/haskell/exercises/crypto-square/test/Tests.hs
trackler-2.0.8.55 tracks/haskell/exercises/crypto-square/test/Tests.hs
trackler-2.0.8.54 tracks/haskell/exercises/crypto-square/test/Tests.hs
trackler-2.0.8.53 tracks/haskell/exercises/crypto-square/test/Tests.hs
trackler-2.0.8.52 tracks/haskell/exercises/crypto-square/test/Tests.hs
trackler-2.0.8.51 tracks/haskell/exercises/crypto-square/test/Tests.hs
trackler-2.0.8.50 tracks/haskell/exercises/crypto-square/test/Tests.hs
trackler-2.0.8.49 tracks/haskell/exercises/crypto-square/test/Tests.hs
trackler-2.0.8.48 tracks/haskell/exercises/crypto-square/test/Tests.hs
trackler-2.0.8.47 tracks/haskell/exercises/crypto-square/test/Tests.hs
trackler-2.0.8.46 tracks/haskell/exercises/crypto-square/test/Tests.hs