[pypy-svn] r39745 - pypy/dist/pypy/objspace/std/test

cfbolz at codespeak.net cfbolz at codespeak.net
Fri Mar 2 19:51:10 CET 2007


Author: cfbolz
Date: Fri Mar  2 19:51:08 2007
New Revision: 39745

Added:
   pypy/dist/pypy/objspace/std/test/test_resizable.py
Log:
additional tests for the smart resizable list


Added: pypy/dist/pypy/objspace/std/test/test_resizable.py
==============================================================================
--- (empty file)
+++ pypy/dist/pypy/objspace/std/test/test_resizable.py	Fri Mar  2 19:51:08 2007
@@ -0,0 +1,110 @@
+import py
+from pypy.objspace.std.smartresizablelist import *
+
+def test_leftmost_set_bit():
+    assert leftmost_set_bit(2) == 1
+    assert leftmost_set_bit(3) == 1
+    assert leftmost_set_bit(4) == 2
+    assert leftmost_set_bit(5) == 2
+    assert leftmost_set_bit(6) == 2
+    assert leftmost_set_bit(7) == 2
+    assert leftmost_set_bit(8) == 3
+    assert leftmost_set_bit(9) == 3
+    assert leftmost_set_bit(10) == 3
+    assert leftmost_set_bit(11) == 3
+    assert leftmost_set_bit(12) == 3
+    assert leftmost_set_bit(13) == 3
+    assert leftmost_set_bit(14) == 3
+    assert leftmost_set_bit(15) == 3
+    assert leftmost_set_bit(2 ** 18 + 1) == 18
+
+def test_decompose():
+    for i in range(1, 500):
+        k = leftmost_set_bit(i)
+        b, e = decompose(i, k)
+        hk = k // 2 + (k & 1)
+        assert (b << hk) + e + (1 << k) == i
+
+SIZE = 700
+def test_grow():
+    l = SmartResizableListImplementation(None)
+    for i in range(SIZE):
+#        import pdb; pdb.set_trace()
+        pos = l.grow()
+        assert l.length() == i + 1
+        assert pos == find_block_index(i)
+        l.setitem(i, "hello" + str(i))
+        for j in range(i + 1):
+            assert l.getitem(j) == "hello" + str(j)
+
+def test_grow_steps():
+    for step in range(2, 100, 10):
+        l = SmartResizableListImplementation(None)
+        for m in range(0, SIZE, step):
+            pos = l.grow(step)
+            assert pos == find_block_index(m + step - 1)
+            assert l.length() == m + step
+            for i in range(m, m + step):
+                l.setitem(i, "hello" + str(i))
+            for j in range(m + 1):
+                assert l.getitem(j) == "hello" + str(j)
+
+def test_shrink():
+    l = SmartResizableListImplementation(None)
+    for i in range(2):
+        l.grow(SIZE)
+        for i in range(SIZE):
+            l.setitem(i, i + 42)
+        for i in range(SIZE):
+            l.shrink()
+            assert l.length() == SIZE - i - 1
+            for j in range(l.length()):
+                assert l.getitem(j) == j + 42
+        py.test.raises(ValueError, l.shrink)
+
+def test_shrink_sets_none():
+    l = SmartResizableListImplementation(None)
+    for i in range(SIZE):
+        l.grow(2)
+        assert l.getitem(i) == None
+        assert l.getitem(i + 1) == None
+        l.setitem(i, i)
+        l.setitem(i + 1, i + 1)
+        l.shrink()
+        assert l.getitem(i) == i
+
+def test_shrink_steps():
+    for step in range(2, 100, 10):
+        l = SmartResizableListImplementation(None)
+        l.grow(SIZE)
+        for i in range(SIZE):
+            l.setitem(i, "hello" + str(i))
+        for m in range(0, SIZE - step, step):
+            pos = l.shrink(step)
+            assert l.length() == SIZE - m - step
+            for i in range(l.length()):
+                assert l.getitem(i) == "hello" + str(i)
+
+def test_random():
+    import random
+    l = SmartResizableListImplementation(None)
+    for i in range(1000):
+        previous = l.length()
+        print i, previous
+        c = random.randrange(2)
+        if c == 0 or l.length() == 0:
+            items = random.randrange(1, SIZE)
+            l.grow(items)
+            assert l.length() == previous + items
+            for i in range(previous, previous + items):
+                assert l.getitem(i) is None
+                l.setitem(i, i + 42)
+        else:
+            items = random.randrange(1, l.length() + 1)
+            l.shrink(items)
+            assert l.length() == previous - items
+            if l.length() > 5:
+                for i in range(l.length() - 5, l.length()):
+                    assert l.getitem(i) == i + 42
+    for i in range(l.length()):
+        assert l.getitem(i) == i + 42


More information about the pypy-svn mailing list