code: def test_recursive_add_cmp(self):
      st = time.perf_counter()
      a = Tensor([1, 2, 3, 4])
      for _ in range(24):
          a = a + a
      sched1 = create_schedule([a.lazydata], None)
      b = Tensor([1, 2, 3, 4])
      for _ in range(24):
          b = b + b
      sched2 = create_schedule([b.lazydata], None)
      c = Tensor([1, 2, 3, 4])
      for _ in range(23):
          c = c + c
      sched3 = create_schedule([c.lazydata], None)
      assert sched1[-1].ast == sched2[-1].ast
      assert sched1[-1].ast != sched3[-1].ast
      self.assertLess(time.perf_counter() - st, 1.0)
  
file_path: tinygrad/test/test_fusion_op.py
imports: import unittest
  import time
  import numpy
  from tinygrad import Tensor, dtypes
  from tinygrad.device import InterpretedASTRunner
  from tinygrad.lazy import create_schedule
  from tinygrad.realize import run_schedule, lower_schedule_item
label_desc: Use image node_id 4 for calling the TestFusionOp obj's underlying member method code with example usage: obj.test_recursive_add_cmp() without return types