From 4a39a38967905c674bfec1c1637f11f2561c2481 Mon Sep 17 00:00:00 2001
From: David Sehnal <david.sehnal@gmail.com>
Date: Tue, 17 Oct 2017 14:13:33 +0200
Subject: [PATCH] iterator benchmarks

---
 package-lock.json           | Bin 141339 -> 165468 bytes
 package.json                |  10 +-
 src/perf-tests/iterators.ts | 227 ++++++++++++++++++++++++++++++++++++
 tsconfig.json               |   3 +-
 4 files changed, 235 insertions(+), 5 deletions(-)
 create mode 100644 src/perf-tests/iterators.ts

diff --git a/package-lock.json b/package-lock.json
index 65edb5b9cf7b351137a82ca276ff669f2ff6c1ec..fbf52d4b90d0f4e49c73635a1e0e111e5f3bff45 100644
GIT binary patch
delta 13461
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

delta 3751
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
G<pKb;V(MQ2

diff --git a/package.json b/package.json
index ae74e31e7..a024c3177 100644
--- a/package.json
+++ b/package.json
@@ -13,7 +13,7 @@
     "test": "./node_modules/.bin/jest",
     "dist": "./node_modules/.bin/uglifyjs build/js/molio.dev.js -cm > dist/molio.js && cp build/js/molio.esm.js dist/molio.esm.js",
     "script": "./node_modules/.bin/rollup build/js/src/script.js -e fs -f cjs -o build/js/script.js",
-    "runscript": "npm run script && node build/js/script.js",
+    "runscript": "node build/js/src/script.js",
     "download-dics": "./node_modules/.bin/download -o build/dics http://mmcif.wwpdb.org/dictionaries/ascii/mmcif_pdbx_v50.dic && ./node_modules/.bin/download -o build/dics http://mmcif.wwpdb.org/dictionaries/ascii/mmcif_ddl.dic"
   },
   "jest": {
@@ -29,8 +29,10 @@
   "author": "",
   "license": "MIT",
   "devDependencies": {
-    "@types/jest": "^21.1.2",
-    "@types/node": "^8.0.34",
+    "@types/benchmark": "^1.0.30",
+    "@types/jest": "^21.1.3",
+    "@types/node": "^8.0.41",
+    "benchmark": "^2.1.4",
     "download-cli": "^1.0.5",
     "jest": "^21.2.1",
     "rollup": "^0.50.0",
@@ -42,7 +44,7 @@
     "ts-jest": "^21.1.2",
     "tslint": "^5.7.0",
     "typescript": "^2.5.3",
-    "uglify-js": "^3.1.3",
+    "uglify-js": "^3.1.4",
     "util.promisify": "^1.0.0"
   },
   "dependencies": {}
diff --git a/src/perf-tests/iterators.ts b/src/perf-tests/iterators.ts
new file mode 100644
index 000000000..78cfac0a3
--- /dev/null
+++ b/src/perf-tests/iterators.ts
@@ -0,0 +1,227 @@
+import * as B from 'benchmark'
+
+function createData(n: number) {
+    const data = [];//new Int32Array(n);
+    let last = (15 * Math.random()) | 0;
+    for (let i = 0; i < n; i++) {
+        data[i] = last;
+        last += (15 * Math.random()) | 0;
+    }
+    return data;
+}
+
+namespace Iterators {
+    const data = createData(100000);
+
+    export function forLoop() {
+        let sum = 0;
+        for (let i = 0, _i = data.length; i < _i; i++) {
+            sum += data[i];
+        }
+        return sum;
+    }
+
+    export function forOf() {
+        let sum = 0;
+        for (const e of data) {
+            sum += e;
+        }
+        return sum;
+    }
+
+    export function forEach() {
+        const ctx = { sum: 0 };
+        data.forEach(function(this: typeof ctx, v: number) { this.sum += v }, ctx);
+        return ctx.sum;
+    }
+
+    export function forEachAllParams() {
+        const ctx = { sum: 0 };
+        data.forEach(function(this: typeof ctx, v: number, _: any, __: any) { this.sum += v }, ctx);
+        return ctx.sum;
+    }
+
+    export function forEachClosure() {
+        let sum = 0;
+        data.forEach(v => sum += v);
+        return sum;
+    }
+
+    export function forEachClosureAll() {
+        let sum = 0;
+        data.forEach((v, _, __) => sum += v);
+        return sum;
+    }
+
+
+    export function forEachClosureAllFunction() {
+        let sum = 0;
+        data.forEach(function (v, _, __) { sum += v });
+        return sum;
+    }
+
+    interface ES6Iterator {
+        [Symbol.iterator](): ES6Iterator,
+        done: boolean;
+        value: number;
+        next(): { done: boolean, value: number }
+        reset(data: any[]): ES6Iterator;
+    }
+
+    class _MutableES6Iterator implements ES6Iterator {
+        done = true;
+        value = 0;
+
+        private xs: any[] = void 0 as any;
+        private index: number = -1;
+        private length: number = 0;
+
+        [Symbol.iterator]() { return this };
+
+        next() {
+            const index = ++this.index;
+            if (index < this.length) this.value = this.xs[index];
+            else this.done = true;
+            return this;
+        }
+
+        reset(xs: any[]) {
+            this.value = xs[0];
+            this.length = xs.length;
+            this.done = false;
+            this.xs = xs;
+            this.index = -1;
+            return this;
+        }
+    }
+
+    class _ImmutableES6Iterator implements ES6Iterator {
+        done = true;
+        value = 0;
+
+        private xs: any[] = void 0 as any;
+        private index: number = -1;
+        private length: number = 0;
+
+        [Symbol.iterator]() { return this };
+
+        next() {
+            const index = ++this.index;
+            if (index < this.length) this.value = this.xs[index];
+            else this.done = true;
+            return { done: this.done, value: this.value };
+        }
+
+        reset(xs: any[]) {
+            this.value = xs[0];
+            this.length = xs.length;
+            this.done = false;
+            this.xs = xs;
+            this.index = -1;
+            return this;
+        }
+    }
+
+    export function mutableES6Iterator() {
+        const it = new _MutableES6Iterator();
+        let sum = 0;
+        for (let e = it.reset(data).next().value; !it.done; e = it.next().value) {
+            sum += e;
+        }
+        return sum;
+    }
+
+    // export function mutableES6IteratorOf() {
+    //     const it = new _ImmutableES6Iterator();
+    //     let sum = 0;
+    //     for (const e of it.reset(data)) {
+    //         sum += e;
+    //     }
+    //     return sum;
+    // }
+
+    export function immutableES6Iterator() {
+        const it = new _ImmutableES6Iterator();
+        let sum = 0;
+        it.reset(data);
+        while (true) {
+            const { value, done } = it.next();
+            if (done) break;
+            sum += value;
+        }
+        return sum;
+    }
+
+    // export function immutableES6IteratorOf() {
+    //     const it = new _MutableES6Iterator();
+    //     let sum = 0;
+    //     for (const e of it.reset(data)) {
+    //         sum += e;
+    //     }
+    //     return sum;
+    // }
+
+    interface MutableIterator {
+        done: boolean;
+        next(): number;
+        start(data: any[]): number;
+    }
+
+    class _MutableIterator implements MutableIterator {
+        done = true;
+
+        private xs: any[] = void 0 as any;
+        private index: number = -1;
+        private length: number = 0;
+
+        next() {
+            const index = ++this.index;
+            if (index < this.length) return this.xs[index];
+            else {
+                this.done = true;
+                return 0;
+            }
+        }
+
+        start(xs: any[]) {
+            this.length = xs.length;
+            this.done = !this.length;
+            this.xs = xs;
+            this.index = 0;
+            return this.done ? 0 : this.xs[0];
+        }
+    }
+
+    export function mutableIterator() {
+        const it = new _MutableIterator();
+        let sum = 0;
+        for (let e = it.start(data); !it.done; e = it.next()) {
+            sum += e;
+        }
+        return sum;
+    }
+}
+
+
+const suite = new B.Suite();
+
+suite
+    .add('for', () => Iterators.forLoop())
+    .add('forOf', () => Iterators.forOf())
+    .add('forEach', () => Iterators.forEach())
+    .add('forEach all params', () => Iterators.forEachAllParams())
+    .add('forEachClosure', () => Iterators.forEachClosure())
+    .add('forEachClosure all', () => Iterators.forEachClosureAll())
+    .add('forEachClosure all function', () => Iterators.forEachClosureAllFunction())
+    .add('mutableIterator ES6', () => Iterators.mutableES6Iterator())
+    //.add('mutableIteratorOf ES6', () => Iterators.mutableES6IteratorOf())
+    .add('immutableIterator ES6', () => Iterators.immutableES6Iterator())
+    //.add('immutableIteratorOf ES6', () => Iterators.immutableES6IteratorOf())
+    .add('mutableIterator', () => Iterators.mutableIterator())
+    .on('cycle', (e: any) => {
+        console.log(String(e.target));
+    })
+    // .on('complete', function (this: any) {
+    //     console.log('Fastest is ' + this.filter('fastest').map('name'));
+    // })
+    .run();
\ No newline at end of file
diff --git a/tsconfig.json b/tsconfig.json
index 21016d562..be84a2ed2 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,12 +1,13 @@
 {
     "compilerOptions": {
-        "target": "es6",
+        "target": "es5",
         "alwaysStrict": true,
         "noImplicitAny": true,
         "noImplicitThis": true,
         "sourceMap": false,
         "noUnusedLocals": true,
         "strictNullChecks": true,
+        //"downlevelIteration": true,
         "lib": [ "es6", "dom" ],
         "outDir": "build/js/src"
     },
-- 
GitLab