testTextDeleteTextDelete :: TestTree
testTextDeleteTextDelete =
  let td1 = O.TextDelete 0
      td2 = O.TextDelete 1 in
  testGroup "TextDelete vs TextDelete"
  [ testCase "Before other" $ do
      assertEqual "a" (Just td1) $ T.transform td1 td2 T.Left
      assertEqual "b" (Just td1) $ T.transform td1 td2 T.Right
  , testCase "Equal to other" $ do
      assertEqual "a" (Just O.NoOp) $ T.transform td1 td1 T.Left
      assertEqual "b" (Just O.NoOp) $ T.transform td1 td1 T.Right
  , testCase "After other" $ do
      assertEqual "a" (Just td1) $ T.transform td2 td1 T.Left
      assertEqual "b" (Just td1) $ T.transform td2 td1 T.Right
  ]
testTextDeleteTextDelete :: TestTree
testTextDeleteTextDelete =
  let td1 = O.TextDelete 0
      td2 = O.TextDelete 1 in
  testGroup "TextDelete vs TextDelete"
  [ testCase "Before other" $ do
      assertEqual "a" (Just td1) $ T.transform td1 td2 T.Left
      assertEqual "b" (Just td1) $ T.transform td1 td2 T.Right
  , testCase "Equal to other" $ do
      assertEqual "a" (Just O.NoOp) $ T.transform td1 td1 T.Left
      assertEqual "b" (Just O.NoOp) $ T.transform td1 td1 T.Right
  , testCase "After other" $ do
      assertEqual "a" (Just td1) $ T.transform td2 td1 T.Left
      assertEqual "b" (Just td1) $ T.transform td2 td1 T.Right
  ]
testTextDeleteTextDelete =
  let td1 = O.TextDelete 0
      td2 = O.TextDelete 1 in
  testGroup "TextDelete vs TextDelete"
  [ testCase "Before other" $ do
      assertEqual "a" (Just td1) $ T.transform td1 td2 T.Left
      assertEqual "b" (Just td1) $ T.transform td1 td2 T.Right
  , testCase "Equal to other" $ do
      assertEqual "a" (Just O.NoOp) $ T.transform td1 td1 T.Left
      assertEqual "b" (Just O.NoOp) $ T.transform td1 td1 T.Right
  , testCase "After other" $ do
      assertEqual "a" (Just td1) $ T.transform td2 td1 T.Left
      assertEqual "b" (Just td1) $ T.transform td2 td1 T.Right
  ]