diff --git a/packages/agoric-cli/src/sdk-package-names.js b/packages/agoric-cli/src/sdk-package-names.js index 70e5eec1242..5dbb751eefe 100644 --- a/packages/agoric-cli/src/sdk-package-names.js +++ b/packages/agoric-cli/src/sdk-package-names.js @@ -5,6 +5,7 @@ export default [ "@agoric/async-flow", "@agoric/base-zone", "@agoric/benchmark", + "@agoric/benchmark-test", "@agoric/boot", "@agoric/builders", "@agoric/cache", diff --git a/packages/benchmark-test/benchmark.js b/packages/benchmark-test/benchmark.js deleted file mode 100644 index 91ccca984c5..00000000000 --- a/packages/benchmark-test/benchmark.js +++ /dev/null @@ -1,35 +0,0 @@ -// import { performance } from 'perf_hooks'; -const performance = { now: () => Date.now() }; - - -async function benchmark(name, t, fn, expedtedTime, iterations = 10000) { - const start = performance.now(); // 3 - for (let i = 0; i < iterations; i++) { - await fn(); - } - const end = performance.now(); // 8 - const avgTime = (end - start) / iterations; - - console.log(`${name} | Average time: ${avgTime}ms`); - t.assert(avgTime < expedtedTime, `Expected ${avgTime} to be less than ${expedtedTime}`); -} - -async function test(name, fn) { - try { - console.log("Running test: ", name); - await fn({ assert, truthy }); - console.log(`✅ Passed`); - } catch (err) { - console.log(`❌ Failed: ${err.message}`); - } -} - -function assert(condition, message = 'Assertion failed') { - if (!condition) throw new Error(message); -} - -function truthy(value, message = 'Expected a truthy value') { - if (!value) throw new Error(message); -} - -export { benchmark, test }; diff --git a/packages/benchmark-test/benchmark.test.js b/packages/benchmark-test/benchmark.test.js deleted file mode 100644 index 9f99c32dfaa..00000000000 --- a/packages/benchmark-test/benchmark.test.js +++ /dev/null @@ -1,49 +0,0 @@ -import "@endo/init"; -import { passStyleOf } from '@endo/pass-style'; -import { test, benchmark } from './benchmark.js'; - - -async function runBenchmark() { - - await test('Benchmark', async (t) => { - await benchmark('Empty object', t, async () => { - passStyleOf(harden({})); - }, 0.01); - }); - - - await test('Another Benchmark', async (t) => { - await benchmark('Alphabets object', t, async () => { - passStyleOf(harden({ - a: 12, - b: 13, - c: 14, - d: 15, - e: 16, - f: 17, - g: 18, - h: 19, - i: 20, - j: 21, - k: 22, - l: 23, - m: 24, - n: 25, - o: 26, - p: 27, - q: 28, - r: 29, - s: 30, - t: 31, - u: 32, - v: 33, - w: 34, - x: 35, - y: 36, - z: 37, - })); - }, 0.001); - }); -} - -runBenchmark(); diff --git a/packages/benchmark-test/package.json b/packages/benchmark-test/package.json index 28c18af2da1..e7e56c4d80d 100644 --- a/packages/benchmark-test/package.json +++ b/packages/benchmark-test/package.json @@ -1,9 +1,28 @@ { - "name": "benchmark", - "version": "1.0.0", - "type": "module", - "scripts": { - "test": "yarn rollup -c && eshost -h v8,xs dist/bundle.js" - }, - "license": "MIT" + "name": "@agoric/benchmark-test", + "version": "1.0.0", + "type": "module", + "scripts": { + "build": "exit 0", + "prepack": "tsc --build tsconfig.build.json", + "postpack": "git clean -f '*.d.ts*' '*.tsbuildinfo'", + "test": "yarn rollup -c && eshost -h 'V8,Moddable XS' dist/bundle.js", + "bench": "yarn rollup -c && node --jitless --cpu-prof dist/bundle.js", + "lint": "run-s --continue-on-error lint:*", + "lint:eslint": "eslint .", + "lint:types": "tsc" + }, + "author": "Agoric", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/Agoric/agoric-sdk/issues" + }, + "homepage": "https://github.com/Agoric/agoric-sdk#readme", + "devDependencies": { + "tsd": "^0.31.1", + "@rollup/plugin-node-resolve": "^16.0.0", + "@rollup/plugin-commonjs": "^28.0.2", + "@endo/init": "^1.1.8", + "@endo/pass-style": "^1.4.8" + } } diff --git a/packages/benchmark-test/rollup.config.js b/packages/benchmark-test/rollup.config.js index 39f08b30fe2..bcc00ff3120 100644 --- a/packages/benchmark-test/rollup.config.js +++ b/packages/benchmark-test/rollup.config.js @@ -2,16 +2,12 @@ import resolve from '@rollup/plugin-node-resolve'; import commonjs from '@rollup/plugin-commonjs'; export default { - input: 'benchmark.test.js', + input: 'test/benchmark.test.js', output: { file: 'dist/bundle.js', format: 'iife', name: 'bundle', sourcemap: false, }, - plugins: [ - resolve(), - commonjs(), - ], + plugins: [resolve(), commonjs()], }; - diff --git a/packages/benchmark-test/test/benchmark.test.js b/packages/benchmark-test/test/benchmark.test.js new file mode 100644 index 00000000000..940b6a65084 --- /dev/null +++ b/packages/benchmark-test/test/benchmark.test.js @@ -0,0 +1,58 @@ +import '@endo/init'; +import { passStyleOf } from '@endo/pass-style'; +import { test, benchmark } from '../tools/benchmark.js'; + +async function runBenchmark() { + await test('Benchmark', async t => { + await benchmark( + 'Empty object', + t, + async () => { + passStyleOf(harden({})); + }, + 0.01, + ); + }); + + await test('Another Benchmark', async t => { + await benchmark( + 'Alphabets object', + t, + async () => { + passStyleOf( + harden({ + a: 12, + b: 13, + c: 14, + d: 15, + e: 16, + f: 17, + g: 18, + h: 19, + i: 20, + j: 21, + k: 22, + l: 23, + m: 24, + n: 25, + o: 26, + p: 27, + q: 28, + r: 29, + s: 30, + t: 31, + u: 32, + v: 33, + w: 34, + x: 35, + y: 36, + z: 37, + }), + ); + }, + 0.001, + ); + }); +} + +void runBenchmark(); diff --git a/packages/benchmark-test/tools/benchmark.js b/packages/benchmark-test/tools/benchmark.js new file mode 100644 index 00000000000..64e2f932544 --- /dev/null +++ b/packages/benchmark-test/tools/benchmark.js @@ -0,0 +1,39 @@ +// import { performance } from 'perf_hooks'; +const performance = { now: () => Date.now() }; + +async function benchmark(name, t, fn, expedtedTime, iterations = 10000) { + await null; + const start = performance.now(); // 3 + for (let i = 0; i < iterations; i += 1) { + await fn(); + } + const end = performance.now(); // 8 + const avgTime = (end - start) / iterations; + + console.log(`${name} | Average time: ${avgTime}ms`); + t.assert( + avgTime < expedtedTime, + `Expected ${avgTime} to be less than ${expedtedTime}`, + ); +} + +async function test(name, fn) { + await null; + try { + console.log('Running test: ', name); + await fn({ assert, truthy }); + console.log(`✅ Passed`); + } catch (err) { + console.log(`❌ Failed: ${err.message}`); + } +} + +function assert(condition, message = 'Assertion failed') { + if (!condition) throw new Error(message); +} + +function truthy(value, message = 'Expected a truthy value') { + if (!value) throw new Error(message); +} + +export { benchmark, test }; diff --git a/packages/benchmark-test/tsconfig.build.json b/packages/benchmark-test/tsconfig.build.json new file mode 100644 index 00000000000..fe5ea57d603 --- /dev/null +++ b/packages/benchmark-test/tsconfig.build.json @@ -0,0 +1,6 @@ +{ + "extends": [ + "./tsconfig.json", + "../../tsconfig-build-options.json" + ] +} diff --git a/packages/benchmark-test/tsconfig.json b/packages/benchmark-test/tsconfig.json new file mode 100644 index 00000000000..be510a121fc --- /dev/null +++ b/packages/benchmark-test/tsconfig.json @@ -0,0 +1,10 @@ +// This file can contain .js-specific Typescript compiler config. +{ + "extends": "../../tsconfig.json", + "compilerOptions": {}, + "include": [ + "tools", + "test", + "rollup.config.js" + ] +} diff --git a/packages/benchmark-test/typedoc.json b/packages/benchmark-test/typedoc.json new file mode 100644 index 00000000000..b03351188be --- /dev/null +++ b/packages/benchmark-test/typedoc.json @@ -0,0 +1,12 @@ +{ + "extends": [ + "../../typedoc.base.json" + ], + "entryPoints": [ + "tools/benchmark.js" + ], + "validation": { + "notExported": false, + "invalidLink": false, + } +} diff --git a/yarn.lock b/yarn.lock index ea8117f2ede..2f5e6568f47 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2020,6 +2020,11 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== +"@jridgewell/sourcemap-codec@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": version "0.3.22" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz#72a621e5de59f5f1ef792d0793a82ee20f645e4c" @@ -3322,6 +3327,19 @@ magic-string "^0.25.7" resolve "^1.17.0" +"@rollup/plugin-commonjs@^28.0.2": + version "28.0.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.2.tgz#193d7a86470f112b56927c1d821ee45951a819ea" + integrity sha512-BEFI2EDqzl+vA1rl97IDRZ61AIwGH093d9nz8+dThxJNH8oSoB7MjWvPCX3dkaK1/RCJ/1v/R1XB15FuSs0fQw== + dependencies: + "@rollup/pluginutils" "^5.0.1" + commondir "^1.0.1" + estree-walker "^2.0.2" + fdir "^6.2.0" + is-reference "1.2.1" + magic-string "^0.30.3" + picomatch "^4.0.2" + "@rollup/plugin-json@^6.1.0": version "6.1.0" resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-6.1.0.tgz#fbe784e29682e9bb6dee28ea75a1a83702e7b805" @@ -3341,6 +3359,17 @@ is-module "^1.0.0" resolve "^1.19.0" +"@rollup/plugin-node-resolve@^16.0.0": + version "16.0.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.0.tgz#b1a0594661f40d7b061d82136e847354ff85f211" + integrity sha512-0FPvAeVUT/zdWoO0jnb/V5BlBsUSNfkIOtFHzMO4H9MOklrmQFY6FduVHKucNb/aTFxvnGhj4MNj/T1oNdDfNg== + dependencies: + "@rollup/pluginutils" "^5.0.1" + "@types/resolve" "1.20.2" + deepmerge "^4.2.2" + is-module "^1.0.0" + resolve "^1.22.1" + "@rollup/pluginutils@^3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" @@ -3350,6 +3379,15 @@ estree-walker "^1.0.1" picomatch "^2.2.2" +"@rollup/pluginutils@^5.0.1": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.1.4.tgz#bb94f1f9eaaac944da237767cdfee6c5b2262d4a" + integrity sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^2.0.2" + picomatch "^4.0.2" + "@rollup/pluginutils@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz#7e53eddc8c7f483a4ad0b94afb1f7f5fd3c771e0" @@ -3676,6 +3714,11 @@ dependencies: "@types/node" "*" +"@types/resolve@1.20.2": + version "1.20.2" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" + integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== + "@types/retry@*": version "0.12.2" resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.2.tgz#ed279a64fa438bb69f2480eda44937912bb7480a" @@ -6462,6 +6505,11 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" +fdir@^6.2.0: + version "6.4.3" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.3.tgz#011cdacf837eca9b811c89dbb902df714273db72" + integrity sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw== + fecha@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" @@ -7590,6 +7638,13 @@ is-core-module@^2.13.0, is-core-module@^2.15.1, is-core-module@^2.5.0, is-core-m dependencies: hasown "^2.0.2" +is-core-module@^2.16.0: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== + dependencies: + hasown "^2.0.2" + is-data-view@^1.0.1, is-data-view@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" @@ -7738,7 +7793,7 @@ is-promise@^2.2.2: resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== -is-reference@^1.2.1: +is-reference@1.2.1, is-reference@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== @@ -8483,6 +8538,13 @@ magic-string@^0.25.7: dependencies: sourcemap-codec "^1.4.4" +magic-string@^0.30.3: + version "0.30.17" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453" + integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -10106,6 +10168,11 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatc resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +picomatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" + integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== + pidtree@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" @@ -10693,6 +10760,15 @@ resolve@^1.1.6, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.17 path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.22.1: + version "1.22.10" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" + integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== + dependencies: + is-core-module "^2.16.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"