aboutsummaryrefslogtreecommitdiff
path: root/tests/bench
diff options
context:
space:
mode:
authorPaul Sokolovsky2014-05-05 01:24:16 +0300
committerPaul Sokolovsky2014-05-05 01:24:16 +0300
commitaaff82afe5a72ec69e05f1e56047d0acfde91d0e (patch)
tree7bd8dc3cf156b790b66c05b2222bd362bdbce3d8 /tests/bench
parent22a0d67c0fc7daf18280d3b7e938be8442102110 (diff)
tests: Add framework for comparative benchmarking.
Motivation is optimizing handling of various constructs as well as understanding which constructs are more efficient in MicroPython. More info: http://forum.micropython.org/viewtopic.php?f=3&t=77 Results are wildly unexpected. For example, "optimization" of range iteration into while loop makes it twice as slow. Generally, the more bytecodes, the slower the code.
Diffstat (limited to 'tests/bench')
-rw-r--r--tests/bench/bench.py10
-rw-r--r--tests/bench/loop_count-1-range.py7
-rw-r--r--tests/bench/loop_count-2-range_iter.py7
-rw-r--r--tests/bench/loop_count-3-while_up.py8
-rw-r--r--tests/bench/loop_count-4-while_down_gt.py7
-rw-r--r--tests/bench/loop_count-5-while_down_ne.py7
-rw-r--r--tests/bench/var-1-constant.py8
-rw-r--r--tests/bench/var-2-global.py10
-rw-r--r--tests/bench/var-3-local.py10
-rw-r--r--tests/bench/var-4-arg.py9
10 files changed, 83 insertions, 0 deletions
diff --git a/tests/bench/bench.py b/tests/bench/bench.py
new file mode 100644
index 000000000..0cd40a93f
--- /dev/null
+++ b/tests/bench/bench.py
@@ -0,0 +1,10 @@
+import time
+
+
+ITERS = 20000000
+
+def run(f):
+ t = time.time()
+ f(ITERS)
+ t = time.time() - t
+ print(t)
diff --git a/tests/bench/loop_count-1-range.py b/tests/bench/loop_count-1-range.py
new file mode 100644
index 000000000..e22adf6cb
--- /dev/null
+++ b/tests/bench/loop_count-1-range.py
@@ -0,0 +1,7 @@
+import bench
+
+def test(num):
+ for i in range(num):
+ pass
+
+bench.run(test)
diff --git a/tests/bench/loop_count-2-range_iter.py b/tests/bench/loop_count-2-range_iter.py
new file mode 100644
index 000000000..fe4a3857e
--- /dev/null
+++ b/tests/bench/loop_count-2-range_iter.py
@@ -0,0 +1,7 @@
+import bench
+
+def test(num):
+ for i in iter(range(num)):
+ pass
+
+bench.run(test)
diff --git a/tests/bench/loop_count-3-while_up.py b/tests/bench/loop_count-3-while_up.py
new file mode 100644
index 000000000..1ab8054a0
--- /dev/null
+++ b/tests/bench/loop_count-3-while_up.py
@@ -0,0 +1,8 @@
+import bench
+
+def test(num):
+ i = 0
+ while i < num:
+ i += 1
+
+bench.run(test)
diff --git a/tests/bench/loop_count-4-while_down_gt.py b/tests/bench/loop_count-4-while_down_gt.py
new file mode 100644
index 000000000..de8dee2ca
--- /dev/null
+++ b/tests/bench/loop_count-4-while_down_gt.py
@@ -0,0 +1,7 @@
+import bench
+
+def test(num):
+ while num > 0:
+ num -= 1
+
+bench.run(test)
diff --git a/tests/bench/loop_count-5-while_down_ne.py b/tests/bench/loop_count-5-while_down_ne.py
new file mode 100644
index 000000000..b9a1af414
--- /dev/null
+++ b/tests/bench/loop_count-5-while_down_ne.py
@@ -0,0 +1,7 @@
+import bench
+
+def test(num):
+ while num != 0:
+ num -= 1
+
+bench.run(test)
diff --git a/tests/bench/var-1-constant.py b/tests/bench/var-1-constant.py
new file mode 100644
index 000000000..eec977909
--- /dev/null
+++ b/tests/bench/var-1-constant.py
@@ -0,0 +1,8 @@
+import bench
+
+def test(num):
+ i = 0
+ while i < 20000000:
+ i += 1
+
+bench.run(test)
diff --git a/tests/bench/var-2-global.py b/tests/bench/var-2-global.py
new file mode 100644
index 000000000..5758ad61a
--- /dev/null
+++ b/tests/bench/var-2-global.py
@@ -0,0 +1,10 @@
+import bench
+
+ITERS = 20000000
+
+def test(num):
+ i = 0
+ while i < ITERS:
+ i += 1
+
+bench.run(test)
diff --git a/tests/bench/var-3-local.py b/tests/bench/var-3-local.py
new file mode 100644
index 000000000..124b48429
--- /dev/null
+++ b/tests/bench/var-3-local.py
@@ -0,0 +1,10 @@
+import bench
+
+
+def test(num):
+ ITERS = 20000000
+ i = 0
+ while i < ITERS:
+ i += 1
+
+bench.run(test)
diff --git a/tests/bench/var-4-arg.py b/tests/bench/var-4-arg.py
new file mode 100644
index 000000000..cf050c58f
--- /dev/null
+++ b/tests/bench/var-4-arg.py
@@ -0,0 +1,9 @@
+import bench
+
+
+def test(num):
+ i = 0
+ while i < num:
+ i += 1
+
+bench.run(lambda n:test(20000000))