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