code: def test_table_replace_should_fire_on_update_with_delta(
      self, sentinel
  ):
      data = [{"a": 1, "b": 2}, {"a": 3, "b": 4}]
      data2 = [{"a": 3, "b": 4}, {"a": 1, "b": 2}]
      tbl = Table(data)
      view = tbl.view()
  
      s = sentinel(False)
  
      def updater(port_id, delta):
          assert port_id == 0
          table2 = Table(delta)
          assert table2.view().to_records() == data2
          s.set(True)
  
      view.on_update(updater, mode="row")
      tbl.replace(data2)
      assert s.get() is True
  
imports: import sys
  from datetime import date, datetime
  from perspective.core.exception import PerspectiveError
  from perspective.table import Table
  from perspective.table._state import _PerspectiveStateManager
  from perspective.table.libpsppy import PerspectiveCppError, t_filter_op
  from pytest import raises
label_desc: Use image node_id 59 for calling the TestTable obj's underlying member method code with example usage: obj.test_table_replace_should_fire_on_update_with_delta(sentinel) without return types