Skip to content

Commit

Permalink
feat: move to Deno built-in benchmarking tool
Browse files Browse the repository at this point in the history
  • Loading branch information
oplik0 authored Jun 13, 2022
1 parent 55e64ca commit 974efe7
Show file tree
Hide file tree
Showing 4 changed files with 125 additions and 79 deletions.
23 changes: 21 additions & 2 deletions .github/workflows/deno.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ on:
branches:
- master
jobs:
build:
test:
name: ${{ matrix.kind }} ${{ matrix.os }}
runs-on: ${{ matrix.os }}
if: "!contains(github.event.head_commit.message, '[skip ci]')"
Expand All @@ -23,6 +23,25 @@ jobs:
deno-version: 1.x
- name: Tests
run: deno test --allow-read
bench:
name: ${{ matrix.kind }} ${{ matrix.os }}
runs-on: ${{ matrix.os }}
if: "!contains(github.event.head_commit.message, '[skip ci]')"
strategy:
matrix:
os: [macOS-latest, ubuntu-latest, windows-latest]
env:
GH_ACTIONS: true
DENO_BUILD_MODE: release
V8_BINARY: true
steps:
- uses: actions/checkout@v2
- name: Setup Deno
uses: denolib/setup-deno@master
with:
deno-version: 1.x
- name: Run tests
run: deno bench --unstable .
release:
name: Release
runs-on: ubuntu-18.04
Expand All @@ -42,4 +61,4 @@ jobs:
run: npx semantic-release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
21 changes: 20 additions & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ on:
branches-ignore:
- "master"
jobs:
build:
test:
name: ${{ matrix.kind }} ${{ matrix.os }}
runs-on: ${{ matrix.os }}
if: "!contains(github.event.head_commit.message, '[skip ci]')"
Expand All @@ -26,3 +26,22 @@ jobs:
deno-version: 1.x
- name: Run tests
run: deno test --allow-read
bench:
name: ${{ matrix.kind }} ${{ matrix.os }}
runs-on: ${{ matrix.os }}
if: "!contains(github.event.head_commit.message, '[skip ci]')"
strategy:
matrix:
os: [macOS-latest, ubuntu-latest, windows-latest]
env:
GH_ACTIONS: true
DENO_BUILD_MODE: release
V8_BINARY: true
steps:
- uses: actions/checkout@v2
- name: Setup Deno
uses: denolib/setup-deno@master
with:
deno-version: 1.x
- name: Run tests
run: deno bench --unstable .
20 changes: 20 additions & 0 deletions dprint.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"typescript": {},
"json": {},
"markdown": {},
"toml": {},
"includes": [
"**/*.{ts,tsx,js,jsx,cjs,mjs,json,md,toml,rs}"
],
"excludes": [
"**/node_modules",
"**/*-lock.json"
],
"plugins": [
"https://plugins.dprint.dev/typescript-0.69.1.wasm",
"https://plugins.dprint.dev/json-0.15.3.wasm",
"https://plugins.dprint.dev/markdown-0.13.3.wasm",
"https://plugins.dprint.dev/toml-0.5.4.wasm",
"https://plugins.dprint.dev/rustfmt-0.6.2.json@886c6f3161cf020c2d75160262b0f56d74a521e05cfb91ec4f956650c8ca76ca"
]
}
140 changes: 64 additions & 76 deletions lib/scrypt_bench.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,95 +2,83 @@
* Just a few simple benchmarks
* @todo document the benchmarks better
*/
import { bench, runBenchmarks } from "https://deno.land/std@0.143.0/testing/bench.ts";
import { scrypt } from "./scrypt.ts";
const extremeSalt: string =
`IkjpewCbNm4A7cuY1VL9KC3y92blEthtLf9Cet6uEoTxz5cyF660da2zeci42fYwVCVwsKogETMCXupSZZAUh6a80ZnnBTk17B3UTCSVQPpYfL8GktJ2BDokE7ox2hV8OwwUT1hFvCuJqwHZpRvZw1RNCO6HfukPdgMHhq9rWLTXXUNwrIjlmkeydKGFJz2mS1xFcvLQtle4olJVK0SXXXYHAigBfpYxxSC2acvoxuacWcXhzSSRZAMysU2J7zDfXdxnYoqz50rvmvi36g7t2WDSAdzZ44JpxVcc3bYD7xYI3UgfVMPOfeblzwJi455QIurHzDuXEUNS0tZX1kWwZ0XcNSCwGzPs7WSVHxHc0KVUNhwSz16wDYFK4pYeA29ThXgFiFICSLVshiRrCfuzRthW7IZtRa9efcf4nFJsVBk51jpHY0b8CLhARrQU92mlBULwmJKe8DgST3Vn9rva98E9jk4y7NfSb4i9g74OjuFQ8yRO3BHksBZoVtBl4wUppM2hsLt72LZKA0ZsaWW7dG9a1bgWUkBBRG5OwzARenDqQIA2Gp5V4JsXuUUYNDylCelkLUVfS7hB1AZHtnIgwVqTaGDxl7nNZGKpAx6MrOd40laTUhrtZo4prwFZROHPNVJGQk2PQDgwqxX5SWoBTK8cCCzrbGBfHq9r8BwBvSVdeQ7bgjUW2j7NCapHHZ6filzxZaVsLsEITGZNcK0t5DdSnaDLRxyOn21ncKVIyZfOdlvpytvqpQaH5RWu4G50IPkEevue8KenXpGLP0pmEseBf6eX02rlN9arqZ4HJWmD7RbAChs7OJwfKlNIawb0V3G3N0eJeXiRsYOk10GIb91pyZRLSr2AJDtiWCcMuOWZfgLVHIrUVftfh9iXmRk2RAT1sigivbNtdqcF2cVvbTVMUCe7MIPRt4dGqwOQqdReGjPy9p1CNfKfJBIgW0xhYsOGMkcUqSurHxPl4wTOnMBx8vEZQsqJCZomENA1`;
const extremePassword: string =
`TFImeWrtF2kOIvDjG4P0ybmMrNOq0bQ0aERcC69iHflECWrwuSMO4JPD3Ng5HwNXZrCpHyEwviW8zly3WLsQ6zJ60lnfwhVRdkEQCsFiH4NvGl0tCAuty9Rruf47WHeE3GK7qAJwhcXHx3FCJgWN8KHdoy3vn2zUKJlhhjSFGANJdVYQGSaQTmtoJdhcemmYT5hprkALp7Q9vMwCk9hDvV5vB0evXfxqG0dFV3MPJmywwWAUJEi5MyM2Pio7fL50M5ohPWFmUllpa6G5pVBhi26GtOy6sM3GDGHmnohavtsMvTeRcMX1ds4HWA9U3vH7urQ3XGkCUzulB6WxuxHn8Z3fRz3BL6MZI0EReep2qUVaqJn8onzsI6da6pU6iDtRbufWxi0q8XN1S3BCtFGjzaTU12nvfg5js53PiSw1KUnZj2thKxWtnKcpwzbXdTuuZ9GVhZHIMcOXXrDR0rj539ZLAVyJmqwDOMjTsqPN7BY522PcJHoTElSRNRAsAsFx2m7h9brhcZXOgV1PZohJsdQS7RWhAl9EYBkgF8WCgGw9DXidVduIIHDlEd7mAVJfo9HYX85kFcwrLEpuPiFxfNhubeDpeBu2FAbAo6DNHFlqXUUnyKvMbzptcgisSr2V1pwykB6uLVrwx3AceRnyqg5flldmfsSKw0AFZ4PagGMJuFDMGrV29Vmqhv61SRL9in0ngZx0gJ2vKv26qS3jGN72UUsbkysuGNz6ul0D5jIapvIcCTncIiXSY24pPctxFsawcXvSNw4jEKccsHCTZF0gri6iFS7JqqQd87FNowbrug6sIWSwiWHYGN1VfSwuE5plQHVvNCHNZnMBBIoaMWh45lhtlfCWdUwVpjjK5dAUcOtKftJ2hcl4mIlxs7Fy8ASWhYvWAbpp3fRgmAeTRYAFEwMohN9b03iXyDSNFIeZtQoaL7HYFVWoXV4BfBVlR3CvNIwp6OPBAFFSDlSn9CZU06UziY1tSwqBzkCD`;

bench({
name: "small scrypt",
runs: 10,
async func(b): Promise<void> {
b.start();
await scrypt("password", "salt", 1024, 8, 1, 64);
b.stop();
},
});
bench({
name: "small scrypt (longer password)",
runs: 10,
async func(b): Promise<void> {
b.start();
await scrypt("long password to test that", "salt", 1024, 8, 1, 64);
b.stop();
},
});
bench({
name: "small scrypt (longer salt)",
runs: 100,
async func(b): Promise<void> {
b.start();
await scrypt("password", "long salt to test that", 1024, 8, 1, 64);
b.stop();
},
});
bench({
name: "small scrypt (longer password and salt)",
runs: 100,
async func(b): Promise<void> {
b.start();
await scrypt(
"long password to test that",
"long salt to test that",
1024,
8,
1,
64,
);
b.stop();
},
Deno.bench("small scrypt", { group: "small scrypt", baseline: true }, async () => {
await scrypt("password", "salt", 1024, 8, 1, 64);
});
Deno.bench("small scrypt (longer password)", { group: "small scrypt" }, async () => {
await scrypt("long password to test that", "salt", 1024, 8, 1, 64);
});
Deno.bench("small scrypt (longer salt)", { group: "small scrypt" }, async () => {
await scrypt("password", "long salt to test that", 1024, 8, 1, 64);
});
Deno.bench("small scrypt (longer password and salt)", { group: "small scrypt" }, async () => {
await scrypt(
"long password to test that",
"long salt to test that",
1024,
8,
1,
64,
);
});

Deno.bench("small scrypt (extremely long salt)", { group: "small scrypt" }, async () => {
await scrypt("password", extremeSalt, 1024, 8, 1, 64);
});

Deno.bench("small scrypt (extremely long password)", { group: "small scrypt" }, async () => {
await scrypt(extremePassword, "NaCl", 1024, 8, 1, 64);
});

Deno.bench("small scrypt (extremely long password and salt)", { group: "small scrypt" }, async () => {
await scrypt(extremePassword, extremeSalt, 1024, 8, 1, 64);
});

Deno.bench("standard scrypt", { group: "scrypt", baseline: true }, async () => {
await scrypt("password", "salt", 16384, 8, 1, 64);
});

bench({
name: "small scrypt (extremely long salt)",
runs: 100,
async func(b): Promise<void> {
b.start();
await scrypt("password", extremeSalt, 1024, 8, 1, 64);
b.stop();
},
Deno.bench("standard scrypt (longer password)", { group: "scrypt" }, async () => {
await scrypt("long password to test that", "salt", 16384, 8, 1, 64);
});
Deno.bench("standard scrypt (longer salt)", { group: "scrypt" }, async () => {
await scrypt("password", "long salt to test that", 16384, 8, 1, 64);
});
Deno.bench("standard scrypt (longer password and salt)", { group: "scrypt" }, async () => {
await scrypt(
"long password to test that",
"long salt to test that",
16384,
8,
1,
64,
);
});

bench({
name: "small scrypt (extremely long password)",
runs: 100,
async func(b): Promise<void> {
b.start();
await scrypt(extremePassword, "NaCl", 1024, 8, 1, 64);
b.stop();
},
Deno.bench("standard scrypt (extremely long salt)", { group: "scrypt" }, async () => {
await scrypt("password", extremeSalt, 16384, 8, 1, 64);
});

bench({
name: "small scrypt (extremely long password and salt)",
runs: 100,
async func(b): Promise<void> {
b.start();
await scrypt(extremePassword, extremeSalt, 1024, 8, 1, 64);
b.stop();
},
Deno.bench("standard scrypt (extremely long password)", { group: "scrypt" }, async () => {
await scrypt(extremePassword, "NaCl", 16384, 8, 1, 64);
});

bench({
name: "standard scrypt",
runs: 20,
async func(b): Promise<void> {
b.start();
await scrypt("password", "NaCl", 16384, 8, 1, 64);
b.stop();
},
Deno.bench("standard scrypt (extremely long password and salt)", { group: "scrypt" }, async () => {
await scrypt(extremePassword, extremeSalt, 16384, 8, 1, 64);
});

runBenchmarks();
Deno.bench("large n scrypt (8x standard)", { group: "large scrypt" }, async () => {
await scrypt("password", "salt", 131072, 8, 1, 64);
});
Deno.bench("large r scrypt (8x standard)", { group: "large scrypt" }, async () => {
await scrypt("password", "salt", 16384, 64, 1, 64);
});
Deno.bench("large p scrypt (16x standard)", { group: "large scrypt" }, async () => {
await scrypt("password", "salt", 16384, 8, 8, 64);
});

0 comments on commit 974efe7

Please sign in to comment.