Skip to content

Commit

Permalink
Add lazyFoldr benchmark
Browse files Browse the repository at this point in the history
  • Loading branch information
paldepind committed Dec 2, 2016
1 parent 19a8d26 commit d17fd57
Showing 1 changed file with 62 additions and 0 deletions.
62 changes: 62 additions & 0 deletions benchmark/lazy-foldr.suite.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
const Suite = require("./default-suite").Suite;

function thunkFn(init, idx, f, list) {
return () => {
if (idx === list.length) {
return init;
} else {
return f(list[idx], thunkFn(init, idx + 1, f, list));
}
};
}

function lazyFoldrLambda(f, init, list) {
if (list.length === 0) {
return init;
} else {
return f(list[0], thunkFn(init, 1, f, list));
}
}

class Thunk {
constructor(init, idx, f, list) {
this.init = init;
this.idx = idx;
this.f = f;
this.list = list;
}
force() {
if (this.idx === this.list.length) {
return this.init;
} else {
return this.f(
this.list[this.idx],
new Thunk(this.init, this.idx + 1, this.f, this.list)
);
}
}
}

function lazyFoldrObj(f, init, list) {
if (list.length === 0) {
return init;
} else {
return f(list[0], new Thunk(init, 1, f, list));
}
}

var array = [];
for (var i = 0; i < 1000; i++) {
array[i] = i;
}

lazyFoldrLambda((n, m) => n + m(), 0, array);

module.exports = Suite("Lazy foldr")
.add("function", () => {
return lazyFoldrLambda((n, m) => n + m(), 0, array);
})
.add("object", () => {
return lazyFoldrObj((n, m) => n + m.force(), 0, array);
})
.run({async: true});

0 comments on commit d17fd57

Please sign in to comment.