mirror of
https://github.com/denoland/deno.git
synced 2025-01-12 00:54:02 -05:00
feat: Stabilize Deno.bench() and 'deno bench' subcommand (#16485)
This commit is contained in:
parent
79aa3124a8
commit
5be8c96ae8
9 changed files with 264 additions and 310 deletions
|
@ -14,13 +14,11 @@ use std::fmt;
|
||||||
const MAX_SOURCE_LINE_LENGTH: usize = 150;
|
const MAX_SOURCE_LINE_LENGTH: usize = 150;
|
||||||
|
|
||||||
const UNSTABLE_DENO_PROPS: &[&str] = &[
|
const UNSTABLE_DENO_PROPS: &[&str] = &[
|
||||||
"BenchDefinition",
|
|
||||||
"CreateHttpClientOptions",
|
"CreateHttpClientOptions",
|
||||||
"DatagramConn",
|
"DatagramConn",
|
||||||
"HttpClient",
|
"HttpClient",
|
||||||
"UnixConnectOptions",
|
"UnixConnectOptions",
|
||||||
"UnixListenOptions",
|
"UnixListenOptions",
|
||||||
"bench",
|
|
||||||
"connect",
|
"connect",
|
||||||
"createHttpClient",
|
"createHttpClient",
|
||||||
"kill",
|
"kill",
|
||||||
|
|
236
cli/dts/lib.deno.ns.d.ts
vendored
236
cli/dts/lib.deno.ns.d.ts
vendored
|
@ -931,6 +931,242 @@ declare namespace Deno {
|
||||||
fn: (t: TestContext) => void | Promise<void>,
|
fn: (t: TestContext) => void | Promise<void>,
|
||||||
): void;
|
): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The interface for defining a benchmark test using {@linkcode Deno.bench}.
|
||||||
|
*
|
||||||
|
* @category Testing
|
||||||
|
*/
|
||||||
|
export interface BenchDefinition {
|
||||||
|
/** The test function which will be benchmarked. */
|
||||||
|
fn: () => void | Promise<void>;
|
||||||
|
/** The name of the test, which will be used in displaying the results. */
|
||||||
|
name: string;
|
||||||
|
/** If truthy, the benchmark test will be ignored/skipped. */
|
||||||
|
ignore?: boolean;
|
||||||
|
/** Group name for the benchmark.
|
||||||
|
*
|
||||||
|
* Grouped benchmarks produce a group time summary, where the difference
|
||||||
|
* in performance between each test of the group is compared. */
|
||||||
|
group?: string;
|
||||||
|
/** Benchmark should be used as the baseline for other benchmarks.
|
||||||
|
*
|
||||||
|
* If there are multiple baselines in a group, the first one is used as the
|
||||||
|
* baseline. */
|
||||||
|
baseline?: boolean;
|
||||||
|
/** If at least one bench has `only` set to true, only run benches that have
|
||||||
|
* `only` set to `true` and fail the bench suite. */
|
||||||
|
only?: boolean;
|
||||||
|
/** Ensure the bench case does not prematurely cause the process to exit,
|
||||||
|
* for example via a call to {@linkcode Deno.exit}. Defaults to `true`. */
|
||||||
|
sanitizeExit?: boolean;
|
||||||
|
/** Specifies the permissions that should be used to run the bench.
|
||||||
|
*
|
||||||
|
* Set this to `"inherit"` to keep the calling thread's permissions.
|
||||||
|
*
|
||||||
|
* Set this to `"none"` to revoke all permissions.
|
||||||
|
*
|
||||||
|
* Defaults to "inherit".
|
||||||
|
*/
|
||||||
|
permissions?: Deno.PermissionOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register a benchmark test which will be run when `deno bench` is used on
|
||||||
|
* the command line and the containing module looks like a bench module.
|
||||||
|
*
|
||||||
|
* If the test function (`fn`) returns a promise or is async, the test runner
|
||||||
|
* will await resolution to consider the test complete.
|
||||||
|
*
|
||||||
|
* ```ts
|
||||||
|
* import { assertEquals } from "https://deno.land/std/testing/asserts.ts";
|
||||||
|
*
|
||||||
|
* Deno.bench({
|
||||||
|
* name: "example test",
|
||||||
|
* fn() {
|
||||||
|
* assertEquals("world", "world");
|
||||||
|
* },
|
||||||
|
* });
|
||||||
|
*
|
||||||
|
* Deno.bench({
|
||||||
|
* name: "example ignored test",
|
||||||
|
* ignore: Deno.build.os === "windows",
|
||||||
|
* fn() {
|
||||||
|
* // This test is ignored only on Windows machines
|
||||||
|
* },
|
||||||
|
* });
|
||||||
|
*
|
||||||
|
* Deno.bench({
|
||||||
|
* name: "example async test",
|
||||||
|
* async fn() {
|
||||||
|
* const decoder = new TextDecoder("utf-8");
|
||||||
|
* const data = await Deno.readFile("hello_world.txt");
|
||||||
|
* assertEquals(decoder.decode(data), "Hello world");
|
||||||
|
* }
|
||||||
|
* });
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* @category Testing
|
||||||
|
*/
|
||||||
|
export function bench(t: BenchDefinition): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register a benchmark test which will be run when `deno bench` is used on
|
||||||
|
* the command line and the containing module looks like a bench module.
|
||||||
|
*
|
||||||
|
* If the test function (`fn`) returns a promise or is async, the test runner
|
||||||
|
* will await resolution to consider the test complete.
|
||||||
|
*
|
||||||
|
* ```ts
|
||||||
|
* import { assertEquals } from "https://deno.land/std/testing/asserts.ts";
|
||||||
|
*
|
||||||
|
* Deno.bench("My test description", () => {
|
||||||
|
* assertEquals("hello", "hello");
|
||||||
|
* });
|
||||||
|
*
|
||||||
|
* Deno.bench("My async test description", async () => {
|
||||||
|
* const decoder = new TextDecoder("utf-8");
|
||||||
|
* const data = await Deno.readFile("hello_world.txt");
|
||||||
|
* assertEquals(decoder.decode(data), "Hello world");
|
||||||
|
* });
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* @category Testing
|
||||||
|
*/
|
||||||
|
export function bench(
|
||||||
|
name: string,
|
||||||
|
fn: () => void | Promise<void>,
|
||||||
|
): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register a benchmark test which will be run when `deno bench` is used on
|
||||||
|
* the command line and the containing module looks like a bench module.
|
||||||
|
*
|
||||||
|
* If the test function (`fn`) returns a promise or is async, the test runner
|
||||||
|
* will await resolution to consider the test complete.
|
||||||
|
*
|
||||||
|
* ```ts
|
||||||
|
* import { assertEquals } from "https://deno.land/std/testing/asserts.ts";
|
||||||
|
*
|
||||||
|
* Deno.bench(function myTestName() {
|
||||||
|
* assertEquals("hello", "hello");
|
||||||
|
* });
|
||||||
|
*
|
||||||
|
* Deno.bench(async function myOtherTestName() {
|
||||||
|
* const decoder = new TextDecoder("utf-8");
|
||||||
|
* const data = await Deno.readFile("hello_world.txt");
|
||||||
|
* assertEquals(decoder.decode(data), "Hello world");
|
||||||
|
* });
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* @category Testing
|
||||||
|
*/
|
||||||
|
export function bench(fn: () => void | Promise<void>): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register a benchmark test which will be run when `deno bench` is used on
|
||||||
|
* the command line and the containing module looks like a bench module.
|
||||||
|
*
|
||||||
|
* If the test function (`fn`) returns a promise or is async, the test runner
|
||||||
|
* will await resolution to consider the test complete.
|
||||||
|
*
|
||||||
|
* ```ts
|
||||||
|
* import { assertEquals } from "https://deno.land/std/testing/asserts.ts";
|
||||||
|
*
|
||||||
|
* Deno.bench(
|
||||||
|
* "My test description",
|
||||||
|
* { permissions: { read: true } },
|
||||||
|
* () => {
|
||||||
|
* assertEquals("hello", "hello");
|
||||||
|
* }
|
||||||
|
* );
|
||||||
|
*
|
||||||
|
* Deno.bench(
|
||||||
|
* "My async test description",
|
||||||
|
* { permissions: { read: false } },
|
||||||
|
* async () => {
|
||||||
|
* const decoder = new TextDecoder("utf-8");
|
||||||
|
* const data = await Deno.readFile("hello_world.txt");
|
||||||
|
* assertEquals(decoder.decode(data), "Hello world");
|
||||||
|
* }
|
||||||
|
* );
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* @category Testing
|
||||||
|
*/
|
||||||
|
export function bench(
|
||||||
|
name: string,
|
||||||
|
options: Omit<BenchDefinition, "fn" | "name">,
|
||||||
|
fn: () => void | Promise<void>,
|
||||||
|
): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register a benchmark test which will be run when `deno bench` is used on
|
||||||
|
* the command line and the containing module looks like a bench module.
|
||||||
|
*
|
||||||
|
* If the test function (`fn`) returns a promise or is async, the test runner
|
||||||
|
* will await resolution to consider the test complete.
|
||||||
|
*
|
||||||
|
* ```ts
|
||||||
|
* import { assertEquals } from "https://deno.land/std/testing/asserts.ts";
|
||||||
|
*
|
||||||
|
* Deno.bench(
|
||||||
|
* { name: "My test description", permissions: { read: true } },
|
||||||
|
* () => {
|
||||||
|
* assertEquals("hello", "hello");
|
||||||
|
* }
|
||||||
|
* );
|
||||||
|
*
|
||||||
|
* Deno.bench(
|
||||||
|
* { name: "My async test description", permissions: { read: false } },
|
||||||
|
* async () => {
|
||||||
|
* const decoder = new TextDecoder("utf-8");
|
||||||
|
* const data = await Deno.readFile("hello_world.txt");
|
||||||
|
* assertEquals(decoder.decode(data), "Hello world");
|
||||||
|
* }
|
||||||
|
* );
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* @category Testing
|
||||||
|
*/
|
||||||
|
export function bench(
|
||||||
|
options: Omit<BenchDefinition, "fn">,
|
||||||
|
fn: () => void | Promise<void>,
|
||||||
|
): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register a benchmark test which will be run when `deno bench` is used on
|
||||||
|
* the command line and the containing module looks like a bench module.
|
||||||
|
*
|
||||||
|
* If the test function (`fn`) returns a promise or is async, the test runner
|
||||||
|
* will await resolution to consider the test complete.
|
||||||
|
*
|
||||||
|
* ```ts
|
||||||
|
* import { assertEquals } from "https://deno.land/std/testing/asserts.ts";
|
||||||
|
*
|
||||||
|
* Deno.bench(
|
||||||
|
* { permissions: { read: true } },
|
||||||
|
* function myTestName() {
|
||||||
|
* assertEquals("hello", "hello");
|
||||||
|
* }
|
||||||
|
* );
|
||||||
|
*
|
||||||
|
* Deno.bench(
|
||||||
|
* { permissions: { read: false } },
|
||||||
|
* async function myOtherTestName() {
|
||||||
|
* const decoder = new TextDecoder("utf-8");
|
||||||
|
* const data = await Deno.readFile("hello_world.txt");
|
||||||
|
* assertEquals(decoder.decode(data), "Hello world");
|
||||||
|
* }
|
||||||
|
* );
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* @category Testing
|
||||||
|
*/
|
||||||
|
export function bench(
|
||||||
|
options: Omit<BenchDefinition, "fn" | "name">,
|
||||||
|
fn: () => void | Promise<void>,
|
||||||
|
): void;
|
||||||
|
|
||||||
/** Exit the Deno process with optional exit code.
|
/** Exit the Deno process with optional exit code.
|
||||||
*
|
*
|
||||||
* If no exit code is supplied then Deno will exit with return code of `0`.
|
* If no exit code is supplied then Deno will exit with return code of `0`.
|
||||||
|
|
243
cli/dts/lib.deno.unstable.d.ts
vendored
243
cli/dts/lib.deno.unstable.d.ts
vendored
|
@ -6,249 +6,6 @@
|
||||||
declare namespace Deno {
|
declare namespace Deno {
|
||||||
export {}; // stop default export type behavior
|
export {}; // stop default export type behavior
|
||||||
|
|
||||||
/** **UNSTABLE**: New API, yet to be vetted.
|
|
||||||
*
|
|
||||||
* The interface for defining a benchmark test using {@linkcode Deno.bench}.
|
|
||||||
*
|
|
||||||
* @category Testing
|
|
||||||
*/
|
|
||||||
export interface BenchDefinition {
|
|
||||||
/** The test function which will be benchmarked. */
|
|
||||||
fn: () => void | Promise<void>;
|
|
||||||
/** The name of the test, which will be used in displaying the results. */
|
|
||||||
name: string;
|
|
||||||
/** If truthy, the benchmark test will be ignored/skipped. */
|
|
||||||
ignore?: boolean;
|
|
||||||
/** Group name for the benchmark.
|
|
||||||
*
|
|
||||||
* Grouped benchmarks produce a group time summary, where the difference
|
|
||||||
* in performance between each test of the group is compared. */
|
|
||||||
group?: string;
|
|
||||||
/** Benchmark should be used as the baseline for other benchmarks.
|
|
||||||
*
|
|
||||||
* If there are multiple baselines in a group, the first one is used as the
|
|
||||||
* baseline. */
|
|
||||||
baseline?: boolean;
|
|
||||||
/** If at least one bench has `only` set to true, only run benches that have
|
|
||||||
* `only` set to `true` and fail the bench suite. */
|
|
||||||
only?: boolean;
|
|
||||||
/** Ensure the bench case does not prematurely cause the process to exit,
|
|
||||||
* for example via a call to {@linkcode Deno.exit}. Defaults to `true`. */
|
|
||||||
sanitizeExit?: boolean;
|
|
||||||
/** Specifies the permissions that should be used to run the bench.
|
|
||||||
*
|
|
||||||
* Set this to `"inherit"` to keep the calling thread's permissions.
|
|
||||||
*
|
|
||||||
* Set this to `"none"` to revoke all permissions.
|
|
||||||
*
|
|
||||||
* Defaults to "inherit".
|
|
||||||
*/
|
|
||||||
permissions?: Deno.PermissionOptions;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** **UNSTABLE**: New API, yet to be vetted.
|
|
||||||
*
|
|
||||||
* Register a benchmark test which will be run when `deno bench` is used on
|
|
||||||
* the command line and the containing module looks like a bench module.
|
|
||||||
*
|
|
||||||
* If the test function (`fn`) returns a promise or is async, the test runner
|
|
||||||
* will await resolution to consider the test complete.
|
|
||||||
*
|
|
||||||
* ```ts
|
|
||||||
* import { assertEquals } from "https://deno.land/std/testing/asserts.ts";
|
|
||||||
*
|
|
||||||
* Deno.bench({
|
|
||||||
* name: "example test",
|
|
||||||
* fn() {
|
|
||||||
* assertEquals("world", "world");
|
|
||||||
* },
|
|
||||||
* });
|
|
||||||
*
|
|
||||||
* Deno.bench({
|
|
||||||
* name: "example ignored test",
|
|
||||||
* ignore: Deno.build.os === "windows",
|
|
||||||
* fn() {
|
|
||||||
* // This test is ignored only on Windows machines
|
|
||||||
* },
|
|
||||||
* });
|
|
||||||
*
|
|
||||||
* Deno.bench({
|
|
||||||
* name: "example async test",
|
|
||||||
* async fn() {
|
|
||||||
* const decoder = new TextDecoder("utf-8");
|
|
||||||
* const data = await Deno.readFile("hello_world.txt");
|
|
||||||
* assertEquals(decoder.decode(data), "Hello world");
|
|
||||||
* }
|
|
||||||
* });
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* @category Testing
|
|
||||||
*/
|
|
||||||
export function bench(t: BenchDefinition): void;
|
|
||||||
|
|
||||||
/** **UNSTABLE**: New API, yet to be vetted.
|
|
||||||
*
|
|
||||||
* Register a benchmark test which will be run when `deno bench` is used on
|
|
||||||
* the command line and the containing module looks like a bench module.
|
|
||||||
*
|
|
||||||
* If the test function (`fn`) returns a promise or is async, the test runner
|
|
||||||
* will await resolution to consider the test complete.
|
|
||||||
*
|
|
||||||
* ```ts
|
|
||||||
* import { assertEquals } from "https://deno.land/std/testing/asserts.ts";
|
|
||||||
*
|
|
||||||
* Deno.bench("My test description", () => {
|
|
||||||
* assertEquals("hello", "hello");
|
|
||||||
* });
|
|
||||||
*
|
|
||||||
* Deno.bench("My async test description", async () => {
|
|
||||||
* const decoder = new TextDecoder("utf-8");
|
|
||||||
* const data = await Deno.readFile("hello_world.txt");
|
|
||||||
* assertEquals(decoder.decode(data), "Hello world");
|
|
||||||
* });
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* @category Testing
|
|
||||||
*/
|
|
||||||
export function bench(
|
|
||||||
name: string,
|
|
||||||
fn: () => void | Promise<void>,
|
|
||||||
): void;
|
|
||||||
|
|
||||||
/** **UNSTABLE**: New API, yet to be vetted.
|
|
||||||
*
|
|
||||||
* Register a benchmark test which will be run when `deno bench` is used on
|
|
||||||
* the command line and the containing module looks like a bench module.
|
|
||||||
*
|
|
||||||
* If the test function (`fn`) returns a promise or is async, the test runner
|
|
||||||
* will await resolution to consider the test complete.
|
|
||||||
*
|
|
||||||
* ```ts
|
|
||||||
* import { assertEquals } from "https://deno.land/std/testing/asserts.ts";
|
|
||||||
*
|
|
||||||
* Deno.bench(function myTestName() {
|
|
||||||
* assertEquals("hello", "hello");
|
|
||||||
* });
|
|
||||||
*
|
|
||||||
* Deno.bench(async function myOtherTestName() {
|
|
||||||
* const decoder = new TextDecoder("utf-8");
|
|
||||||
* const data = await Deno.readFile("hello_world.txt");
|
|
||||||
* assertEquals(decoder.decode(data), "Hello world");
|
|
||||||
* });
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* @category Testing
|
|
||||||
*/
|
|
||||||
export function bench(fn: () => void | Promise<void>): void;
|
|
||||||
|
|
||||||
/** **UNSTABLE**: New API, yet to be vetted.
|
|
||||||
*
|
|
||||||
* Register a benchmark test which will be run when `deno bench` is used on
|
|
||||||
* the command line and the containing module looks like a bench module.
|
|
||||||
*
|
|
||||||
* If the test function (`fn`) returns a promise or is async, the test runner
|
|
||||||
* will await resolution to consider the test complete.
|
|
||||||
*
|
|
||||||
* ```ts
|
|
||||||
* import { assertEquals } from "https://deno.land/std/testing/asserts.ts";
|
|
||||||
*
|
|
||||||
* Deno.bench(
|
|
||||||
* "My test description",
|
|
||||||
* { permissions: { read: true } },
|
|
||||||
* () => {
|
|
||||||
* assertEquals("hello", "hello");
|
|
||||||
* }
|
|
||||||
* );
|
|
||||||
*
|
|
||||||
* Deno.bench(
|
|
||||||
* "My async test description",
|
|
||||||
* { permissions: { read: false } },
|
|
||||||
* async () => {
|
|
||||||
* const decoder = new TextDecoder("utf-8");
|
|
||||||
* const data = await Deno.readFile("hello_world.txt");
|
|
||||||
* assertEquals(decoder.decode(data), "Hello world");
|
|
||||||
* }
|
|
||||||
* );
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* @category Testing
|
|
||||||
*/
|
|
||||||
export function bench(
|
|
||||||
name: string,
|
|
||||||
options: Omit<BenchDefinition, "fn" | "name">,
|
|
||||||
fn: () => void | Promise<void>,
|
|
||||||
): void;
|
|
||||||
|
|
||||||
/** **UNSTABLE**: New API, yet to be vetted.
|
|
||||||
*
|
|
||||||
* Register a benchmark test which will be run when `deno bench` is used on
|
|
||||||
* the command line and the containing module looks like a bench module.
|
|
||||||
*
|
|
||||||
* If the test function (`fn`) returns a promise or is async, the test runner
|
|
||||||
* will await resolution to consider the test complete.
|
|
||||||
*
|
|
||||||
* ```ts
|
|
||||||
* import { assertEquals } from "https://deno.land/std/testing/asserts.ts";
|
|
||||||
*
|
|
||||||
* Deno.bench(
|
|
||||||
* { name: "My test description", permissions: { read: true } },
|
|
||||||
* () => {
|
|
||||||
* assertEquals("hello", "hello");
|
|
||||||
* }
|
|
||||||
* );
|
|
||||||
*
|
|
||||||
* Deno.bench(
|
|
||||||
* { name: "My async test description", permissions: { read: false } },
|
|
||||||
* async () => {
|
|
||||||
* const decoder = new TextDecoder("utf-8");
|
|
||||||
* const data = await Deno.readFile("hello_world.txt");
|
|
||||||
* assertEquals(decoder.decode(data), "Hello world");
|
|
||||||
* }
|
|
||||||
* );
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* @category Testing
|
|
||||||
*/
|
|
||||||
export function bench(
|
|
||||||
options: Omit<BenchDefinition, "fn">,
|
|
||||||
fn: () => void | Promise<void>,
|
|
||||||
): void;
|
|
||||||
|
|
||||||
/** **UNSTABLE**: New API, yet to be vetted.
|
|
||||||
*
|
|
||||||
* Register a benchmark test which will be run when `deno bench` is used on
|
|
||||||
* the command line and the containing module looks like a bench module.
|
|
||||||
*
|
|
||||||
* If the test function (`fn`) returns a promise or is async, the test runner
|
|
||||||
* will await resolution to consider the test complete.
|
|
||||||
*
|
|
||||||
* ```ts
|
|
||||||
* import { assertEquals } from "https://deno.land/std/testing/asserts.ts";
|
|
||||||
*
|
|
||||||
* Deno.bench(
|
|
||||||
* { permissions: { read: true } },
|
|
||||||
* function myTestName() {
|
|
||||||
* assertEquals("hello", "hello");
|
|
||||||
* }
|
|
||||||
* );
|
|
||||||
*
|
|
||||||
* Deno.bench(
|
|
||||||
* { permissions: { read: false } },
|
|
||||||
* async function myOtherTestName() {
|
|
||||||
* const decoder = new TextDecoder("utf-8");
|
|
||||||
* const data = await Deno.readFile("hello_world.txt");
|
|
||||||
* assertEquals(decoder.decode(data), "Hello world");
|
|
||||||
* }
|
|
||||||
* );
|
|
||||||
* ```
|
|
||||||
*
|
|
||||||
* @category Testing
|
|
||||||
*/
|
|
||||||
export function bench(
|
|
||||||
options: Omit<BenchDefinition, "fn" | "name">,
|
|
||||||
fn: () => void | Promise<void>,
|
|
||||||
): void;
|
|
||||||
|
|
||||||
/** **UNSTABLE**: New API, yet to be vetted.
|
/** **UNSTABLE**: New API, yet to be vetted.
|
||||||
*
|
*
|
||||||
* Retrieve the process umask. If `mask` is provided, sets the process umask.
|
* Retrieve the process umask. If `mask` is provided, sets the process umask.
|
||||||
|
|
|
@ -21,7 +21,6 @@ use uuid::Uuid;
|
||||||
pub fn init(
|
pub fn init(
|
||||||
sender: UnboundedSender<BenchEvent>,
|
sender: UnboundedSender<BenchEvent>,
|
||||||
filter: TestFilter,
|
filter: TestFilter,
|
||||||
unstable: bool,
|
|
||||||
) -> Extension {
|
) -> Extension {
|
||||||
Extension::builder()
|
Extension::builder()
|
||||||
.ops(vec![
|
.ops(vec![
|
||||||
|
@ -31,36 +30,15 @@ pub fn init(
|
||||||
op_register_bench::decl(),
|
op_register_bench::decl(),
|
||||||
op_dispatch_bench_event::decl(),
|
op_dispatch_bench_event::decl(),
|
||||||
op_bench_now::decl(),
|
op_bench_now::decl(),
|
||||||
op_bench_check_unstable::decl(),
|
|
||||||
])
|
])
|
||||||
.state(move |state| {
|
.state(move |state| {
|
||||||
state.put(sender.clone());
|
state.put(sender.clone());
|
||||||
state.put(filter.clone());
|
state.put(filter.clone());
|
||||||
state.put(Unstable(unstable));
|
|
||||||
Ok(())
|
Ok(())
|
||||||
})
|
})
|
||||||
.build()
|
.build()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Unstable(pub bool);
|
|
||||||
|
|
||||||
fn check_unstable(state: &OpState, api_name: &str) {
|
|
||||||
let unstable = state.borrow::<Unstable>();
|
|
||||||
|
|
||||||
if !unstable.0 {
|
|
||||||
eprintln!(
|
|
||||||
"Unstable API '{}'. The --unstable flag must be provided.",
|
|
||||||
api_name
|
|
||||||
);
|
|
||||||
std::process::exit(70);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[op]
|
|
||||||
fn op_bench_check_unstable(state: &mut OpState) {
|
|
||||||
check_unstable(state, "Deno.bench");
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
struct PermissionsHolder(Uuid, Permissions);
|
struct PermissionsHolder(Uuid, Permissions);
|
||||||
|
|
||||||
|
|
|
@ -4,165 +4,158 @@ use crate::itest;
|
||||||
use deno_core::url::Url;
|
use deno_core::url::Url;
|
||||||
use test_util as util;
|
use test_util as util;
|
||||||
|
|
||||||
itest!(requires_unstable {
|
|
||||||
args: "bench bench/requires_unstable.js",
|
|
||||||
exit_code: 70,
|
|
||||||
output: "bench/requires_unstable.out",
|
|
||||||
});
|
|
||||||
|
|
||||||
itest!(overloads {
|
itest!(overloads {
|
||||||
args: "bench --unstable bench/overloads.ts",
|
args: "bench bench/overloads.ts",
|
||||||
exit_code: 0,
|
exit_code: 0,
|
||||||
output: "bench/overloads.out",
|
output: "bench/overloads.out",
|
||||||
});
|
});
|
||||||
|
|
||||||
itest!(meta {
|
itest!(meta {
|
||||||
args: "bench --unstable bench/meta.ts",
|
args: "bench bench/meta.ts",
|
||||||
exit_code: 0,
|
exit_code: 0,
|
||||||
output: "bench/meta.out",
|
output: "bench/meta.out",
|
||||||
});
|
});
|
||||||
|
|
||||||
itest!(pass {
|
itest!(pass {
|
||||||
args: "bench --unstable bench/pass.ts",
|
args: "bench bench/pass.ts",
|
||||||
exit_code: 0,
|
exit_code: 0,
|
||||||
output: "bench/pass.out",
|
output: "bench/pass.out",
|
||||||
});
|
});
|
||||||
|
|
||||||
itest!(ignore {
|
itest!(ignore {
|
||||||
args: "bench --unstable bench/ignore.ts",
|
args: "bench bench/ignore.ts",
|
||||||
exit_code: 0,
|
exit_code: 0,
|
||||||
output: "bench/ignore.out",
|
output: "bench/ignore.out",
|
||||||
});
|
});
|
||||||
|
|
||||||
itest!(ignore_permissions {
|
itest!(ignore_permissions {
|
||||||
args: "bench --unstable bench/ignore_permissions.ts",
|
args: "bench bench/ignore_permissions.ts",
|
||||||
exit_code: 0,
|
exit_code: 0,
|
||||||
output: "bench/ignore_permissions.out",
|
output: "bench/ignore_permissions.out",
|
||||||
});
|
});
|
||||||
|
|
||||||
itest!(fail {
|
itest!(fail {
|
||||||
args: "bench --unstable bench/fail.ts",
|
args: "bench bench/fail.ts",
|
||||||
exit_code: 1,
|
exit_code: 1,
|
||||||
output: "bench/fail.out",
|
output: "bench/fail.out",
|
||||||
});
|
});
|
||||||
|
|
||||||
itest!(collect {
|
itest!(collect {
|
||||||
args: "bench --unstable --ignore=bench/collect/ignore bench/collect",
|
args: "bench --ignore=bench/collect/ignore bench/collect",
|
||||||
exit_code: 0,
|
exit_code: 0,
|
||||||
output: "bench/collect.out",
|
output: "bench/collect.out",
|
||||||
});
|
});
|
||||||
|
|
||||||
itest!(load_unload {
|
itest!(load_unload {
|
||||||
args: "bench --unstable bench/load_unload.ts",
|
args: "bench bench/load_unload.ts",
|
||||||
exit_code: 0,
|
exit_code: 0,
|
||||||
output: "bench/load_unload.out",
|
output: "bench/load_unload.out",
|
||||||
});
|
});
|
||||||
|
|
||||||
itest!(interval {
|
itest!(interval {
|
||||||
args: "bench --unstable bench/interval.ts",
|
args: "bench bench/interval.ts",
|
||||||
exit_code: 0,
|
exit_code: 0,
|
||||||
output: "bench/interval.out",
|
output: "bench/interval.out",
|
||||||
});
|
});
|
||||||
|
|
||||||
itest!(quiet {
|
itest!(quiet {
|
||||||
args: "bench --unstable --quiet bench/quiet.ts",
|
args: "bench --quiet bench/quiet.ts",
|
||||||
exit_code: 0,
|
exit_code: 0,
|
||||||
output: "bench/quiet.out",
|
output: "bench/quiet.out",
|
||||||
});
|
});
|
||||||
|
|
||||||
itest!(only {
|
itest!(only {
|
||||||
args: "bench --unstable bench/only.ts",
|
args: "bench bench/only.ts",
|
||||||
exit_code: 1,
|
exit_code: 1,
|
||||||
output: "bench/only.out",
|
output: "bench/only.out",
|
||||||
});
|
});
|
||||||
|
|
||||||
itest!(multifile_summary {
|
itest!(multifile_summary {
|
||||||
args: "bench --unstable bench/group_baseline.ts bench/pass.ts bench/group_baseline.ts",
|
args: "bench bench/group_baseline.ts bench/pass.ts bench/group_baseline.ts",
|
||||||
exit_code: 0,
|
exit_code: 0,
|
||||||
output: "bench/multifile_summary.out",
|
output: "bench/multifile_summary.out",
|
||||||
});
|
});
|
||||||
|
|
||||||
itest!(no_check {
|
itest!(no_check {
|
||||||
args: "bench --unstable --no-check bench/no_check.ts",
|
args: "bench --no-check bench/no_check.ts",
|
||||||
exit_code: 1,
|
exit_code: 1,
|
||||||
output: "bench/no_check.out",
|
output: "bench/no_check.out",
|
||||||
});
|
});
|
||||||
|
|
||||||
itest!(allow_all {
|
itest!(allow_all {
|
||||||
args: "bench --unstable --allow-all bench/allow_all.ts",
|
args: "bench --allow-all bench/allow_all.ts",
|
||||||
exit_code: 0,
|
exit_code: 0,
|
||||||
output: "bench/allow_all.out",
|
output: "bench/allow_all.out",
|
||||||
});
|
});
|
||||||
|
|
||||||
itest!(allow_none {
|
itest!(allow_none {
|
||||||
args: "bench --unstable bench/allow_none.ts",
|
args: "bench bench/allow_none.ts",
|
||||||
exit_code: 1,
|
exit_code: 1,
|
||||||
output: "bench/allow_none.out",
|
output: "bench/allow_none.out",
|
||||||
});
|
});
|
||||||
|
|
||||||
itest!(exit_sanitizer {
|
itest!(exit_sanitizer {
|
||||||
args: "bench --unstable bench/exit_sanitizer.ts",
|
args: "bench bench/exit_sanitizer.ts",
|
||||||
output: "bench/exit_sanitizer.out",
|
output: "bench/exit_sanitizer.out",
|
||||||
exit_code: 1,
|
exit_code: 1,
|
||||||
});
|
});
|
||||||
|
|
||||||
itest!(clear_timeout {
|
itest!(clear_timeout {
|
||||||
args: "bench --unstable bench/clear_timeout.ts",
|
args: "bench bench/clear_timeout.ts",
|
||||||
exit_code: 0,
|
exit_code: 0,
|
||||||
output: "bench/clear_timeout.out",
|
output: "bench/clear_timeout.out",
|
||||||
});
|
});
|
||||||
|
|
||||||
itest!(finally_timeout {
|
itest!(finally_timeout {
|
||||||
args: "bench --unstable bench/finally_timeout.ts",
|
args: "bench bench/finally_timeout.ts",
|
||||||
exit_code: 1,
|
exit_code: 1,
|
||||||
output: "bench/finally_timeout.out",
|
output: "bench/finally_timeout.out",
|
||||||
});
|
});
|
||||||
|
|
||||||
itest!(group_baseline {
|
itest!(group_baseline {
|
||||||
args: "bench --unstable bench/group_baseline.ts",
|
args: "bench bench/group_baseline.ts",
|
||||||
exit_code: 0,
|
exit_code: 0,
|
||||||
output: "bench/group_baseline.out",
|
output: "bench/group_baseline.out",
|
||||||
});
|
});
|
||||||
|
|
||||||
itest!(unresolved_promise {
|
itest!(unresolved_promise {
|
||||||
args: "bench --unstable bench/unresolved_promise.ts",
|
args: "bench bench/unresolved_promise.ts",
|
||||||
exit_code: 1,
|
exit_code: 1,
|
||||||
output: "bench/unresolved_promise.out",
|
output: "bench/unresolved_promise.out",
|
||||||
});
|
});
|
||||||
|
|
||||||
itest!(unhandled_rejection {
|
itest!(unhandled_rejection {
|
||||||
args: "bench --unstable bench/unhandled_rejection.ts",
|
args: "bench bench/unhandled_rejection.ts",
|
||||||
exit_code: 1,
|
exit_code: 1,
|
||||||
output: "bench/unhandled_rejection.out",
|
output: "bench/unhandled_rejection.out",
|
||||||
});
|
});
|
||||||
|
|
||||||
itest!(filter {
|
itest!(filter {
|
||||||
args: "bench --unstable --filter=foo bench/filter",
|
args: "bench --filter=foo bench/filter",
|
||||||
exit_code: 0,
|
exit_code: 0,
|
||||||
output: "bench/filter.out",
|
output: "bench/filter.out",
|
||||||
});
|
});
|
||||||
|
|
||||||
itest!(no_prompt_by_default {
|
itest!(no_prompt_by_default {
|
||||||
args: "bench --quiet --unstable bench/no_prompt_by_default.ts",
|
args: "bench --quiet bench/no_prompt_by_default.ts",
|
||||||
exit_code: 1,
|
exit_code: 1,
|
||||||
output: "bench/no_prompt_by_default.out",
|
output: "bench/no_prompt_by_default.out",
|
||||||
});
|
});
|
||||||
|
|
||||||
itest!(no_prompt_with_denied_perms {
|
itest!(no_prompt_with_denied_perms {
|
||||||
args:
|
args: "bench --quiet --allow-read bench/no_prompt_with_denied_perms.ts",
|
||||||
"bench --quiet --unstable --allow-read bench/no_prompt_with_denied_perms.ts",
|
|
||||||
exit_code: 1,
|
exit_code: 1,
|
||||||
output: "bench/no_prompt_with_denied_perms.out",
|
output: "bench/no_prompt_with_denied_perms.out",
|
||||||
});
|
});
|
||||||
|
|
||||||
itest!(check_local_by_default {
|
itest!(check_local_by_default {
|
||||||
args: "bench --quiet --unstable bench/check_local_by_default.ts",
|
args: "bench --quiet bench/check_local_by_default.ts",
|
||||||
output: "bench/check_local_by_default.out",
|
output: "bench/check_local_by_default.out",
|
||||||
http_server: true,
|
http_server: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
itest!(check_local_by_default2 {
|
itest!(check_local_by_default2 {
|
||||||
args: "bench --quiet --unstable bench/check_local_by_default2.ts",
|
args: "bench --quiet bench/check_local_by_default2.ts",
|
||||||
output: "bench/check_local_by_default2.out",
|
output: "bench/check_local_by_default2.out",
|
||||||
http_server: true,
|
http_server: true,
|
||||||
exit_code: 1,
|
exit_code: 1,
|
||||||
|
@ -173,7 +166,6 @@ fn recursive_permissions_pledge() {
|
||||||
let output = util::deno_cmd()
|
let output = util::deno_cmd()
|
||||||
.current_dir(util::testdata_path())
|
.current_dir(util::testdata_path())
|
||||||
.arg("bench")
|
.arg("bench")
|
||||||
.arg("--unstable")
|
|
||||||
.arg("bench/recursive_permissions_pledge.js")
|
.arg("bench/recursive_permissions_pledge.js")
|
||||||
.stderr(std::process::Stdio::piped())
|
.stderr(std::process::Stdio::piped())
|
||||||
.spawn()
|
.spawn()
|
||||||
|
@ -194,7 +186,7 @@ fn file_protocol() {
|
||||||
.to_string();
|
.to_string();
|
||||||
|
|
||||||
(util::CheckOutputIntegrationTest {
|
(util::CheckOutputIntegrationTest {
|
||||||
args_vec: vec!["bench", "--unstable", &file_url],
|
args_vec: vec!["bench", &file_url],
|
||||||
exit_code: 0,
|
exit_code: 0,
|
||||||
output: "bench/file_protocol.out",
|
output: "bench/file_protocol.out",
|
||||||
..Default::default()
|
..Default::default()
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
Deno.bench("bench0", () => {});
|
|
|
@ -1 +0,0 @@
|
||||||
Unstable API 'Deno.bench'. The --unstable flag must be provided.
|
|
|
@ -356,11 +356,7 @@ async fn bench_specifier(
|
||||||
&ps,
|
&ps,
|
||||||
specifier.clone(),
|
specifier.clone(),
|
||||||
permissions,
|
permissions,
|
||||||
vec![ops::bench::init(
|
vec![ops::bench::init(channel.clone(), filter)],
|
||||||
channel.clone(),
|
|
||||||
filter,
|
|
||||||
ps.options.unstable(),
|
|
||||||
)],
|
|
||||||
Default::default(),
|
Default::default(),
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
|
@ -737,7 +737,6 @@
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ops.op_bench_check_unstable();
|
|
||||||
let benchDesc;
|
let benchDesc;
|
||||||
const defaults = {
|
const defaults = {
|
||||||
ignore: false,
|
ignore: false,
|
||||||
|
|
Loading…
Reference in a new issue