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