testSequenceDeleteSequenceSet :: TestTree
testSequenceDeleteSequenceSet =
  let ss1 = O.SequenceSet 0 c 0
      ss2 = O.SequenceSet 1 c 0
      sd1 = O.SequenceDelete 0
      sd2 = O.SequenceDelete 1 in
  testGroup "SequenceDelete vs SequenceSet"
  [ testCase "Non-affecting" $ do
      assertEqual "a" (Just sd1) $ T.transform sd1 ss1 T.Left
      assertEqual "b" (Just sd1) $ T.transform sd1 ss1 T.Right
      assertEqual "c" (Just sd1) $ T.transform sd1 ss2 T.Left
      assertEqual "d" (Just sd1) $ T.transform sd1 ss2 T.Right
      assertEqual "e" (Just sd2) $ T.transform sd2 ss1 T.Left
      assertEqual "f" (Just sd2) $ T.transform sd2 ss1 T.Right
  ]
testSequenceDeleteSequenceSet :: TestTree
testSequenceDeleteSequenceSet =
  let ss1 = O.SequenceSet 0 c 0
      ss2 = O.SequenceSet 1 c 0
      sd1 = O.SequenceDelete 0
      sd2 = O.SequenceDelete 1 in
  testGroup "SequenceDelete vs SequenceSet"
  [ testCase "Non-affecting" $ do
      assertEqual "a" (Just sd1) $ T.transform sd1 ss1 T.Left
      assertEqual "b" (Just sd1) $ T.transform sd1 ss1 T.Right
      assertEqual "c" (Just sd1) $ T.transform sd1 ss2 T.Left
      assertEqual "d" (Just sd1) $ T.transform sd1 ss2 T.Right
      assertEqual "e" (Just sd2) $ T.transform sd2 ss1 T.Left
      assertEqual "f" (Just sd2) $ T.transform sd2 ss1 T.Right
  ]
testSequenceDeleteSequenceSet =
  let ss1 = O.SequenceSet 0 c 0
      ss2 = O.SequenceSet 1 c 0
      sd1 = O.SequenceDelete 0
      sd2 = O.SequenceDelete 1 in
  testGroup "SequenceDelete vs SequenceSet"
  [ testCase "Non-affecting" $ do
      assertEqual "a" (Just sd1) $ T.transform sd1 ss1 T.Left
      assertEqual "b" (Just sd1) $ T.transform sd1 ss1 T.Right
      assertEqual "c" (Just sd1) $ T.transform sd1 ss2 T.Left
      assertEqual "d" (Just sd1) $ T.transform sd1 ss2 T.Right
      assertEqual "e" (Just sd2) $ T.transform sd2 ss1 T.Left
      assertEqual "f" (Just sd2) $ T.transform sd2 ss1 T.Right
  ]