std/bytes/equals_test.ts
Asher Gomez 3149cdbc81
fix(bytes): equals() works with subarray (#4630)
fix(bytes): `equals()` works with `.subarray()`
2024-04-23 16:50:21 +09:00

51 lines
1.8 KiB
TypeScript

// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
import { equals } from "./equals.ts";
import { assert, assertEquals, assertNotEquals } from "../assert/mod.ts";
Deno.test("equals()", () => {
const v = equals(new Uint8Array([0, 1, 2, 3]), new Uint8Array([0, 1, 2, 3]));
const v2 = equals(new Uint8Array([0, 1, 2, 2]), new Uint8Array([0, 1, 2, 3]));
const v3 = equals(new Uint8Array([0, 1, 2, 3]), new Uint8Array([0, 1, 2]));
assert(v);
assert(!v2);
assert(!v3);
});
Deno.test("equals() handles randomized testing", () => {
// run tests before and after cutoff
for (let len = 995; len <= 1005; len++) {
const arr1 = crypto.getRandomValues(new Uint8Array(len));
const arr2 = crypto.getRandomValues(new Uint8Array(len));
const arr3 = arr1.slice(0);
// the chance of arr1 equaling arr2 is basically 0
// but introduce an inequality at the end just in case
arr2[arr2.length - 1] = arr1.at(-1)! ^ 1;
// arr3 is arr1 but with an inequality in the very last element
// this is to test the equality check when length isn't a multiple of 4
arr3[arr3.length - 1] ^= 1;
// arrays with same underlying ArrayBuffer should be equal
assert(equals(arr1, arr1));
// equal arrays with different underlying ArrayBuffers should be equal
assert(equals(arr1, arr1.slice(0)));
// inequal arrays should be inequal
assert(!equals(arr1, arr2));
assert(!equals(arr1, arr3));
}
});
// https://github.com/denoland/deno_std/issues/3603
Deno.test("equals() works with .subarray()", () => {
const a = new Uint8Array(1001).subarray(1);
const b = new Uint8Array(1000);
a[0] = 123;
b[0] = 123;
assertEquals(a, b);
assert(equals(a, b));
const c = new Uint8Array(1001).subarray(1);
const d = new Uint8Array(1000);
c[999] = 123;
assertNotEquals(c, d); // ok
assert(!equals(c, d));
});