def test_tablechangemanager(self): "main test" # pylint: disable=protected-access,too-many-locals,too-many-statements table = Table('test_changemanager_table', data={ 'a': [1, 2, 3], 'b': [10.1, 0.2, 0.3] }) col_a = table['a'] col_b = table['b'] s = self.scheduler table.changes = TableChanges() s._run_number = 1 last = s._run_number slot = FakeSlot(table) mid1 = 1 changemanager = TableChangeManager(slot, buffer_updated=True, buffer_deleted=True) self.assertEqual(changemanager.last_update(), 0) self.assertEqual(changemanager.created.length(), 0) self.assertEqual(changemanager.updated.length(), 0) self.assertEqual(changemanager.deleted.length(), 0) mid2 = 2 cm2 = TableChangeManager(slot, buffer_updated=True, buffer_deleted=True) self.assertEqual(cm2.last_update(), 0) self.assertEqual(cm2.created.length(), 0) self.assertEqual(cm2.updated.length(), 0) self.assertEqual(cm2.deleted.length(), 0) mid3 = 3 cm3 = TableChangeManager(slot, buffer_updated=True, buffer_deleted=True) self.assertEqual(cm3.last_update(), 0) self.assertEqual(cm3.created.length(), 0) self.assertEqual(cm3.updated.length(), 0) self.assertEqual(cm3.deleted.length(), 0) changemanager.update(last, table, mid=mid1) self.assertEqual(changemanager.last_update(), last) self.assertEqual(changemanager.created.next(), slice(0, 3)) self.assertEqual(changemanager.updated.length(), 0) self.assertEqual(changemanager.deleted.length(), 0) s._run_number += 1 last = s._run_number table.append({'a': [4], 'b': [0.5]}) changemanager.update(last, table, mid=mid1) self.assertEqual(changemanager.last_update(), last) self.assertEqual(changemanager.created.next(), slice(3, 4)) self.assertEqual(changemanager.updated.length(), 0) self.assertEqual(changemanager.deleted.length(), 0) s._run_number += 1 last = s._run_number table.append({'a': [5], 'b': [0.5]}) changemanager.update(last, table, mid=mid1) self.assertEqual(changemanager.last_update(), last) self.assertEqual(changemanager.created.next(), slice(4, 5)) self.assertEqual(changemanager.updated.length(), 0) self.assertEqual(changemanager.deleted.length(), 0) s._run_number += 1 col_a[3] = 42 col_b[3] = 0.42 col_b[4] = 0.52 last = s._run_number changemanager.update(last, table, mid=mid1) self.assertEqual(changemanager.last_update(), last) self.assertEqual(changemanager.created.length(), 0) self.assertEqual(changemanager.updated.next(), slice(3, 5)) self.assertEqual(changemanager.deleted.length(), 0) s._run_number += 1 last = s._run_number changemanager.update(last, table, mid=mid1) self.assertEqual(changemanager.last_update(), last) self.assertEqual(changemanager.created.length(), 0) self.assertEqual(changemanager.updated.length(), 0) self.assertEqual(changemanager.deleted.length(), 0) s._run_number += 1 last2 = 0 col_a[2] = 22 col_b[2] = 0.22 col_b[1] = 0.12 last2 = s._run_number cm2.update(last2, table, mid=mid2) self.assertEqual(cm2.last_update(), last2) self.assertEqual(cm2.created.next(), slice(0, 5)) self.assertEqual(cm2.updated.length(), 0) self.assertEqual(cm2.deleted.length(), 0) s._run_number += 1 col_a[0] = 11 col_b[0] = 0.11 col_b[2] = 0.32 table.append({'a': [6], 'b': [0.6]}) tableview = table.loc[1:2] last3 = s._run_number cm3.update(last3, tableview, mid=mid3) self.assertEqual(cm3.created.next(), slice(1, 3)) # ids, not indices self.assertEqual(cm2.updated.length(), 0) self.assertEqual(cm2.deleted.length(), 0) s._run_number += 1 last = s._run_number # with self.assertRaises(ValueError): # changemanager.update(last+1, table, mid=mid1) changemanager.update(last, table, mid=mid1) self.assertEqual(changemanager.last_update(), last) self.assertEqual(changemanager.created.next(), slice(5, 6)) self.assertEqual(changemanager.updated.next(), slice(0, 3)) self.assertEqual(changemanager.deleted.length(), 0) s._run_number += 1 last2 = s._run_number cm2.update(last2, table, mid=mid2) self.assertEqual(cm2.last_update(), last2) self.assertEqual(cm2.created.next(), slice(5, 6)) self.assertEqual(list(cm2.updated.next()), [0, 2]) self.assertEqual(cm2.deleted.length(), 0) s._run_number += 1 col_a[0] = 1 col_b[0] = 0.11 col_b[2] = 0.22 last3 = s._run_number cm3.update(last3, tableview, mid=mid3) self.assertEqual(cm3.last_update(), last3) self.assertEqual(cm3.created.length(), 0) self.assertEqual(cm3.updated.next(), slice(2, 3)) self.assertEqual(cm3.deleted.length(), 0) # test deletes s._run_number += 1 del table.loc[2] last = s._run_number changemanager.update(last, table, mid=mid1) self.assertEqual(changemanager.last_update(), last) self.assertEqual(changemanager.created.length(), 0) self.assertEqual(changemanager.updated.length(), 0) self.assertEqual(changemanager.deleted.next(), slice(2, 3)) with self.assertRaises(KeyError): table.loc[2] # Not sure we want to specify what happens inside a deleted slot? # self.assertTrue(np.all(a[:]==np.array([1,2,a.fillvalue,42,5,6]))) # self.assertTrue(np.all(b[:]==np.array([0.11,0.12,a.fillvalue,0.42,.52,0.6]))) s._run_number += 1 del table.loc[4] table.append({'a': [7, 8], 'b': [0.7, 0.8]}) col_a[5] = 0.55 last2 = s._run_number cm2.update(last2, table, mid=mid2) self.assertEqual(cm2.last_update(), last2) self.assertEqual(cm2.created.next(), slice(6, 8)) self.assertEqual(cm2.updated.next(), slice(5, 6)) self.assertEqual(list(cm2.deleted.next()), [2, 4]) #TODO test reset changemanager.reset() self.assertEqual(changemanager.last_update(), 0)
def test_tablechangemanager(self) -> None: "main test" # pylint: disable=protected-access,too-many-locals,too-many-statements table = Table("test_changemanager_table", data={ "a": [1, 2, 3], "b": [10.1, 0.2, 0.3] }) col_a = table["a"] col_b = table["b"] s = self.scheduler() table.changes = TableChanges() s._run_number = 1 last = s._run_number slot = FakeSlot(table) mid1 = "m1" changemanager = TableChangeManager(slot, buffer_updated=True, buffer_deleted=True) self.assertEqual(changemanager.last_update(), 0) self.assertEqual(changemanager.created.length(), 0) self.assertEqual(changemanager.updated.length(), 0) self.assertEqual(changemanager.deleted.length(), 0) mid2 = "m2" cm2 = TableChangeManager(slot, buffer_updated=True, buffer_deleted=True) self.assertEqual(cm2.last_update(), 0) self.assertEqual(cm2.created.length(), 0) self.assertEqual(cm2.updated.length(), 0) self.assertEqual(cm2.deleted.length(), 0) cm3 = TableChangeManager(slot, buffer_updated=True, buffer_deleted=True) self.assertEqual(cm3.last_update(), 0) self.assertEqual(cm3.created.length(), 0) self.assertEqual(cm3.updated.length(), 0) self.assertEqual(cm3.deleted.length(), 0) changemanager.update(last, table, mid=mid1) self.assertEqual(changemanager.last_update(), last) self.assertEqual(changemanager.created.next(), slice(0, 3)) self.assertEqual(changemanager.updated.length(), 0) self.assertEqual(changemanager.deleted.length(), 0) s._run_number += 1 last = s._run_number table.append({"a": [4], "b": [0.5]}) changemanager.update(last, table, mid=mid1) self.assertEqual(changemanager.last_update(), last) self.assertEqual(changemanager.created.next(), slice(3, 4)) self.assertEqual(changemanager.updated.length(), 0) self.assertEqual(changemanager.deleted.length(), 0) s._run_number += 1 last = s._run_number table.append({"a": [5], "b": [0.5]}) changemanager.update(last, table, mid=mid1) self.assertEqual(changemanager.last_update(), last) self.assertEqual(changemanager.created.next(), slice(4, 5)) self.assertEqual(changemanager.updated.length(), 0) self.assertEqual(changemanager.deleted.length(), 0) s._run_number += 1 col_a[3] = 42 col_b[3] = 0.42 col_b[4] = 0.52 last = s._run_number changemanager.update(last, table, mid=mid1) self.assertEqual(changemanager.last_update(), last) self.assertEqual(changemanager.created.length(), 0) self.assertEqual(changemanager.updated.next(), slice(3, 5)) self.assertEqual(changemanager.deleted.length(), 0) s._run_number += 1 last = s._run_number changemanager.update(last, table, mid=mid1) self.assertEqual(changemanager.last_update(), last) self.assertEqual(changemanager.created.length(), 0) self.assertEqual(changemanager.updated.length(), 0) self.assertEqual(changemanager.deleted.length(), 0) s._run_number += 1 last2 = 0 col_a[2] = 22 col_b[2] = 0.22 col_b[1] = 0.12 last2 = s._run_number cm2.update(last2, table, mid=mid2) self.assertEqual(cm2.last_update(), last2) self.assertEqual(cm2.created.next(), slice(0, 5)) self.assertEqual(cm2.updated.length(), 0) self.assertEqual(cm2.deleted.length(), 0) s._run_number += 1 col_a[0] = 11 col_b[0] = 0.11 col_b[2] = 0.32 table.append({"a": [6], "b": [0.6]}) s._run_number += 1 last = s._run_number changemanager.update(last, table, mid=mid1) self.assertEqual(changemanager.last_update(), last) self.assertEqual(changemanager.created.next(), slice(5, 6)) self.assertEqual(changemanager.updated.next(), slice(0, 3)) self.assertEqual(changemanager.deleted.length(), 0) s._run_number += 1 last2 = s._run_number cm2.update(last2, table, mid=mid2) self.assertEqual(cm2.last_update(), last2) self.assertEqual(cm2.created.next(), slice(5, 6)) self.assertEqual(list(cm2.updated.next(as_slice=False)), [0, 2]) self.assertEqual(cm2.deleted.length(), 0) s._run_number += 1 col_a[0] = 1 col_b[0] = 0.11 col_b[2] = 0.22 # test deletes s._run_number += 1 del table.loc[2] last = s._run_number changemanager.update(last, table, mid=mid1) self.assertEqual(changemanager.last_update(), last) self.assertEqual(changemanager.created.length(), 0) # new behaviour prev. 0 self.assertEqual(changemanager.updated.length(), 1) self.assertEqual(changemanager.deleted.next(), slice(2, 3)) with self.assertRaises(KeyError): table.loc[2] # Not sure we want to specify what happens inside a deleted slot? # self.assertTrue(np.all(a[:]==np.array([1,2,a.fillvalue,42,5,6]))) # self.assertTrue(np.all(b[:]==np.array([0.11,0.12,a.fillvalue,0.42,.52,0.6]))) s._run_number += 1 del table.loc[4] table.append({"a": [7, 8], "b": [0.7, 0.8]}) col_a[5] = 0.55 last2 = s._run_number cm2.update(last2, table, mid=mid2) self.assertEqual(cm2.last_update(), last2) self.assertEqual(cm2.created.next(), slice(6, 8)) # new behaviour, prev. slice(5, 6) self.assertEqual(cm2.updated.next(), bitmap([0, 5])) self.assertEqual(list(cm2.deleted.next(as_slice=False)), [2, 4]) # TODO test reset changemanager.reset(mid1) self.assertEqual(changemanager.last_update(), 0)