|
|
@@ -2,63 +2,80 @@ import {
|
|
|
assert,
|
|
|
assertEquals,
|
|
|
} from "https://deno.land/std@0.161.0/testing/asserts.ts";
|
|
|
-import { OrderedUniqueNumbers } from "./ordered-unique-numbers.class.ts";
|
|
|
+import { OrderedNumbers } from "./ordered-numbers.class.ts";
|
|
|
|
|
|
-Deno.test("OrderedUniqueNumbers class", async (t) => {
|
|
|
+Deno.test("OrderedNumbers class", async (t) => {
|
|
|
await t.step("getter list()", async (t) => {
|
|
|
await t.step("returns unmodified list of ordered unique numbers", () => {
|
|
|
const input = [2, 3, 5, 7, 11, 13];
|
|
|
- const numbers = new OrderedUniqueNumbers(input);
|
|
|
- assertEquals(numbers.list, input);
|
|
|
+ const numbers = new OrderedNumbers(input);
|
|
|
+ assertEquals(numbers.list, input, "set to unique");
|
|
|
+ assertEquals(
|
|
|
+ (new OrderedNumbers(input, false)).list,
|
|
|
+ input,
|
|
|
+ "not set to unique",
|
|
|
+ );
|
|
|
});
|
|
|
|
|
|
await t.step("returns ascending ordered list of numbers", () => {
|
|
|
const input = [2, 13, 5, 7, 11, 3];
|
|
|
- const numbers = new OrderedUniqueNumbers(input);
|
|
|
+ const numbers = new OrderedNumbers(input);
|
|
|
assertEquals(numbers.list, [2, 3, 5, 7, 11, 13]);
|
|
|
});
|
|
|
|
|
|
await t.step("returns list of unique numbers", () => {
|
|
|
const input = [2, 2, 3, 5, 7, 11, 11, 11, 11, 13];
|
|
|
- const numbers = new OrderedUniqueNumbers(input);
|
|
|
+ const numbers = new OrderedNumbers(input);
|
|
|
assertEquals(numbers.list, [2, 3, 5, 7, 11, 13]);
|
|
|
});
|
|
|
|
|
|
+ await t.step("returns list of non-unique numbers", () => {
|
|
|
+ const input = [2, 2, 3, 5, 7, 11, 11, 11, 11, 13];
|
|
|
+ const numbers = new OrderedNumbers(input, false);
|
|
|
+ assertEquals(numbers.list, [2, 2, 3, 5, 7, 11, 11, 11, 11, 13]);
|
|
|
+ });
|
|
|
+
|
|
|
await t.step("returns list of ordered unique numbers", () => {
|
|
|
const input = [11, 11, 2, 5, 7, 11, 11, 13, 2, 3];
|
|
|
- const numbers = new OrderedUniqueNumbers(input);
|
|
|
+ const numbers = new OrderedNumbers(input);
|
|
|
assertEquals(numbers.list, [2, 3, 5, 7, 11, 13]);
|
|
|
});
|
|
|
+
|
|
|
+ await t.step("returns list of ordered non-unique numbers", () => {
|
|
|
+ const input = [11, 11, 2, 5, 7, 11, 11, 13, 2, 3];
|
|
|
+ const numbers = new OrderedNumbers(input, false);
|
|
|
+ assertEquals(numbers.list, [2, 2, 3, 5, 7, 11, 11, 11, 11, 13]);
|
|
|
+ });
|
|
|
});
|
|
|
|
|
|
await t.step("getter max()", async (t) => {
|
|
|
await t.step("returns undefined for empty list", () => {
|
|
|
const input: number[] = [];
|
|
|
- const numbers = new OrderedUniqueNumbers(input);
|
|
|
+ const numbers = new OrderedNumbers(input);
|
|
|
assertEquals(numbers.max, undefined);
|
|
|
});
|
|
|
|
|
|
await t.step("returns only number in list", () => {
|
|
|
const input = [11];
|
|
|
- const numbers = new OrderedUniqueNumbers(input);
|
|
|
+ const numbers = new OrderedNumbers(input);
|
|
|
assertEquals(numbers.max, 11);
|
|
|
});
|
|
|
|
|
|
await t.step("returns greatest number in list", () => {
|
|
|
const input = [2, 3, 5, 7, 11, 13];
|
|
|
- const numbers = new OrderedUniqueNumbers(input);
|
|
|
+ const numbers = new OrderedNumbers(input);
|
|
|
assertEquals(numbers.max, 13);
|
|
|
});
|
|
|
});
|
|
|
|
|
|
await t.step("method contains()", async (t) => {
|
|
|
await t.step("returns true if input is found in list", () => {
|
|
|
- const numbers = new OrderedUniqueNumbers([2, 3, 5, 7, 11, 13]);
|
|
|
+ const numbers = new OrderedNumbers([2, 3, 5, 7, 11, 13]);
|
|
|
assert(numbers.contains(5));
|
|
|
});
|
|
|
|
|
|
await t.step("returns false if input is not found in list", () => {
|
|
|
- const numbers = new OrderedUniqueNumbers([2, 3, 5, 7, 11, 13]);
|
|
|
+ const numbers = new OrderedNumbers([2, 3, 5, 7, 11, 13]);
|
|
|
assert(!numbers.contains(6));
|
|
|
});
|
|
|
});
|
|
|
@@ -67,7 +84,7 @@ Deno.test("OrderedUniqueNumbers class", async (t) => {
|
|
|
await t.step(
|
|
|
"adds a larger number to the end of the list and returns it",
|
|
|
() => {
|
|
|
- const numbers = new OrderedUniqueNumbers([2, 3, 5, 7, 11, 13]);
|
|
|
+ const numbers = new OrderedNumbers([2, 3, 5, 7, 11, 13]);
|
|
|
numbers.add(15);
|
|
|
assertEquals(numbers.list, [2, 3, 5, 7, 11, 13, 15]);
|
|
|
},
|
|
|
@@ -76,7 +93,7 @@ Deno.test("OrderedUniqueNumbers class", async (t) => {
|
|
|
await t.step(
|
|
|
"does not add number if already present and returns list",
|
|
|
() => {
|
|
|
- const numbers = new OrderedUniqueNumbers([2, 3, 5, 7, 11, 13]);
|
|
|
+ const numbers = new OrderedNumbers([2, 3, 5, 7, 11, 13]);
|
|
|
numbers.add(13);
|
|
|
assertEquals(numbers.list, [2, 3, 5, 7, 11, 13]);
|
|
|
},
|
|
|
@@ -85,7 +102,7 @@ Deno.test("OrderedUniqueNumbers class", async (t) => {
|
|
|
await t.step(
|
|
|
"adds a smaller number to the start of the list and returns it",
|
|
|
() => {
|
|
|
- const numbers = new OrderedUniqueNumbers([2, 3, 5, 7, 11, 13]);
|
|
|
+ const numbers = new OrderedNumbers([2, 3, 5, 7, 11, 13]);
|
|
|
numbers.add(1);
|
|
|
assertEquals(numbers.list, [1, 2, 3, 5, 7, 11, 13]);
|
|
|
},
|
|
|
@@ -94,7 +111,7 @@ Deno.test("OrderedUniqueNumbers class", async (t) => {
|
|
|
await t.step(
|
|
|
"inserts number to the proper position of the list and returns it",
|
|
|
() => {
|
|
|
- const numbers = new OrderedUniqueNumbers([2, 3, 5, 7, 11, 13]);
|
|
|
+ const numbers = new OrderedNumbers([2, 3, 5, 7, 11, 13]);
|
|
|
numbers.add(6);
|
|
|
assertEquals(numbers.list, [2, 3, 5, 6, 7, 11, 13]);
|
|
|
},
|
|
|
@@ -105,7 +122,7 @@ Deno.test("OrderedUniqueNumbers class", async (t) => {
|
|
|
await t.step(
|
|
|
"removes a number from the list and returns it",
|
|
|
() => {
|
|
|
- const numbers = new OrderedUniqueNumbers([2, 3, 5, 7, 11, 13]);
|
|
|
+ const numbers = new OrderedNumbers([2, 3, 5, 7, 11, 13]);
|
|
|
numbers.remove(7);
|
|
|
assertEquals(numbers.list, [2, 3, 5, 11, 13]);
|
|
|
},
|
|
|
@@ -114,7 +131,7 @@ Deno.test("OrderedUniqueNumbers class", async (t) => {
|
|
|
await t.step(
|
|
|
"does not modify list if input is not present in list and returns it",
|
|
|
() => {
|
|
|
- const numbers = new OrderedUniqueNumbers([2, 3, 5, 7, 11, 13]);
|
|
|
+ const numbers = new OrderedNumbers([2, 3, 5, 7, 11, 13]);
|
|
|
numbers.remove(8);
|
|
|
assertEquals(numbers.list, [2, 3, 5, 7, 11, 13]);
|
|
|
},
|
|
|
@@ -125,7 +142,7 @@ Deno.test("OrderedUniqueNumbers class", async (t) => {
|
|
|
await t.step(
|
|
|
"returns the next larger number found in list",
|
|
|
() => {
|
|
|
- const numbers = new OrderedUniqueNumbers([2, 3, 5, 7, 11, 13]);
|
|
|
+ const numbers = new OrderedNumbers([2, 3, 5, 7, 11, 13]);
|
|
|
assertEquals(numbers.findNextLargerValue(6), 7);
|
|
|
},
|
|
|
);
|
|
|
@@ -133,7 +150,7 @@ Deno.test("OrderedUniqueNumbers class", async (t) => {
|
|
|
await t.step(
|
|
|
"returns the next larger number found in list - even if input exists",
|
|
|
() => {
|
|
|
- const numbers = new OrderedUniqueNumbers([2, 3, 5, 7, 11, 13]);
|
|
|
+ const numbers = new OrderedNumbers([2, 3, 5, 7, 11, 13]);
|
|
|
assertEquals(numbers.findNextLargerValue(7), 11);
|
|
|
},
|
|
|
);
|
|
|
@@ -141,7 +158,7 @@ Deno.test("OrderedUniqueNumbers class", async (t) => {
|
|
|
await t.step(
|
|
|
"returns the first number of list if input is smaller",
|
|
|
() => {
|
|
|
- const numbers = new OrderedUniqueNumbers([2, 3, 5, 7, 11, 13]);
|
|
|
+ const numbers = new OrderedNumbers([2, 3, 5, 7, 11, 13]);
|
|
|
assertEquals(numbers.findNextLargerValue(-5), 2);
|
|
|
},
|
|
|
);
|
|
|
@@ -149,7 +166,7 @@ Deno.test("OrderedUniqueNumbers class", async (t) => {
|
|
|
await t.step(
|
|
|
"returns undefined if input is larger than largest in list",
|
|
|
() => {
|
|
|
- const numbers = new OrderedUniqueNumbers([2, 3, 5, 7, 11, 13]);
|
|
|
+ const numbers = new OrderedNumbers([2, 3, 5, 7, 11, 13]);
|
|
|
assertEquals(numbers.findNextLargerValue(15), undefined);
|
|
|
},
|
|
|
);
|