2024-01-01 21:11:32 +00:00
|
|
|
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
2021-08-09 08:55:26 +00:00
|
|
|
|
2024-04-29 02:57:30 +00:00
|
|
|
import { assertEquals } from "@std/assert";
|
2021-08-09 08:55:26 +00:00
|
|
|
import { sumOf } from "./sum_of.ts";
|
|
|
|
|
2023-12-20 09:48:02 +00:00
|
|
|
Deno.test("sumOf() handles object properties", () => {
|
2021-08-09 08:55:26 +00:00
|
|
|
const object = [
|
|
|
|
{ name: "Kyle", age: 34 },
|
|
|
|
{ name: "John", age: 42 },
|
|
|
|
{ name: "Anna", age: 23 },
|
|
|
|
];
|
|
|
|
|
|
|
|
const actual = sumOf(object, (i) => i.age);
|
|
|
|
|
|
|
|
assertEquals(actual, 99);
|
|
|
|
});
|
|
|
|
|
2023-12-20 09:48:02 +00:00
|
|
|
Deno.test("sumOf() adds 2 to each num", () => {
|
2021-08-09 08:55:26 +00:00
|
|
|
const array = [1, 2, 3];
|
|
|
|
|
|
|
|
const actual = sumOf(array, (i) => i + 2);
|
|
|
|
|
|
|
|
assertEquals(actual, 12);
|
|
|
|
});
|
|
|
|
|
2023-12-20 09:48:02 +00:00
|
|
|
Deno.test("sumOf() handles regular sum", () => {
|
2021-08-09 08:55:26 +00:00
|
|
|
const array = [1, 2, 3];
|
|
|
|
|
|
|
|
const actual = sumOf(array, (i) => i);
|
|
|
|
|
|
|
|
assertEquals(actual, 6);
|
|
|
|
});
|
|
|
|
|
2023-12-20 09:48:02 +00:00
|
|
|
Deno.test("sumOf() handles negatives with regular sum", () => {
|
2021-08-09 08:55:26 +00:00
|
|
|
const array = [-1, -2, -3];
|
|
|
|
|
|
|
|
const actual = sumOf(array, (i) => i);
|
|
|
|
|
|
|
|
assertEquals(actual, -6);
|
|
|
|
});
|
|
|
|
|
2023-12-20 09:48:02 +00:00
|
|
|
Deno.test("sumOf() handles mixed negatives and positives with regular sum", () => {
|
2021-08-09 08:55:26 +00:00
|
|
|
const array = [-1, 2, 3, -5];
|
|
|
|
|
|
|
|
const actual = sumOf(array, (i) => i);
|
|
|
|
|
|
|
|
assertEquals(actual, -1);
|
|
|
|
});
|
|
|
|
|
2023-12-20 09:48:02 +00:00
|
|
|
Deno.test("sumOf() turns selector nums into negatives", () => {
|
2021-08-09 08:55:26 +00:00
|
|
|
const array = [1, 3, 5, 3];
|
|
|
|
|
|
|
|
const actual = sumOf(array, (i) => i - 6);
|
|
|
|
|
|
|
|
assertEquals(actual, -12);
|
|
|
|
});
|
|
|
|
|
2023-12-20 09:48:02 +00:00
|
|
|
Deno.test("sumOf() turns selector nums into zeros", () => {
|
2021-08-09 08:55:26 +00:00
|
|
|
const array = [3, 3, 3, 3];
|
|
|
|
|
|
|
|
const actual = sumOf(array, (i) => i - 3);
|
|
|
|
|
|
|
|
assertEquals(actual, 0);
|
|
|
|
});
|
|
|
|
|
2023-12-20 09:48:02 +00:00
|
|
|
Deno.test("sumOf() handles negative object properties", () => {
|
2021-08-09 08:55:26 +00:00
|
|
|
const object = [
|
|
|
|
{ name: "Kyle", age: -34 },
|
|
|
|
{ name: "John", age: -42 },
|
|
|
|
{ name: "Anna", age: -23 },
|
|
|
|
];
|
|
|
|
|
|
|
|
const actual = sumOf(object, (i) => i.age);
|
|
|
|
|
|
|
|
assertEquals(actual, -99);
|
|
|
|
});
|
|
|
|
|
2023-12-20 09:48:02 +00:00
|
|
|
Deno.test("sumOf() handles mixed object properties", () => {
|
2021-08-09 08:55:26 +00:00
|
|
|
const object = [
|
|
|
|
{ name: "Kyle", age: -34 },
|
|
|
|
{ name: "John", age: 42 },
|
|
|
|
{ name: "Anna", age: -23 },
|
|
|
|
];
|
|
|
|
|
|
|
|
const actual = sumOf(object, (i) => i.age);
|
|
|
|
|
|
|
|
assertEquals(actual, -15);
|
|
|
|
});
|
|
|
|
|
2023-12-20 09:48:02 +00:00
|
|
|
Deno.test("sumOf() handles no mutation", () => {
|
2021-08-09 08:55:26 +00:00
|
|
|
const array = [1, 2, 3, 4];
|
|
|
|
|
|
|
|
sumOf(array, (i) => i + 2);
|
|
|
|
|
|
|
|
assertEquals(array, [1, 2, 3, 4]);
|
|
|
|
});
|
|
|
|
|
2023-12-20 09:48:02 +00:00
|
|
|
Deno.test("sumOf() handles empty array results in 0", () => {
|
2021-08-09 08:55:26 +00:00
|
|
|
const array: number[] = [];
|
|
|
|
|
|
|
|
const actual = sumOf(array, (i) => i + 2);
|
|
|
|
|
|
|
|
assertEquals(actual, 0);
|
|
|
|
});
|
|
|
|
|
2023-12-20 09:48:02 +00:00
|
|
|
Deno.test("sumOf() handles NaN and Infinity", () => {
|
2021-08-09 08:55:26 +00:00
|
|
|
const array = [
|
|
|
|
1,
|
|
|
|
2,
|
|
|
|
Number.POSITIVE_INFINITY,
|
|
|
|
3,
|
|
|
|
4,
|
|
|
|
Number.NEGATIVE_INFINITY,
|
|
|
|
5,
|
|
|
|
6,
|
|
|
|
Number.NaN,
|
|
|
|
7,
|
|
|
|
8,
|
|
|
|
];
|
|
|
|
|
|
|
|
const actual = sumOf(array, (i) => i);
|
|
|
|
|
|
|
|
assertEquals(actual, NaN);
|
|
|
|
});
|
|
|
|
|
2023-12-20 09:48:02 +00:00
|
|
|
Deno.test("sumOf() handles Infinity", () => {
|
2021-08-09 08:55:26 +00:00
|
|
|
const array = [1, 2, Infinity, 3, 4, 5, 6, 7, 8];
|
|
|
|
|
|
|
|
const actual = sumOf(array, (i) => i);
|
|
|
|
|
|
|
|
assertEquals(actual, Infinity);
|
|
|
|
});
|