aboutsummaryrefslogtreecommitdiff
path: root/tests/programs/bench_share.zc
diff options
context:
space:
mode:
Diffstat (limited to 'tests/programs/bench_share.zc')
-rw-r--r--tests/programs/bench_share.zc30
1 files changed, 30 insertions, 0 deletions
diff --git a/tests/programs/bench_share.zc b/tests/programs/bench_share.zc
new file mode 100644
index 0000000..6fa478f
--- /dev/null
+++ b/tests/programs/bench_share.zc
@@ -0,0 +1,30 @@
+// walk one shared spine from two parents. the checksum is one repetition.
+fn build() {
+ let i = 0, spine = 0;
+ while (i < 40) { spine = cons(i, spine); i++; }
+ return cons(cons(spine, 1), cons(spine, 2));
+}
+fn sum(t) {
+ let a = 0;
+ while (t) { a = a + car(t); t = cdr(t); }
+ return a;
+}
+fn work() {
+ let ch = get_c(), reps = 0, acc = 0, root, spine, k;
+ while (ch >= '0' && ch <= '9') { reps = reps * 10 + ch - '0'; ch = get_c(); }
+ root = build();
+ spine = car(car(root));
+ while (reps > 0) {
+ k = 0;
+ acc = 0;
+ while (k < 200) { acc = acc + sum(spine); k++; }
+ acc = acc + cdr(car(root)) + cdr(cdr(root));
+ reps--;
+ }
+ return acc;
+}
+fn main() {
+ put_n(work());
+ put_c(10);
+ return 0;
+}