1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#!/usr/bin/env python 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# Copyright (c) 2013 The Chromium Authors. All rights reserved. 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# found in the LICENSE file. 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)import logging 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)import os 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)import sys 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)import unittest 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 117dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochBASE_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochsys.path.append(BASE_PATH) 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochfrom lib.range_dict import ExclusiveRangeDict 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class ExclusiveRangeDictTest(unittest.TestCase): 187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch class TestAttribute(ExclusiveRangeDict.RangeAttribute): 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) def __init__(self): 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) super(ExclusiveRangeDictTest.TestAttribute, self).__init__() 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) self._value = 0 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) def __str__(self): 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return str(self._value) 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) def __repr__(self): 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return '<TestAttribute:%d>' % self._value 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) def get(self): 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return self._value 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) def set(self, new_value): 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) self._value = new_value 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) def copy(self): # pylint: disable=R0201 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) new_attr = ExclusiveRangeDictTest.TestAttribute() 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) new_attr.set(self._value) 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return new_attr 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) def test_init(self): 417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ranges = ExclusiveRangeDict(self.TestAttribute) 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result = [] 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for begin, end, attr in ranges.iter_range(20, 40): 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result.append({'begin': begin, 'end':end, 'attr':attr.get()}) 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) expected = [ 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) {'begin': 20, 'end': 40, 'attr': 0}, 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ] 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) self.assertEqual(expected, result) 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) def test_norange(self): 527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ranges = ExclusiveRangeDict(self.TestAttribute) 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result = [] 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for begin, end, attr in ranges.iter_range(20, 20): 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result.append({'begin': begin, 'end':end, 'attr':attr.get()}) 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) expected = [] 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) self.assertEqual(expected, result) 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) def test_set(self): 617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ranges = ExclusiveRangeDict(self.TestAttribute) 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for begin, end, attr in ranges.iter_range(20, 30): 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) attr.set(12) 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for begin, end, attr in ranges.iter_range(30, 40): 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) attr.set(52) 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result = [] 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for begin, end, attr in ranges.iter_range(20, 40): 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result.append({'begin': begin, 'end':end, 'attr':attr.get()}) 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) expected = [ 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) {'begin': 20, 'end': 30, 'attr': 12}, 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) {'begin': 30, 'end': 40, 'attr': 52}, 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ] 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) self.assertEqual(expected, result) 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) def test_split(self): 777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ranges = ExclusiveRangeDict(self.TestAttribute) 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for begin, end, attr in ranges.iter_range(20, 30): 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) attr.set(1000) 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for begin, end, attr in ranges.iter_range(30, 40): 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) attr.set(2345) 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for begin, end, attr in ranges.iter_range(40, 50): 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) attr.set(3579) 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result1 = [] 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for begin, end, attr in ranges.iter_range(25, 45): 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result1.append({'begin': begin, 'end':end, 'attr':attr.get()}) 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) expected1 = [ 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) {'begin': 25, 'end': 30, 'attr': 1000}, 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) {'begin': 30, 'end': 40, 'attr': 2345}, 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) {'begin': 40, 'end': 45, 'attr': 3579}, 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ] 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) self.assertEqual(expected1, result1) 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result2 = [] 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for begin, end, attr in ranges.iter_range(20, 50): 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result2.append({'begin': begin, 'end':end, 'attr':attr.get()}) 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) expected2 = [ 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) {'begin': 20, 'end': 25, 'attr': 1000}, 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) {'begin': 25, 'end': 30, 'attr': 1000}, 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) {'begin': 30, 'end': 40, 'attr': 2345}, 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) {'begin': 40, 'end': 45, 'attr': 3579}, 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) {'begin': 45, 'end': 50, 'attr': 3579}, 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ] 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) self.assertEqual(expected2, result2) 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) def test_fill(self): 1087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ranges = ExclusiveRangeDict(self.TestAttribute) 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for begin, end, attr in ranges.iter_range(30, 35): 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) attr.set(12345) 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for begin, end, attr in ranges.iter_range(40, 45): 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) attr.set(97531) 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result = [] 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for begin, end, attr in ranges.iter_range(25, 50): 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result.append({'begin': begin, 'end':end, 'attr':attr.get()}) 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) expected = [ 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) {'begin': 25, 'end': 30, 'attr': 0}, 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) {'begin': 30, 'end': 35, 'attr': 12345}, 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) {'begin': 35, 'end': 40, 'attr': 0}, 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) {'begin': 40, 'end': 45, 'attr': 97531}, 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) {'begin': 45, 'end': 50, 'attr': 0}, 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ] 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) self.assertEqual(expected, result) 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)if __name__ == '__main__': 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) logging.basicConfig( 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) level=logging.DEBUG if '-v' in sys.argv else logging.ERROR, 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) format='%(levelname)5s %(filename)15s(%(lineno)3d): %(message)s') 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) unittest.main() 132