42 lines
1.1 KiB
Python
42 lines
1.1 KiB
Python
|
import unittest
|
||
|
|
||
|
from threading import Thread, Barrier
|
||
|
from unittest import TestCase
|
||
|
|
||
|
from test.support import threading_helper
|
||
|
|
||
|
|
||
|
@threading_helper.requires_working_threading()
|
||
|
class TestSet(TestCase):
|
||
|
def test_repr_clear(self):
|
||
|
"""Test repr() of a set while another thread is calling clear()"""
|
||
|
NUM_ITERS = 10
|
||
|
NUM_REPR_THREADS = 10
|
||
|
barrier = Barrier(NUM_REPR_THREADS + 1)
|
||
|
s = {1, 2, 3, 4, 5, 6, 7, 8}
|
||
|
|
||
|
def clear_set():
|
||
|
barrier.wait()
|
||
|
s.clear()
|
||
|
|
||
|
def repr_set():
|
||
|
barrier.wait()
|
||
|
set_reprs.append(repr(s))
|
||
|
|
||
|
for _ in range(NUM_ITERS):
|
||
|
set_reprs = []
|
||
|
threads = [Thread(target=clear_set)]
|
||
|
for _ in range(NUM_REPR_THREADS):
|
||
|
threads.append(Thread(target=repr_set))
|
||
|
for t in threads:
|
||
|
t.start()
|
||
|
for t in threads:
|
||
|
t.join()
|
||
|
|
||
|
for set_repr in set_reprs:
|
||
|
self.assertIn(set_repr, ("set()", "{1, 2, 3, 4, 5, 6, 7, 8}"))
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
unittest.main()
|