Denoの等値比較函数を外部から使えないかな
from 2022/03/12
(await import("https://deno.land/std@0.129.0/testing/asserts.ts")).assertEqualsで使っている等置比較函数を外部から使えないかなtakker.icon
ぶっちゃけ今回Denoで書いてるからそれ使えばいいんですけどね…使うかkuuote.icon
equalみたいな名前でexportされていたはず
https://deno.land/std@0.129.0/testing/asserts.ts#L117
O(NP) algorithm部分が余計かも?takker.icon
オーバーヘッドが大きすぎる
自作したほうが軽量かな
code:equal.js
/** @param {unknown} l
* @param {unknown} r
* @return boolean
*/
export const equal = (l, r) => {
if (Array.isArray(l)) {
if (!Array.isArray(r)) return false;
return l.length === r.length &&
l.every((item, i) => equal(item, ri));
}
if (typeof l === "object") {
if (typeof r !== "object") return false;
const keys = Object.keys(l);
return keys.length === Object.keys(r).length &&
keys.every((key) => equal(lkey, rkey));
}
return l === r;
};
突然の自作kuuote.icon
いきなり始まるのすごい
itststa.icon*2
11:21:25 終了takker.icon
最初TSで書こうとしましたが、型パズルの自信がなくなったのでJSに逃げました
unknownにしちゃえばTSでも書けそう
/vim-jp-emojis/otz.iconkuuote.icon
これ使ってもいいですか?kuuote.icon
いいですよ~takker.icon
でもうごくのかなあ
code:equal_test.ts
import { equal } from "./equal.js";
import { assert } from "https://deno.land/std@0.129.0/testing/asserts.ts";
Deno.test("equal()", async (t) => {
await t.step("primitives", async (t) => {
await t.step("string", () => {
assert(equal("文字列", "文字列"));
assert(!equal("文字列", "もじれつ"));
assert(equal("123", "123"));
assert(!equal("123", 123));
});
await t.step("number", () => {
assert(equal(123, 123));
assert(!equal(123, 12));
assert(!equal(123, {}));
assert(!equal(123, { 123: 123 }));
});
});
await t.step("object", () => {
assert(equal({ foo: "bar"}, { foo: "bar"}));
assert(!equal({ foo: "bar"}, { foo: "baz"}));
しまった。ここでテストに失敗するtakker.icon
lになくてrにあるpropertyのチェックができていなかった
2022-03-12 11:57:13 直した
code:equal_test.ts
assert(!equal({ foo: "bar"}, { foo: "bar", hoge: "fuga" }));
assert(equal({ foo: "bar", 23: "test" }, { foo: "bar", 23: "test"}));
assert(!equal({ foo: "bar", 23: "test" }, { foo: "bar", 23: "text"}));
assert(equal({ foo: "bar", 23: { hoge: false } }, { foo: "bar", 23: { hoge: false }}));
assert(equal({ foo: "bar", 23: { hoge: false } }, { foo: "bar", 23: { hoge: false, fuga: 34 }}));
});
});