def testWorkerThreadExecutesJob(self):
        work_data = [1.111111] * 5
        test_job = Job(0, 0, work_data)
        job_queue = Queue()
        job_queue.put(test_job)
        launcher = MockLauncher()
        worker_thread = WorkerThread(job_queue, launcher)

        worker_thread.run()

        while worker_thread.is_alive():
            pass

        assert math.fabs(test_job.work_data[0] - 1.111111 * 1001) < 1
        assert math.fabs(test_job.work_data[-1] - 1.111111 * 1001) < 1
    def testHardwareMonitorCpuUsageDecreasesWithThrottling(self):
        work_data_1 = [1.111111] * 10000
        work_data_2 = [1.111111] * 10000
        test_jobs = [Job(0, 0, work_data_1), Job(0, 0, work_data_2)]
        job_queue = Queue()
        job_queue.put(test_jobs[0])
        job_queue.put(test_jobs[1])
        launcher = MockLauncher()
        worker_thread = WorkerThread(job_queue, launcher)
        monitor = HardwareMonitor(worker_thread)

        monitor.start()
        try:
            worker_thread.run()
        except:
            pass
        while worker_thread.is_alive():
            pass
        full_cpu_usage = monitor.get_cpu_usage()
        monitor.stop()

        work_data_1 = [1.111111] * 10000
        work_data_2 = [1.111111] * 10000
        test_jobs = [Job(0, 0, work_data_1), Job(0, 0, work_data_2)]
        job_queue = Queue()
        job_queue.put(test_jobs[0])
        job_queue.put(test_jobs[1])
        launcher = MockLauncher()
        worker_thread = WorkerThread(job_queue, launcher)
        worker_thread.throttling = 20

        monitor.start()
        try:
            worker_thread.run()
        except:
            pass
        while worker_thread.is_alive():
            pass

        throttled_cpu_usage = monitor.get_cpu_usage()
        monitor.stop()

        assert throttled_cpu_usage < full_cpu_usage
    def testWorkerThreadThrottleIncreasesExecutionTime(self):
        work_data_1 = [1.111111] * 100
        work_data_2 = [1.111111] * 100
        test_jobs = [Job(0, 0, work_data_1), Job(0, 0, work_data_2)]
        job_queue = Queue()
        job_queue.put(test_jobs[0])
        job_queue.put(test_jobs[1])
        launcher = MockLauncher()
        worker_thread = WorkerThread(job_queue, launcher)

        start_time = time.time()
        try:
            worker_thread.run()
        except:
            pass

        while worker_thread.is_alive():
            pass

        unthrottled_execution_time = time.time() - start_time

        work_data_1 = [1.111111] * 100
        work_data_2 = [1.111111] * 100
        test_jobs = [Job(0, 0, work_data_1), Job(0, 0, work_data_2)]
        job_queue = Queue()
        job_queue.put(test_jobs[0])
        job_queue.put(test_jobs[1])
        launcher = MockLauncher()
        worker_thread = WorkerThread(job_queue, launcher)
        worker_thread.throttling = 50

        start_time = time.time()
        try:
            worker_thread.run()
        except:
            pass

        while worker_thread.is_alive():
            pass

        throttled_execution_time = time.time() - start_time

        assert unthrottled_execution_time < throttled_execution_time
    def testWorkerThreadExecutesSequentialJobs(self):
        work_data_1 = [1.111111] * 5
        work_data_2 = [0] * 5
        test_jobs = [Job(0, 0, work_data_1), Job(0, 0, work_data_2)]
        job_queue = Queue()
        job_queue.put(test_jobs[0])
        job_queue.put(test_jobs[1])
        launcher = MockLauncher()
        worker_thread = WorkerThread(job_queue, launcher)

        try:
            worker_thread.run()
        except:
            pass

        while worker_thread.is_alive():
            pass

        self.assertEqual(int(test_jobs[0].work_data[0]), 1112)
        self.assertEqual(int(test_jobs[1].work_data[0]), 1111)
    def testHardwareMonitorCpuUsageIncreasesWithWorkload(self):
        work_data = [1.111111] * 10000
        test_job = Job(0, 0, work_data)
        job_queue = Queue()
        job_queue.put(test_job)
        launcher = MockLauncher()
        worker_thread = WorkerThread(job_queue, launcher)
        monitor = HardwareMonitor(worker_thread)

        monitor.start()
        time.sleep(0.5)
        clean_cpu_usage = monitor.get_cpu_usage()

        worker_thread.run()

        while worker_thread.is_alive():
            pass
        dirty_cpu_usage = monitor.get_cpu_usage()
        monitor.stop()

        assert dirty_cpu_usage > clean_cpu_usage