From e47d67a9da1db57108d05b8db09824ac0d5271a7 Mon Sep 17 00:00:00 2001 From: Alex McLean Date: Fri, 3 May 2024 10:52:56 +0100 Subject: [PATCH] Benchmarks (#1079) * tactus-oriented benchmarks * add benchmarks for individual example tunes --- bench/tunes.bench.mjs | 22 +++++++++++++ package.json | 1 + packages/core/bench/pattern.bench.mjs | 46 +++++++++++++++++++++++++++ packages/core/package.json | 1 + packages/mini/bench/mini.bench.mjs | 25 +++++++++++++++ packages/mini/package.json | 1 + 6 files changed, 96 insertions(+) create mode 100644 bench/tunes.bench.mjs create mode 100644 packages/core/bench/pattern.bench.mjs create mode 100644 packages/mini/bench/mini.bench.mjs diff --git a/bench/tunes.bench.mjs b/bench/tunes.bench.mjs new file mode 100644 index 00000000..cd381873 --- /dev/null +++ b/bench/tunes.bench.mjs @@ -0,0 +1,22 @@ +import { queryCode, testCycles } from '../test/runtime.mjs'; +import * as tunes from '../website/src/repl/tunes.mjs'; +import { describe, bench } from 'vitest'; +import { calculateTactus } from '../packages/core/index.mjs'; + +const tuneKeys = Object.keys(tunes); + +describe('renders tunes', () => { + tuneKeys.forEach((key) => { + describe(key, () => { + calculateTactus(true); + bench(`+tactus`, async () => { + await queryCode(tunes[key], testCycles[key] || 1); + }); + calculateTactus(false); + bench(`-tactus`, async () => { + await queryCode(tunes[key], testCycles[key] || 1); + }); + calculateTactus(true); + }); + }); +}); diff --git a/package.json b/package.json index 97900913..8aefa102 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "test": "npm run pretest && vitest run --version", "test-ui": "npm run pretest && vitest --ui", "test-coverage": "npm run pretest && vitest --coverage", + "bench": "npm run pretest && vitest bench", "snapshot": "npm run pretest && vitest run -u --silent", "repl": "npm run prestart && cd website && npm run dev", "start": "npm run prestart && cd website && npm run dev", diff --git a/packages/core/bench/pattern.bench.mjs b/packages/core/bench/pattern.bench.mjs new file mode 100644 index 00000000..12644800 --- /dev/null +++ b/packages/core/bench/pattern.bench.mjs @@ -0,0 +1,46 @@ +import { describe, bench } from 'vitest'; + +import { calculateTactus, sequence, stack } from '../index.mjs'; + +const pat64 = sequence(...Array(64).keys()); + +describe('tactus', () => { + calculateTactus(true); + bench( + '+tactus', + () => { + pat64.iter(64).fast(64).firstCycle(); + }, + { time: 1000 }, + ); + + calculateTactus(false); + bench( + '-tactus', + () => { + pat64.iter(64).fast(64).firstCycle(); + }, + { time: 1000 }, + ); +}); + +describe('stack', () => { + calculateTactus(true); + bench( + '+tactus', + () => { + stack(pat64, pat64, pat64, pat64, pat64, pat64, pat64, pat64).fast(64).firstCycle(); + }, + { time: 1000 }, + ); + + calculateTactus(false); + bench( + '-tactus', + () => { + stack(pat64, pat64, pat64, pat64, pat64, pat64, pat64, pat64).fast(64).firstCycle(); + }, + { time: 1000 }, + ); +}); +calculateTactus(true); diff --git a/packages/core/package.json b/packages/core/package.json index 7f59ed41..6c95d049 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -9,6 +9,7 @@ }, "scripts": { "test": "vitest run", + "bench": "vitest bench", "build": "vite build", "prepublishOnly": "pnpm build" }, diff --git a/packages/mini/bench/mini.bench.mjs b/packages/mini/bench/mini.bench.mjs new file mode 100644 index 00000000..782ac86b --- /dev/null +++ b/packages/mini/bench/mini.bench.mjs @@ -0,0 +1,25 @@ +import { describe, bench } from 'vitest'; + +import { calculateTactus } from '../../core/index.mjs'; +import { mini } from '../index.mjs'; + +describe('mini', () => { + calculateTactus(true); + bench( + '+tactus', + () => { + mini('a b c*3 [c d e, f g] ').fast(64).firstCycle(); + }, + { time: 1000 }, + ); + + calculateTactus(false); + bench( + '-tactus', + () => { + mini('a b c*3 [c d e, f g] ').fast(64).firstCycle(); + }, + { time: 1000 }, + ); + calculateTactus(true); +}); diff --git a/packages/mini/package.json b/packages/mini/package.json index cb4f459c..7bd73011 100644 --- a/packages/mini/package.json +++ b/packages/mini/package.json @@ -9,6 +9,7 @@ }, "scripts": { "test": "vitest run", + "bench": "vitest bench", "build:parser": "peggy -o krill-parser.js --format es ./krill.pegjs", "build": "vite build", "prepublishOnly": "npm run build"