code: def test_insert_after_indices(self):
      self.assertEqual(
          [1, 0, 2, 3, 4], insert_after_indices([1, 2, 3, 4], [0], [0])
      )
      self.assertEqual(
          [1, 2, 3, 4, 0, 1, 2],
          insert_after_indices([1, 2, 3, 4], [3], [[0, 1, 2]]),
      )
      self.assertEqual(
          [1, 2, 3, 4, 5], insert_after_indices([1, 2, 3, 4], [3], [5])
      )
  
      # Test successive replacement of individual elements
      num = random.randint(200, 1000)
      n = random.randint(20, 99)
      pos = random.sample(list(range(1, num - 1)), n)
      pos += [0, num]
      pos.sort()
      n += 2
  
      if n % 2 == 0:
          pos = pos[:-1]
          n -= 1
          pos[n - 1] = num
      test_pos = [
          [pos[i * 2 + 1], pos[i * 2 + 2]] for i in range(int(n / 2))
      ]
      test_list = []
      origin = list(range(num))
  
      for i in range(int(n / 2)):
          test_list += origin[pos[2 * i] : pos[2 * i + 1]]
      random.shuffle(test_pos)
      self.assertEqual(
          origin,
          insert_after_indices(
              test_list,
              [test_list.index(item[0] - 1) for item in test_pos],
              [list(range(item[0], item[1])) for item in test_pos],
          ),
      )
  
imports: import unittest
  from textflint.common.utils.list_op import *
label_desc: Use image node_id 8 for calling the TestListOp obj's underlying member method code with example usage: obj.test_insert_after_indices() without return types