~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test__simple_set.py

Rename StaticTupleInterner => SimpleSet.

This is a bit more appropriate, because the internal data type is not
specialized into StaticTuple objects only. Partially because I didn't
see a specific memory/speed tradeoff to caching the hash, and
that accessing said hash was siginficantly faster than just
calling PyObject_Hash().

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
import sys
20
20
 
21
21
from bzrlib import (
22
 
    # _static_tuple_py,
23
22
    errors,
24
23
    osutils,
25
24
    tests,
29
28
    test__static_tuple,
30
29
    )
31
30
try:
32
 
    from bzrlib import _static_tuple_interned_pyx as _module
 
31
    from bzrlib import _simple_set_pyx as _module
33
32
except ImportError:
34
33
    _module = None
35
34
try:
39
38
 
40
39
 
41
40
# Even though this is an extension, we don't permute the tests for a python
42
 
# version. As the plain python version is just a dict.
 
41
# version. As the plain python version is just a dict or set
43
42
 
44
43
class _CompiledStaticTupleInterned(tests.Feature):
45
44
 
49
48
        return True
50
49
 
51
50
    def feature_name(self):
52
 
        return 'bzrlib._static_tuple_interned_pyx'
 
51
        return 'bzrlib._simple_set_pyx'
53
52
 
54
53
CompiledStaticTupleInterned = _CompiledStaticTupleInterned()
55
54
 
85
84
        self.assertEqual(count+3, sys.getrefcount(obj))
86
85
 
87
86
    def test_initial(self):
88
 
        obj = _module.StaticTupleInterner()
 
87
        obj = _module.SimpleSet()
89
88
        self.assertEqual(0, len(obj))
90
89
        st = StaticTuple('foo', 'bar')
91
90
        self.assertFillState(0, 0, 0x3ff, obj)
99
98
        #  ('a', 'a'), ('f', '4'), ('p', 'r'), ('q', '1'), ('F', 'T'),
100
99
        #  ('Q', 'Q'), ('V', 'd'), ('7', 'C')
101
100
        # all collide @ 643
102
 
        obj = _module.StaticTupleInterner()
 
101
        obj = _module.SimpleSet()
103
102
        offset, val = obj._test_lookup(StaticTuple('a', 'a'))
104
103
        self.assertEqual(643, offset)
105
104
        self.assertEqual('<null>', val)
111
110
        self.assertEqual('<null>', val)
112
111
 
113
112
    def test_get_set_del_with_collisions(self):
114
 
        obj = _module.StaticTupleInterner()
 
113
        obj = _module.SimpleSet()
115
114
        k1 = StaticTuple('a', 'a')
116
115
        k2 = StaticTuple('f', '4') # collides
117
116
        k3 = StaticTuple('p', 'r')
161
160
        self.assertNotIn(k4, obj)
162
161
 
163
162
    def test_add(self):
164
 
        obj = _module.StaticTupleInterner()
 
163
        obj = _module.SimpleSet()
165
164
        self.assertFillState(0, 0, 0x3ff, obj)
166
165
        k1 = StaticTuple('foo')
167
166
        self.assertRefcount(1, k1)
201
200
        self.assertRefcount(2, k3)
202
201
 
203
202
    def test_discard(self):
204
 
        obj = _module.StaticTupleInterner()
 
203
        obj = _module.SimpleSet()
205
204
        k1 = StaticTuple('foo')
206
205
        k2 = StaticTuple('foo')
207
206
        k3 = StaticTuple('bar')
218
217
        self.assertRefcount(1, k3)
219
218
 
220
219
    def test__delitem__(self):
221
 
        obj = _module.StaticTupleInterner()
 
220
        obj = _module.SimpleSet()
222
221
        k1 = StaticTuple('foo')
223
222
        k2 = StaticTuple('foo')
224
223
        k3 = StaticTuple('bar')
235
234
        self.assertRefcount(1, k3)
236
235
 
237
236
    def test__resize(self):
238
 
        obj = _module.StaticTupleInterner()
 
237
        obj = _module.SimpleSet()
239
238
        k1 = StaticTuple('foo')
240
239
        k2 = StaticTuple('bar')
241
240
        k3 = StaticTuple('baz')
265
264
        self.assertEqual((591, '<null>'), obj._test_lookup(k2))
266
265
 
267
266
    def test_add_and_remove_lots_of_items(self):
268
 
        obj = _module.StaticTupleInterner()
 
267
        obj = _module.SimpleSet()
269
268
        chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890'
270
269
        for i in chars:
271
270
            for j in chars:
285
284
        self.assertTrue(obj.fill < 1024 / 5)
286
285
 
287
286
    def test__iter__(self):
288
 
        obj = _module.StaticTupleInterner()
 
287
        obj = _module.SimpleSet()
289
288
        k1 = StaticTuple('1')
290
289
        k2 = StaticTuple('1', '2')
291
290
        k3 = StaticTuple('3', '4')