testSequenceInsertSequenceDelete :: TestTree
testSequenceInsertSequenceDelete =
  let si1 = O.SequenceInsert 0 c 0
      sd1 = O.SequenceDelete 0
      si2 = O.SequenceInsert 1 c 0
      sd2 = O.SequenceDelete 1 in
  testGroup "SequenceInsert vs SequenceDelete"
  [ testCase "Delete >= Insert" $ do
      assertEqual "a" (Just si1) $ T.transform si1 sd1 T.Left
      assertEqual "b" (Just si1) $ T.transform si1 sd1 T.Right
      assertEqual "c" (Just si1) $ T.transform si1 sd2 T.Left
      assertEqual "d" (Just si1) $ T.transform si1 sd2 T.Right
  , testCase "Delete < Insert" $ do
      assertEqual "a" (Just $ O.SequenceInsert 0 c 0) $ T.transform si2 sd1 T.Left
      assertEqual "b" (Just $ O.SequenceInsert 0 c 0) $ T.transform si2 sd1 T.Right
  ]
testSequenceInsertSequenceDelete :: TestTree
testSequenceInsertSequenceDelete =
  let si1 = O.SequenceInsert 0 c 0
      sd1 = O.SequenceDelete 0
      si2 = O.SequenceInsert 1 c 0
      sd2 = O.SequenceDelete 1 in
  testGroup "SequenceInsert vs SequenceDelete"
  [ testCase "Delete >= Insert" $ do
      assertEqual "a" (Just si1) $ T.transform si1 sd1 T.Left
      assertEqual "b" (Just si1) $ T.transform si1 sd1 T.Right
      assertEqual "c" (Just si1) $ T.transform si1 sd2 T.Left
      assertEqual "d" (Just si1) $ T.transform si1 sd2 T.Right
  , testCase "Delete < Insert" $ do
      assertEqual "a" (Just $ O.SequenceInsert 0 c 0) $ T.transform si2 sd1 T.Left
      assertEqual "b" (Just $ O.SequenceInsert 0 c 0) $ T.transform si2 sd1 T.Right
  ]
testSequenceInsertSequenceDelete =
  let si1 = O.SequenceInsert 0 c 0
      sd1 = O.SequenceDelete 0
      si2 = O.SequenceInsert 1 c 0
      sd2 = O.SequenceDelete 1 in
  testGroup "SequenceInsert vs SequenceDelete"
  [ testCase "Delete >= Insert" $ do
      assertEqual "a" (Just si1) $ T.transform si1 sd1 T.Left
      assertEqual "b" (Just si1) $ T.transform si1 sd1 T.Right
      assertEqual "c" (Just si1) $ T.transform si1 sd2 T.Left
      assertEqual "d" (Just si1) $ T.transform si1 sd2 T.Right
  , testCase "Delete < Insert" $ do
      assertEqual "a" (Just $ O.SequenceInsert 0 c 0) $ T.transform si2 sd1 T.Left
      assertEqual "b" (Just $ O.SequenceInsert 0 c 0) $ T.transform si2 sd1 T.Right
  ]