예제 #1
0
    def test_merge(self):
        observer1 = ObserverAggregator()
        observer2 = ObserverAggregator()

        mmsc_checkpoint1 = MinMaxSumCountAggregator._TYPE(3, 150, 101, 3)
        mmsc_checkpoint2 = MinMaxSumCountAggregator._TYPE(1, 33, 44, 2)

        checkpoint1 = ObserverAggregator._TYPE(*(mmsc_checkpoint1 + (23, )))

        checkpoint2 = ObserverAggregator._TYPE(*(mmsc_checkpoint2 + (27, )))

        observer1.mmsc.checkpoint = mmsc_checkpoint1
        observer2.mmsc.checkpoint = mmsc_checkpoint2

        observer1.checkpoint = checkpoint1
        observer2.checkpoint = checkpoint2

        observer1.merge(observer2)

        self.assertEqual(
            observer1.checkpoint,
            (
                min(checkpoint1.min, checkpoint2.min),
                max(checkpoint1.max, checkpoint2.max),
                checkpoint1.sum + checkpoint2.sum,
                checkpoint1.count + checkpoint2.count,
                checkpoint2.last,
            ),
        )
예제 #2
0
    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),
        )
예제 #3
0
    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)
예제 #4
0
    def test_merge_with_empty(self):
        observer1 = ObserverAggregator()
        observer2 = ObserverAggregator()

        mmsc_checkpoint1 = MinMaxSumCountAggregator._TYPE(3, 150, 101, 3)
        checkpoint1 = ObserverAggregator._TYPE(*(mmsc_checkpoint1 + (23, )))

        observer1.mmsc.checkpoint = mmsc_checkpoint1
        observer1.checkpoint = checkpoint1

        observer1.merge(observer2)

        self.assertEqual(observer1.checkpoint, checkpoint1)
예제 #5
0
 def call_update(mmsc):
     min_ = float("inf")
     max_ = float("-inf")
     sum_ = 0
     count_ = 0
     for _ in range(0, 100000):
         val = random.getrandbits(32)
         mmsc.update(val)
         if val < min_:
             min_ = val
         if val > max_:
             max_ = val
         sum_ += val
         count_ += 1
     return MinMaxSumCountAggregator._TYPE(min_, max_, sum_, count_)
    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)
예제 #7
0
    def test_concurrent_update_and_checkpoint(self):
        mmsc = MinMaxSumCountAggregator()
        checkpoint_total = MinMaxSumCountAggregator._TYPE(2**32, 0, 0, 0)

        with concurrent.futures.ThreadPoolExecutor(max_workers=1) as ex:
            fut = ex.submit(self.call_update, mmsc)

            while not fut.done():
                mmsc.take_checkpoint()
                checkpoint_total = MinMaxSumCountAggregator._merge_checkpoint(
                    checkpoint_total, mmsc.checkpoint)

            mmsc.take_checkpoint()
            checkpoint_total = MinMaxSumCountAggregator._merge_checkpoint(
                checkpoint_total, mmsc.checkpoint)

            self.assertEqual(checkpoint_total, fut.result())
    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())