| #!/usr/bin/env python |
| # Copyright 2014 the V8 project authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import unittest |
| |
| from pool import Pool |
| |
| def Run(x): |
| if x == 10: |
| raise Exception("Expected exception triggered by test.") |
| return x |
| |
| class PoolTest(unittest.TestCase): |
| def testNormal(self): |
| results = set() |
| pool = Pool(3) |
| for result in pool.imap_unordered(Run, [[x] for x in range(0, 10)]): |
| results.add(result.value) |
| self.assertEquals(set(range(0, 10)), results) |
| |
| def testException(self): |
| results = set() |
| pool = Pool(3) |
| with self.assertRaises(Exception): |
| for result in pool.imap_unordered(Run, [[x] for x in range(0, 12)]): |
| # Item 10 will not appear in results due to an internal exception. |
| results.add(result.value) |
| expect = set(range(0, 12)) |
| expect.remove(10) |
| self.assertEquals(expect, results) |
| |
| def testAdd(self): |
| results = set() |
| pool = Pool(3) |
| for result in pool.imap_unordered(Run, [[x] for x in range(0, 10)]): |
| results.add(result.value) |
| if result.value < 30: |
| pool.add([result.value + 20]) |
| self.assertEquals(set(range(0, 10) + range(20, 30) + range(40, 50)), |
| results) |