module Properties where

import Test.Tasty
import Test.Tasty.QuickCheck
import Data.Aeson

import Nix.Diff.Types
import Nix.Diff.Transformations

properties :: TestTree
properties = testGroup "Properties"
  [ testProperty "decode . encode == id" prop_DecodeEncodeID
  , testProperty "squash . squash == squash" prop_SqashTextDiffs
  ]
  where
    prop_DecodeEncodeID :: DerivationDiff -> Bool
    prop_DecodeEncodeID dd = case decode (encode dd) of
      Nothing -> False
      Just dd' -> dd == dd'

    prop_SqashTextDiffs :: DerivationDiff -> Bool
    prop_SqashTextDiffs dd = (op . op $ dd) == (op dd)
      where
        op = squashSourcesAndEnvsDiff