zenacy-html-2.0.0: test/Zenacy/HTML/Internal/Trie/Tests.hs
{-# LANGUAGE OverloadedStrings #-}
module Zenacy.HTML.Internal.Trie.Tests
( testTrie
) where
import qualified Zenacy.HTML.Internal.Trie as Trie
import Control.Monad
( (>=>)
)
import Control.Monad.Writer
( Writer(..)
, execWriter
, tell
)
import Data.Maybe
( fromJust
)
import Test.Framework
( Test
, testGroup
)
import Test.Framework.Providers.HUnit
( testCase
)
import Test.HUnit
( assertBool
, assertEqual
, assertFailure
)
import Data.Text
( Text
)
import qualified Data.Text as T
( concat
)
testTrie :: Test
testTrie = testGroup "Zenacy.HTML.Internal.Trie"
[ testMatch
]
testMatch :: Test
testMatch = testCase "trie match" $ do
assertEqual "TEST 1" Nothing $ Trie.match t0 "z"
assertEqual "TEST 2" (Just ("a", 1, "")) $ Trie.match t0 "a"
assertEqual "TEST 3" (Just ("a", 1, "y")) $ Trie.match t0 "ay"
assertEqual "TEST 4" (Just ("bbb", 5, "yyy")) $ Trie.match t2 "bbbyyy"
assertEqual "TEST 5" (Just ("ccc", 7, "yyy")) $ Trie.match t2 "cccyyy"
assertEqual "TEST 6" Nothing $ Trie.match t1 "z"
assertEqual "TEST 7" (Just ("aa", 1, "")) $ Trie.match t1 "aa"
assertEqual "TEST 8" (Just ("bb", 2, "")) $ Trie.match t1 "bb"
assertEqual "TEST 9" (Just ("a", 1, "z")) $ Trie.match t2 "az"
assertEqual "TEST 10" (Just ("aa", 2, "z")) $ Trie.match t2 "aaz"
assertEqual "TEST 11" (Just ("aaa", 3, "z")) $ Trie.match t2 "aaaz"
assertEqual "TEST 12" (Just ("bb", 4, "z")) $ Trie.match t2 "bbz"
assertEqual "TEST 13" (Just ("aaax", 6, "z")) $ Trie.match t2 "aaaxz"
t0 = Trie.fromList
[ ("a", 1)
]
t1 = Trie.fromList
[ ("aa", 1)
, ("bb", 2)
]
t2 = Trie.fromList
[ ("a", 1)
, ("aa", 2)
, ("aaa", 3)
, ("bb", 4)
, ("bbb", 5)
, ("aaax", 6)
, ("ccc", 7)
]