complete-common 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +9 -0
- package/README.md +7 -0
- package/dist/index.cjs +535 -0
- package/dist/index.d.cts +705 -0
- package/dist/index.d.mts +705 -0
- package/dist/index.d.ts +705 -0
- package/dist/index.mjs +463 -0
- package/package.json +36 -0
- package/src/constants.ts +3 -0
- package/src/functions/array.ts +209 -0
- package/src/functions/enums.ts +105 -0
- package/src/functions/map.ts +90 -0
- package/src/functions/math.ts +9 -0
- package/src/functions/object.ts +27 -0
- package/src/functions/random.ts +43 -0
- package/src/functions/set.ts +131 -0
- package/src/functions/sort.ts +18 -0
- package/src/functions/string.test.ts +42 -0
- package/src/functions/string.ts +304 -0
- package/src/functions/tuple.ts +31 -0
- package/src/functions/types.ts +15 -0
- package/src/functions/utils.test.ts +910 -0
- package/src/functions/utils.ts +238 -0
- package/src/index.ts +27 -0
- package/src/types/AddSubtract.ts +19 -0
- package/src/types/CompositionTypeSatisfiesEnum.ts +67 -0
- package/src/types/ERange.ts +15 -0
- package/src/types/IRange.ts +16 -0
- package/src/types/Immutable.ts +28 -0
- package/src/types/NaturalNumbersLessThan.ts +12 -0
- package/src/types/NaturalNumbersLessThanOrEqualTo.ts +14 -0
- package/src/types/ObjectValues.ts +1 -0
- package/src/types/ReadonlyMap.ts +12 -0
- package/src/types/ReadonlyRecord.ts +3 -0
- package/src/types/ReadonlySet.ts +9 -0
- package/src/types/Tuple.ts +14 -0
- package/src/types/WidenLiteral.ts +11 -0
- package/src/types/Writeable.ts +6 -0
|
@@ -0,0 +1,910 @@
|
|
|
1
|
+
import { deepStrictEqual, strictEqual } from "node:assert";
|
|
2
|
+
import test, { describe } from "node:test";
|
|
3
|
+
import {
|
|
4
|
+
assertDefined,
|
|
5
|
+
assertNotNull,
|
|
6
|
+
eRange,
|
|
7
|
+
iRange,
|
|
8
|
+
parseFloatSafe,
|
|
9
|
+
parseIntSafe,
|
|
10
|
+
} from "./utils.js";
|
|
11
|
+
|
|
12
|
+
describe("assertsDefined", () => {
|
|
13
|
+
/** We use a value of null since it is the least arbitrary non-undefined value. */
|
|
14
|
+
const value = null as unknown; // eslint-disable-line unicorn/no-null
|
|
15
|
+
|
|
16
|
+
// @ts-expect-error Should fail since we are not in a union with undefined.
|
|
17
|
+
assertDefined(value as boolean, "");
|
|
18
|
+
// @ts-expect-error Should fail since we are not in a union with undefined.
|
|
19
|
+
assertDefined(value as number, "");
|
|
20
|
+
// @ts-expect-error Should fail since we are not in a union with undefined.
|
|
21
|
+
assertDefined(value as string, "");
|
|
22
|
+
// @ts-expect-error Should fail since we are not in a union with undefined.
|
|
23
|
+
assertDefined(value as Function, ""); // eslint-disable-line @typescript-eslint/no-unsafe-function-type
|
|
24
|
+
|
|
25
|
+
assertDefined(value as boolean | undefined, "");
|
|
26
|
+
assertDefined(value as number | undefined, "");
|
|
27
|
+
assertDefined(value as string | undefined, "");
|
|
28
|
+
assertDefined(value as Function | undefined, ""); // eslint-disable-line @typescript-eslint/no-unsafe-function-type
|
|
29
|
+
|
|
30
|
+
// @ts-expect-error Should fail because we are in a union with null instead of undefined.
|
|
31
|
+
assertDefined(value as boolean | null, "");
|
|
32
|
+
// @ts-expect-error Should fail because we are in a union with null instead of undefined.
|
|
33
|
+
assertDefined(value as number | null, "");
|
|
34
|
+
// @ts-expect-error Should fail because we are in a union with null instead of undefined.
|
|
35
|
+
assertDefined(value as string | null, "");
|
|
36
|
+
// @ts-expect-error Should fail because we are in a union with null instead of undefined.
|
|
37
|
+
assertDefined(value as Function | null, ""); // eslint-disable-line @typescript-eslint/no-unsafe-function-type
|
|
38
|
+
|
|
39
|
+
assertDefined(value as boolean | undefined | null, "");
|
|
40
|
+
assertDefined(value as number | undefined | null, "");
|
|
41
|
+
assertDefined(value as string | undefined | null, "");
|
|
42
|
+
assertDefined(value as Function | undefined | null, ""); // eslint-disable-line @typescript-eslint/no-unsafe-function-type
|
|
43
|
+
|
|
44
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters
|
|
45
|
+
function _genericFunction<T>(_arg: T) {
|
|
46
|
+
const t = undefined as T | undefined;
|
|
47
|
+
assertDefined(t, "");
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
describe("assertsNull", () => {
|
|
52
|
+
const value = undefined as unknown;
|
|
53
|
+
|
|
54
|
+
// @ts-expect-error Should fail since we are not in a union with null.
|
|
55
|
+
assertNotNull(value as boolean, "");
|
|
56
|
+
// @ts-expect-error Should fail since we are not in a union with null.
|
|
57
|
+
assertNotNull(value as number, "");
|
|
58
|
+
// @ts-expect-error Should fail since we are not in a union with null.
|
|
59
|
+
assertNotNull(value as string, "");
|
|
60
|
+
// @ts-expect-error Should fail since we are not in a union with null.
|
|
61
|
+
assertNotNull(value as Function, ""); // eslint-disable-line @typescript-eslint/no-unsafe-function-type
|
|
62
|
+
|
|
63
|
+
assertNotNull(value as boolean | null, "");
|
|
64
|
+
assertNotNull(value as number | null, "");
|
|
65
|
+
assertNotNull(value as string | null, "");
|
|
66
|
+
assertNotNull(value as Function | null, ""); // eslint-disable-line @typescript-eslint/no-unsafe-function-type
|
|
67
|
+
|
|
68
|
+
// @ts-expect-error Should fail because we are in a union with undefined instead of null.
|
|
69
|
+
assertNotNull(value as boolean | undefined, "");
|
|
70
|
+
// @ts-expect-error Should fail because we are in a union with undefined instead of null.
|
|
71
|
+
assertNotNull(value as number | undefined, "");
|
|
72
|
+
// @ts-expect-error Should fail because we are in a union with undefined instead of null.
|
|
73
|
+
assertNotNull(value as string | undefined, "");
|
|
74
|
+
// @ts-expect-error Should fail because we are in a union with undefined instead of null.
|
|
75
|
+
assertNotNull(value as Function | undefined, ""); // eslint-disable-line @typescript-eslint/no-unsafe-function-type
|
|
76
|
+
|
|
77
|
+
assertNotNull(value as boolean | null | undefined, "");
|
|
78
|
+
assertNotNull(value as number | null | undefined, "");
|
|
79
|
+
assertNotNull(value as string | null | undefined, "");
|
|
80
|
+
assertNotNull(value as Function | null | undefined, ""); // eslint-disable-line @typescript-eslint/no-unsafe-function-type
|
|
81
|
+
|
|
82
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters
|
|
83
|
+
function _genericFunction<T>(_arg: T) {
|
|
84
|
+
const t = null as T | null; // eslint-disable-line unicorn/no-null
|
|
85
|
+
assertNotNull(t, "");
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
describe("eRange", () => {
|
|
90
|
+
describe("1 arg 0", () => {
|
|
91
|
+
test("0", () => {
|
|
92
|
+
const result = [...eRange(0)];
|
|
93
|
+
deepStrictEqual(result, []);
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
describe("1 arg positive", () => {
|
|
98
|
+
test("1", () => {
|
|
99
|
+
const result = [...eRange(1)];
|
|
100
|
+
deepStrictEqual(result, [0]);
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
test("2", () => {
|
|
104
|
+
const result = [...eRange(2)];
|
|
105
|
+
deepStrictEqual(result, [0, 1]);
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
test("3", () => {
|
|
109
|
+
const result = [...eRange(3)];
|
|
110
|
+
deepStrictEqual(result, [0, 1, 2]);
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
describe("1 arg negative", () => {
|
|
115
|
+
test("-1", () => {
|
|
116
|
+
const result = [...eRange(-1)];
|
|
117
|
+
deepStrictEqual(result, []);
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
describe("2 args same", () => {
|
|
122
|
+
test("0, 0", () => {
|
|
123
|
+
const result = [...eRange(0, 0)];
|
|
124
|
+
deepStrictEqual(result, []);
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
test("1, 1", () => {
|
|
128
|
+
const result = [...eRange(1, 1)];
|
|
129
|
+
deepStrictEqual(result, []);
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
test("2, 2", () => {
|
|
133
|
+
const result = [...eRange(2, 2)];
|
|
134
|
+
deepStrictEqual(result, []);
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
test("3, 3", () => {
|
|
138
|
+
const result = [...eRange(3, 3)];
|
|
139
|
+
deepStrictEqual(result, []);
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
test("-1, -1", () => {
|
|
143
|
+
const result = [...eRange(-1, -1)];
|
|
144
|
+
deepStrictEqual(result, []);
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
test("-2, -2", () => {
|
|
148
|
+
const result = [...eRange(-2, -2)];
|
|
149
|
+
deepStrictEqual(result, []);
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
test("-3, -3", () => {
|
|
153
|
+
const result = [...eRange(-3, -3)];
|
|
154
|
+
deepStrictEqual(result, []);
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
describe("2 args increasing", () => {
|
|
159
|
+
test("0, 1", () => {
|
|
160
|
+
const result = [...eRange(0, 1)];
|
|
161
|
+
deepStrictEqual(result, [0]);
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
test("0, 2", () => {
|
|
165
|
+
const result = [...eRange(0, 2)];
|
|
166
|
+
deepStrictEqual(result, [0, 1]);
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
test("0, 3", () => {
|
|
170
|
+
const result = [...eRange(0, 3)];
|
|
171
|
+
deepStrictEqual(result, [0, 1, 2]);
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
test("1, 2", () => {
|
|
175
|
+
const result = [...eRange(1, 2)];
|
|
176
|
+
deepStrictEqual(result, [1]);
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
test("1, 3", () => {
|
|
180
|
+
const result = [...eRange(1, 3)];
|
|
181
|
+
deepStrictEqual(result, [1, 2]);
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
test("1, 4", () => {
|
|
185
|
+
const result = [...eRange(1, 4)];
|
|
186
|
+
deepStrictEqual(result, [1, 2, 3]);
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
test("2, 3", () => {
|
|
190
|
+
const result = [...eRange(2, 3)];
|
|
191
|
+
deepStrictEqual(result, [2]);
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
test("2, 4", () => {
|
|
195
|
+
const result = [...eRange(2, 4)];
|
|
196
|
+
deepStrictEqual(result, [2, 3]);
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
test("2, 5", () => {
|
|
200
|
+
const result = [...eRange(2, 5)];
|
|
201
|
+
deepStrictEqual(result, [2, 3, 4]);
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
test("-3, -1", () => {
|
|
205
|
+
const result = [...eRange(-3, -1)];
|
|
206
|
+
deepStrictEqual(result, [-3, -2]);
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
test("-3, 3", () => {
|
|
210
|
+
const result = [...eRange(-3, 3)];
|
|
211
|
+
deepStrictEqual(result, [-3, -2, -1, 0, 1, 2]);
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
describe("2 args decreasing", () => {
|
|
216
|
+
test("1, 0", () => {
|
|
217
|
+
const result = [...eRange(1, 0)];
|
|
218
|
+
deepStrictEqual(result, []);
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
test("-1, -2", () => {
|
|
222
|
+
const result = [...eRange(-1, -3)];
|
|
223
|
+
deepStrictEqual(result, []);
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
describe("iRange", () => {
|
|
229
|
+
describe("1 arg 0", () => {
|
|
230
|
+
test("0", () => {
|
|
231
|
+
const result = [...iRange(0)];
|
|
232
|
+
deepStrictEqual(result, [0]);
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
describe("1 arg positive", () => {
|
|
237
|
+
test("1", () => {
|
|
238
|
+
const result = [...iRange(1)];
|
|
239
|
+
deepStrictEqual(result, [0, 1]);
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
test("2", () => {
|
|
243
|
+
const result = [...iRange(2)];
|
|
244
|
+
deepStrictEqual(result, [0, 1, 2]);
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
test("3", () => {
|
|
248
|
+
const result = [...iRange(3)];
|
|
249
|
+
deepStrictEqual(result, [0, 1, 2, 3]);
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
|
|
253
|
+
describe("1 arg negative", () => {
|
|
254
|
+
test("-1", () => {
|
|
255
|
+
const result = [...iRange(-1)];
|
|
256
|
+
deepStrictEqual(result, []);
|
|
257
|
+
});
|
|
258
|
+
});
|
|
259
|
+
|
|
260
|
+
describe("2 args same", () => {
|
|
261
|
+
test("0, 0", () => {
|
|
262
|
+
const result = [...iRange(0, 0)];
|
|
263
|
+
deepStrictEqual(result, [0]);
|
|
264
|
+
});
|
|
265
|
+
|
|
266
|
+
test("1, 1", () => {
|
|
267
|
+
const result = [...iRange(1, 1)];
|
|
268
|
+
deepStrictEqual(result, [1]);
|
|
269
|
+
});
|
|
270
|
+
|
|
271
|
+
test("2, 2", () => {
|
|
272
|
+
const result = [...iRange(2, 2)];
|
|
273
|
+
deepStrictEqual(result, [2]);
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
test("3, 3", () => {
|
|
277
|
+
const result = [...iRange(3, 3)];
|
|
278
|
+
deepStrictEqual(result, [3]);
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
test("-1, -1", () => {
|
|
282
|
+
const result = [...iRange(-1, -1)];
|
|
283
|
+
deepStrictEqual(result, [-1]);
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
test("-2, -2", () => {
|
|
287
|
+
const result = [...iRange(-2, -2)];
|
|
288
|
+
deepStrictEqual(result, [-2]);
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
test("-3, -3", () => {
|
|
292
|
+
const result = [...iRange(-3, -3)];
|
|
293
|
+
deepStrictEqual(result, [-3]);
|
|
294
|
+
});
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
describe("2 args increasing", () => {
|
|
298
|
+
test("0, 1", () => {
|
|
299
|
+
const result = [...iRange(0, 1)];
|
|
300
|
+
deepStrictEqual(result, [0, 1]);
|
|
301
|
+
});
|
|
302
|
+
|
|
303
|
+
test("0, 2", () => {
|
|
304
|
+
const result = [...iRange(0, 2)];
|
|
305
|
+
deepStrictEqual(result, [0, 1, 2]);
|
|
306
|
+
});
|
|
307
|
+
|
|
308
|
+
test("0, 3", () => {
|
|
309
|
+
const result = [...iRange(0, 3)];
|
|
310
|
+
deepStrictEqual(result, [0, 1, 2, 3]);
|
|
311
|
+
});
|
|
312
|
+
|
|
313
|
+
test("1, 2", () => {
|
|
314
|
+
const result = [...iRange(1, 2)];
|
|
315
|
+
deepStrictEqual(result, [1, 2]);
|
|
316
|
+
});
|
|
317
|
+
|
|
318
|
+
test("1, 3", () => {
|
|
319
|
+
const result = [...iRange(1, 3)];
|
|
320
|
+
deepStrictEqual(result, [1, 2, 3]);
|
|
321
|
+
});
|
|
322
|
+
|
|
323
|
+
test("1, 4", () => {
|
|
324
|
+
const result = [...iRange(1, 4)];
|
|
325
|
+
deepStrictEqual(result, [1, 2, 3, 4]);
|
|
326
|
+
});
|
|
327
|
+
|
|
328
|
+
test("2, 3", () => {
|
|
329
|
+
const result = [...iRange(2, 3)];
|
|
330
|
+
deepStrictEqual(result, [2, 3]);
|
|
331
|
+
});
|
|
332
|
+
|
|
333
|
+
test("2, 4", () => {
|
|
334
|
+
const result = [...iRange(2, 4)];
|
|
335
|
+
deepStrictEqual(result, [2, 3, 4]);
|
|
336
|
+
});
|
|
337
|
+
|
|
338
|
+
test("2, 5", () => {
|
|
339
|
+
const result = [...iRange(2, 5)];
|
|
340
|
+
deepStrictEqual(result, [2, 3, 4, 5]);
|
|
341
|
+
});
|
|
342
|
+
|
|
343
|
+
test("-3, -1", () => {
|
|
344
|
+
const result = [...iRange(-3, -1)];
|
|
345
|
+
deepStrictEqual(result, [-3, -2, -1]);
|
|
346
|
+
});
|
|
347
|
+
|
|
348
|
+
test("-3, 3", () => {
|
|
349
|
+
const result = [...iRange(-3, 3)];
|
|
350
|
+
deepStrictEqual(result, [-3, -2, -1, 0, 1, 2, 3]);
|
|
351
|
+
});
|
|
352
|
+
});
|
|
353
|
+
|
|
354
|
+
describe("2 args decreasing", () => {
|
|
355
|
+
test("1, 0", () => {
|
|
356
|
+
const result = [...iRange(1, 0)];
|
|
357
|
+
deepStrictEqual(result, []);
|
|
358
|
+
});
|
|
359
|
+
|
|
360
|
+
test("-1, -2", () => {
|
|
361
|
+
const result = [...iRange(-1, -3)];
|
|
362
|
+
deepStrictEqual(result, []);
|
|
363
|
+
});
|
|
364
|
+
});
|
|
365
|
+
});
|
|
366
|
+
|
|
367
|
+
describe("parseFloatSafe", () => {
|
|
368
|
+
describe("non valid types", () => {
|
|
369
|
+
test("undefined", () => {
|
|
370
|
+
const result = parseFloatSafe(undefined as unknown as string);
|
|
371
|
+
strictEqual(result, undefined);
|
|
372
|
+
});
|
|
373
|
+
|
|
374
|
+
test("null", () => {
|
|
375
|
+
// eslint-disable-next-line unicorn/no-null
|
|
376
|
+
const result = parseFloatSafe(null as unknown as string);
|
|
377
|
+
strictEqual(result, undefined);
|
|
378
|
+
});
|
|
379
|
+
|
|
380
|
+
test("bigint", () => {
|
|
381
|
+
const result = parseFloatSafe(BigInt(1) as unknown as string);
|
|
382
|
+
strictEqual(result, undefined);
|
|
383
|
+
});
|
|
384
|
+
|
|
385
|
+
test("false", () => {
|
|
386
|
+
const result = parseFloatSafe(false as unknown as string);
|
|
387
|
+
strictEqual(result, undefined);
|
|
388
|
+
});
|
|
389
|
+
|
|
390
|
+
test("true", () => {
|
|
391
|
+
const result = parseFloatSafe(true as unknown as string);
|
|
392
|
+
strictEqual(result, undefined);
|
|
393
|
+
});
|
|
394
|
+
|
|
395
|
+
test("function", () => {
|
|
396
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
397
|
+
const result = parseFloatSafe((() => {}) as unknown as string);
|
|
398
|
+
strictEqual(result, undefined);
|
|
399
|
+
});
|
|
400
|
+
|
|
401
|
+
test("number", () => {
|
|
402
|
+
const result = parseFloatSafe(1 as unknown as string);
|
|
403
|
+
strictEqual(result, undefined);
|
|
404
|
+
});
|
|
405
|
+
|
|
406
|
+
test("object", () => {
|
|
407
|
+
const result = parseFloatSafe({} as string);
|
|
408
|
+
strictEqual(result, undefined);
|
|
409
|
+
});
|
|
410
|
+
|
|
411
|
+
test("symbol", () => {
|
|
412
|
+
const result = parseFloatSafe(Symbol("1") as unknown as string);
|
|
413
|
+
strictEqual(result, undefined);
|
|
414
|
+
});
|
|
415
|
+
});
|
|
416
|
+
|
|
417
|
+
describe("spaces", () => {
|
|
418
|
+
test("space", () => {
|
|
419
|
+
const result = parseFloatSafe(" ");
|
|
420
|
+
strictEqual(result, undefined);
|
|
421
|
+
});
|
|
422
|
+
|
|
423
|
+
test("space + 1", () => {
|
|
424
|
+
const result = parseFloatSafe(" 1");
|
|
425
|
+
strictEqual(result, 1);
|
|
426
|
+
});
|
|
427
|
+
|
|
428
|
+
test("1 + space", () => {
|
|
429
|
+
const result = parseFloatSafe("1 ");
|
|
430
|
+
strictEqual(result, 1);
|
|
431
|
+
});
|
|
432
|
+
|
|
433
|
+
test("space + 1 + space", () => {
|
|
434
|
+
const result = parseFloatSafe(" 1 ");
|
|
435
|
+
strictEqual(result, 1);
|
|
436
|
+
});
|
|
437
|
+
|
|
438
|
+
test("space + -1", () => {
|
|
439
|
+
const result = parseFloatSafe(" -1");
|
|
440
|
+
strictEqual(result, -1);
|
|
441
|
+
});
|
|
442
|
+
|
|
443
|
+
test("-1 + space", () => {
|
|
444
|
+
const result = parseFloatSafe("-1 ");
|
|
445
|
+
strictEqual(result, -1);
|
|
446
|
+
});
|
|
447
|
+
|
|
448
|
+
test("space + -1 + space", () => {
|
|
449
|
+
const result = parseFloatSafe(" -1 ");
|
|
450
|
+
strictEqual(result, -1);
|
|
451
|
+
});
|
|
452
|
+
|
|
453
|
+
test("space + 1.0", () => {
|
|
454
|
+
const result = parseFloatSafe(" 1.0");
|
|
455
|
+
strictEqual(result, 1);
|
|
456
|
+
});
|
|
457
|
+
|
|
458
|
+
test("1.0 + space", () => {
|
|
459
|
+
const result = parseFloatSafe("1.0 ");
|
|
460
|
+
strictEqual(result, 1);
|
|
461
|
+
});
|
|
462
|
+
|
|
463
|
+
test("space + 1.0 + space", () => {
|
|
464
|
+
const result = parseFloatSafe(" 1.0 ");
|
|
465
|
+
strictEqual(result, 1);
|
|
466
|
+
});
|
|
467
|
+
|
|
468
|
+
test("space + -1.0", () => {
|
|
469
|
+
const result = parseFloatSafe(" -1.0");
|
|
470
|
+
strictEqual(result, -1);
|
|
471
|
+
});
|
|
472
|
+
|
|
473
|
+
test("-1.0 + space", () => {
|
|
474
|
+
const result = parseFloatSafe("-1.0 ");
|
|
475
|
+
strictEqual(result, -1);
|
|
476
|
+
});
|
|
477
|
+
|
|
478
|
+
test("space + -1.0 + space", () => {
|
|
479
|
+
const result = parseFloatSafe(" -1.0 ");
|
|
480
|
+
strictEqual(result, -1);
|
|
481
|
+
});
|
|
482
|
+
});
|
|
483
|
+
|
|
484
|
+
describe("tabs", () => {
|
|
485
|
+
test("tab", () => {
|
|
486
|
+
const result = parseFloatSafe(" ");
|
|
487
|
+
strictEqual(result, undefined);
|
|
488
|
+
});
|
|
489
|
+
|
|
490
|
+
test("tab + 1", () => {
|
|
491
|
+
const result = parseFloatSafe(" 1");
|
|
492
|
+
strictEqual(result, 1);
|
|
493
|
+
});
|
|
494
|
+
|
|
495
|
+
test("1 + tab", () => {
|
|
496
|
+
const result = parseFloatSafe("1 ");
|
|
497
|
+
strictEqual(result, 1);
|
|
498
|
+
});
|
|
499
|
+
|
|
500
|
+
test("tab + 1 + tab", () => {
|
|
501
|
+
const result = parseFloatSafe(" 1 ");
|
|
502
|
+
strictEqual(result, 1);
|
|
503
|
+
});
|
|
504
|
+
|
|
505
|
+
test("tab + -1", () => {
|
|
506
|
+
const result = parseFloatSafe(" -1");
|
|
507
|
+
strictEqual(result, -1);
|
|
508
|
+
});
|
|
509
|
+
|
|
510
|
+
test("-1 + tab", () => {
|
|
511
|
+
const result = parseFloatSafe("-1 ");
|
|
512
|
+
strictEqual(result, -1);
|
|
513
|
+
});
|
|
514
|
+
|
|
515
|
+
test("tab + -1 + tab", () => {
|
|
516
|
+
const result = parseFloatSafe(" -1 ");
|
|
517
|
+
strictEqual(result, -1);
|
|
518
|
+
});
|
|
519
|
+
|
|
520
|
+
test("tab + 1.0", () => {
|
|
521
|
+
const result = parseFloatSafe(" 1.0");
|
|
522
|
+
strictEqual(result, 1);
|
|
523
|
+
});
|
|
524
|
+
|
|
525
|
+
test("1.0 + tab", () => {
|
|
526
|
+
const result = parseFloatSafe("1.0 ");
|
|
527
|
+
strictEqual(result, 1);
|
|
528
|
+
});
|
|
529
|
+
|
|
530
|
+
test("tab + 1.0 + tab", () => {
|
|
531
|
+
const result = parseFloatSafe(" 1.0 ");
|
|
532
|
+
strictEqual(result, 1);
|
|
533
|
+
});
|
|
534
|
+
|
|
535
|
+
test("tab + -1.0", () => {
|
|
536
|
+
const result = parseFloatSafe(" -1.0");
|
|
537
|
+
strictEqual(result, -1);
|
|
538
|
+
});
|
|
539
|
+
|
|
540
|
+
test("-1.0 + tab", () => {
|
|
541
|
+
const result = parseFloatSafe("-1.0 ");
|
|
542
|
+
strictEqual(result, -1);
|
|
543
|
+
});
|
|
544
|
+
|
|
545
|
+
test("tab + -1.0 + tab", () => {
|
|
546
|
+
const result = parseFloatSafe(" -1.0 ");
|
|
547
|
+
strictEqual(result, -1);
|
|
548
|
+
});
|
|
549
|
+
});
|
|
550
|
+
|
|
551
|
+
describe("invalid input", () => {
|
|
552
|
+
test("empty string", () => {
|
|
553
|
+
const result = parseFloatSafe("");
|
|
554
|
+
strictEqual(result, undefined);
|
|
555
|
+
});
|
|
556
|
+
|
|
557
|
+
test(".", () => {
|
|
558
|
+
const result = parseFloatSafe(".");
|
|
559
|
+
strictEqual(result, undefined);
|
|
560
|
+
});
|
|
561
|
+
|
|
562
|
+
test("1.", () => {
|
|
563
|
+
const result = parseFloatSafe("1.");
|
|
564
|
+
strictEqual(result, undefined);
|
|
565
|
+
});
|
|
566
|
+
|
|
567
|
+
test("-", () => {
|
|
568
|
+
const result = parseFloatSafe("-");
|
|
569
|
+
strictEqual(result, undefined);
|
|
570
|
+
});
|
|
571
|
+
|
|
572
|
+
test("1-", () => {
|
|
573
|
+
const result = parseFloatSafe("1-");
|
|
574
|
+
strictEqual(result, undefined);
|
|
575
|
+
});
|
|
576
|
+
|
|
577
|
+
test("- 1", () => {
|
|
578
|
+
const result = parseFloatSafe("- 1");
|
|
579
|
+
strictEqual(result, undefined);
|
|
580
|
+
});
|
|
581
|
+
|
|
582
|
+
test("--", () => {
|
|
583
|
+
const result = parseFloatSafe("--");
|
|
584
|
+
strictEqual(result, undefined);
|
|
585
|
+
});
|
|
586
|
+
|
|
587
|
+
test("--1", () => {
|
|
588
|
+
const result = parseFloatSafe("--1");
|
|
589
|
+
strictEqual(result, undefined);
|
|
590
|
+
});
|
|
591
|
+
|
|
592
|
+
test("1--", () => {
|
|
593
|
+
const result = parseFloatSafe("--1");
|
|
594
|
+
strictEqual(result, undefined);
|
|
595
|
+
});
|
|
596
|
+
|
|
597
|
+
test("-- 1", () => {
|
|
598
|
+
const result = parseFloatSafe("-- 1");
|
|
599
|
+
strictEqual(result, undefined);
|
|
600
|
+
});
|
|
601
|
+
});
|
|
602
|
+
|
|
603
|
+
describe("normal integers", () => {
|
|
604
|
+
test("1", () => {
|
|
605
|
+
const result = parseFloatSafe("1");
|
|
606
|
+
strictEqual(result, 1);
|
|
607
|
+
});
|
|
608
|
+
|
|
609
|
+
test("-1", () => {
|
|
610
|
+
const result = parseFloatSafe("-1");
|
|
611
|
+
strictEqual(result, -1);
|
|
612
|
+
});
|
|
613
|
+
|
|
614
|
+
test("10", () => {
|
|
615
|
+
const result = parseFloatSafe("10");
|
|
616
|
+
strictEqual(result, 10);
|
|
617
|
+
});
|
|
618
|
+
|
|
619
|
+
test("-10", () => {
|
|
620
|
+
const result = parseFloatSafe("-10");
|
|
621
|
+
strictEqual(result, -10);
|
|
622
|
+
});
|
|
623
|
+
|
|
624
|
+
test("01", () => {
|
|
625
|
+
const result = parseFloatSafe("01");
|
|
626
|
+
strictEqual(result, 1);
|
|
627
|
+
});
|
|
628
|
+
|
|
629
|
+
test("-01", () => {
|
|
630
|
+
const result = parseFloatSafe("-01");
|
|
631
|
+
strictEqual(result, -1);
|
|
632
|
+
});
|
|
633
|
+
});
|
|
634
|
+
|
|
635
|
+
describe("normal floats", () => {
|
|
636
|
+
test(".1", () => {
|
|
637
|
+
const result = parseFloatSafe(".1");
|
|
638
|
+
strictEqual(result, 0.1);
|
|
639
|
+
});
|
|
640
|
+
|
|
641
|
+
test("1.0", () => {
|
|
642
|
+
const result = parseFloatSafe("1.0");
|
|
643
|
+
strictEqual(result, 1);
|
|
644
|
+
});
|
|
645
|
+
|
|
646
|
+
test("1.1", () => {
|
|
647
|
+
const result = parseFloatSafe("1.1");
|
|
648
|
+
strictEqual(result, 1.1);
|
|
649
|
+
});
|
|
650
|
+
|
|
651
|
+
test("0.1", () => {
|
|
652
|
+
const result = parseFloatSafe("0.1");
|
|
653
|
+
strictEqual(result, 0.1);
|
|
654
|
+
});
|
|
655
|
+
|
|
656
|
+
test("10.0", () => {
|
|
657
|
+
const result = parseFloatSafe("10.0");
|
|
658
|
+
strictEqual(result, 10);
|
|
659
|
+
});
|
|
660
|
+
|
|
661
|
+
test("10.1", () => {
|
|
662
|
+
const result = parseFloatSafe("10.1");
|
|
663
|
+
strictEqual(result, 10.1);
|
|
664
|
+
});
|
|
665
|
+
|
|
666
|
+
test("-10.0", () => {
|
|
667
|
+
const result = parseFloatSafe("-10.0");
|
|
668
|
+
strictEqual(result, -10);
|
|
669
|
+
});
|
|
670
|
+
|
|
671
|
+
test("-10.1", () => {
|
|
672
|
+
const result = parseFloatSafe("-10.1");
|
|
673
|
+
strictEqual(result, -10.1);
|
|
674
|
+
});
|
|
675
|
+
|
|
676
|
+
test("01.0", () => {
|
|
677
|
+
const result = parseFloatSafe("01.0");
|
|
678
|
+
strictEqual(result, 1);
|
|
679
|
+
});
|
|
680
|
+
|
|
681
|
+
test("-01.0", () => {
|
|
682
|
+
const result = parseFloatSafe("-01.0");
|
|
683
|
+
strictEqual(result, -1);
|
|
684
|
+
});
|
|
685
|
+
});
|
|
686
|
+
});
|
|
687
|
+
|
|
688
|
+
describe("parseIntSafe", () => {
|
|
689
|
+
describe("non valid types", () => {
|
|
690
|
+
test("undefined", () => {
|
|
691
|
+
const result = parseIntSafe(undefined as unknown as string);
|
|
692
|
+
strictEqual(result, undefined);
|
|
693
|
+
});
|
|
694
|
+
|
|
695
|
+
test("null", () => {
|
|
696
|
+
// eslint-disable-next-line unicorn/no-null
|
|
697
|
+
const result = parseIntSafe(null as unknown as string);
|
|
698
|
+
strictEqual(result, undefined);
|
|
699
|
+
});
|
|
700
|
+
|
|
701
|
+
test("bigint", () => {
|
|
702
|
+
const result = parseIntSafe(BigInt(1) as unknown as string);
|
|
703
|
+
strictEqual(result, undefined);
|
|
704
|
+
});
|
|
705
|
+
|
|
706
|
+
test("false", () => {
|
|
707
|
+
const result = parseIntSafe(false as unknown as string);
|
|
708
|
+
strictEqual(result, undefined);
|
|
709
|
+
});
|
|
710
|
+
|
|
711
|
+
test("true", () => {
|
|
712
|
+
const result = parseIntSafe(true as unknown as string);
|
|
713
|
+
strictEqual(result, undefined);
|
|
714
|
+
});
|
|
715
|
+
|
|
716
|
+
test("function", () => {
|
|
717
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
718
|
+
const result = parseIntSafe((() => {}) as unknown as string);
|
|
719
|
+
strictEqual(result, undefined);
|
|
720
|
+
});
|
|
721
|
+
|
|
722
|
+
test("number", () => {
|
|
723
|
+
const result = parseIntSafe(1 as unknown as string);
|
|
724
|
+
strictEqual(result, undefined);
|
|
725
|
+
});
|
|
726
|
+
|
|
727
|
+
test("object", () => {
|
|
728
|
+
const result = parseIntSafe({} as string);
|
|
729
|
+
strictEqual(result, undefined);
|
|
730
|
+
});
|
|
731
|
+
|
|
732
|
+
test("symbol", () => {
|
|
733
|
+
const result = parseIntSafe(Symbol("1") as unknown as string);
|
|
734
|
+
strictEqual(result, undefined);
|
|
735
|
+
});
|
|
736
|
+
});
|
|
737
|
+
|
|
738
|
+
describe("spaces", () => {
|
|
739
|
+
test("space", () => {
|
|
740
|
+
const result = parseIntSafe(" ");
|
|
741
|
+
strictEqual(result, undefined);
|
|
742
|
+
});
|
|
743
|
+
|
|
744
|
+
test("space + 1", () => {
|
|
745
|
+
const result = parseIntSafe(" 1");
|
|
746
|
+
strictEqual(result, 1);
|
|
747
|
+
});
|
|
748
|
+
|
|
749
|
+
test("1 + space", () => {
|
|
750
|
+
const result = parseIntSafe("1 ");
|
|
751
|
+
strictEqual(result, 1);
|
|
752
|
+
});
|
|
753
|
+
|
|
754
|
+
test("space + 1 + space", () => {
|
|
755
|
+
const result = parseIntSafe(" 1 ");
|
|
756
|
+
strictEqual(result, 1);
|
|
757
|
+
});
|
|
758
|
+
|
|
759
|
+
test("space + -1", () => {
|
|
760
|
+
const result = parseIntSafe(" -1");
|
|
761
|
+
strictEqual(result, -1);
|
|
762
|
+
});
|
|
763
|
+
|
|
764
|
+
test("-1 + space", () => {
|
|
765
|
+
const result = parseIntSafe("-1 ");
|
|
766
|
+
strictEqual(result, -1);
|
|
767
|
+
});
|
|
768
|
+
|
|
769
|
+
test("space + -1 + space", () => {
|
|
770
|
+
const result = parseIntSafe(" -1 ");
|
|
771
|
+
strictEqual(result, -1);
|
|
772
|
+
});
|
|
773
|
+
});
|
|
774
|
+
|
|
775
|
+
describe("tabs", () => {
|
|
776
|
+
test("tab", () => {
|
|
777
|
+
const result = parseIntSafe(" ");
|
|
778
|
+
strictEqual(result, undefined);
|
|
779
|
+
});
|
|
780
|
+
|
|
781
|
+
test("tab + 1", () => {
|
|
782
|
+
const result = parseIntSafe(" 1");
|
|
783
|
+
strictEqual(result, 1);
|
|
784
|
+
});
|
|
785
|
+
|
|
786
|
+
test("1 + tab", () => {
|
|
787
|
+
const result = parseIntSafe("1 ");
|
|
788
|
+
strictEqual(result, 1);
|
|
789
|
+
});
|
|
790
|
+
|
|
791
|
+
test("tab + 1 + tab", () => {
|
|
792
|
+
const result = parseIntSafe(" 1 ");
|
|
793
|
+
strictEqual(result, 1);
|
|
794
|
+
});
|
|
795
|
+
|
|
796
|
+
test("tab + -1", () => {
|
|
797
|
+
const result = parseIntSafe(" -1");
|
|
798
|
+
strictEqual(result, -1);
|
|
799
|
+
});
|
|
800
|
+
|
|
801
|
+
test("-1 + tab", () => {
|
|
802
|
+
const result = parseIntSafe("-1 ");
|
|
803
|
+
strictEqual(result, -1);
|
|
804
|
+
});
|
|
805
|
+
|
|
806
|
+
test("tab + -1 + tab", () => {
|
|
807
|
+
const result = parseIntSafe(" -1 ");
|
|
808
|
+
strictEqual(result, -1);
|
|
809
|
+
});
|
|
810
|
+
});
|
|
811
|
+
|
|
812
|
+
describe("invalid input", () => {
|
|
813
|
+
test("empty string", () => {
|
|
814
|
+
const result = parseIntSafe("");
|
|
815
|
+
strictEqual(result, undefined);
|
|
816
|
+
});
|
|
817
|
+
|
|
818
|
+
test(".", () => {
|
|
819
|
+
const result = parseIntSafe(".");
|
|
820
|
+
strictEqual(result, undefined);
|
|
821
|
+
});
|
|
822
|
+
|
|
823
|
+
test(".1", () => {
|
|
824
|
+
const result = parseIntSafe(".1");
|
|
825
|
+
strictEqual(result, undefined);
|
|
826
|
+
});
|
|
827
|
+
|
|
828
|
+
test("1.", () => {
|
|
829
|
+
const result = parseIntSafe("1.");
|
|
830
|
+
strictEqual(result, undefined);
|
|
831
|
+
});
|
|
832
|
+
|
|
833
|
+
test("1.0", () => {
|
|
834
|
+
const result = parseIntSafe("1.0");
|
|
835
|
+
strictEqual(result, undefined);
|
|
836
|
+
});
|
|
837
|
+
|
|
838
|
+
test("0.1", () => {
|
|
839
|
+
const result = parseIntSafe("0.1");
|
|
840
|
+
strictEqual(result, undefined);
|
|
841
|
+
});
|
|
842
|
+
|
|
843
|
+
test("-", () => {
|
|
844
|
+
const result = parseIntSafe("-");
|
|
845
|
+
strictEqual(result, undefined);
|
|
846
|
+
});
|
|
847
|
+
|
|
848
|
+
test("1-", () => {
|
|
849
|
+
const result = parseIntSafe("1-");
|
|
850
|
+
strictEqual(result, undefined);
|
|
851
|
+
});
|
|
852
|
+
|
|
853
|
+
test("- 1", () => {
|
|
854
|
+
const result = parseIntSafe("- 1");
|
|
855
|
+
strictEqual(result, undefined);
|
|
856
|
+
});
|
|
857
|
+
|
|
858
|
+
test("--", () => {
|
|
859
|
+
const result = parseIntSafe("--");
|
|
860
|
+
strictEqual(result, undefined);
|
|
861
|
+
});
|
|
862
|
+
|
|
863
|
+
test("--1", () => {
|
|
864
|
+
const result = parseIntSafe("--1");
|
|
865
|
+
strictEqual(result, undefined);
|
|
866
|
+
});
|
|
867
|
+
|
|
868
|
+
test("1--", () => {
|
|
869
|
+
const result = parseIntSafe("--1");
|
|
870
|
+
strictEqual(result, undefined);
|
|
871
|
+
});
|
|
872
|
+
|
|
873
|
+
test("-- 1", () => {
|
|
874
|
+
const result = parseIntSafe("-- 1");
|
|
875
|
+
strictEqual(result, undefined);
|
|
876
|
+
});
|
|
877
|
+
});
|
|
878
|
+
|
|
879
|
+
describe("normal", () => {
|
|
880
|
+
test("1", () => {
|
|
881
|
+
const result = parseIntSafe("1");
|
|
882
|
+
strictEqual(result, 1);
|
|
883
|
+
});
|
|
884
|
+
|
|
885
|
+
test("-1", () => {
|
|
886
|
+
const result = parseIntSafe("-1");
|
|
887
|
+
strictEqual(result, -1);
|
|
888
|
+
});
|
|
889
|
+
|
|
890
|
+
test("10", () => {
|
|
891
|
+
const result = parseIntSafe("10");
|
|
892
|
+
strictEqual(result, 10);
|
|
893
|
+
});
|
|
894
|
+
|
|
895
|
+
test("-10", () => {
|
|
896
|
+
const result = parseIntSafe("-10");
|
|
897
|
+
strictEqual(result, -10);
|
|
898
|
+
});
|
|
899
|
+
|
|
900
|
+
test("01", () => {
|
|
901
|
+
const result = parseIntSafe("01");
|
|
902
|
+
strictEqual(result, 1);
|
|
903
|
+
});
|
|
904
|
+
|
|
905
|
+
test("-01", () => {
|
|
906
|
+
const result = parseIntSafe("-01");
|
|
907
|
+
strictEqual(result, -1);
|
|
908
|
+
});
|
|
909
|
+
});
|
|
910
|
+
});
|