mirror of
https://github.com/denoland/std.git
synced 2024-11-22 04:59:05 +00:00
140 lines
2.9 KiB
TypeScript
140 lines
2.9 KiB
TypeScript
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
|
|
|
import { assertEquals } from "@std/assert";
|
|
import { minBy } from "./min_by.ts";
|
|
|
|
Deno.test("minBy() handles array input", () => {
|
|
const input = [
|
|
{ name: "Kyle", age: 34 },
|
|
{ name: "John", age: 42 },
|
|
{ name: "Anna", age: 23 },
|
|
];
|
|
|
|
const min = minBy(input, (i) => i.age);
|
|
|
|
assertEquals(min, { name: "Anna", age: 23 });
|
|
});
|
|
|
|
Deno.test("minBy() handles array input with mutation", () => {
|
|
const input = [
|
|
{ name: "Kyle", age: 34 },
|
|
{ name: "John", age: 42 },
|
|
{ name: "Anna", age: 23 },
|
|
];
|
|
|
|
const min = minBy(input, (i) => i.age - 10);
|
|
|
|
assertEquals(min, { name: "Anna", age: 23 });
|
|
});
|
|
|
|
Deno.test("minBy() handles array input with multiple min", () => {
|
|
const input = [
|
|
{ name: "Kyle", age: 34 },
|
|
{ name: "John", age: 42 },
|
|
{ name: "Anna", age: 23 },
|
|
{ name: "Anna", age: 23 },
|
|
];
|
|
|
|
const min = minBy(input, (i) => i.age);
|
|
|
|
assertEquals(min, { name: "Anna", age: 23 });
|
|
});
|
|
|
|
Deno.test("minBy() handles array of positive numbers", () => {
|
|
const input = [2, 3, 5];
|
|
|
|
const min = minBy(input, (i) => i);
|
|
|
|
assertEquals(min, 2);
|
|
});
|
|
|
|
Deno.test("minBy() handles array of negative numbers", () => {
|
|
const input = [-2, -3, -5];
|
|
|
|
const min = minBy(input, (i) => i);
|
|
|
|
assertEquals(min, -5);
|
|
});
|
|
|
|
Deno.test("minBy() handles array of strings", () => {
|
|
const input = ["Kyle", "John", "Anna"];
|
|
|
|
const min = minBy(input, (i: string) => i);
|
|
|
|
assertEquals(min, "Anna");
|
|
});
|
|
|
|
Deno.test("minBy() handles of empty array", () => {
|
|
const input: number[] = [];
|
|
|
|
const min = minBy(input, (i) => i);
|
|
|
|
assertEquals(min, undefined);
|
|
});
|
|
|
|
Deno.test("minBy() handles array of numbers with multiple min", () => {
|
|
const input = [2, 3, 5, 5];
|
|
|
|
const min = minBy(input, (i) => i);
|
|
|
|
assertEquals(min, 2);
|
|
});
|
|
|
|
Deno.test("minBy() handles array of numbers with infinity", () => {
|
|
const input = [2, 3, 5, -Infinity];
|
|
|
|
const min = minBy(input, (i: number) => i);
|
|
|
|
assertEquals(min, -Infinity);
|
|
});
|
|
|
|
Deno.test("minBy() handles array of numbers with NaN", () => {
|
|
const input = [2, 3, 5, NaN];
|
|
|
|
const min = minBy(input, (i) => i);
|
|
|
|
assertEquals(min, 2);
|
|
});
|
|
|
|
Deno.test("minBy() handles no mutation", () => {
|
|
const input = [2, 3, 5, NaN];
|
|
|
|
minBy(input, (i: number) => i);
|
|
|
|
assertEquals(input, [2, 3, 5, NaN]);
|
|
});
|
|
|
|
Deno.test("minBy() handles empty input", () => {
|
|
const input: Array<{ age: number }> = [];
|
|
|
|
const min = minBy(input, (i) => i.age);
|
|
|
|
assertEquals(min, undefined);
|
|
});
|
|
|
|
Deno.test({
|
|
name: "minBy() handles bigint",
|
|
fn() {
|
|
const input = [
|
|
"9007199254740999",
|
|
"9007199254740991",
|
|
"9007199254740995",
|
|
];
|
|
|
|
assertEquals(minBy(input, (it) => BigInt(it)), "9007199254740991");
|
|
},
|
|
});
|
|
|
|
Deno.test({
|
|
name: "minBy() handles date",
|
|
fn() {
|
|
const input = [
|
|
"February 1, 2022",
|
|
"December 17, 1995",
|
|
"June 12, 2012",
|
|
];
|
|
|
|
assertEquals(minBy(input, (it) => new Date(it)), "December 17, 1995");
|
|
},
|
|
});
|