Beispiel #1
0
    def test_large_randomly(self):
        TRIALS = 10
        OPERATIONS = 10000
        RANGE = 100000
        CHECKS = 10

        for _ in range(TRIALS):
            set0 = set()
            set1 = aatreeset.AaTreeSet()
            for _ in range(OPERATIONS):

                # Add/remove a random value
                val = random.randrange(RANGE)
                if random.random() < 0.5:
                    set0.add(val)
                    set1.add(val)
                else:
                    set0.discard(val)
                    set1.discard(val)

                # Check size and random element membership
                self.assertEqual(len(set0), len(set1))
                for _ in range(CHECKS):
                    val = random.randrange(-50, RANGE + 50)
                    self.assertEqual(val in set0, val in set1)

                # Occasionally check entire set and iterator
                if random.random() < 0.001:
                    set1.check_structure()
                    self.assertEqual(sorted(list(set0)), list(set1))
Beispiel #2
0
    def test_small_randomly(self):
        TRIALS = 30
        OPERATIONS = 100
        RANGE = 1000

        for _ in range(TRIALS):
            set0 = set()
            set1 = aatreeset.AaTreeSet()
            for _ in range(OPERATIONS):

                # Add/remove a random value
                val = random.randrange(RANGE)
                if random.random() < 0.001:
                    set0.clear()
                    set1.clear()
                elif random.random() < 0.5:
                    set0.add(val)
                    set1.add(val)
                else:
                    set0.discard(val)
                    set1.discard(val)
                set1.check_structure()

                # Check size and check element membership over entire range
                self.assertEqual(len(set0), len(set1))
                for k in range(-10, RANGE + 10):
                    self.assertEqual(k in set0, k in set1)
Beispiel #3
0
    def test_remove_all_randomly(self):
        TRIALS = 10
        LIMIT = 1000
        RANGE = 100000
        CHECKS = 10

        for _ in range(TRIALS):
            # Create sets and add all values
            set0 = set()
            set1 = aatreeset.AaTreeSet()
            for _ in range(LIMIT):
                val = random.randrange(RANGE)
                set0.add(val)
                set1.add(val)
            set1.check_structure()

            # Remove each value in random order
            lst = list(set0)
            random.shuffle(lst)
            for val in lst:
                set0.remove(val)
                set1.remove(val)
                if random.random() < max(1 / max(len(set1), 1), 0.001):
                    set1.check_structure()
                self.assertEqual(len(set0), len(set1))
                for _ in range(CHECKS):
                    val = random.randrange(-50, RANGE + 50)
                    self.assertEqual(val in set0, val in set1)
            self.assertTrue(len(set0) == len(set1) == 0)
Beispiel #4
0
 def test_iterator(self):
     SIZE = 1000
     set = aatreeset.AaTreeSet()
     for i in range(SIZE):
         set.add(i**2)
         lst = list(set)
         self.assertEqual(i + 1, len(lst))
         expect = [j**2 for j in range(len(lst))]
         self.assertEqual(expect, lst)
Beispiel #5
0
    def test_all_insertion_orders(self):
        LIMIT = 8
        for size in range(1, LIMIT + 1):
            sortedvalues = list(range(size))
            values = list(sortedvalues)

            while True:  # This runs factorial(size) iterations
                set = aatreeset.AaTreeSet(values)
                set.check_structure()
                self.assertEqual(sortedvalues, list(set))
                if not _next_permutation(values):
                    break
Beispiel #6
0
 def test_descending_operations(self):
     SIZE = 30000
     CHECKS = 10
     set = aatreeset.AaTreeSet()
     for i in range(SIZE):
         self.assertEqual(i, len(set))
         set.add(-i)
         for _ in range(CHECKS):
             val = -random.randrange(-50, i + 50)
             self.assertEqual(-i <= val <= 0, val in set)
     for i in range(SIZE):
         self.assertEqual(SIZE - i, len(set))
         set.remove(-i)
         for _ in range(CHECKS):
             val = -random.randrange(-50, i + 50)
             self.assertEqual(-SIZE < val < -i, val in set)
     self.assertEqual(0, len(set))
Beispiel #7
0
    def test_insert_randomly(self):
        TRIALS = 30
        OPERATIONS = 3000
        RANGE = 100000
        CHECKS = 10

        for _ in range(TRIALS):
            set0 = set()
            set1 = aatreeset.AaTreeSet()
            for _ in range(OPERATIONS):

                # Add a random value
                val = random.randrange(RANGE)
                set0.add(val)
                set1.add(val)
                if random.random() < 0.003:
                    set1.check_structure()

                # Check size and random element membership
                self.assertEqual(len(set0), len(set1))
                for _ in range(CHECKS):
                    val = random.randrange(-50, RANGE + 50)
                    self.assertEqual(val in set0, val in set1)