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")])