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