summaryrefslogtreecommitdiff
path: root/haskell/examples/testdiff.hs
blob: 08229d33d98a248fc0e0d157f7d9935f35065c1d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
{-# LANGUAGE OverloadedStrings #-}

import qualified Data.ByteString.Lazy as L
import Data.VCDIFF
import Text.XXD

source :: L.ByteString
source = "It could be said that Joe was here. I don't know what to do about it."

source2 :: L.ByteString
source2 = "It could be said that Joe was not here. I don't know what to do about it."

target :: L.ByteString
target = "It could be said that Joe, the magnificent, was here.  I don't know what to do about it."

delta :: Result VCDIFF
delta = computeDiff defaultConfig source target

delta2 :: Result VCDIFF
delta2 = computeDiff defaultConfig source target

delta3 :: Result VCDIFF
delta3 = computeDiff defaultConfig { flags = XD3_ADLER32 } source target

delta4 :: Result VCDIFF
delta4 = computeDiff defaultConfig { flags = XD3_ADLER32 } source target

delta5 :: Result VCDIFF
delta5 = computeDiff defaultConfig { flags = XD3_ADLER32 } source target



dump title bs kont = do
    putStrLn title
    mapM_ putStrLn $ xxd2 0 (L.toStrict bs)
    kont

main = do
    dump "source" source $ putStrLn ""
    dump "target" target $ putStrLn ""
    go source "XD3_ADLER32" delta3
    go source "XD3_ADLER32" delta4
    go source "XD3_ADLER32" delta5
    go source "default" delta
    go source "default" delta2
    {-
    go source2 "default" delta
    go source2 "default" delta2
    go source2 "XD3_ADLER32" delta3
    go source2 "XD3_ADLER32" delta4
    -}
    print source
    print source2
    print target

go source flgs delta = do
    putStrLn ""
    case delta of
        Result δ me -> do
            let dif = encodeVCDIFF δ
            dump ("diff("++flgs++ ")") dif $ print me >> putStrLn ""
            let Result patched pe = applyPatch defaultConfig source δ
            dump ("patched("++flgs++")") patched $ print pe