Mirror: 🎩 A tiny but capable push & pull stream library for TypeScript and Flow

Add naive benchmark suite

Changed files
+209
perf
+17
perf/package.json
···
+
{
+
"name": "@wonka/perf",
+
"private": true,
+
"version": "1.0.0",
+
"main": "suite.js",
+
"license": "MIT",
+
"scripts": {
+
"start": "benchr suite.js"
+
},
+
"devDependencies": {
+
"benchr": "^4.3.0"
+
},
+
"dependencies": {
+
"most": "^1.7.3",
+
"rxjs": "^6.3.3"
+
}
+
}
+34
perf/suite.js
···
+
const Wonka = require('..');
+
const Rx = require('rxjs');
+
const RxOperators = require('rxjs/operators');
+
const most = require('most');
+
+
const input = [1, 2, 3, 4, 5, 6, 7, 8, 9];
+
+
suite('Promisified map, filter, scan, last', () => {
+
benchmark('Wonka', () => {
+
return Wonka.pipe(
+
Wonka.fromArray(input),
+
Wonka.map(x => x * 2),
+
Wonka.filter(x => x > 4),
+
Wonka.scan((acc, x) => acc + x, 0),
+
Wonka.toPromise
+
);
+
});
+
+
benchmark('RxJS', () => {
+
return Rx.from(input).pipe(
+
RxOperators.map(x => x * 2),
+
RxOperators.filter(x => x > 4),
+
RxOperators.scan((acc, x) => acc + x, 0)
+
).toPromise();
+
});
+
+
benchmark('most', () => {
+
return most.from(input)
+
.map(x => x * 2)
+
.filter(x => x > 4)
+
.scan((acc, x) => acc + x, 0)
+
.thru(s => s.reduce((_, x) => x))
+
});
+
});
+158
perf/yarn.lock
···
+
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+
# yarn lockfile v1
+
+
+
"@most/multicast@^1.2.5":
+
version "1.3.0"
+
resolved "https://registry.yarnpkg.com/@most/multicast/-/multicast-1.3.0.tgz#e01574840df634478ac3fabd164c6e830fb3b966"
+
integrity sha512-DWH8AShgp5bXn+auGzf5tzPxvpmEvQJd0CNsApOci1LDF4eAEcnw4HQOr2Jaa+L92NbDYFKBSXxll+i7r1ikvw==
+
dependencies:
+
"@most/prelude" "^1.4.0"
+
+
"@most/prelude@^1.4.0":
+
version "1.7.2"
+
resolved "https://registry.yarnpkg.com/@most/prelude/-/prelude-1.7.2.tgz#be4ed406518d4c8c220e45c39fa7251365425b73"
+
integrity sha512-GM5ec7+xpkuXiCMyzhyENgH/xZ8t0nAMDBY0QOsVVD6TrZYjJKUnW1eaI18HHX8W+COWMwWR9c0zoPiBp9+tUg==
+
+
ansi-regex@^3.0.0:
+
version "3.0.0"
+
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+
integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
+
+
ansi-styles@^3.2.1:
+
version "3.2.1"
+
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+
integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+
dependencies:
+
color-convert "^1.9.0"
+
+
benchmark@^2.1.4:
+
version "2.1.4"
+
resolved "https://registry.yarnpkg.com/benchmark/-/benchmark-2.1.4.tgz#09f3de31c916425d498cc2ee565a0ebf3c2a5629"
+
integrity sha1-CfPeMckWQl1JjMLuVloOvzwqVik=
+
dependencies:
+
lodash "^4.17.4"
+
platform "^1.3.3"
+
+
benchr@^4.3.0:
+
version "4.3.0"
+
resolved "https://registry.yarnpkg.com/benchr/-/benchr-4.3.0.tgz#48d7e0f7150340fff3db0222203b84c6cb7719ad"
+
integrity sha512-ZOJkEOLOI4vyf34fnUSmh+xvg8P86cmVfyORBgIJHLfXMuvrfkMsUEThMaJND406KGCigtBO6sMjExGbp+WeLw==
+
dependencies:
+
benchmark "^2.1.4"
+
chalk "^2.3.0"
+
docopt "^0.6.2"
+
easy-table "^1.1.1"
+
require-all "^2.2.0"
+
+
chalk@^2.3.0:
+
version "2.4.2"
+
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+
dependencies:
+
ansi-styles "^3.2.1"
+
escape-string-regexp "^1.0.5"
+
supports-color "^5.3.0"
+
+
clone@^1.0.2:
+
version "1.0.4"
+
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
+
integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
+
+
color-convert@^1.9.0:
+
version "1.9.3"
+
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+
integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+
dependencies:
+
color-name "1.1.3"
+
+
color-name@1.1.3:
+
version "1.1.3"
+
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+
integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+
+
defaults@^1.0.3:
+
version "1.0.3"
+
resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
+
integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=
+
dependencies:
+
clone "^1.0.2"
+
+
docopt@^0.6.2:
+
version "0.6.2"
+
resolved "https://registry.yarnpkg.com/docopt/-/docopt-0.6.2.tgz#b28e9e2220da5ec49f7ea5bb24a47787405eeb11"
+
integrity sha1-so6eIiDaXsSffqW7JKR3h0Be6xE=
+
+
easy-table@^1.1.1:
+
version "1.1.1"
+
resolved "https://registry.yarnpkg.com/easy-table/-/easy-table-1.1.1.tgz#c1b9b9ad68a017091a1c235e4bcba277540e143f"
+
integrity sha512-C9Lvm0WFcn2RgxbMnTbXZenMIWcBtkzMr+dWqq/JsVoGFSVUVlPqeOa5LP5kM0I3zoOazFpckOEb2/0LDFfToQ==
+
dependencies:
+
ansi-regex "^3.0.0"
+
optionalDependencies:
+
wcwidth ">=1.0.1"
+
+
escape-string-regexp@^1.0.5:
+
version "1.0.5"
+
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+
+
has-flag@^3.0.0:
+
version "3.0.0"
+
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+
integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+
+
lodash@^4.17.4:
+
version "4.17.11"
+
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
+
integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
+
+
most@^1.7.3:
+
version "1.7.3"
+
resolved "https://registry.yarnpkg.com/most/-/most-1.7.3.tgz#406c31a66d73aa16957816fdf96965e27df84f1a"
+
integrity sha512-mk68SM/ptK8WSo3l03raXcWy02Hl7jbzxVozMuvyYxohn4yteh2THhl3+XABF5cunWE8eXHAsLbv+RCJI5y+jg==
+
dependencies:
+
"@most/multicast" "^1.2.5"
+
"@most/prelude" "^1.4.0"
+
symbol-observable "^1.0.2"
+
+
platform@^1.3.3:
+
version "1.3.5"
+
resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.5.tgz#fb6958c696e07e2918d2eeda0f0bc9448d733444"
+
integrity sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q==
+
+
require-all@^2.2.0:
+
version "2.2.0"
+
resolved "https://registry.yarnpkg.com/require-all/-/require-all-2.2.0.tgz#b4420c233ac0282d0ff49b277fb880a8b5de0894"
+
integrity sha1-tEIMIzrAKC0P9Jsnf7iAqLXeCJQ=
+
+
rxjs@^6.3.3:
+
version "6.3.3"
+
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.3.3.tgz#3c6a7fa420e844a81390fb1158a9ec614f4bad55"
+
integrity sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==
+
dependencies:
+
tslib "^1.9.0"
+
+
supports-color@^5.3.0:
+
version "5.5.0"
+
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+
integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+
dependencies:
+
has-flag "^3.0.0"
+
+
symbol-observable@^1.0.2:
+
version "1.2.0"
+
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
+
integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
+
+
tslib@^1.9.0:
+
version "1.9.3"
+
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
+
integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==
+
+
wcwidth@>=1.0.1:
+
version "1.0.1"
+
resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
+
integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=
+
dependencies:
+
defaults "^1.0.3"