deno.land / std@0.224.0 / collections / intersect_test.ts
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
import { assertEquals } from "../assert/mod.ts";import { intersect } from "./intersect.ts";
function intersectTest<I>( input: Array<Array<I>>, expected: Array<I>, message?: string,) { const actual = intersect(...input); assertEquals(actual, expected, message);}
Deno.test({ name: "intersect() handles no mutation", fn() { const arrayA = [1, 2, 3]; const arrayB = [3, 4, 5]; intersect(arrayA, arrayB);
assertEquals(arrayA, [1, 2, 3]); assertEquals(arrayB, [3, 4, 5]); },});
Deno.test({ name: "intersect() handles empty input", fn() { intersectTest([], []); },});
Deno.test({ name: "intersect() handles empty arrays", fn() { intersectTest([[], []], []); },});
Deno.test({ name: "intersect() handles one side empty", fn() { intersectTest([[], ["a", "b", "c"]], []); intersectTest([["a", "b", "c"], []], []); },});
Deno.test({ name: "intersect() handles empty result", fn() { intersectTest([["a", "b", "c"], ["d", "e", "f"]], []); },});
Deno.test({ name: "intersect() handles one or more items in intersection", fn() { intersectTest([["a", "b"], ["b", "c"]], ["b"]); intersectTest([["a", "b", "c", "d"], ["c", "d", "e", "f"]], ["c", "d"]); },});
Deno.test({ name: "intersect() handles duplicates", fn() { intersectTest([["a", "b", "c", "b"], ["b", "c"]], ["b", "c"]); intersectTest([["a", "b"], ["b", "b", "c", "c"]], ["b"]); },});
Deno.test({ name: "intersect() handles more than two inputs", fn() { intersectTest( [ ["a", "b"], ["b", "c"], ["s", "b"], ["b", "b"], ], ["b"], ); intersectTest( [ [1], [1], [2], ], [], ); intersectTest( [ [true, false], [true, false], [true], ], [true], ); },});
Deno.test({ name: "intersect() handles objects", fn() { intersectTest<Record<string, string>>([ [{ foo: "bar" }, { bar: "baz" }], [{ fruit: "banana" }], ], []);
const obj = { bar: "baz" }; intersectTest<Record<string, string>>([ [{ foo: "bar" }, obj], [obj], ], [obj]); intersectTest<Record<string, string>>([ [{ foo: "bar" }, { bar: "baz" }], [{ bar: "banana" }], ], []); },});
Deno.test({ name: "intersect() handles functions", fn() { intersectTest([ [() => {}, () => null], [() => NaN], ], []);
const emptyObjectFunction = () => {}; intersectTest([ [emptyObjectFunction, () => null], [emptyObjectFunction], ], [emptyObjectFunction]); intersectTest([ [(a: number, b: number) => a + b, () => null], [(a: number, b: number) => a - b], ], []); },});
Version Info