def test_conact_source(self):
        source = ConcatSource([
            RangeSource(0, 4),
            RangeSource(4, 8),
            RangeSource(8, 12),
            RangeSource(12, 16),
        ])
        self.assertEqual(list(source.read(source.get_range_tracker())),
                         list(range(16)))
        self.assertEqual(
            list(source.read(source.get_range_tracker((1, None), (2, 10)))),
            list(range(4, 10)))
        range_tracker = source.get_range_tracker(None, None)
        self.assertEqual(range_tracker.position_at_fraction(0), (0, 0))
        self.assertEqual(range_tracker.position_at_fraction(.5), (2, 8))
        self.assertEqual(range_tracker.position_at_fraction(.625), (2, 10))

        # Simulate a read.
        self.assertEqual(range_tracker.try_claim((0, None)), True)
        self.assertEqual(range_tracker.sub_range_tracker(0).try_claim(2), True)
        self.assertEqual(range_tracker.fraction_consumed(), 0.125)

        self.assertEqual(range_tracker.try_claim((1, None)), True)
        self.assertEqual(range_tracker.sub_range_tracker(1).try_claim(6), True)
        self.assertEqual(range_tracker.fraction_consumed(), 0.375)
        self.assertEqual(range_tracker.try_split((0, 1)), None)
        self.assertEqual(range_tracker.try_split((1, 5)), None)

        self.assertEqual(range_tracker.try_split((3, 14)), ((3, None), 0.75))
        self.assertEqual(range_tracker.try_claim((3, None)), False)
        self.assertEqual(range_tracker.sub_range_tracker(1).try_claim(7), True)
        self.assertEqual(range_tracker.try_claim((2, None)), True)
        self.assertEqual(range_tracker.sub_range_tracker(2).try_claim(9), True)

        self.assertEqual(range_tracker.try_split((2, 8)), None)
        self.assertEqual(range_tracker.try_split((2, 11)), ((2, 11), 11. / 12))
        self.assertEqual(
            range_tracker.sub_range_tracker(2).try_claim(10), True)
        self.assertEqual(
            range_tracker.sub_range_tracker(2).try_claim(11), False)
  def test_empty_source(self):
    read_all = source_test_utils.read_from_source

    empty = RangeSource(0, 0)
    self.assertEquals(read_all(ConcatSource([])), [])
    self.assertEquals(read_all(ConcatSource([empty])), [])
    self.assertEquals(read_all(ConcatSource([empty, empty])), [])

    range10 = RangeSource(0, 10)
    self.assertEquals(read_all(ConcatSource([range10]), (0, None), (0, 0)),
                      [])
    self.assertEquals(read_all(ConcatSource([range10]), (0, 10), (1, None)),
                      [])
    self.assertEquals(read_all(ConcatSource([range10, range10]),
                               (0, 10), (1, 0)),
                      [])
Ejemplo n.º 3
0
 def test_estimate_size(self):
   sources = [TestConcatSource.DummySource(range(start, start + 10)) for start
              in [0, 10, 20]]
   concat = ConcatSource(sources)
   self.assertEquals(30, concat.estimate_size())
Ejemplo n.º 4
0
 def test_conact_source_exhaustive(self):
   source = ConcatSource([RangeSource(0, 10),
                          RangeSource(100, 110),
                          RangeSource(1000, 1010),
                         ])
   source_test_utils.assertSplitAtFractionExhaustive(source)
Ejemplo n.º 5
0
 def test_estimate_size(self):
   source = ConcatSource([RangeSource(0, 10),
                          RangeSource(10, 100),
                          RangeSource(100, 1000),
                         ])
   self.assertEqual(source.estimate_size(), 1000)