packages feed

hgeometry-combinatorial-0.9.0.0: test/Algorithms/StringSearch/KMPSpec.hs

module Algorithms.StringSearch.KMPSpec where

import           Algorithms.StringSearch.KMP
import qualified Data.Foldable as F
import qualified Data.List as List
import qualified Data.Vector as V
import qualified Data.Vector.Unboxed as UV
import           Test.QuickCheck.Instances ()
import           Test.Hspec
import           Test.QuickCheck

--------------------------------------------------------------------------------

patternFound :: String -> String -> Maybe Int -> Bool
patternFound p t = \case
                     Nothing -> True
                     Just i  -> List.isPrefixOf p . List.drop i $ t

spec :: Spec
spec = do
  describe "KMP tests" $ do
    it "failure-function manual example" $
      buildFailureFunction (V.fromList "abacab")
        `shouldBe` (UV.fromList [0,0,1,0,1,2])
    it "manual example" $
      [4,1,2,3] `isSubStringOf` [1,4,5,4,1,2,3,6]
        `shouldBe` (Just 3)