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")