[pypy-commit] stmgc default: Some tests for 903f2a6c1ed9

arigo noreply at buildbot.pypy.org
Sun Oct 5 12:07:10 CEST 2014


Author: Armin Rigo <arigo at tunes.org>
Branch: 
Changeset: r1457:f89f44ca1dc9
Date: 2014-10-05 12:07 +0200
http://bitbucket.org/pypy/stmgc/changeset/f89f44ca1dc9/

Log:	Some tests for 903f2a6c1ed9

diff --git a/c7/test/test_marker.py b/c7/test/test_marker.py
--- a/c7/test/test_marker.py
+++ b/c7/test/test_marker.py
@@ -4,37 +4,38 @@
 
 class TestMarker(BaseTest):
 
-    def recording(self, kind):
+    def recording(self, *kinds):
         seen = []
         @ffi.callback("stmcb_timing_event_fn")
         def timing_event(tl, event, markers):
-            if kind == "ALL":
-                seen.append(event)
-            elif event != kind:
+            if len(kinds) > 0 and event not in kinds:
                 return
-            seen.append(tl)
             if markers:
-                seen.append(markers[0].tl)
-                seen.append(markers[0].segment_base)
-                seen.append(markers[0].odd_number)
-                seen.append(markers[0].object)
-                seen.append(markers[1].tl)
-                seen.append(markers[1].segment_base)
-                seen.append(markers[1].odd_number)
-                seen.append(markers[1].object)
+                expanded = []
+                for i in range(2):
+                    expanded.append((markers[i].tl,
+                                     markers[i].segment_base,
+                                     markers[i].odd_number,
+                                     markers[i].object))
             else:
-                seen.append(None)
+                expanded = None
+            seen.append((tl, event, expanded))
         lib.stmcb_timing_event = timing_event
         self.timing_event_keepalive = timing_event
         self.seen = seen
 
-    def check_recording(self, i1, o1, i2, o2):
+    def check_recording(self, i1, o1, i2, o2, extra=None):
         seen = self.seen
-        assert seen[0] == self.tls[1]
+        tl, event, markers = seen[0]
+        assert tl == self.tls[1]
         segbase = lib._stm_get_segment_base
-        assert seen[1:5] == [self.tls[1], segbase(2), i1, o1]
-        assert seen[5:9] == [self.tls[0], segbase(1), i2, o2]
-        assert len(seen) == 9
+        assert markers[0] == (self.tls[1], segbase(2), i1, o1)
+        assert markers[1] == (self.tls[0], segbase(1), i2, o2)
+        if extra is None:
+            assert len(seen) == 1
+        else:
+            assert seen[1] == (self.tls[1], extra, None)
+            assert len(seen) == 2
 
     def test_marker_odd_simple(self):
         self.start_transaction()
@@ -46,7 +47,9 @@
         assert int(ffi.cast("uintptr_t", x)) == 29
 
     def test_abort_marker_no_shadowstack(self):
-        self.recording(lib.STM_CONTENTION_WRITE_WRITE)
+        self.recording(lib.STM_CONTENTION_WRITE_WRITE,
+                       lib.STM_WAIT_CONTENTION,
+                       lib.STM_ABORTING_OTHER_CONTENTION)
         p = stm_allocate_old(16)
         #
         self.start_transaction()
@@ -160,7 +163,8 @@
         self.check_recording(19, ffi.NULL, 0, ffi.NULL)
 
     def test_double_remote_markers_cb_write_write(self):
-        self.recording(lib.STM_CONTENTION_WRITE_WRITE)
+        self.recording(lib.STM_CONTENTION_WRITE_WRITE,
+                       lib.STM_ABORTING_OTHER_CONTENTION)
         p = stm_allocate_old(16)
         #
         self.start_transaction()
@@ -186,10 +190,12 @@
         #
         py.test.raises(Conflict, self.switch, 0)
         #
-        self.check_recording(21, ffi.NULL, 19, ffi.NULL)
+        self.check_recording(21, ffi.NULL, 19, ffi.NULL,
+                             extra=lib.STM_ABORTING_OTHER_CONTENTION)
 
     def test_double_remote_markers_cb_write_read(self):
-        self.recording(lib.STM_CONTENTION_WRITE_READ)
+        self.recording(lib.STM_CONTENTION_WRITE_READ,
+                       lib.STM_ABORTING_OTHER_CONTENTION)
         p = stm_allocate_old(16)
         #
         self.start_transaction()
@@ -210,24 +216,25 @@
         #
         py.test.raises(Conflict, self.switch, 0)
         #
-        self.check_recording(21, ffi.NULL, 0, ffi.NULL)
+        self.check_recording(21, ffi.NULL, 0, ffi.NULL,
+                             extra=lib.STM_ABORTING_OTHER_CONTENTION)
 
     def test_all(self):
-        self.recording("ALL")
+        self.recording()     # all events
         self.start_transaction()
         self.commit_transaction()
         self.start_transaction()
         stm_major_collect()
         self.abort_transaction()
         assert self.seen == [
-            lib.STM_TRANSACTION_START,  self.tls[0], None,
-            lib.STM_GC_MINOR_START,     self.tls[0], None,
-            lib.STM_GC_MINOR_DONE,      self.tls[0], None,
-            lib.STM_TRANSACTION_COMMIT, self.tls[0], None,
-            lib.STM_TRANSACTION_START,  self.tls[0], None,
-            lib.STM_GC_MINOR_START,     self.tls[0], None,
-            lib.STM_GC_MINOR_DONE,      self.tls[0], None,
-            lib.STM_GC_MAJOR_START,     self.tls[0], None,
-            lib.STM_GC_MAJOR_DONE,      self.tls[0], None,
-            lib.STM_TRANSACTION_ABORT,  self.tls[0], None,
+            (self.tls[0], lib.STM_TRANSACTION_START,  None),
+            (self.tls[0], lib.STM_GC_MINOR_START,     None),
+            (self.tls[0], lib.STM_GC_MINOR_DONE,      None),
+            (self.tls[0], lib.STM_TRANSACTION_COMMIT, None),
+            (self.tls[0], lib.STM_TRANSACTION_START,  None),
+            (self.tls[0], lib.STM_GC_MINOR_START,     None),
+            (self.tls[0], lib.STM_GC_MINOR_DONE,      None),
+            (self.tls[0], lib.STM_GC_MAJOR_START,     None),
+            (self.tls[0], lib.STM_GC_MAJOR_DONE,      None),
+            (self.tls[0], lib.STM_TRANSACTION_ABORT,  None),
             ]


More information about the pypy-commit mailing list