Skip to content

Commit 77e946d

Browse files
committed
🐛 with tests
1 parent 1e97fa0 commit 77e946d

File tree

6 files changed

+212
-11
lines changed

6 files changed

+212
-11
lines changed

TODO

Lines changed: 0 additions & 3 deletions
This file was deleted.

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "extra-sorted-array",
3-
"version": "0.0.12",
3+
"version": "0.0.13",
44
"description": "A sorted array is a collection of values, arranged in an order.",
55
"main": "index.js",
66
"module": "index.mjs",

src/index.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -203,8 +203,9 @@ export function hasValue<T, U=T>(x: T[], v: T, fc: CompareFunction<T|U> | null=n
203203
* @param i begin index [0]
204204
* @returns index of value, or -1
205205
*/
206-
export function indexOf<T>(x: T[], v: T, i: number): number {
207-
return Math.max(searchValue(x.slice(i), v), -1);
206+
export function indexOf<T>(x: T[], v: T, i: number=0): number {
207+
var j = searchValue(x.slice(i), v);
208+
return j<0? -1 : j+i;
208209
}
209210

210211

@@ -215,8 +216,9 @@ export function indexOf<T>(x: T[], v: T, i: number): number {
215216
* @param i begin index [|x|-1]
216217
* @returns last index of value, or -1
217218
*/
218-
export function lastIndexOf<T>(x: T[], v: T, i: number): number {
219-
return Math.max(searchValueRight(x.slice(i), v), -1);
219+
export function lastIndexOf<T>(x: T[], v: T, i: number=x.length-1): number {
220+
var j = searchValueRight(x.slice(0, i+1), v);
221+
return j<0? -1 : j;
220222
}
221223

222224

test/index.test.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.

tests/index.test.ts

Lines changed: 203 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,203 @@
1+
import {
2+
// SEARCH VALUE
3+
includes,
4+
hasValue,
5+
indexOf,
6+
lastIndexOf,
7+
searchValue,
8+
searchValueRight,
9+
searchValueAny,
10+
searchClosestValue,
11+
// MERGE
12+
merge,
13+
rangedMerge,
14+
mergeAll,
15+
// SET OPERATIONS
16+
isUnique,
17+
isDisjoint,
18+
unique,
19+
union,
20+
intersection,
21+
difference,
22+
symmetricDifference,
23+
} from "../src";
24+
25+
26+
27+
28+
// #region SEARCH VALUE
29+
// --------------------
30+
31+
test("includes", () => {
32+
var x = [10, 20, 20, 40, 40, 80];
33+
var a = includes(x, 30);
34+
expect(a).toBe(false);
35+
var a = includes(x, 40);
36+
expect(a).toBe(true);
37+
});
38+
39+
40+
test("hasValue", () => {
41+
var x = [10, 20, 20, 40, 40, 80];
42+
var a = hasValue(x, 30);
43+
expect(a).toBe(false);
44+
var a = hasValue(x, 40);
45+
expect(a).toBe(true);
46+
});
47+
48+
49+
test("indexOf", () => {
50+
var x = [10, 20, 20, 40, 40, 80];
51+
var a = indexOf(x, 30);
52+
expect(a).toBe(-1);
53+
var a = indexOf(x, 40);
54+
expect(a).toBe(3);
55+
});
56+
57+
58+
test("lastIndexOf", () => {
59+
var x = [10, 20, 20, 40, 40, 80];
60+
var a = lastIndexOf(x, 30);
61+
expect(a).toBe(-1);
62+
var a = lastIndexOf(x, 40);
63+
expect(a).toBe(4);
64+
});
65+
66+
67+
test("searchValue", () => {
68+
var x = [10, 20, 20, 40, 40, 80];
69+
var a = searchValue(x, 30);
70+
expect(a).toBeLessThan(0);
71+
var a = searchValue(x, 40);
72+
expect(a).toBe(3);
73+
});
74+
75+
76+
test("searchValueRight", () => {
77+
var x = [10, 20, 20, 40, 40, 80];
78+
var a = searchValueRight(x, 30);
79+
expect(a).toBeLessThan(0);
80+
var a = searchValueRight(x, 40);
81+
expect(a).toBe(4);
82+
});
83+
84+
85+
test("searchValueAny", () => {
86+
var x = [10, 20, 20, 40, 40, 80];
87+
var a = searchValueAny(x, 30);
88+
expect(a).toBeLessThan(0);
89+
var a = searchValueAny(x, 40);
90+
expect(a).toBeGreaterThanOrEqual(3);
91+
expect(a).toBeLessThanOrEqual(4);
92+
});
93+
94+
95+
test("searchClosestValue", () => {
96+
var x = [10, 20, 20, 40, 40, 80];
97+
var a = searchClosestValue(x, 30);
98+
expect(a).toBe(3);
99+
var a = searchClosestValue(x, 40);
100+
expect(a).toBe(3);
101+
var a = searchClosestValue(x, 50);
102+
expect(a).toBe(5);
103+
});
104+
// #endregion
105+
106+
107+
108+
109+
// #region MERGE
110+
// -------------
111+
112+
test("merge", () => {
113+
var x = [10, 20, 20, 40, 40, 80];
114+
var y = [20, 50, 70];
115+
var a = merge(x, y);
116+
expect(a).toEqual([10, 20, 20, 20, 40, 40, 50, 70, 80]);
117+
});
118+
119+
120+
test("rangedMerge", () => {
121+
var x = [10, 20, 20, 40, 40, 80];
122+
var y = [20, 50, 70];
123+
var a = rangedMerge(x, 0, 3, y, 0, 3);
124+
expect(a).toEqual([10, 20, 20, 20, 50, 70]);
125+
var a = rangedMerge(x, 0, 2, x, 4, 6);
126+
expect(a).toEqual([10, 20, 40, 80]);
127+
});
128+
129+
130+
test("mergeAll", () => {
131+
var x = [10, 20, 20, 40, 40, 80];
132+
var y = [20, 50, 70];
133+
var z = [30, 60, 90];
134+
var a = mergeAll([x, y, z]);
135+
expect(a).toEqual([10, 20, 20, 20, 30, 40, 40, 50, 60, 70, 80, 90]);
136+
});
137+
// #endregion
138+
139+
140+
141+
142+
// #region SET OPERATIONS
143+
// ----------------------
144+
145+
test("isUnique", () => {
146+
var x = [10, 20, 20, 40, 40, 80];
147+
var a = isUnique(x);
148+
expect(a).toBe(false);
149+
var y = [10, 20, 30, 40, 80]
150+
var a = isUnique(y);
151+
expect(a).toBe(true);
152+
});
153+
154+
155+
test("isDisjoint", () => {
156+
var x = [10, 20, 20, 40, 40, 80];
157+
var y = [20, 50, 70];
158+
var a = isDisjoint(x, y);
159+
expect(a).toBe(false);
160+
var z = [30, 60, 90];
161+
var a = isDisjoint(x, z);
162+
expect(a).toBe(true);
163+
});
164+
165+
166+
test("unique", () => {
167+
var x = [10, 20, 20, 40, 40, 80];
168+
var a = unique(x);
169+
expect(a).toEqual([10, 20, 40, 80]);
170+
});
171+
172+
173+
test("union", () => {
174+
var x = [10, 20, 20, 40, 40, 80];
175+
var y = [20, 50, 70];
176+
var a = union(x, y);
177+
expect(a).toEqual([10, 20, 20, 40, 40, 50, 70, 80]);
178+
});
179+
180+
181+
test("intersection", () => {
182+
var x = [10, 20, 20, 40, 40, 80];
183+
var y = [20, 50, 80];
184+
var a = intersection(x, y);
185+
expect(a).toEqual([20, 80]);
186+
});
187+
188+
189+
test("difference", () => {
190+
var x = [10, 20, 20, 40, 40, 80];
191+
var y = [20, 50, 80];
192+
var a = difference(x, y);
193+
expect(a).toEqual([10, 20, 40, 40]);
194+
});
195+
196+
197+
test("symmetricDifference", () => {
198+
var x = [10, 20, 20, 40, 40, 80];
199+
var y = [20, 50, 80];
200+
var a = symmetricDifference(x, y);
201+
expect(a).toEqual([10, 20, 40, 40, 50]);
202+
});
203+
// #endregion

0 commit comments

Comments
 (0)