blob: 18950768dedc2f581d680d29b79c22ebc33a2e67 [file] [log] [blame]
from testing.embedding.test_basic import EmbeddingTests
class TestThread(EmbeddingTests):
def test_first_calls_in_parallel(self):
add1_cffi = self.prepare_module('add1')
self.compile('thread1-test', [add1_cffi], threads=True)
for i in range(20):
output = self.execute('thread1-test')
assert output == ("starting\n"
"preparing...\n" +
"adding 40 and 2\n" * 10 +
"done\n")
def _take_out(self, text, content):
assert content in text
i = text.index(content)
return text[:i] + text[i+len(content):]
def test_init_different_modules_in_different_threads(self):
add1_cffi = self.prepare_module('add1')
add2_cffi = self.prepare_module('add2')
self.compile('thread2-test', [add1_cffi, add2_cffi], threads=True)
output = self.execute('thread2-test')
output = self._take_out(output, "preparing")
output = self._take_out(output, ".")
output = self._take_out(output, ".")
# at least the 3rd dot should be after everything from ADD2
assert output == ("starting\n"
"prepADD2\n"
"adding 1000 and 200 and 30\n"
".\n"
"adding 40 and 2\n"
"done\n")
def test_alt_issue(self):
add1_cffi = self.prepare_module('add1')
add2_cffi = self.prepare_module('add2')
self.compile('thread2-test', [add1_cffi, add2_cffi],
threads=True, defines={'T2TEST_AGAIN_ADD1': '1'})
output = self.execute('thread2-test')
output = self._take_out(output, "adding 40 and 2\n")
assert output == ("starting\n"
"preparing...\n"
"adding -1 and -1\n"
"prepADD2\n"
"adding 1000 and 200 and 30\n"
"done\n")
def test_load_in_parallel_more(self):
add2_cffi = self.prepare_module('add2')
add3_cffi = self.prepare_module('add3')
self.compile('thread3-test', [add2_cffi, add3_cffi], threads=True)
for i in range(150):
output = self.execute('thread3-test')
for j in range(10):
output = self._take_out(output, "adding 40 and 2 and 100\n")
output = self._take_out(output, "adding 1000, 200, 30, 4\n")
assert output == ("starting\n"
"prepADD2\n"
"done\n")