blob: 3bc2c139ac2425a21442fff323b1d86845e4e485 [file] [log] [blame]
#!/usr/bin/env python
# Copyright (c) 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import logging
import os
import sys
import unittest
BASE_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_PATH)
from lib.range_dict import ExclusiveRangeDict
class ExclusiveRangeDictTest(unittest.TestCase):
class TestAttribute(ExclusiveRangeDict.RangeAttribute):
def __init__(self):
super(ExclusiveRangeDictTest.TestAttribute, self).__init__()
self._value = 0
def __str__(self):
return str(self._value)
def __repr__(self):
return '<TestAttribute:%d>' % self._value
def get(self):
return self._value
def set(self, new_value):
self._value = new_value
def copy(self): # pylint: disable=R0201
new_attr = ExclusiveRangeDictTest.TestAttribute()
new_attr.set(self._value)
return new_attr
def test_init(self):
ranges = ExclusiveRangeDict(self.TestAttribute)
result = []
for begin, end, attr in ranges.iter_range(20, 40):
result.append({'begin': begin, 'end':end, 'attr':attr.get()})
expected = [
{'begin': 20, 'end': 40, 'attr': 0},
]
self.assertEqual(expected, result)
def test_norange(self):
ranges = ExclusiveRangeDict(self.TestAttribute)
result = []
for begin, end, attr in ranges.iter_range(20, 20):
result.append({'begin': begin, 'end':end, 'attr':attr.get()})
expected = []
self.assertEqual(expected, result)
def test_set(self):
ranges = ExclusiveRangeDict(self.TestAttribute)
for begin, end, attr in ranges.iter_range(20, 30):
attr.set(12)
for begin, end, attr in ranges.iter_range(30, 40):
attr.set(52)
result = []
for begin, end, attr in ranges.iter_range(20, 40):
result.append({'begin': begin, 'end':end, 'attr':attr.get()})
expected = [
{'begin': 20, 'end': 30, 'attr': 12},
{'begin': 30, 'end': 40, 'attr': 52},
]
self.assertEqual(expected, result)
def test_split(self):
ranges = ExclusiveRangeDict(self.TestAttribute)
for begin, end, attr in ranges.iter_range(20, 30):
attr.set(1000)
for begin, end, attr in ranges.iter_range(30, 40):
attr.set(2345)
for begin, end, attr in ranges.iter_range(40, 50):
attr.set(3579)
result1 = []
for begin, end, attr in ranges.iter_range(25, 45):
result1.append({'begin': begin, 'end':end, 'attr':attr.get()})
expected1 = [
{'begin': 25, 'end': 30, 'attr': 1000},
{'begin': 30, 'end': 40, 'attr': 2345},
{'begin': 40, 'end': 45, 'attr': 3579},
]
self.assertEqual(expected1, result1)
result2 = []
for begin, end, attr in ranges.iter_range(20, 50):
result2.append({'begin': begin, 'end':end, 'attr':attr.get()})
expected2 = [
{'begin': 20, 'end': 25, 'attr': 1000},
{'begin': 25, 'end': 30, 'attr': 1000},
{'begin': 30, 'end': 40, 'attr': 2345},
{'begin': 40, 'end': 45, 'attr': 3579},
{'begin': 45, 'end': 50, 'attr': 3579},
]
self.assertEqual(expected2, result2)
def test_fill(self):
ranges = ExclusiveRangeDict(self.TestAttribute)
for begin, end, attr in ranges.iter_range(30, 35):
attr.set(12345)
for begin, end, attr in ranges.iter_range(40, 45):
attr.set(97531)
result = []
for begin, end, attr in ranges.iter_range(25, 50):
result.append({'begin': begin, 'end':end, 'attr':attr.get()})
expected = [
{'begin': 25, 'end': 30, 'attr': 0},
{'begin': 30, 'end': 35, 'attr': 12345},
{'begin': 35, 'end': 40, 'attr': 0},
{'begin': 40, 'end': 45, 'attr': 97531},
{'begin': 45, 'end': 50, 'attr': 0},
]
self.assertEqual(expected, result)
if __name__ == '__main__':
logging.basicConfig(
level=logging.DEBUG if '-v' in sys.argv else logging.ERROR,
format='%(levelname)5s %(filename)15s(%(lineno)3d): %(message)s')
unittest.main()