module Tests.Metadata (tests) where import qualified Data.Sequence as Seq import Test.Tasty (TestTree, testGroup) import Test.Tasty.HUnit (testCase, (@?=)) import Data.LLVM.Internal import Text.LLVM.AST import Tests.Instances () tests :: TestTree tests = testGroup "Metadata" [ testCase "test dedup metadata" $ mempty @?= dedupMetadata mempty -- The first two should remain unchanged, but the third duplicates information in -- the second, so should be updated to hold a reference to it. , testGroup "test dedup metadata" $ let mkPum i v = PartialUnnamedMd i v True val1 = mkPum 1 (ValMdString "str") val2 = mkPum 2 (ValMdDebugInfo (DebugInfoExpression (DIExpression []))) val3 = mkPum 3 (ValMdNode [Just (pumValues val2)]) deduped = dedupMetadata (Seq.fromList [val1, val2, val3]) in [ testCase "1" $ Just val1 @?= deduped Seq.!? 0 , testCase "2" $ Just val2 @?= deduped Seq.!? 1 , testCase "3" $ Just (mkPum 3 (ValMdNode [Just (ValMdRef 2)])) @?= deduped Seq.!? 2 ] -- Deduplication should not changes: references or strings -- This test takes too long. -- , testProperty "dedup metadata" $ -- \lst i -> i >= 0 && length lst > i ==> -- let result = dedupMetadata lst -- in if lst !! i /= result !! i -- then case pumValues (result !! i) of -- ValMdRef _ -> False -- ValMdString _ -> False -- _ -> True -- else True ]