def test_A_pool_breathing(self):

        input_list = list(xrange(100))
        job_list = [_TestJob(i) for i in input_list]
        max_workers = multiprocessing.cpu_count()

        pool = phlmp_cyclingpool._Pool(job_list, max_workers)

        # [ A] _Pool has nonzero workers before finishing work
        self.assertTrue(pool.count_active_workers() > 0)

        for i in input_list:
            pool.add_job_index(i)
        pool.finish()

        result_list = []

        while not pool.is_finished():
            pool.join_finished_workers()
            for index, result in pool.yield_available_results():
                # [ A] _Pool returns correct results for the job indices
                self.assertEqual(index, result)
                result_list.append(result)

        # [ A] _Pool has zero workers after finishing work
        self.assertEqual(pool.count_active_workers(), 0)

        # [ A] _Pool finishes all jobs added to it
        self.assertSetEqual(
            set(result_list),
            set(input_list))
    def test_B_poollist_breathing(self):

        max_workers = multiprocessing.cpu_count()
        input_list = list(xrange(max_workers))
        job_list = [_TestJob(i) for i in input_list]

        pool_list = phlmp_cyclingpool._PoolList()

        pool = phlmp_cyclingpool._Pool(job_list, max_workers)
        for i in input_list:
            pool.add_job_index(i)
        pool.finish()

        pool_list.add_pool(pool)

        # [ B] _PoolList workers are all active before yielding results
        self.assertEqual(
            pool_list.count_active_workers(),
            max_workers)

        result_list = []
        while not pool_list.is_yield_finished():
            for index, result in pool_list.yield_available_results():
                # [ B] _PoolList returns correct results for the job indices
                self.assertEqual(index, result)
                result_list.append(result)

        # [ B] _PoolList has zero active workers after finishing work
        self.assertFalse(pool_list.count_active_workers())

        # [ B] _Pool finishes all jobs added to it
        self.assertSetEqual(
            set(result_list),
            set(input_list))