def test_merge_with_empty(self): mmsc1 = MinMaxSumCountAggregator() mmsc2 = MinMaxSumCountAggregator() checkpoint1 = MinMaxSumCountAggregator._TYPE(3, 150, 101, 3) mmsc1.checkpoint = checkpoint1 mmsc1.merge(mmsc2) self.assertEqual(mmsc1.checkpoint, checkpoint1)
def test_concurrent_update(self): mmsc0 = MinMaxSumCountAggregator() mmsc1 = MinMaxSumCountAggregator() with concurrent.futures.ThreadPoolExecutor(max_workers=2) as ex: mmsc0.checkpoint = ex.submit(self.call_update, mmsc0).result() mmsc1.checkpoint = ex.submit(self.call_update, mmsc0).result() mmsc0.merge(mmsc1) mmsc0_checkpoint = mmsc0.checkpoint mmsc0.take_checkpoint() self.assertEqual(mmsc0_checkpoint, mmsc0.checkpoint) self.assertIsNot(mmsc0_checkpoint, mmsc0.checkpoint)
def test_merge(self): mmsc1 = MinMaxSumCountAggregator() mmsc2 = MinMaxSumCountAggregator() checkpoint1 = MinMaxSumCountAggregator._TYPE(3, 150, 101, 3) checkpoint2 = MinMaxSumCountAggregator._TYPE(1, 33, 44, 2) mmsc1.checkpoint = checkpoint1 mmsc2.checkpoint = checkpoint2 mmsc1.merge(mmsc2) self.assertEqual( mmsc1.checkpoint, MinMaxSumCountAggregator._merge_checkpoint(checkpoint1, checkpoint2), )
def test_concurrent_update_and_checkpoint(self): mmsc0 = MinMaxSumCountAggregator() mmsc1 = MinMaxSumCountAggregator() mmsc1.checkpoint = MinMaxSumCountAggregator._TYPE(2**32, 0, 0, 0) with concurrent.futures.ThreadPoolExecutor(max_workers=1) as ex: fut = ex.submit(self.call_update, mmsc0) while not fut.done(): mmsc0.take_checkpoint() mmsc0.merge(mmsc1) mmsc1.checkpoint = mmsc0.checkpoint mmsc0.take_checkpoint() mmsc0.merge(mmsc1) self.assertEqual(mmsc0.checkpoint, fut.result())
def test_merge(self): mmsc1 = MinMaxSumCountAggregator() mmsc2 = MinMaxSumCountAggregator() checkpoint1 = MinMaxSumCountAggregator._TYPE(3, 150, 101, 3) checkpoint2 = MinMaxSumCountAggregator._TYPE(1, 33, 44, 2) mmsc1.checkpoint = checkpoint1 mmsc2.checkpoint = checkpoint2 mmsc1.last_update_timestamp = 100 mmsc2.last_update_timestamp = 123 mmsc1.merge(mmsc2) mmsc1_checkpoint = mmsc1.checkpoint mmsc1.checkpoint = checkpoint1 mmsc2.checkpoint = checkpoint2 mmsc1.merge(mmsc2) self.assertEqual(mmsc1_checkpoint, mmsc1.checkpoint) self.assertEqual(mmsc1.last_update_timestamp, 123)
def test_merge_checkpoint(self): type_ = MinMaxSumCountAggregator._TYPE empty = MinMaxSumCountAggregator._EMPTY mmsc0 = MinMaxSumCountAggregator() mmsc1 = MinMaxSumCountAggregator() mmsc0.checkpoint = empty mmsc1.checkpoint = empty mmsc0.merge(mmsc1) self.assertEqual(mmsc0.checkpoint, mmsc1.checkpoint) mmsc0.checkpoint = empty mmsc1.checkpoint = type_(0, 0, 0, 0) mmsc0.merge(mmsc1) self.assertEqual(mmsc0.checkpoint, mmsc1.checkpoint) mmsc0.checkpoint = type_(0, 0, 0, 0) mmsc1.checkpoint = empty mmsc1.merge(mmsc0) self.assertEqual(mmsc1.checkpoint, mmsc0.checkpoint) mmsc0.checkpoint = type_(0, 0, 0, 0) mmsc1.checkpoint = type_(0, 0, 0, 0) mmsc0.merge(mmsc1) self.assertEqual(mmsc1.checkpoint, mmsc0.checkpoint) mmsc0.checkpoint = type_(44, 23, 55, 86) mmsc1.checkpoint = empty mmsc0.merge(mmsc1) self.assertEqual(mmsc0.checkpoint, type_(44, 23, 55, 86)) mmsc0.checkpoint = type_(3, 150, 101, 3) mmsc1.checkpoint = type_(1, 33, 44, 2) mmsc0.merge(mmsc1) self.assertEqual(mmsc0.checkpoint, type_(1, 150, 101 + 44, 2 + 3))