Add and arrayContentEquals

This commit is contained in:
Simon Warta 2020-08-07 10:37:57 +02:00
parent 2d56b1ae89
commit 6f36b425d1
6 changed files with 66 additions and 0 deletions

View File

@ -5,6 +5,7 @@
- @cosmjs/cli: Import `encodeBech32Pubkey` and `decodeBech32Pubkey` by default.
- @cosmjs/launchpad: Add ed25519 support to `encodeBech32Pubkey`.
- @cosmjs/launchpad: Add `encodeAminoPubkey` and `decodeAminoPubkey`.
- @cosmjs/utils: Add `arrayContentEquals`.
## 0.22.0 (2020-08-03)

View File

@ -0,0 +1,33 @@
import { arrayContentEquals } from "./arrays";
describe("array", () => {
describe("arrayContentEquals", () => {
it("can compare number arrays", () => {
expect(arrayContentEquals([1, 2, 3], [1, 2, 3])).toEqual(true);
expect(arrayContentEquals([1, 2, 3], [1, 2, 3, 4])).toEqual(false);
expect(arrayContentEquals([1, 2, 3], [3, 2, 1])).toEqual(false);
});
it("can compare string arrays", () => {
expect(arrayContentEquals(["a", "b"], ["a", "b"])).toEqual(true);
expect(arrayContentEquals(["a", "b"], ["a", "b", "c"])).toEqual(false);
expect(arrayContentEquals(["a", "b"], ["b", "a"])).toEqual(false);
});
it("can compare bool arrays", () => {
expect(arrayContentEquals([true, false], [true, false])).toEqual(true);
expect(arrayContentEquals([true, false], [true, false, true])).toEqual(false);
expect(arrayContentEquals([true, false], [false, true])).toEqual(false);
});
it("can compare different array types", () => {
expect(arrayContentEquals([1, 2, 3], new Uint8Array([1, 2, 3]))).toEqual(true);
expect(arrayContentEquals([1, 2, 3], new Uint8Array([3, 2, 1]))).toEqual(false);
});
it("works for empty arrays", () => {
expect(arrayContentEquals([], [])).toEqual(true);
expect(arrayContentEquals([], new Uint8Array([]))).toEqual(true);
});
});
});

View File

@ -0,0 +1,18 @@
/**
* Compares the content of two arrays-like objects for equality.
*
* Equality is defined as having equal length and element values, where element equality means `===` returning `true`.
*
* This allows you to compare the content of a Buffer, Uint8Array or number[], ignoring the specific type.
* As a consequence, this returns different results than Jasmine's `toEqual`, which ensures elements have the same type.
*/
export function arrayContentEquals<T extends string | number | boolean>(
a: ArrayLike<T>,
b: ArrayLike<T>,
): boolean {
if (a.length !== b.length) return false;
for (let i = 0; i < a.length; ++i) {
if (a[i] !== b[i]) return false;
}
return true;
}

View File

@ -1,3 +1,4 @@
export { arrayContentEquals } from "./arrays";
export { assert } from "./assert";
export { sleep } from "./sleep";
export { isNonNullObject, isUint8Array } from "./typechecks";

12
packages/utils/types/arrays.d.ts vendored Normal file
View File

@ -0,0 +1,12 @@
/**
* Compares the content of two arrays-like objects for equality.
*
* Equality is defined as having equal length and element values, where element equality means `===` returning `true`.
*
* This allows you to compare the content of a Buffer, Uint8Array or number[], ignoring the specific type.
* As a consequence, this returns different results than Jasmine's `toEqual`, which ensures elements have the same type.
*/
export declare function arrayContentEquals<T extends string | number | boolean>(
a: ArrayLike<T>,
b: ArrayLike<T>,
): boolean;

View File

@ -1,3 +1,4 @@
export { arrayContentEquals } from "./arrays";
export { assert } from "./assert";
export { sleep } from "./sleep";
export { isNonNullObject, isUint8Array } from "./typechecks";