testMapUnsetMapSet :: TestTree
testMapUnsetMapSet =
  let mu1 = O.MapUnset "foo"
      mu2 = O.MapUnset "bar"
      ms1 = O.MapSet "foo" c 0 in
  testGroup "MapUnset vs MapSet"
  [ testCase "Non-conflicting" $ do
      assertEqual "a" (Just mu2) $ T.transform mu2 ms1 T.Left
      assertEqual "b" (Just mu2) $ T.transform mu2 ms1 T.Right
  , testCase "Conflicting" $ do
      assertEqual "a" (Just O.NoOp) $ T.transform mu1 ms1 T.Left
      assertEqual "b" (Just O.NoOp) $ T.transform mu1 ms1 T.Right
  ]
testMapUnsetMapSet :: TestTree
testMapUnsetMapSet =
  let mu1 = O.MapUnset "foo"
      mu2 = O.MapUnset "bar"
      ms1 = O.MapSet "foo" c 0 in
  testGroup "MapUnset vs MapSet"
  [ testCase "Non-conflicting" $ do
      assertEqual "a" (Just mu2) $ T.transform mu2 ms1 T.Left
      assertEqual "b" (Just mu2) $ T.transform mu2 ms1 T.Right
  , testCase "Conflicting" $ do
      assertEqual "a" (Just O.NoOp) $ T.transform mu1 ms1 T.Left
      assertEqual "b" (Just O.NoOp) $ T.transform mu1 ms1 T.Right
  ]
testMapUnsetMapSet =
  let mu1 = O.MapUnset "foo"
      mu2 = O.MapUnset "bar"
      ms1 = O.MapSet "foo" c 0 in
  testGroup "MapUnset vs MapSet"
  [ testCase "Non-conflicting" $ do
      assertEqual "a" (Just mu2) $ T.transform mu2 ms1 T.Left
      assertEqual "b" (Just mu2) $ T.transform mu2 ms1 T.Right
  , testCase "Conflicting" $ do
      assertEqual "a" (Just O.NoOp) $ T.transform mu1 ms1 T.Left
      assertEqual "b" (Just O.NoOp) $ T.transform mu1 ms1 T.Right
  ]