Update tests / test harness.
[python_utils.git] / tests / parallelize_itest.py
diff --git a/tests/parallelize_itest.py b/tests/parallelize_itest.py
new file mode 100755 (executable)
index 0000000..9d98710
--- /dev/null
@@ -0,0 +1,85 @@
+#!/usr/bin/env python3
+
+import random
+import sys
+
+import bootstrap
+import parallelize as p
+import decorator_utils
+import executors
+import math_utils
+import smart_future
+
+
[email protected](method=p.Method.THREAD)
+def compute_factorial_thread(n):
+    total = 1
+    for x in range(2, n):
+        total *= x
+    return total
+
+
[email protected](method=p.Method.PROCESS)
+def compute_factorial_process(n):
+    total = 1
+    for x in range(2, n):
+        total *= x
+    return total
+
+
[email protected](method=p.Method.REMOTE)
+def list_primes(n):
+    """Calculates sum of all primes below given integer n"""
+    ret = []
+    for x in range(2, n):
+        ret.append(math_utils.is_prime(x))
+    return ret
+
+
+@decorator_utils.timed
+def test_thread_parallelization() -> None:
+    results = []
+    for _ in range(50):
+        results.append(compute_factorial_thread(_))
+    smart_future.wait_all(results)
+    for future in results:
+        print(f'Thread: {future}')
+    texecutor = executors.DefaultExecutors().thread_pool()
+    texecutor.shutdown()
+
+
+@decorator_utils.timed
+def test_process_parallelization() -> None:
+    results = []
+    for _ in range(50):
+        results.append(compute_factorial_process(_))
+    for future in smart_future.wait_any(results):
+        print(f'Process: {future}')
+    pexecutor = executors.DefaultExecutors().process_pool()
+    pexecutor.shutdown()
+
+
+@decorator_utils.timed
+def test_remote_parallelization() -> None:
+    results = {}
+    for _ in range(50):
+        n = random.randint(0, 100000)
+        results[n] = list_primes(n)
+    tot = 0
+    for _ in results[n]:
+        tot += _
+    print(tot)
+    rexecutor = executors.DefaultExecutors().remote_pool()
+    rexecutor.shutdown()
+
+
+def main() -> None:
+    test_thread_parallelization()
+    test_process_parallelization()
+    test_remote_parallelization()
+    sys.exit(0)
+
+
+if __name__ == '__main__':
+    main()