@thi.ng/bench 2.1.6 → 3.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,7 +3,7 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
- ## [2.1.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/bench@2.1.5...@thi.ng/bench@2.1.6) (2021-09-03)
6
+ ## [3.0.3](https://github.com/thi-ng/umbrella/compare/@thi.ng/bench@3.0.2...@thi.ng/bench@3.0.3) (2021-10-15)
7
7
 
8
8
  **Note:** Version bump only for package @thi.ng/bench
9
9
 
@@ -11,76 +11,109 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
11
11
 
12
12
 
13
13
 
14
- # [2.1.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/bench@2.0.31...@thi.ng/bench@2.1.0) (2021-03-12)
14
+ ## [3.0.2](https://github.com/thi-ng/umbrella/compare/@thi.ng/bench@3.0.1...@thi.ng/bench@3.0.2) (2021-10-15)
15
+
16
+ **Note:** Version bump only for package @thi.ng/bench
17
+
18
+
19
+
20
+
21
+
22
+ ## [3.0.1](https://github.com/thi-ng/umbrella/compare/@thi.ng/bench@3.0.0...@thi.ng/bench@3.0.1) (2021-10-13)
23
+
24
+ **Note:** Version bump only for package @thi.ng/bench
25
+
26
+
27
+
28
+
29
+
30
+ # [3.0.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/bench@2.1.6...@thi.ng/bench@3.0.0) (2021-10-12)
31
+
32
+
33
+ ### Build System
34
+
35
+ * major update of ALL pkgs (export maps, ESM only) ([0d1d6ea](https://github.com/thi-ng/umbrella/commit/0d1d6ea9fab2a645d6c5f2bf2591459b939c09b6))
15
36
 
16
37
 
17
38
  ### Features
18
39
 
19
- * **bench:** add suite & formatters, update benchmark() ([5ea02bd](https://github.com/thi-ng/umbrella/commit/5ea02bd0cfe71ff388d24906b7ce2a7ce4e72ce8))
40
+ * **bench:** add timeDiff, Timestamp type ([c612de0](https://github.com/thi-ng/umbrella/commit/c612de0574d59d9e0951443ae98b8bd14c3a0a09))
20
41
 
21
42
 
43
+ ### BREAKING CHANGES
22
44
 
45
+ * discontinue CommonJS & UMD versions
23
46
 
47
+ - only ESM modules will be published from now on
48
+ - CJS obsolete due to ESM support in recent versions of node:
49
+ - i.e. launch NodeJS via:
50
+ - `node --experimental-specifier-resolution=node --experimental-repl-await`
51
+ - in the node REPL use `await import(...)` instead of `require()`
52
+ - UMD obsolete due to widespread browser support for ESM
24
53
 
25
- ## [2.0.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/bench@2.0.5...@thi.ng/bench@2.0.6) (2020-04-03)
54
+ Also:
55
+ - normalize/restructure/reorg all package.json files
56
+ - cleanup all build scripts, remove obsolete
57
+ - switch from mocha to @thi.ng/testament for all tests
26
58
 
27
59
 
28
- ### Bug Fixes
29
60
 
30
- * **bench:** fallback handlingin now() ([6494851](https://github.com/thi-ng/umbrella/commit/64948518a6412cabf53664ac9f89bac2b7ef6892))
31
- * **bench:** update timedResult() to always downscale to ms ([fb2c632](https://github.com/thi-ng/umbrella/commit/fb2c6327358ccaf93314d2cdbfd3f8ff04becbd1))
32
61
 
33
62
 
34
63
 
64
+ # [2.1.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/bench@2.0.31...@thi.ng/bench@2.1.0) (2021-03-12)
35
65
 
66
+ ### Features
36
67
 
37
- # [2.0.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/bench@1.0.11...@thi.ng/bench@2.0.0) (2020-01-24)
68
+ - **bench:** add suite & formatters, update benchmark() ([5ea02bd](https://github.com/thi-ng/umbrella/commit/5ea02bd0cfe71ff388d24906b7ce2a7ce4e72ce8))
38
69
 
39
- ### Bug Fixes
70
+ ## [2.0.6](https://github.com/thi-ng/umbrella/compare/@thi.ng/bench@2.0.5...@thi.ng/bench@2.0.6) (2020-04-03)
40
71
 
41
- * **bench:** update now() to only OPTIONALLY use bigint timestamps ([7ac391b](https://github.com/thi-ng/umbrella/commit/7ac391b58b7e8b3b6fdc458d1edda6ca441d379b))
72
+ ### Bug Fixes
42
73
 
43
- ### Features
74
+ - **bench:** fallback handlingin now() ([6494851](https://github.com/thi-ng/umbrella/commit/64948518a6412cabf53664ac9f89bac2b7ef6892))
75
+ - **bench:** update timedResult() to always downscale to ms ([fb2c632](https://github.com/thi-ng/umbrella/commit/fb2c6327358ccaf93314d2cdbfd3f8ff04becbd1))
44
76
 
45
- * **bench:** add types, benchmark(), bigint timestamps, restructure ([e0af94c](https://github.com/thi-ng/umbrella/commit/e0af94cfbedea46a4131ec8243f2553e49a5e644))
77
+ # [2.0.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/bench@1.0.11...@thi.ng/bench@2.0.0) (2020-01-24)
46
78
 
47
- ### BREAKING CHANGES
79
+ ### Bug Fixes
48
80
 
49
- * **bench:** Though no public API change, this library internally
50
- uses ES BigInt timestamps now (in Node via `process.hrtime.bigint()`).
81
+ - **bench:** update now() to only OPTIONALLY use bigint timestamps ([7ac391b](https://github.com/thi-ng/umbrella/commit/7ac391b58b7e8b3b6fdc458d1edda6ca441d379b))
51
82
 
52
- # [1.0.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/bench@0.3.1...@thi.ng/bench@1.0.0) (2019-01-21)
83
+ ### Features
53
84
 
54
- ### Build System
85
+ - **bench:** add types, benchmark(), bigint timestamps, restructure ([e0af94c](https://github.com/thi-ng/umbrella/commit/e0af94cfbedea46a4131ec8243f2553e49a5e644))
55
86
 
56
- * update package build scripts & outputs, imports in ~50 packages ([b54b703](https://github.com/thi-ng/umbrella/commit/b54b703))
87
+ ### BREAKING CHANGES
57
88
 
58
- ### BREAKING CHANGES
89
+ - **bench:** Though no public API change, this library internally uses ES BigInt timestamps now (in Node via `process.hrtime.bigint()`).
59
90
 
60
- * enabled multi-outputs (ES6 modules, CJS, UMD)
91
+ # [1.0.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/bench@0.3.1...@thi.ng/bench@1.0.0) (2019-01-21)
61
92
 
62
- - build scripts now first build ES6 modules in package root, then call
63
- `scripts/bundle-module` to build minified CJS & UMD bundles in `/lib`
64
- - all imports MUST be updated to only refer to package level
65
- (not individual files anymore). tree shaking in user land will get rid of
66
- all unused imported symbols.
93
+ ### Build System
67
94
 
68
- # [0.3.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/bench@0.2.4...@thi.ng/bench@0.3.0) (2018-10-21)
95
+ - update package build scripts & outputs, imports in ~50 packages ([b54b703](https://github.com/thi-ng/umbrella/commit/b54b703))
69
96
 
70
- ### Features
97
+ ### BREAKING CHANGES
71
98
 
72
- * **bench:** add timedResult() / benchResult() ([0cf708f](https://github.com/thi-ng/umbrella/commit/0cf708f))
99
+ - enabled multi-outputs (ES6 modules, CJS, UMD)
100
+ - build scripts now first build ES6 modules in package root, then call `scripts/bundle-module` to build minified CJS & UMD bundles in `/lib`
101
+ - all imports MUST be updated to only refer to package level (not individual files anymore). tree shaking in user land will get rid of all unused imported symbols.
73
102
 
74
- <a name="0.2.0"></a>
75
- # [0.2.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/bench@0.1.5...@thi.ng/bench@0.2.0) (2018-08-28)
103
+ # [0.3.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/bench@0.2.4...@thi.ng/bench@0.3.0) (2018-10-21)
76
104
 
77
- ### Features
105
+ ### Features
78
106
 
79
- * **bench:** add opt prefix arg, update docs ([4a37367](https://github.com/thi-ng/umbrella/commit/4a37367))
107
+ - **bench:** add timedResult() / benchResult() ([0cf708f](https://github.com/thi-ng/umbrella/commit/0cf708f))
80
108
 
81
- <a name="0.1.0"></a>
82
- # 0.1.0 (2018-05-10)
109
+ # [0.2.0](https://github.com/thi-ng/umbrella/compare/@thi.ng/bench@0.1.5...@thi.ng/bench@0.2.0) (2018-08-28)
83
110
 
84
- ### Features
111
+ ### Features
112
+
113
+ - **bench:** add opt prefix arg, update docs ([4a37367](https://github.com/thi-ng/umbrella/commit/4a37367))
114
+
115
+ # 0.1.0 (2018-05-10)
116
+
117
+ ### Features
85
118
 
86
- * **bench:** add new package [@thi](https://github.com/thi).ng/bench ([9466d4b](https://github.com/thi-ng/umbrella/commit/9466d4b))
119
+ - **bench:** add new package [@thi](https://github.com/thi).ng/bench ([9466d4b](https://github.com/thi-ng/umbrella/commit/9466d4b))
package/README.md CHANGED
@@ -51,15 +51,24 @@ still only sourced via `Date.now()`.
51
51
  yarn add @thi.ng/bench
52
52
  ```
53
53
 
54
+ ES module import:
55
+
54
56
  ```html
55
- // ES module
56
- <script type="module" src="https://unpkg.com/@thi.ng/bench?module" crossorigin></script>
57
+ <script type="module" src="https://cdn.skypack.dev/@thi.ng/bench"></script>
58
+ ```
59
+
60
+ [Skypack documentation](https://docs.skypack.dev/)
61
+
62
+ For Node.js REPL:
63
+
64
+ ```text
65
+ # with flag only for < v16
66
+ node --experimental-repl-await
57
67
 
58
- // UMD
59
- <script src="https://unpkg.com/@thi.ng/bench/lib/index.umd.js" crossorigin></script>
68
+ > const bench = await import("@thi.ng/bench");
60
69
  ```
61
70
 
62
- Package sizes (gzipped, pre-treeshake): ESM: 1.37 KB / CJS: 1.47 KB / UMD: 1.47 KB
71
+ Package sizes (gzipped, pre-treeshake): ESM: 1.39 KB
63
72
 
64
73
  ## Dependencies
65
74
 
@@ -73,9 +82,15 @@ directory are using this package.
73
82
 
74
83
  A selection:
75
84
 
76
- | Screenshot | Description | Live demo | Source |
77
- |:--------------------------------------------------------------------------------------------------------------------------|:-----------------------------------------|:---------------------------------------------------------|:--------------------------------------------------------------------------------------|
78
- | <img src="https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/examples/shader-ast-workers.jpg" width="240"/> | Fork-join worker-based raymarch renderer | [Demo](https://demo.thi.ng/umbrella/shader-ast-workers/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/shader-ast-workers) |
85
+ | Screenshot | Description | Live demo | Source |
86
+ |:--------------------------------------------------------------------------------------------------------------------------|:---------------------------------------------------------------------------------|:---------------------------------------------------------|:--------------------------------------------------------------------------------------|
87
+ | <img src="https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/examples/geom-knn.jpg" width="240"/> | Doodle w/ K-nearest neighbor search result visualization | [Demo](https://demo.thi.ng/umbrella/geom-knn/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/geom-knn) |
88
+ | <img src="https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/examples/geom-voronoi-mst.jpg" width="240"/> | Poisson-disk shape-aware sampling, Voronoi & Minimum Spanning Tree visualization | [Demo](https://demo.thi.ng/umbrella/geom-voronoi-mst/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/geom-voronoi-mst) |
89
+ | <img src="https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/examples/markdown-parser.jpg" width="240"/> | Minimal Markdown to Hiccup to HTML parser / transformer | [Demo](https://demo.thi.ng/umbrella/markdown/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/markdown) |
90
+ | <img src="https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/examples/parse-playground.png" width="240"/> | Parser grammar livecoding editor/playground & codegen | [Demo](https://demo.thi.ng/umbrella/parse-playground/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/parse-playground) |
91
+ | <img src="https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/examples/pixel-sorting.png" width="240"/> | Interactive pixel sorting tool using thi.ng/color & thi.ng/pixel | [Demo](https://demo.thi.ng/umbrella/pixel-sorting/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/pixel-sorting) |
92
+ | | Full umbrella repo doc string search w/ paginated results | [Demo](https://demo.thi.ng/umbrella/rdom-search-docs/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/rdom-search-docs) |
93
+ | <img src="https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/examples/shader-ast-workers.jpg" width="240"/> | Fork-join worker-based raymarch renderer | [Demo](https://demo.thi.ng/umbrella/shader-ast-workers/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/shader-ast-workers) |
79
94
 
80
95
  ## API
81
96
 
package/api.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type { Fn, Fn0, Fn2 } from "@thi.ng/api";
2
+ export declare type Timestamp = number | bigint;
2
3
  export declare type TimingResult<T> = [T, number];
3
4
  export interface BenchmarkOpts {
4
5
  /**
package/bench.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { TimingResult } from "./api";
1
+ import type { TimingResult } from "./api.js";
2
2
  /**
3
3
  * Executes given function `n` times, prints elapsed time to console and
4
4
  * returns last result from fn. The optional `prefix` will be displayed
package/bench.js CHANGED
@@ -1,4 +1,4 @@
1
- import { timed, timedResult } from "./timed";
1
+ import { timed, timedResult } from "./timed.js";
2
2
  /**
3
3
  * Executes given function `n` times, prints elapsed time to console and
4
4
  * returns last result from fn. The optional `prefix` will be displayed
package/benchmark.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { BenchmarkOpts, BenchmarkResult } from "./api";
1
+ import type { BenchmarkOpts, BenchmarkResult } from "./api.js";
2
2
  export declare const DEFAULT_OPTS: BenchmarkOpts;
3
3
  export declare const benchmark: (fn: () => void, opts?: Partial<BenchmarkOpts> | undefined) => BenchmarkResult;
4
4
  /**
package/benchmark.js CHANGED
@@ -1,5 +1,5 @@
1
- import { benchResult } from "./bench";
2
- import { FORMAT_DEFAULT } from "./format/default";
1
+ import { benchResult } from "./bench.js";
2
+ import { FORMAT_DEFAULT } from "./format/default.js";
3
3
  export const DEFAULT_OPTS = {
4
4
  title: "benchmark",
5
5
  iter: 1e3,
package/format/csv.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- import { BenchmarkFormatter } from "../api";
1
+ import { BenchmarkFormatter } from "../api.js";
2
2
  export declare const FORMAT_CSV: BenchmarkFormatter;
3
3
  //# sourceMappingURL=csv.d.ts.map
package/format/csv.js CHANGED
@@ -1,4 +1,4 @@
1
- import { EMPTY, FLOAT } from "../api";
1
+ import { EMPTY, FLOAT } from "../api.js";
2
2
  export const FORMAT_CSV = {
3
3
  prefix: () => `Title,Iterations,Size,Total,Mean,Median,Min,Max,Q1,Q3,SD%`,
4
4
  start: EMPTY,
@@ -1,3 +1,3 @@
1
- import { BenchmarkFormatter } from "../api";
1
+ import { BenchmarkFormatter } from "../api.js";
2
2
  export declare const FORMAT_DEFAULT: BenchmarkFormatter;
3
3
  //# sourceMappingURL=default.d.ts.map
package/format/default.js CHANGED
@@ -1,4 +1,4 @@
1
- import { EMPTY, FLOAT } from "../api";
1
+ import { EMPTY, FLOAT } from "../api.js";
2
2
  export const FORMAT_DEFAULT = {
3
3
  prefix: EMPTY,
4
4
  start: ({ title }) => `benchmarking: ${title}`,
@@ -1,3 +1,3 @@
1
- import { BenchmarkFormatter } from "../api";
1
+ import { BenchmarkFormatter } from "../api.js";
2
2
  export declare const FORMAT_MD: BenchmarkFormatter;
3
3
  //# sourceMappingURL=markdown.d.ts.map
@@ -1,4 +1,4 @@
1
- import { EMPTY, FLOAT } from "../api";
1
+ import { EMPTY, FLOAT } from "../api.js";
2
2
  const $n = (n, char = "-") => new Array(n).fill(char).join("");
3
3
  const pad = (w) => {
4
4
  const column = $n(w, " ");
package/index.d.ts CHANGED
@@ -1,10 +1,10 @@
1
- export * from "./api";
2
- export * from "./bench";
3
- export * from "./benchmark";
4
- export * from "./now";
5
- export * from "./suite";
6
- export * from "./timed";
7
- export * from "./format/csv";
8
- export * from "./format/default";
9
- export * from "./format/markdown";
1
+ export * from "./api.js";
2
+ export * from "./bench.js";
3
+ export * from "./benchmark.js";
4
+ export * from "./now.js";
5
+ export * from "./suite.js";
6
+ export * from "./timed.js";
7
+ export * from "./format/csv.js";
8
+ export * from "./format/default.js";
9
+ export * from "./format/markdown.js";
10
10
  //# sourceMappingURL=index.d.ts.map
package/index.js CHANGED
@@ -1,9 +1,9 @@
1
- export * from "./api";
2
- export * from "./bench";
3
- export * from "./benchmark";
4
- export * from "./now";
5
- export * from "./suite";
6
- export * from "./timed";
7
- export * from "./format/csv";
8
- export * from "./format/default";
9
- export * from "./format/markdown";
1
+ export * from "./api.js";
2
+ export * from "./bench.js";
3
+ export * from "./benchmark.js";
4
+ export * from "./now.js";
5
+ export * from "./suite.js";
6
+ export * from "./timed.js";
7
+ export * from "./format/csv.js";
8
+ export * from "./format/default.js";
9
+ export * from "./format/markdown.js";
package/now.d.ts CHANGED
@@ -1,7 +1,17 @@
1
+ import type { Fn0, FnU2 } from "@thi.ng/api";
2
+ import type { Timestamp } from "./api.js";
1
3
  /**
2
4
  * If available, returns wrapper for `process.hrtime.bigint()` else
3
5
  * falls back to `Date.now()`. In all cases, returns a nanosec-scale
4
6
  * timestamp, either as `bigint` or `number`.
5
7
  */
6
- export declare const now: (() => bigint) | (() => number);
8
+ export declare const now: Fn0<Timestamp>;
9
+ /**
10
+ * Returns the difference in milliseconds between 2 given
11
+ * {@link Timestamp}s.
12
+ *
13
+ * @param a
14
+ * @param b
15
+ */
16
+ export declare const timeDiff: FnU2<Timestamp, number>;
7
17
  //# sourceMappingURL=now.d.ts.map
package/now.js CHANGED
@@ -10,3 +10,13 @@ export const now = typeof BigInt !== "undefined"
10
10
  ? () => process.hrtime.bigint()
11
11
  : () => BigInt(Date.now() * 1e6)
12
12
  : () => Date.now() * 1e6;
13
+ /**
14
+ * Returns the difference in milliseconds between 2 given
15
+ * {@link Timestamp}s.
16
+ *
17
+ * @param a
18
+ * @param b
19
+ */
20
+ export const timeDiff = (a, b) => (typeof BigInt !== "undefined"
21
+ ? Number(b - a)
22
+ : b - a) * 1e-6;
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@thi.ng/bench",
3
- "version": "2.1.6",
3
+ "version": "3.0.3",
4
4
  "description": "Benchmarking utilities w/ various statistics & formatters (CSV, Markdown etc.)",
5
+ "type": "module",
5
6
  "module": "./index.js",
6
- "main": "./lib/index.js",
7
- "umd:main": "./lib/index.umd.js",
8
7
  "typings": "./index.d.ts",
8
+ "sideEffects": false,
9
9
  "repository": {
10
10
  "type": "git",
11
11
  "url": "https://github.com/thi-ng/umbrella.git"
@@ -24,28 +24,21 @@
24
24
  "author": "Karsten Schmidt <k+npm@thi.ng>",
25
25
  "license": "Apache-2.0",
26
26
  "scripts": {
27
- "build": "yarn clean && yarn build:es6 && node ../../scripts/bundle-module",
28
- "build:release": "yarn clean && yarn build:es6 && node ../../scripts/bundle-module all",
29
- "build:es6": "tsc --declaration",
30
- "build:test": "rimraf build && tsc -p test/tsconfig.json",
31
- "build:check": "tsc --isolatedModules --noEmit",
32
- "test": "mocha test",
33
- "cover": "nyc mocha test && nyc report --reporter=lcov",
34
- "clean": "rimraf *.js *.d.ts *.map .nyc_output build coverage doc lib",
35
- "doc:readme": "ts-node -P ../../tools/tsconfig.json ../../tools/src/readme.ts",
36
- "doc": "typedoc --excludePrivate --out doc --theme ../../tools/doc/typedoc-theme src/index.ts",
27
+ "build": "yarn clean && tsc --declaration",
28
+ "clean": "rimraf *.js *.d.ts *.map doc",
29
+ "doc": "typedoc --excludePrivate --excludeInternal --out doc src/index.ts",
37
30
  "doc:ae": "mkdir -p .ae/doc .ae/temp && node_modules/.bin/api-extractor run --local --verbose",
38
- "pub": "yarn build:release && yarn publish --access public"
31
+ "doc:readme": "yarn doc:stats && ../../scripts/node-esm ../../tools/src/readme.ts",
32
+ "doc:stats": "../../scripts/node-esm ../../tools/src/module-stats.ts",
33
+ "pub": "yarn build && yarn publish --access public",
34
+ "test": "testament test"
39
35
  },
40
36
  "dependencies": {
41
- "@thi.ng/api": "^7.2.0"
37
+ "@thi.ng/api": "^8.0.3"
38
+ },
39
+ "devDependencies": {
40
+ "@thi.ng/testament": "^0.1.3"
42
41
  },
43
- "files": [
44
- "*.js",
45
- "*.d.ts",
46
- "lib",
47
- "format"
48
- ],
49
42
  "keywords": [
50
43
  "benchmark",
51
44
  "bigint",
@@ -68,7 +61,46 @@
68
61
  "process": false,
69
62
  "setTimeout": false
70
63
  },
71
- "sideEffects": false,
64
+ "engines": {
65
+ "node": ">=12.7"
66
+ },
67
+ "files": [
68
+ "*.js",
69
+ "*.d.ts",
70
+ "format"
71
+ ],
72
+ "exports": {
73
+ ".": {
74
+ "import": "./index.js"
75
+ },
76
+ "./api": {
77
+ "import": "./api.js"
78
+ },
79
+ "./bench": {
80
+ "import": "./bench.js"
81
+ },
82
+ "./benchmark": {
83
+ "import": "./benchmark.js"
84
+ },
85
+ "./format/csv": {
86
+ "import": "./format/csv.js"
87
+ },
88
+ "./format/default": {
89
+ "import": "./format/default.js"
90
+ },
91
+ "./format/markdown": {
92
+ "import": "./format/markdown.js"
93
+ },
94
+ "./now": {
95
+ "import": "./now.js"
96
+ },
97
+ "./suite": {
98
+ "import": "./suite.js"
99
+ },
100
+ "./timed": {
101
+ "import": "./timed.js"
102
+ }
103
+ },
72
104
  "thi.ng": {
73
105
  "related": [
74
106
  "csv",
@@ -76,5 +108,5 @@
76
108
  ],
77
109
  "year": 2018
78
110
  },
79
- "gitHead": "d971cb3f9b215a95483f78f1a8614015e331146f"
111
+ "gitHead": "1fb38cac74d6c009d96855c28784a267a81badf1"
80
112
  }
package/suite.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- import type { Benchmark, BenchmarkResult, BenchmarkSuiteOpts } from "./api";
1
+ import type { Benchmark, BenchmarkResult, BenchmarkSuiteOpts } from "./api.js";
2
2
  export declare const suite: (cases: Benchmark[], opts?: Partial<BenchmarkSuiteOpts> | undefined) => BenchmarkResult[];
3
3
  //# sourceMappingURL=suite.d.ts.map
package/suite.js CHANGED
@@ -1,4 +1,4 @@
1
- import { benchmark, DEFAULT_OPTS, outputString } from "./benchmark";
1
+ import { benchmark, DEFAULT_OPTS, outputString } from "./benchmark.js";
2
2
  export const suite = (cases, opts) => {
3
3
  const _opts = {
4
4
  ...DEFAULT_OPTS,
package/timed.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { TimingResult } from "./api";
1
+ import type { TimingResult } from "./api.js";
2
2
  /**
3
3
  * Calls function `fn` without args, prints elapsed time and returns
4
4
  * fn's result. The optional `prefix` will be displayed with the output,
package/timed.js CHANGED
@@ -1,4 +1,4 @@
1
- import { now } from "./now";
1
+ import { now, timeDiff } from "./now.js";
2
2
  /**
3
3
  * Calls function `fn` without args, prints elapsed time and returns
4
4
  * fn's result. The optional `prefix` will be displayed with the output,
@@ -22,10 +22,5 @@ export const timedResult = (fn) => {
22
22
  const t0 = now();
23
23
  const res = fn();
24
24
  const t1 = now();
25
- return [
26
- res,
27
- (typeof BigInt !== "undefined"
28
- ? Number(t1 - t0)
29
- : t1 - t0) * 1e-6,
30
- ];
25
+ return [res, timeDiff(t0, t1)];
31
26
  };
package/lib/index.js DELETED
@@ -1,215 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- const FLOAT = (x) => x.toFixed(2);
6
- const EMPTY = () => "";
7
-
8
- const now = typeof BigInt !== "undefined"
9
- ? typeof process !== "undefined" &&
10
- typeof process.hrtime !== "undefined" &&
11
- typeof process.hrtime.bigint === "function"
12
- ? () => process.hrtime.bigint()
13
- : () => BigInt(Date.now() * 1e6)
14
- : () => Date.now() * 1e6;
15
-
16
- const timed = (fn, prefix = "") => {
17
- const [res, t] = timedResult(fn);
18
- console.log(`${prefix} ${t.toFixed(2)}ms`);
19
- return res;
20
- };
21
- const timedResult = (fn) => {
22
- const t0 = now();
23
- const res = fn();
24
- const t1 = now();
25
- return [
26
- res,
27
- (typeof BigInt !== "undefined"
28
- ? Number(t1 - t0)
29
- : t1 - t0) * 1e-6,
30
- ];
31
- };
32
-
33
- const bench = (fn, n = 1e6, prefix = "") => {
34
- let res;
35
- return timed(() => {
36
- while (n-- > 0) {
37
- res = fn();
38
- }
39
- return res;
40
- }, prefix);
41
- };
42
- const benchResult = (fn, n = 1e6) => {
43
- let res;
44
- return timedResult(() => {
45
- while (n-- > 0) {
46
- res = fn();
47
- }
48
- return res;
49
- });
50
- };
51
-
52
- const FORMAT_DEFAULT = {
53
- prefix: EMPTY,
54
- start: ({ title }) => `benchmarking: ${title}`,
55
- warmup: (t, { warmup }) => `\twarmup... ${FLOAT(t)}ms (${warmup} runs)`,
56
- result: ({ iter, size, total, mean, median, min, max, q1, q3, sd }) =>
57
- `\ttotal: ${FLOAT(total)}ms, runs: ${iter} (@ ${size} calls/iter)
58
- \tmean: ${FLOAT(mean)}ms, median: ${FLOAT(median)}ms, range: [${FLOAT(min)}..${FLOAT(max)}]
59
- \tq1: ${FLOAT(q1)}ms, q3: ${FLOAT(q3)}ms
60
- \tsd: ${FLOAT(sd)}%`,
61
- total: (res) => {
62
- const fastest = res.slice().sort((a, b) => a.mean - b.mean)[0];
63
- return `Fastest: "${fastest.title}"`;
64
- },
65
- suffix: () => `---`,
66
- };
67
-
68
- const DEFAULT_OPTS = {
69
- title: "benchmark",
70
- iter: 1e3,
71
- size: 1,
72
- warmup: 10,
73
- output: true,
74
- format: FORMAT_DEFAULT,
75
- };
76
- const benchmark = (fn, opts) => {
77
- const _opts = { ...DEFAULT_OPTS, ...opts };
78
- const { iter, size, warmup, output, format } = _opts;
79
- output && outputString(format.start(_opts));
80
- const t = benchResult(fn, warmup * size)[1];
81
- output && outputString(format.warmup(t, _opts));
82
- const samples = [];
83
- for (let i = iter; --i >= 0;) {
84
- samples.push(benchResult(fn, size)[1]);
85
- }
86
- samples.sort((a, b) => a - b);
87
- const total = samples.reduce((acc, x) => acc + x, 0);
88
- const mean = total / iter;
89
- const median = samples[iter >> 1];
90
- const min = samples[0];
91
- const max = samples[iter - 1];
92
- const q1 = samples[Math.ceil(iter * 0.25)];
93
- const q3 = samples[Math.ceil(iter * 0.75)];
94
- const sd = (Math.sqrt(samples.reduce((acc, x) => acc + (mean - x) ** 2, 0) / iter) /
95
- mean) *
96
- 100;
97
- const res = {
98
- title: _opts.title,
99
- iter,
100
- size,
101
- total,
102
- mean,
103
- median,
104
- min,
105
- max,
106
- q1,
107
- q3,
108
- sd,
109
- };
110
- output && outputString(format.result(res));
111
- return res;
112
- };
113
- const outputString = (str) => str !== "" && console.log(str);
114
-
115
- const suite = (cases, opts) => {
116
- const _opts = {
117
- ...DEFAULT_OPTS,
118
- ...opts,
119
- };
120
- _opts.output && outputString(_opts.format.prefix());
121
- const results = [];
122
- for (let c of cases) {
123
- results.push(benchmark(c.fn, { ..._opts, ...c.opts, title: c.title }));
124
- }
125
- _opts.output && outputString(_opts.format.total(results));
126
- _opts.output && outputString(_opts.format.suffix());
127
- return results;
128
- };
129
-
130
- const FORMAT_CSV = {
131
- prefix: () => `Title,Iterations,Size,Total,Mean,Median,Min,Max,Q1,Q3,SD%`,
132
- start: EMPTY,
133
- warmup: EMPTY,
134
- result: (res) => `"${res.title}",${res.iter},${res.size},${[
135
- res.total,
136
- res.mean,
137
- res.median,
138
- res.min,
139
- res.max,
140
- res.q1,
141
- res.q3,
142
- res.sd,
143
- ]
144
- .map(FLOAT)
145
- .join(",")}`,
146
- total: EMPTY,
147
- suffix: EMPTY,
148
- };
149
-
150
- const $n = (n, char = "-") => new Array(n).fill(char).join("");
151
- const pad = (w) => {
152
- const column = $n(w, " ");
153
- return (x) => {
154
- const s = typeof x === "number" ? FLOAT(x) : x;
155
- return s.length < w
156
- ? column.substr(0, w - s.length) + s
157
- : s.substr(0, w);
158
- };
159
- };
160
- const c24 = pad(24);
161
- const c12 = pad(12);
162
- const c8 = pad(8);
163
- const d24 = $n(24);
164
- const d12 = $n(11) + ":";
165
- const d8 = $n(7) + ":";
166
- const COLUMNS = [c24, c8, c8, c12, c8, c8, c8, c8, c8, c8, c8];
167
- const DASHES = [d24, d8, d8, d12, d8, d8, d8, d8, d8, d8, d8];
168
- const row = (cols) => `|${cols.map((x, i) => COLUMNS[i](x)).join("|")}|`;
169
- const FORMAT_MD = {
170
- prefix: () => row([
171
- "Title",
172
- "Iter",
173
- "Size",
174
- "Total",
175
- "Mean",
176
- "Median",
177
- "Min",
178
- "Max",
179
- "Q1",
180
- "Q3",
181
- "SD%",
182
- ]) + `\n|${DASHES.join("|")}|`,
183
- start: EMPTY,
184
- warmup: EMPTY,
185
- result: (res) => row([
186
- res.title,
187
- "" + res.iter,
188
- "" + res.size,
189
- res.total,
190
- res.mean,
191
- res.median,
192
- res.min,
193
- res.max,
194
- res.q1,
195
- res.q3,
196
- res.sd,
197
- ]),
198
- total: EMPTY,
199
- suffix: EMPTY,
200
- };
201
-
202
- exports.DEFAULT_OPTS = DEFAULT_OPTS;
203
- exports.EMPTY = EMPTY;
204
- exports.FLOAT = FLOAT;
205
- exports.FORMAT_CSV = FORMAT_CSV;
206
- exports.FORMAT_DEFAULT = FORMAT_DEFAULT;
207
- exports.FORMAT_MD = FORMAT_MD;
208
- exports.bench = bench;
209
- exports.benchResult = benchResult;
210
- exports.benchmark = benchmark;
211
- exports.now = now;
212
- exports.outputString = outputString;
213
- exports.suite = suite;
214
- exports.timed = timed;
215
- exports.timedResult = timedResult;
package/lib/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../api.js","../now.js","../timed.js","../bench.js","../format/default.js","../benchmark.js","../suite.js","../format/csv.js","../format/markdown.js"],"sourcesContent":null,"names":[],"mappings":"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"}
package/lib/index.umd.js DELETED
@@ -1 +0,0 @@
1
- !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(((t="undefined"!=typeof globalThis?globalThis:t||self).thi=t.thi||{},t.thi.ng=t.thi.ng||{},t.thi.ng.bench={}))}(this,(function(t){"use strict";const e=t=>t.toFixed(2),n=()=>"",i="undefined"!=typeof BigInt?"undefined"!=typeof process&&void 0!==process.hrtime&&"function"==typeof process.hrtime.bigint?()=>process.hrtime.bigint():()=>BigInt(1e6*Date.now()):()=>1e6*Date.now(),r=(t,e="")=>{const[n,i]=o(t);return console.log(`${e} ${i.toFixed(2)}ms`),n},o=t=>{const e=i(),n=t(),r=i();return[n,1e-6*("undefined"!=typeof BigInt?Number(r-e):r-e)]},s=(t,e=1e6)=>{let n;return o((()=>{for(;e-- >0;)n=t();return n}))},a={prefix:n,start:({title:t})=>`benchmarking: ${t}`,warmup:(t,{warmup:n})=>`\twarmup... ${e(t)}ms (${n} runs)`,result:({iter:t,size:n,total:i,mean:r,median:o,min:s,max:a,q1:u,q3:m,sd:l})=>`\ttotal: ${e(i)}ms, runs: ${t} (@ ${n} calls/iter)\n\tmean: ${e(r)}ms, median: ${e(o)}ms, range: [${e(s)}..${e(a)}]\n\tq1: ${e(u)}ms, q3: ${e(m)}ms\n\tsd: ${e(l)}%`,total:t=>`Fastest: "${t.slice().sort(((t,e)=>t.mean-e.mean))[0].title}"`,suffix:()=>"---"},u={title:"benchmark",iter:1e3,size:1,warmup:10,output:!0,format:a},m=(t,e)=>{const n={...u,...e},{iter:i,size:r,warmup:o,output:a,format:m}=n;a&&l(m.start(n));const f=s(t,o*r)[1];a&&l(m.warmup(f,n));const p=[];for(let e=i;--e>=0;)p.push(s(t,r)[1]);p.sort(((t,e)=>t-e));const c=p.reduce(((t,e)=>t+e),0),d=c/i,h=p[i>>1],$=p[0],x=p[i-1],g=p[Math.ceil(.25*i)],M=p[Math.ceil(.75*i)],b=Math.sqrt(p.reduce(((t,e)=>t+(d-e)**2),0)/i)/d*100,T={title:n.title,iter:i,size:r,total:c,mean:d,median:h,min:$,max:x,q1:g,q3:M,sd:b};return a&&l(m.result(T)),T},l=t=>""!==t&&console.log(t),f={prefix:()=>"Title,Iterations,Size,Total,Mean,Median,Min,Max,Q1,Q3,SD%",start:n,warmup:n,result:t=>`"${t.title}",${t.iter},${t.size},${[t.total,t.mean,t.median,t.min,t.max,t.q1,t.q3,t.sd].map(e).join(",")}`,total:n,suffix:n},p=(t,e="-")=>new Array(t).fill(e).join(""),c=t=>{const n=p(t," ");return i=>{const r="number"==typeof i?e(i):i;return r.length<t?n.substr(0,t-r.length)+r:r.substr(0,t)}},d=c(24),h=c(12),$=c(8),x=p(24),g=p(11)+":",M=p(7)+":",b=[d,$,$,h,$,$,$,$,$,$,$],T=[x,M,M,g,M,M,M,M,M,M,M],w=t=>`|${t.map(((t,e)=>b[e](t))).join("|")}|`,q={prefix:()=>w(["Title","Iter","Size","Total","Mean","Median","Min","Max","Q1","Q3","SD%"])+`\n|${T.join("|")}|`,start:n,warmup:n,result:t=>w([t.title,""+t.iter,""+t.size,t.total,t.mean,t.median,t.min,t.max,t.q1,t.q3,t.sd]),total:n,suffix:n};t.DEFAULT_OPTS=u,t.EMPTY=n,t.FLOAT=e,t.FORMAT_CSV=f,t.FORMAT_DEFAULT=a,t.FORMAT_MD=q,t.bench=(t,e=1e6,n="")=>{let i;return r((()=>{for(;e-- >0;)i=t();return i}),n)},t.benchResult=s,t.benchmark=m,t.now=i,t.outputString=l,t.suite=(t,e)=>{const n={...u,...e};n.output&&l(n.format.prefix());const i=[];for(let e of t)i.push(m(e.fn,{...n,...e.opts,title:e.title}));return n.output&&l(n.format.total(i)),n.output&&l(n.format.suffix()),i},t.timed=r,t.timedResult=o,Object.defineProperty(t,"__esModule",{value:!0})}));
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.umd.js","sources":["../api.js","../now.js","../timed.js","../bench.js","../format/default.js","../benchmark.js","../suite.js","../format/csv.js","../format/markdown.js"],"sourcesContent":null,"names":[],"mappings":"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"}