import { bench, group, run } from "./runner.mjs";
import fastDeepEquals from "fast-deep-equal/es6/index";
// const Date = globalThis.Date;
function func1() {}
function func2() {}
const s = Symbol("foo");
const a1 = [1, 2, 3, 4];
a1[s] = "f00";
const a2 = [1, 2, 3, 4];
a2[s] = "f00";
const e1 = new Set();
e1.add([1, 2, 3]);
e1.add("test1");
e1.add(498);
e1.add({ a: 1, b: 2 });
e1.add({ a: 1, b: 434221 });
e1.add({ a: 1, b: 25 });
e1.add({ a: 1, b: 4 });
e1.add({ a: 1, b: 2667 });
e1.add({ a: 1, b: 2 });
e1.add({ a: 1, b: 23426 });
e1.add({ a: 1, b: 672 });
e1.add({ a: 1, b: 28465 });
const e2 = new Set();
e2.add([1, 2, 3]);
e2.add("test1");
e2.add(498);
e1.add({ a: 1, b: 2 });
e1.add({ a: 1, b: 434221 });
e1.add({ a: 1, b: 25 });
e1.add({ a: 1, b: 4 });
e1.add({ a: 1, b: 2667 });
e1.add({ a: 1, b: 2 });
e1.add({ a: 1, b: 23426 });
e1.add({ a: 1, b: 672 });
e1.add({ a: 1, b: 28465 });
const d1 = new Set();
d1.add({ a: 1, b: 2 });
const d2 = new Set();
d2.add({ a: 1, b: 2 });
const fixture = [
{
description: "scalars",
tests: [
{
description: "equal numbers",
value1: 1,
value2: 1,
equal: true,
},
{
description: "not equal numbers",
value1: 1,
value2: 2,
equal: false,
},
{
description: "number and array are not equal",
value1: 1,
value2: [],
equal: false,
},
{
description: "0 and null are not equal",
value1: 0,
value2: null,
equal: false,
},
{
description: "equal strings",
value1: "azzzz",
value2: "azzzz",
equal: true,
},
{
description: "not equal strings",
value1: "azzzz",
value2: "bzzzz",
equal: false,
},
{
description: "empty string and null are not equal",
value1: "",
value2: null,
equal: false,
},
{
description: "null is equal to null",
value1: null,
value2: null,
equal: true,
},
{
description: "equal booleans (true)",
value1: true,
value2: true,
equal: true,
},
{
description: "equal booleans (false)",
value1: false,
value2: false,
equal: true,
},
{
description: "not equal booleans",
value1: true,
value2: false,
equal: false,
},
{
description: "1 and true are not equal",
value1: 1,
value2: true,
equal: false,
},
{
description: "0 and false are not equal",
value1: 0,
value2: false,
equal: false,
},
{
description: "NaN and NaN are equal",
value1: NaN,
value2: NaN,
equal: true,
},
{
description: "0 and -0 are equal",
value1: 0,
value2: -0,
equal: true,
},
{
description: "Infinity and Infinity are equal",
value1: Infinity,
value2: Infinity,
equal: true,
},
{
description: "Infinity and -Infinity are not equal",
value1: Infinity,
value2: -Infinity,
equal: false,
},
],
},
{
description: "objects",
tests: [
{
description: "empty objects are equal",
value1: {},
value2: {},
equal: true,
},
{
description: 'equal objects (same properties "order")',
value1: { a: 1, b: "2" },
value2: { a: 1, b: "2" },
equal: true,
},
{
description: 'equal objects (different properties "order")',
value1: { a: 1, b: "2" },
value2: { b: "2", a: 1 },
equal: true,
},
{
description: "not equal objects (extra property)",
value1: { a: 1, b: "2" },
value2: { a: 1, b: "2", c: [] },
equal: false,
},
{
description: "not equal objects (different property values)",
value1: { a: 1, b: "2", c: 3 },
value2: { a: 1, b: "2", c: 4 },
equal: false,
},
{
description: "not equal objects (different properties)",
value1: { a: 1, b: "2", c: 3 },
value2: { a: 1, b: "2", d: 3 },
equal: false,
},
{
description: "equal objects (same sub-properties)",
value1: { a: [{ b: "c" }] },
value2: { a: [{ b: "c" }] },
equal: true,
},
{
description: "not equal objects (different sub-property value)",
value1: { a: [{ b: "c" }] },
value2: { a: [{ b: "d" }] },
equal: false,
},
{
description: "not equal objects (different sub-property)",
value1: { a: [{ b: "c" }] },
value2: { a: [{ c: "c" }] },
equal: false,
},
{
description: "empty array and empty object are not equal",
value1: {},
value2: [],
equal: false,
},
{
description: "object with extra undefined properties are not equal #1",
value1: {},
value2: { foo: undefined },
equal: false,
},
{
description: "object with extra undefined properties are not equal #2",
value1: { foo: undefined },
value2: {},
equal: false,
},
{
description: "object with extra undefined properties are not equal #3",
value1: { foo: undefined },
value2: { bar: undefined },
equal: false,
},
{
description: "nulls are equal",
value1: null,
value2: null,
equal: true,
},
{
description: "null and undefined are not equal",
value1: null,
value2: undefined,
equal: false,
},
{
description: "null and empty object are not equal",
value1: null,
value2: {},
equal: false,
},
{
description: "undefined and empty object are not equal",
value1: undefined,
value2: {},
equal: false,
},
{
description: "objects with different `toString` functions returning same values are equal",
value1: { toString: () => "Hello world!" },
value2: { toString: () => "Hello world!" },
equal: true,
},
{
description: "objects with `toString` functions returning different values are not equal",
value1: { toString: () => "Hello world!" },
value2: { toString: () => "Hi!" },
equal: false,
},
],
},
{
description: "arrays",
tests: [
{
description: "two empty arrays are equal",
value1: [],
value2: [],
equal: true,
},
{
description: "equal arrays",
value1: [1, 2, 3],
value2: [1, 2, 3],
equal: true,
},
{
description: "equal arrays with symbols",
value1: a1,
value2: a2,
equal: true,
},
// {
// description: "not equal arrays (different item)",
// value1: [1, 2, 3],
// value2: [1, 2, 4],
// equal: false,
// },
// {
// description: "not equal arrays (different length)",
// value1: [1, 2, 3],
// value2: [1, 2],
// equal: false,
// },
{
description: "equal arrays of objects",
value1: [
...Array.from({ length: 200000 }, i => ({
a: 1,
b: 2,
})),
],
value2: [
...Array.from({ length: 200000 }, i => ({
a: 1,
b: 2,
})),
],
equal: true,
},
{
description: "equal objects",
value1: {
a: 1,
b: 2,
c: 3,
d: 4,
// get foo() {
// return 1;
// },
},
value2: {
a: 1,
b: 2,
c: 3,
d: 4,
// get foo() {
// return 1;
// },
},
equal: true,
},
{
description: "equal sets",
value1: d1,
value2: d2,
equal: true,
},
// {
// description: "not equal arrays of objects",
// value1: [{ a: "a" }, { b: "b" }],
// value2: [{ a: "a" }, { b: "c" }],
// equal: false,
// },
// {
// description: "pseudo array and equivalent array are not equal",
// value1: { 0: 0, 1: 1, length: 2 },
// value2: [0, 1],
// equal: false,
// },
],
},
{
description: "Date objects",
tests: [
{
description: "equal date objects",
value1: new Date("2017-06-16T21:36:48.362Z"),
value2: new Date("2017-06-16T21:36:48.362Z"),
equal: true,
},
{
description: "not equal date objects",
value1: new Date("2017-06-16T21:36:48.362Z"),
value2: new Date("2017-01-01T00:00:00.000Z"),
equal: false,
},
{
description: "date and string are not equal",
value1: new Date("2017-06-16T21:36:48.362Z"),
value2: "2017-06-16T21:36:48.362Z",
equal: false,
},
{
description: "date and object are not equal",
value1: new Date("2017-06-16T21:36:48.362Z"),
value2: {},
equal: false,
},
],
},
{
description: "RegExp objects",
tests: [
{
description: "equal RegExp objects",
value1: /foo/,
value2: /foo/,
equal: true,
},
{
description: "not equal RegExp objects (different pattern)",
value1: /foo/,
value2: /bar/,
equal: false,
},
{
description: "not equal RegExp objects (different flags)",
value1: /foo/,
value2: /foo/i,
equal: false,
},
{
description: "RegExp and string are not equal",
value1: /foo/,
value2: "foo",
equal: false,
},
{
description: "RegExp and object are not equal",
value1: /foo/,
value2: {},
equal: false,
},
],
},
{
description: "functions",
tests: [
{
description: "same function is equal",
value1: func1,
value2: func1,
equal: true,
},
{
description: "different functions are not equal",
value1: func1,
value2: func2,
equal: false,
},
],
},
{
description: "sample objects",
tests: [
{
description: "big object",
value1: {
prop1: "value1",
prop2: "value2",
prop3: "value3",
prop4: {
subProp1: "sub value1",
subProp2: {
subSubProp1: "sub sub value1",
subSubProp2: [1, 2, { prop2: 1, prop: 2 }, 4, 5],
},
},
prop5: 1000,
// prop6: new Date(2016, 2, 10),
},
value2: {
prop5: 1000,
prop3: "value3",
prop1: "value1",
prop2: "value2",
// prop6: new Date(2016, 2, 10),
prop4: {
subProp2: {
subSubProp1: "sub sub value1",
subSubProp2: [1, 2, { prop2: 1, prop: 2 }, 4, 5],
},
subProp1: "sub value1",
},
},
equal: true,
},
],
},
];
for (let { tests, description } of fixture) {
// if (description === "sample objects") {
for (let { description: describe, value1, value2, equal } of tests) {
var expected;
group(describe, () => {
for (let equalsFn of [Bun.deepEquals, fastDeepEquals]) {
bench(equalsFn.name, () => {
expected = equalsFn(value1, value2);
if (expected !== equal) {
throw new Error(`Expected ${expected} to be ${equal} for ${description}`);
}
});
}
});
// }
}
}
await run();
e='request-body-stream'>request-body-stream
reserve-commands
revert-5167-dylan/decode-regex-if-needed
rfc/bun-bundler-api
rfc/bunfig-overhaul
save-in-update
sdl
test/action
types/mock
types/readable-stream-default
types/tty
u/vjpr/zig-0.10
xHyroM/types/expose-Bun-Env
Unnamed repository; edit this file 'description' to name the repository.
Age Commit message (Collapse ) Author Files Lines
* Fix bugs
* Fix bugs
* Revert "Fix bugs"
This reverts commit 608639eb2214fdf4310477051ce47d20702b5dd0.
* some progess
* needs more tests
* make tests easier to debug
* get metadata for constructor arg decorators
* fix some things
* merge `emitDecoratorMetadata` option
* remove `^`
* bundler tests and get option from tsconfig earlier
* remove spaces
* fix tests
* Always call `Error.prepareStackTrace`
* Support node:vm
* Remove this
* Handle more cases
---------
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Fixes #5800
* Fix path used in bunx
* Add test
* Use a different package
---------
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
The URL to download the manifest for Artifact Registry in Google
is larger than 4092 bytes.
cf. issue #4748
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>