Example #1
0
    def test_items(self):
        size = self.size
        sl, pairs, values = self._create_skiplist(size, size, 10 * size)
        # test .items(), .keys() and .values()
        for ix, func in ((slice(0,
                                2), sl.items), (0, sl.keys), (1, sl.values)):

            def ref(start, stop):
                return [
                    pair[ix] for pair in pairs
                    if (start is None or pair[0] >= start) and (
                        stop is None or pair[0] < stop)
                ]

            self.assertEqual(list(func()), ref(None, None))
            self.assertEqual(list(func(start=10)), ref(10, None))
            self.assertEqual(list(func(start=10.1)), ref(10.1, None))
            self.assertEqual(list(func(start=11)), ref(11, None))
            self.assertEqual(list(func(stop=90)), ref(None, 90))
            self.assertEqual(list(func(stop=90.1)), ref(None, 90.1))
            self.assertEqual(list(func(stop=91)), ref(None, 91))
            self.assertEqual(list(func(start=10, stop=90)), ref(10, 90))
            self.assertEqual(list(func(start=10.1, stop=90)), ref(10.1, 90))
            self.assertEqual(list(func(start=10, stop=90.1)), ref(10, 90.1))
            self.assertEqual(list(func(start=10.1, stop=90.1)),
                             ref(10.1, 90.1))
            check(sl)
            self.assertEqual(list(sl), pairs)
Example #2
0
 def test_contains(self):
     size = self.size
     sl, pairs, values = self._create_skiplist(size, 2*size, 10*size)
     for key in values:
         self.assertIn(key, sl)
         check(sl); self.assertEqual(list(sl), pairs)
         self.assertNotIn(random.randint(3*size, 10*size), sl)
         check(sl); self.assertEqual(list(sl), pairs)
Example #3
0
 def test_index(self):
     size = self.size
     sl, pairs, values = self._create_skiplist(size, 2*size, 10*size)
     for key in values:
         self.assertEqual(sl.index(key), pairs.index((key, values[key][0])))
         check(sl); self.assertEqual(list(sl), pairs)
         self.assertRaises(KeyError, sl.index, random.randint(3*size, 10*size))
         check(sl); self.assertEqual(list(sl), pairs)
Example #4
0
 def test_count(self):
     size = self.size
     sl, pairs, values = self._create_skiplist(size, 2*size, 10*size)
     for key in values:
         self.assertEqual(sl.count(key), len(values[key]))
         check(sl); self.assertEqual(list(sl), pairs)
         self.assertEqual(sl.count(random.randint(3*size, 10*size)), 0)
         check(sl); self.assertEqual(list(sl), pairs)
Example #5
0
 def test_getitem_slice(self):
     size = self.size
     sl, pairs, values = self._create_skiplist(size, 2*size, 10*size)
     for ix in (slice(None, None), slice(None, 10), slice(10, None),
                slice(10, 90), slice(10, -10), slice(-10, None),
                slice(-10, -1), slice(None, -10), slice(None, -1)):
         self.assertEqual(list(sl[ix]), pairs[ix])
         check(sl); self.assertEqual(list(sl), pairs)
Example #6
0
 def test_getitem_slice(self):
     size = self.size
     sl, pairs, values = self._create_skiplist(size, 2 * size, 10 * size)
     for ix in (slice(None, None), slice(None, 10), slice(10, None),
                slice(10, 90), slice(10, -10), slice(-10, None),
                slice(-10, -1), slice(None, -10), slice(None, -1)):
         self.assertEqual(list(sl[ix]), pairs[ix])
         check(sl)
         self.assertEqual(list(sl), pairs)
Example #7
0
 def test_popitem(self):
     size = self.size
     sl, pairs, values = self._create_skiplist(size, 2*size, 10*size)
     while pairs:
         self.assertEqual(sl.popitem(), pairs[0])
         del pairs[0]
         check(sl); self.assertEqual(list(sl), pairs)
     self.assertRaises(KeyError, sl.popitem)
     check(sl); self.assertEqual(list(sl), pairs)
Example #8
0
 def test_bool(self):
     sl = SkipList()
     self.assertFalse(sl)
     self.assertFalse(bool(sl))
     check(sl)
     sl.insert('foo', 'bar')
     self.assertTrue(sl)
     self.assertTrue(bool(sl))
     check(sl)
Example #9
0
 def test_bool(self):
     sl = SkipList()
     self.assertFalse(sl)
     self.assertFalse(bool(sl))
     check(sl)
     sl.insert('foo', 'bar')
     self.assertTrue(sl)
     self.assertTrue(bool(sl))
     check(sl)
Example #10
0
 def test_count(self):
     size = self.size
     sl, pairs, values = self._create_skiplist(size, 2 * size, 10 * size)
     for key in values:
         self.assertEqual(sl.count(key), len(values[key]))
         check(sl)
         self.assertEqual(list(sl), pairs)
         self.assertEqual(sl.count(random.randint(3 * size, 10 * size)), 0)
         check(sl)
         self.assertEqual(list(sl), pairs)
Example #11
0
 def test_contains(self):
     size = self.size
     sl, pairs, values = self._create_skiplist(size, 2 * size, 10 * size)
     for key in values:
         self.assertIn(key, sl)
         check(sl)
         self.assertEqual(list(sl), pairs)
         self.assertNotIn(random.randint(3 * size, 10 * size), sl)
         check(sl)
         self.assertEqual(list(sl), pairs)
Example #12
0
 def test_len(self):
     size = self.size
     sl = SkipList()
     pairs = []
     for i in range(size):
         pair = (random.randint(0, 2*size), random.randint(0, 10*size))
         sl.insert(*pair)
         pairs = sorted(pairs + [pair], key=lambda x: x[0])
         self.assertEqual(len(sl), i+1)
         check(sl); self.assertEqual(list(sl), pairs)
Example #13
0
 def test_clear(self):
     size = self.size
     sl = SkipList()
     for i in range(size):
         sl.insert(random.randint(0, 2*size), random.randint(0, 10*size))
     self.assertGreater(sl.level, 1)
     self.assertEqual(len(sl), size)
     sl.clear()
     check(sl); self.assertEqual(list(sl), [])
     self.assertEqual(sl.level, 1)
Example #14
0
 def test_remove(self):
     size = self.size
     sl, pairs, values = self._create_skiplist(size, 2*size, 10*size)
     for key in values:
         for value in values[key]:
             sl.remove(key)
             pairs.remove((key, value))
             check(sl); self.assertEqual(list(sl), pairs)
         self.assertRaises(KeyError, sl.remove, key)
         check(sl); self.assertEqual(list(sl), pairs)
Example #15
0
 def test_popitem(self):
     size = self.size
     sl, pairs, values = self._create_skiplist(size, 2 * size, 10 * size)
     while pairs:
         self.assertEqual(sl.popitem(), pairs[0])
         del pairs[0]
         check(sl)
         self.assertEqual(list(sl), pairs)
     self.assertRaises(KeyError, sl.popitem)
     check(sl)
     self.assertEqual(list(sl), pairs)
Example #16
0
 def test_replace(self):
     size = self.size
     sl = SkipList()
     values = {}
     for i in range(size):
         pair = (random.randint(0, 2*size), random.randint(0, 10*size))
         sl.replace(*pair)
         values[pair[0]] = pair[1]
         pairs = sorted(values.items(), key=lambda x: x[0])
         check(sl); self.assertEqual(list(sl), pairs)
     self.assertGreater(sl.level, 1)
Example #17
0
 def test_len(self):
     size = self.size
     sl = SkipList()
     pairs = []
     for i in range(size):
         pair = (random.randint(0, 2 * size), random.randint(0, 10 * size))
         sl.insert(*pair)
         pairs = sorted(pairs + [pair], key=lambda x: x[0])
         self.assertEqual(len(sl), i + 1)
         check(sl)
         self.assertEqual(list(sl), pairs)
Example #18
0
 def test_index(self):
     size = self.size
     sl, pairs, values = self._create_skiplist(size, 2 * size, 10 * size)
     for key in values:
         self.assertEqual(sl.index(key), pairs.index((key, values[key][0])))
         check(sl)
         self.assertEqual(list(sl), pairs)
         self.assertRaises(KeyError, sl.index,
                           random.randint(3 * size, 10 * size))
         check(sl)
         self.assertEqual(list(sl), pairs)
Example #19
0
 def test_remove(self):
     size = self.size
     sl, pairs, values = self._create_skiplist(size, 2 * size, 10 * size)
     for key in values:
         for value in values[key]:
             sl.remove(key)
             pairs.remove((key, value))
             check(sl)
             self.assertEqual(list(sl), pairs)
         self.assertRaises(KeyError, sl.remove, key)
         check(sl)
         self.assertEqual(list(sl), pairs)
Example #20
0
 def test_clear(self):
     size = self.size
     sl = SkipList()
     for i in range(size):
         sl.insert(random.randint(0, 2 * size),
                   random.randint(0, 10 * size))
     self.assertGreater(sl.level, 1)
     self.assertEqual(len(sl), size)
     sl.clear()
     check(sl)
     self.assertEqual(list(sl), [])
     self.assertEqual(sl.level, 1)
Example #21
0
 def test_replace(self):
     size = self.size
     sl = SkipList()
     values = {}
     for i in range(size):
         pair = (random.randint(0, 2 * size), random.randint(0, 10 * size))
         sl.replace(*pair)
         values[pair[0]] = pair[1]
         pairs = sorted(values.items(), key=lambda x: x[0])
         check(sl)
         self.assertEqual(list(sl), pairs)
     self.assertGreater(sl.level, 1)
Example #22
0
 def test_getitem(self):
     size = self.size
     sl, pairs, values = self._create_skiplist(size, 2*size, 10*size)
     for i in range(size):
         self.assertEqual(sl[i], pairs[i])
         check(sl); self.assertEqual(list(sl), pairs)
         self.assertEqual(sl[-i-1], pairs[-i-1])
         check(sl); self.assertEqual(list(sl), pairs)
     self.assertRaises(IndexError, sl.__getitem__, size)
     check(sl); self.assertEqual(list(sl), pairs)
     self.assertRaises(IndexError, sl.__getitem__, -size-1)
     check(sl); self.assertEqual(list(sl), pairs)
     self.assertRaises(TypeError, sl.__getitem__, 'foo')
     check(sl); self.assertEqual(list(sl), pairs)
Example #23
0
 def test_getitem(self):
     size = self.size
     sl, pairs, values = self._create_skiplist(size, 2 * size, 10 * size)
     for i in range(size):
         self.assertEqual(sl[i], pairs[i])
         check(sl)
         self.assertEqual(list(sl), pairs)
         self.assertEqual(sl[-i - 1], pairs[-i - 1])
         check(sl)
         self.assertEqual(list(sl), pairs)
     self.assertRaises(IndexError, sl.__getitem__, size)
     check(sl)
     self.assertEqual(list(sl), pairs)
     self.assertRaises(IndexError, sl.__getitem__, -size - 1)
     check(sl)
     self.assertEqual(list(sl), pairs)
     self.assertRaises(TypeError, sl.__getitem__, 'foo')
     check(sl)
     self.assertEqual(list(sl), pairs)
Example #24
0
 def test_setitem(self):
     size = self.size
     sl, pairs, values = self._create_skiplist(size, 2*size, 10*size)
     for ix, pair in enumerate(pairs):
         sl[ix] = 2*pair[1]
         pairs[ix] = (pair[0], 2*pair[1])
         check(sl); self.assertEqual(list(sl), pairs)
     self.assertRaises(IndexError, sl.__setitem__, size, None)
     check(sl); self.assertEqual(list(sl), pairs)
     self.assertRaises(IndexError, sl.__setitem__, -size-1, None)
     check(sl); self.assertEqual(list(sl), pairs)
     self.assertRaises(TypeError, sl.__setitem__, 'foo', None)
     check(sl); self.assertEqual(list(sl), pairs)
Example #25
0
 def test_items(self):
     size = self.size
     sl, pairs, values = self._create_skiplist(size, size, 10*size)
     # test .items(), .keys() and .values()
     for ix, func in ((slice(0, 2), sl.items), (0, sl.keys), (1, sl.values)):
         def ref(start, stop):
             return [pair[ix] for pair in pairs
                         if (start is None or pair[0] >= start)
                                 and (stop is None or pair[0] < stop)]
         self.assertEqual(list(func()), ref(None, None))
         self.assertEqual(list(func(start=10)), ref(10, None))
         self.assertEqual(list(func(start=10.1)), ref(10.1, None))
         self.assertEqual(list(func(start=11)), ref(11, None))
         self.assertEqual(list(func(stop=90)), ref(None, 90))
         self.assertEqual(list(func(stop=90.1)), ref(None, 90.1))
         self.assertEqual(list(func(stop=91)), ref(None, 91))
         self.assertEqual(list(func(start=10, stop=90)), ref(10, 90))
         self.assertEqual(list(func(start=10.1, stop=90)), ref(10.1, 90))
         self.assertEqual(list(func(start=10, stop=90.1)), ref(10, 90.1))
         self.assertEqual(list(func(start=10.1, stop=90.1)), ref(10.1, 90.1))
         check(sl); self.assertEqual(list(sl), pairs)
Example #26
0
 def test_delitem(self):
     size = self.size
     sl, pairs, values = self._create_skiplist(size, 2*size, 10*size)
     while pairs:
         ix = random.randrange(-len(pairs), len(pairs))
         del sl[ix]
         del pairs[ix]
         check(sl); self.assertEqual(list(sl), pairs)
         self.assertRaises(IndexError, sl.__delitem__, len(pairs))
         check(sl); self.assertEqual(list(sl), pairs)
         self.assertRaises(IndexError, sl.__delitem__, -len(pairs)-1)
         check(sl); self.assertEqual(list(sl), pairs)
     self.assertRaises(TypeError, sl.__delitem__, 'foo')
     check(sl); self.assertEqual(list(sl), pairs)
Example #27
0
 def test_setitem(self):
     size = self.size
     sl, pairs, values = self._create_skiplist(size, 2 * size, 10 * size)
     for ix, pair in enumerate(pairs):
         sl[ix] = 2 * pair[1]
         pairs[ix] = (pair[0], 2 * pair[1])
         check(sl)
         self.assertEqual(list(sl), pairs)
     self.assertRaises(IndexError, sl.__setitem__, size, None)
     check(sl)
     self.assertEqual(list(sl), pairs)
     self.assertRaises(IndexError, sl.__setitem__, -size - 1, None)
     check(sl)
     self.assertEqual(list(sl), pairs)
     self.assertRaises(TypeError, sl.__setitem__, 'foo', None)
     check(sl)
     self.assertEqual(list(sl), pairs)
Example #28
0
 def test_search(self):
     size = self.size
     sl, pairs, values = self._create_skiplist(size, 2*size, 10*size)
     for key in values:
         self.assertEqual(sl.search(key), values[key][0])
         check(sl); self.assertEqual(list(sl), pairs)
         self.assertIsNone(sl.search(random.randint(3*size, 10*size)))
         check(sl); self.assertEqual(list(sl), pairs)
         self.assertEqual(sl.search(random.randint(3*size, 10*size), -1), -1)
         check(sl); self.assertEqual(list(sl), pairs)
Example #29
0
 def test_delitem(self):
     size = self.size
     sl, pairs, values = self._create_skiplist(size, 2 * size, 10 * size)
     while pairs:
         ix = random.randrange(-len(pairs), len(pairs))
         del sl[ix]
         del pairs[ix]
         check(sl)
         self.assertEqual(list(sl), pairs)
         self.assertRaises(IndexError, sl.__delitem__, len(pairs))
         check(sl)
         self.assertEqual(list(sl), pairs)
         self.assertRaises(IndexError, sl.__delitem__, -len(pairs) - 1)
         check(sl)
         self.assertEqual(list(sl), pairs)
     self.assertRaises(TypeError, sl.__delitem__, 'foo')
     check(sl)
     self.assertEqual(list(sl), pairs)
Example #30
0
 def test_search(self):
     size = self.size
     sl, pairs, values = self._create_skiplist(size, 2 * size, 10 * size)
     for key in values:
         self.assertEqual(sl.search(key), values[key][0])
         check(sl)
         self.assertEqual(list(sl), pairs)
         self.assertIsNone(sl.search(random.randint(3 * size, 10 * size)))
         check(sl)
         self.assertEqual(list(sl), pairs)
         self.assertEqual(
             sl.search(random.randint(3 * size, 10 * size), -1), -1)
         check(sl)
         self.assertEqual(list(sl), pairs)
Example #31
0
 def test_iter(self):
     size = self.size
     sl, pairs, values = self._create_skiplist(size, 2*size, 10*size)
     self.assertEqual(list(sl), pairs)
     check(sl)
Example #32
0
 def test_iter(self):
     size = self.size
     sl, pairs, values = self._create_skiplist(size, 2 * size, 10 * size)
     self.assertEqual(list(sl), pairs)
     check(sl)
Example #33
0
 def test_level(self):
     sl = SkipList()
     self.assertEqual(sl.level, 1)
     check(sl)
Example #34
0
 def test_level(self):
     sl = SkipList()
     self.assertEqual(sl.level, 1)
     check(sl)
Example #35
0
 def test_repr(self):
     sl = SkipList()
     sl.insert(1, 2)
     sl.insert(3, 4)
     self.assertEqual(repr(sl), 'SkipList(((1, 2), (3, 4)))')
     check(sl)
Example #36
0
 def test_repr(self):
     sl = SkipList()
     sl.insert(1, 2)
     sl.insert(3, 4)
     self.assertEqual(repr(sl), 'SkipList(((1, 2), (3, 4)))')
     check(sl)