Home | History | Annotate | Download | only in tests
      1 #!/usr/bin/python
      2 
      3 # Copyright 2014 Google Inc.
      4 #
      5 # Use of this source code is governed by a BSD-style license that can be
      6 # found in the LICENSE file.
      7 
      8 """
      9 Test OrderedSet.
     10 """
     11 
     12 import sys
     13 import test_variables
     14 import unittest
     15 
     16 sys.path.append(test_variables.GYP_GEN_DIR)
     17 
     18 from vars_dict_lib import OrderedSet
     19 
     20 
     21 def create_dummy_var(i):
     22   return 'dummy_var' + str(i)
     23 
     24 
     25 class OrderedSetTest(unittest.TestCase):
     26 
     27   def setUp(self):
     28     self.__set = OrderedSet()
     29 
     30   def test_methods(self):
     31     """Test methods on OrderedSet.
     32     """
     33     RANGE = 10
     34     for i in range(RANGE):
     35       dummy_var = create_dummy_var(i)
     36       # Add to the list. This should succeed.
     37       self.__set.add(dummy_var)
     38       self.assertEqual(len(self.__set), i+1)
     39       self.assertTrue(dummy_var in self.__set)
     40       self.assertEqual(self.__set[i], dummy_var)
     41 
     42       # Now attempt to add it again. This should fail.
     43       self.__set.add(dummy_var)
     44       self.assertEqual(len(self.__set), i+1)
     45       self.assertEqual(self.__set[i], dummy_var)
     46 
     47     # Test iterator.
     48     counter = 0
     49     for set_member in self.__set:
     50       self.assertEqual(create_dummy_var(counter), set_member)
     51       counter += 1
     52     self.assertEqual(counter, len(self.__set))
     53 
     54     # Now test removal.
     55     for i in range(RANGE):
     56       dummy_var = create_dummy_var(i)
     57       self.__set.remove(dummy_var)
     58       self.assertEqual(len(self.__set), RANGE-i-1)
     59       self.assertFalse(dummy_var in self.__set)
     60 
     61     # Test reset(), for a range of ranges.
     62     for subrange in range(RANGE):
     63       for i in range(subrange):
     64         self.__set.add(create_dummy_var(i))
     65       self.assertEqual(len(self.__set), subrange)
     66       self.__set.reset()
     67       self.assertEqual(len(self.__set), 0)
     68 
     69   def test_set(self):
     70     """Test OrderedSet.set().
     71     """
     72     # Create a set with dummy values.
     73     my_set = OrderedSet()
     74     RANGE = 10
     75     for i in range(RANGE):
     76       my_set.add(create_dummy_var(i))
     77     my_len = len(my_set)
     78     self.assertEqual(my_len, RANGE)
     79 
     80     # Copy it to another set.
     81     other_set = OrderedSet()
     82     self.assertEqual(len(other_set), 0)
     83     other_set.set(my_set)
     84 
     85     # Both sets should contain the same values, in the same order.
     86     iterator = iter(my_set)
     87     for item in other_set:
     88       self.assertTrue(item == iterator.next())
     89     with self.assertRaises(StopIteration):
     90       iterator.next()
     91     self.assertEqual(my_len, len(other_set))
     92 
     93     # But the sets are different. Changing one will not affect the other.
     94     self.assertFalse(other_set is my_set)
     95     other_var = 'something_else'
     96     other_set.add(other_var)
     97     self.assertEqual(my_len + 1, len(other_set))
     98     self.assertEqual(my_len, len(my_set))
     99     self.assertNotIn(other_var, my_set)
    100 
    101 
    102 def main():
    103   loader = unittest.TestLoader()
    104   suite = loader.loadTestsFromTestCase(OrderedSetTest)
    105   unittest.TextTestRunner(verbosity=2).run(suite)
    106 
    107 if __name__ == "__main__":
    108   main()
    109 
    110