[pypy-commit] pypy stm: Add a (skipped) test about using the minimark GC.

arigo noreply at buildbot.pypy.org
Mon Jan 16 14:59:34 CET 2012


Author: Armin Rigo <arigo at tunes.org>
Branch: stm
Changeset: r51341:91a0ee8fc4ab
Date: 2012-01-16 11:53 +0100
http://bitbucket.org/pypy/pypy/changeset/91a0ee8fc4ab/

Log:	Add a (skipped) test about using the minimark GC.

diff --git a/pypy/translator/stm/test/targetdemo.py b/pypy/translator/stm/test/targetdemo.py
--- a/pypy/translator/stm/test/targetdemo.py
+++ b/pypy/translator/stm/test/targetdemo.py
@@ -3,29 +3,35 @@
 from pypy.translator.stm import rstm
 
 
-NUM_THREADS = 4
-LENGTH      = 5000
-
-
 class Node:
     def __init__(self, value):
         self.value = value
         self.next = None
 
+class Global:
+    NUM_THREADS = 4
+    LENGTH      = 5000
+    USE_MEMORY  = False
+    anchor      = Node(-1)
+glob = Global()
+
 
 def add_at_end_of_chained_list(node, value):
+    x = Node(value)
     while node.next:
         node = node.next
-    newnode = Node(value)
+        if glob.USE_MEMORY:
+            x = Node(value)
+    newnode = x
     node.next = newnode
 
 def check_chained_list(node):
-    seen = [0] * (LENGTH+1)
-    seen[-1] = NUM_THREADS
+    seen = [0] * (glob.LENGTH+1)
+    seen[-1] = glob.NUM_THREADS
     while node is not None:
         value = node.value
         #print value
-        if not (0 <= value < LENGTH):
+        if not (0 <= value < glob.LENGTH):
             print "node.value out of bounds:", value
             raise AssertionError
         seen[value] += 1
@@ -34,19 +40,15 @@
                                                     value, seen[value])
             raise AssertionError
         node = node.next
-    if seen[LENGTH-1] != NUM_THREADS:
+    if seen[glob.LENGTH-1] != glob.NUM_THREADS:
         print "seen[LENGTH-1] != NUM_THREADS"
         raise AssertionError
     print "check ok!"
 
 
-class Global:
-    anchor = Node(-1)
-glob = Global()
-
 def run_me():
     print "thread starting..."
-    for i in range(LENGTH):
+    for i in range(glob.LENGTH):
         add_at_end_of_chained_list(glob.anchor, i)
         rstm.transaction_boundary()
     print "thread done."
@@ -57,11 +59,17 @@
 
 def entry_point(argv):
     print "hello world"
+    if len(argv) > 1:
+        glob.NUM_THREADS = int(argv[1])
+        if len(argv) > 2:
+            glob.LENGTH = int(argv[2])
+            if len(argv) > 3:
+                glob.USE_MEMORY = bool(int(argv[3]))
     glob.done = 0
-    for i in range(NUM_THREADS):
+    for i in range(glob.NUM_THREADS):
         ll_thread.start_new_thread(run_me, ())
     print "sleeping..."
-    while glob.done < NUM_THREADS:    # poor man's lock
+    while glob.done < glob.NUM_THREADS:    # poor man's lock
         time.sleep(1)
     print "done sleeping."
     check_chained_list(glob.anchor.next)
diff --git a/pypy/translator/stm/test/test_transform.py b/pypy/translator/stm/test/test_transform.py
--- a/pypy/translator/stm/test/test_transform.py
+++ b/pypy/translator/stm/test/test_transform.py
@@ -183,12 +183,13 @@
 # ____________________________________________________________
 
 class CompiledSTMTests(StandaloneTests):
+    gc = "none"
 
     def compile(self, entry_point):
         from pypy.config.pypyoption import get_pypy_config
         self.config = get_pypy_config(translating=True)
         self.config.translation.stm = True
-        self.config.translation.gc = "none"
+        self.config.translation.gc = self.gc
         #
         # Prevent the RaiseAnalyzer from just emitting "WARNING: Unknown
         # operation".  We want instead it to crash.
diff --git a/pypy/translator/stm/test/test_ztranslated.py b/pypy/translator/stm/test/test_ztranslated.py
--- a/pypy/translator/stm/test/test_ztranslated.py
+++ b/pypy/translator/stm/test/test_ztranslated.py
@@ -1,3 +1,4 @@
+import py
 from pypy.translator.stm.test.test_transform import CompiledSTMTests
 from pypy.translator.stm.test import targetdemo
 
@@ -6,6 +7,18 @@
 
     def test_hello_world(self):
         t, cbuilder = self.compile(targetdemo.entry_point)
-        data = cbuilder.cmdexec('')
+        data = cbuilder.cmdexec('4 5000')
         assert 'done sleeping.' in data
         assert 'check ok!' in data
+
+
+class TestSTMFramework(CompiledSTMTests):
+    gc = "minimark"
+
+    def test_hello_world(self):
+        py.test.skip("in-progress")
+        t, cbuilder = self.compile(targetdemo.entry_point)
+        data = cbuilder.cmdexec('4 5000 1')
+        # ^^^ should check that it doesn't take 1G of RAM
+        assert 'done sleeping.' in data
+        assert 'check ok!' in data


More information about the pypy-commit mailing list