hdiff-0.0.0: tests/Data/Digems/Change/ClassifySpec.hs
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE GADTs #-}
module Data.Digems.Change.ClassifySpec (spec) where
import qualified Data.Set as S
import Generics.MRSOP.Base
import Generics.MRSOP.Util
import Generics.MRSOP.Holes
import Data.Exists
import Data.Digems.Patch
import Data.Digems.Diff
import Data.Digems.Patch.Show
import Data.Digems.MetaVar
import Data.Digems.Change
import Data.Digems.Change.Classify
import Languages.RTree
import Languages.RTree.Diff
import Test.QuickCheck
import Test.Hspec
--------------------------------------------
-- ** Change Classification Unit Tests
changeClassDual :: ChangeClass -> ChangeClass
changeClassDual CDel = CIns
changeClassDual CIns = CDel
changeClassDual x = x
mustClassifyAs :: String -> RTree -> RTree -> [ChangeClass] -> SpecWith (Arg Bool)
mustClassifyAs lbl a b cls = do
it (lbl ++ ": change class") $ do
let patch = digemRTree a b
in cls == holesGetHolesAnnWith' changeClassify patch
----------------
-- Example 1
a1 , b1 :: RTree
a1 = "a" :>: [ "b" :>: []
, "c" :>: []
, "d" :>: []
]
b1 = "a" :>: [ "b'" :>: []
, "d" :>: []
]
---------------
-- Example 2
a2 , b2 :: RTree
a2 = "x" :>: [ "k" :>: [] , "u" :>: []]
b2 = "x" :>: [ "u" :>: [] , "k" :>: []]
---------------
-- Example 3
a3 , b3 :: RTree
a3 = "x" :>: [ "k" :>: [ "a" :>: [] ] ]
b3 = "x" :>: [ "k" :>: [] , "a" :>: [] ]
----------------
-- Example 4
a4 , b4 :: RTree
a4 = "x" :>: [ "a" :>: [ "b" :>: [] ] , "c" :>: [] ]
b4 = "x" :>: [ "a" :>: [ "b" :>: ["c" :>: []]]]
----------------
-- Example 5
a5 , b5 :: RTree
a5 = "x" :>: [ "a" :>: [] , "b" :>: [] ]
b5 = "x" :>: [ "a" :>: [] , "new" :>: [] , "b" :>: [] ]
----------------
-- Example 6
a6 , b6 :: RTree
a6 = "x" :>: [ "a" :>: [] , "b" :>: [ "k" :>: [] ] ]
b6 = "x" :>: [ "a" :>: [] , "new" :>: [] , "b'" :>: [ "k" :>: [] ] ]
----------------
-- Example 7
a7 , b7 :: RTree
a7 = "x" :>: [ "a" :>: [ "aa" :>: [] , "ab" :>: []] , "b" :>: [ "bb" :>: [] ] ]
b7 = "x" :>: [ "a" :>: [ "aa" :>: [] , "ab" :>: [] , "bb" :>: [] ] , "bb" :>: [] ]
----------------
-- Example 8
a8 , b8 :: RTree
a8 = "x" :>: [ "y" :>: [] ]
b8 = "a" :>: [ "b" :>: [] , "x" :>: [ "y" :>: [] ] , "c" :>: [] ]
spec :: Spec
spec = do
describe "changeClassify: manual examples" $ do
mustClassifyAs "1" a1 b1 [CDel , CMod , CId]
mustClassifyAs "2" a2 b2 [CPerm , CId]
mustClassifyAs "3" a3 b3 [CPerm , CId]
mustClassifyAs "4" a4 b4 [CPerm , CId]
mustClassifyAs "5" a5 b5 [CIns , CId , CId]
mustClassifyAs "6" a6 b6 [CMod , CId , CId]
mustClassifyAs "7" a7 b7 [CMod , CId]
mustClassifyAs "8" a8 b8 [CIns]