2024-01-01 21:11:32 +00:00
|
|
|
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
2021-09-12 13:49:15 +00:00
|
|
|
|
2024-04-29 02:57:30 +00:00
|
|
|
import { assertEquals } from "@std/assert";
|
2021-09-12 13:49:15 +00:00
|
|
|
import { associateWith } from "./associate_with.ts";
|
|
|
|
|
|
|
|
function associateWithTest<T>(
|
|
|
|
input: [readonly string[], (el: string) => T],
|
|
|
|
expected: { [x: string]: T },
|
|
|
|
message?: string,
|
|
|
|
) {
|
|
|
|
const actual = associateWith(...input);
|
|
|
|
assertEquals(actual, expected, message);
|
|
|
|
}
|
|
|
|
|
|
|
|
Deno.test({
|
2023-12-20 09:48:02 +00:00
|
|
|
name: "associateWith() handles no mutation",
|
2021-09-12 13:49:15 +00:00
|
|
|
fn() {
|
|
|
|
const arrayA = ["Foo", "Bar"];
|
|
|
|
associateWith(arrayA, (it) => it.charAt(0));
|
|
|
|
|
|
|
|
assertEquals(arrayA, ["Foo", "Bar"]);
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
|
|
|
Deno.test({
|
2023-12-20 09:48:02 +00:00
|
|
|
name: "associateWith() handles empty input",
|
2021-09-12 13:49:15 +00:00
|
|
|
fn() {
|
|
|
|
associateWithTest([[], () => "abc"], {});
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
|
|
|
Deno.test({
|
2023-12-20 09:48:02 +00:00
|
|
|
name: "associateWith() handles associates",
|
2021-09-12 13:49:15 +00:00
|
|
|
fn() {
|
|
|
|
associateWithTest<number>(
|
|
|
|
[
|
|
|
|
[
|
|
|
|
"Kim",
|
|
|
|
"Lara",
|
|
|
|
"Jonathan",
|
|
|
|
],
|
|
|
|
(it) => it.length,
|
|
|
|
],
|
|
|
|
{
|
|
|
|
"Kim": 3,
|
|
|
|
"Lara": 4,
|
|
|
|
"Jonathan": 8,
|
|
|
|
},
|
|
|
|
);
|
|
|
|
associateWithTest(
|
|
|
|
[
|
|
|
|
[
|
|
|
|
"Kim@example.org",
|
|
|
|
"Lara@example.org",
|
|
|
|
"Jonathan@example.org",
|
|
|
|
],
|
|
|
|
(it) => it.replace("org", "com"),
|
|
|
|
],
|
|
|
|
{
|
|
|
|
"Kim@example.org": "Kim@example.com",
|
|
|
|
"Lara@example.org": "Lara@example.com",
|
|
|
|
"Jonathan@example.org": "Jonathan@example.com",
|
|
|
|
},
|
|
|
|
);
|
|
|
|
associateWithTest<boolean>(
|
|
|
|
[
|
|
|
|
[
|
|
|
|
"Kim",
|
|
|
|
"Lara",
|
|
|
|
"Jonathan",
|
|
|
|
],
|
|
|
|
(it) => /m/.test(it),
|
|
|
|
],
|
|
|
|
{
|
|
|
|
"Kim": true,
|
|
|
|
"Lara": false,
|
|
|
|
"Jonathan": false,
|
|
|
|
},
|
|
|
|
);
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
|
|
|
Deno.test({
|
2023-12-20 09:48:02 +00:00
|
|
|
name: "associateWith() handles duplicate keys",
|
2021-09-12 13:49:15 +00:00
|
|
|
fn() {
|
|
|
|
associateWithTest(
|
|
|
|
[
|
|
|
|
["Kim", "Marija", "Karl", "Jonathan", "Marija"],
|
|
|
|
(it) => it.charAt(0),
|
|
|
|
],
|
|
|
|
{
|
|
|
|
"Jonathan": "J",
|
|
|
|
"Karl": "K",
|
|
|
|
"Kim": "K",
|
|
|
|
"Marija": "M",
|
|
|
|
},
|
|
|
|
);
|
|
|
|
},
|
|
|
|
});
|