packages feed

bytepatch-0.3.0: test/StreamPatch/Patch/AlignSpec.hs

module StreamPatch.Patch.AlignSpec ( spec ) where

import           StreamPatch.Patch.Align
import           Test.Hspec
import           Util

import           StreamPatch.Patch
import           Data.Vinyl
import           Data.Functor.Const
import           GHC.Natural

makeUnalignedPatch
    :: [(Integer, a)]
    -> [Patch 'RelSeek '[Const (Meta 'FwdSeek)] a]
makeUnalignedPatch = map go
  where go (n, a) = Patch a n $ FunctorRec $ Flap (Const (Meta Nothing)) :& RNil

align'
    :: Integer -> [(Integer, String)]
    -> Either (Error 'FwdSeek) [Patch 'FwdSeek '[] String]
align' sBase = traverse (align sBase) . makeUnalignedPatch

spec :: Spec
spec = do
    it "aligns valid simple patches" $ do
      align' 0 [] `shouldBe` Right (makePatchscript [])
      align' 0 [(0, "XXX")] `shouldBe` Right (makePatchscript [(0, "XXX")])
      align' 5 [(0, "XXX"), ((-5), "XXX")] `shouldBe` Right (makePatchscript [(5, "XXX"), (0, "XXX")])