aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Lib/test/test_free_threading/test_slots.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_free_threading/test_slots.py')
-rw-r--r--Lib/test/test_free_threading/test_slots.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/Lib/test/test_free_threading/test_slots.py b/Lib/test/test_free_threading/test_slots.py
new file mode 100644
index 00000000000..758f74f54d0
--- /dev/null
+++ b/Lib/test/test_free_threading/test_slots.py
@@ -0,0 +1,43 @@
+import threading
+from test.support import threading_helper
+from unittest import TestCase
+
+
+def run_in_threads(targets):
+ """Run `targets` in separate threads"""
+ threads = [
+ threading.Thread(target=target)
+ for target in targets
+ ]
+ for thread in threads:
+ thread.start()
+ for thread in threads:
+ thread.join()
+
+
+@threading_helper.requires_working_threading()
+class TestSlots(TestCase):
+
+ def test_object(self):
+ class Spam:
+ __slots__ = [
+ "eggs",
+ ]
+
+ def __init__(self, initial_value):
+ self.eggs = initial_value
+
+ spam = Spam(0)
+ iters = 20_000
+
+ def writer():
+ for _ in range(iters):
+ spam.eggs += 1
+
+ def reader():
+ for _ in range(iters):
+ eggs = spam.eggs
+ assert type(eggs) is int
+ assert 0 <= eggs <= iters
+
+ run_in_threads([writer, reader, reader, reader])