mirror of
https://github.com/denoland/std.git
synced 2024-11-21 20:50:22 +00:00
169 lines
2.7 KiB
TypeScript
169 lines
2.7 KiB
TypeScript
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
|
|
|
import { assertEquals } from "@std/assert";
|
|
import { zip } from "./zip.ts";
|
|
|
|
function zip1Test<T>(
|
|
input: [Array<T>],
|
|
expected: Array<[T]>,
|
|
message?: string,
|
|
) {
|
|
const actual = zip(...input);
|
|
assertEquals(actual, expected, message);
|
|
}
|
|
|
|
assertEquals(zip([]), []);
|
|
|
|
Deno.test({
|
|
name: "zip() handles one array",
|
|
fn() {
|
|
zip1Test([
|
|
[1, 2, 3],
|
|
], [[1], [2], [3]]);
|
|
},
|
|
});
|
|
|
|
function zipTest<T, U>(
|
|
input: [ReadonlyArray<T>, ReadonlyArray<U>],
|
|
expected: Array<[T, U]>,
|
|
message?: string,
|
|
) {
|
|
const actual = zip(...input);
|
|
assertEquals(actual, expected, message);
|
|
}
|
|
|
|
function zip3Test<T, U, V>(
|
|
input: [Array<T>, Array<U>, Array<V>],
|
|
expected: Array<[T, U, V]>,
|
|
message?: string,
|
|
) {
|
|
const actual = zip(...input);
|
|
assertEquals(actual, expected, message);
|
|
}
|
|
|
|
Deno.test({
|
|
name: "zip() handles three arrays",
|
|
fn() {
|
|
zip3Test([
|
|
[1, 2, 3],
|
|
[4, 5, 6],
|
|
[7, 8, 9],
|
|
], [[1, 4, 7], [2, 5, 8], [3, 6, 9]]);
|
|
},
|
|
});
|
|
|
|
Deno.test({
|
|
name: "zip() handles three arrays when the first is the shortest",
|
|
fn() {
|
|
zip3Test([
|
|
[1, 2],
|
|
[4, 5, 6],
|
|
[7, 8, 9],
|
|
], [[1, 4, 7], [2, 5, 8]]);
|
|
},
|
|
});
|
|
|
|
Deno.test({
|
|
name: "zip() handles no mutation",
|
|
fn() {
|
|
const arrayA = [1, 4, 5];
|
|
const arrayB = ["foo", "bar"];
|
|
zip(arrayA, arrayB);
|
|
|
|
assertEquals(arrayA, [1, 4, 5]);
|
|
assertEquals(arrayB, ["foo", "bar"]);
|
|
},
|
|
});
|
|
|
|
Deno.test({
|
|
name: "zip() handles empty input",
|
|
fn() {
|
|
zipTest(
|
|
[[], []],
|
|
[],
|
|
);
|
|
zipTest(
|
|
[[1, 2, 3], []],
|
|
[],
|
|
);
|
|
zipTest(
|
|
[[], [{}, []]],
|
|
[],
|
|
);
|
|
assertEquals(zip(), []);
|
|
},
|
|
});
|
|
|
|
Deno.test({
|
|
name: "zip() handles same length",
|
|
fn() {
|
|
zipTest(
|
|
[
|
|
[1, 4, 5],
|
|
["foo", "bar", "lorem"],
|
|
],
|
|
[
|
|
[1, "foo"],
|
|
[4, "bar"],
|
|
[5, "lorem"],
|
|
],
|
|
);
|
|
zipTest(
|
|
[
|
|
[2.2, false],
|
|
["test", true],
|
|
],
|
|
[
|
|
[2.2, "test"],
|
|
[false, true],
|
|
],
|
|
);
|
|
},
|
|
});
|
|
|
|
Deno.test({
|
|
name: "zip() handles first shorter",
|
|
fn() {
|
|
zipTest(
|
|
[
|
|
[1],
|
|
["foo", "bar", "lorem"],
|
|
],
|
|
[[1, "foo"]],
|
|
);
|
|
zipTest(
|
|
[
|
|
[2.2, false],
|
|
["test", true, {}],
|
|
],
|
|
[
|
|
[2.2, "test"],
|
|
[false, true],
|
|
],
|
|
);
|
|
},
|
|
});
|
|
|
|
Deno.test({
|
|
name: "zip() handles second shorter",
|
|
fn() {
|
|
zipTest(
|
|
[
|
|
[1, 4, 5],
|
|
["foo"],
|
|
],
|
|
[[1, "foo"]],
|
|
);
|
|
zipTest(
|
|
[
|
|
[2.2, false, "test"],
|
|
["test", true],
|
|
],
|
|
[
|
|
[2.2, "test"],
|
|
[false, true],
|
|
],
|
|
);
|
|
},
|
|
});
|