@jamashita/lluvia-sequence 2.11.0 → 2.14.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.
Files changed (44) hide show
  1. package/dist/cjs/ASequence.d.ts +8 -8
  2. package/dist/cjs/ASequence.d.ts.map +1 -1
  3. package/dist/cjs/ASequence.js.map +1 -1
  4. package/dist/cjs/ImmutableSequence.d.ts +1 -1
  5. package/dist/cjs/ImmutableSequence.d.ts.map +1 -1
  6. package/dist/cjs/ImmutableSequence.js.map +1 -1
  7. package/dist/cjs/MutableSequence.d.ts +1 -1
  8. package/dist/cjs/MutableSequence.d.ts.map +1 -1
  9. package/dist/cjs/MutableSequence.js.map +1 -1
  10. package/dist/cjs/ReadonlySequence.d.ts +1 -1
  11. package/dist/cjs/ReadonlySequence.d.ts.map +1 -1
  12. package/dist/cjs/Sequence.d.ts +1 -1
  13. package/dist/cjs/Sequence.d.ts.map +1 -1
  14. package/dist/cjs/mock/MockSequence.d.ts +2 -2
  15. package/dist/cjs/mock/MockSequence.d.ts.map +1 -1
  16. package/dist/cjs/mock/MockSequence.js.map +1 -1
  17. package/dist/esm/ASequence.d.ts +8 -8
  18. package/dist/esm/ASequence.d.ts.map +1 -1
  19. package/dist/esm/ASequence.js.map +1 -1
  20. package/dist/esm/ImmutableSequence.d.ts +1 -1
  21. package/dist/esm/ImmutableSequence.d.ts.map +1 -1
  22. package/dist/esm/ImmutableSequence.js.map +1 -1
  23. package/dist/esm/MutableSequence.d.ts +1 -1
  24. package/dist/esm/MutableSequence.d.ts.map +1 -1
  25. package/dist/esm/MutableSequence.js.map +1 -1
  26. package/dist/esm/ReadonlySequence.d.ts +1 -1
  27. package/dist/esm/ReadonlySequence.d.ts.map +1 -1
  28. package/dist/esm/Sequence.d.ts +1 -1
  29. package/dist/esm/Sequence.d.ts.map +1 -1
  30. package/dist/esm/mock/MockSequence.d.ts +2 -2
  31. package/dist/esm/mock/MockSequence.d.ts.map +1 -1
  32. package/dist/esm/mock/MockSequence.js.map +1 -1
  33. package/package.json +5 -5
  34. package/src/ASequence.ts +8 -8
  35. package/src/ImmutableSequence.ts +1 -1
  36. package/src/MutableSequence.ts +2 -2
  37. package/src/ReadonlySequence.ts +1 -1
  38. package/src/Sequence.ts +1 -1
  39. package/src/mock/MockSequence.ts +2 -2
  40. package/dist/tsconfig.cjs.tsbuildinfo +0 -1
  41. package/dist/tsconfig.esm.tsbuildinfo +0 -1
  42. package/src/__tests__/ASequence.spec.ts +0 -400
  43. package/src/__tests__/ImmutableSequence.spec.ts +0 -477
  44. package/src/__tests__/MutableSequence.spec.ts +0 -432
@@ -1,477 +0,0 @@
1
- import { MockValueObject } from '@jamashita/anden-object';
2
- import { Nullable } from '@jamashita/anden-type';
3
- import { ImmutableSequence } from '../ImmutableSequence';
4
-
5
- describe('ImmutableSequence', () => {
6
- describe('empty', () => {
7
- it('returns singleton instance', () => {
8
- expect(ImmutableSequence.empty()).toBe(ImmutableSequence.empty());
9
- });
10
-
11
- it('always returns 0-size array', () => {
12
- expect(ImmutableSequence.empty().isEmpty()).toBe(true);
13
- });
14
- });
15
-
16
- describe('of', () => {
17
- it('returns copied collection, does not use the same one', () => {
18
- const sequence: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
19
- new MockValueObject(1),
20
- new MockValueObject(2)
21
- ]);
22
- const copied: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.of(sequence);
23
-
24
- expect(sequence.size()).toBe(copied.size());
25
- sequence.forEach((v: MockValueObject<number>, k: number) => {
26
- expect(v).toBe(copied.get(k));
27
- });
28
-
29
- sequence.add(new MockValueObject(3));
30
-
31
- expect(sequence.size()).toBe(copied.size());
32
- });
33
- });
34
-
35
- describe('ofArray', () => {
36
- it('returns ImmutableSequence.empty() when the size is 0', () => {
37
- const sequence: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([]);
38
-
39
- expect(sequence.isEmpty()).toBe(true);
40
- expect(sequence).toBe(ImmutableSequence.empty());
41
- });
42
-
43
- it('returns instance', () => {
44
- const sequence1: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
45
- new MockValueObject(1),
46
- new MockValueObject(3)
47
- ]);
48
- const sequence2: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
49
- new MockValueObject(2),
50
- new MockValueObject(4),
51
- new MockValueObject(5)
52
- ]);
53
-
54
- expect(sequence1.size()).toBe(2);
55
- expect(sequence2.size()).toBe(3);
56
- });
57
- });
58
-
59
- describe('add', () => {
60
- it('can extend immutably', () => {
61
- const value1: MockValueObject<number> = new MockValueObject(1);
62
- const value2: MockValueObject<number> = new MockValueObject(2);
63
-
64
- const sequence1: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.empty();
65
-
66
- expect(sequence1.size()).toBe(0);
67
-
68
- const sequence2: ImmutableSequence<MockValueObject<number>> = sequence1.add(value1);
69
-
70
- expect(sequence1).not.toBe(sequence2);
71
- expect(sequence1.size()).toBe(0);
72
- expect(sequence2.size()).toBe(1);
73
- expect(sequence2.get(0)).toBe(value1);
74
-
75
- const sequence3: ImmutableSequence<MockValueObject<number>> = sequence2.add(value2);
76
-
77
- expect(sequence1).not.toBe(sequence2);
78
- expect(sequence2).not.toBe(sequence3);
79
- expect(sequence3).not.toBe(sequence1);
80
- expect(sequence1.size()).toBe(0);
81
- expect(sequence2.size()).toBe(1);
82
- expect(sequence3.size()).toBe(2);
83
- expect(sequence3.get(0)).toBe(value1);
84
- expect(sequence3.get(1)).toBe(value2);
85
- });
86
- });
87
-
88
- describe('duplicate', () => {
89
- it('returns ImmutableSequence.empty() when this is ImmutableSequence.empty()', () => {
90
- expect(ImmutableSequence.empty().duplicate()).toBe(ImmutableSequence.empty());
91
- });
92
-
93
- it('returns shallow-copied instance', () => {
94
- const sequence1: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
95
- new MockValueObject(1),
96
- new MockValueObject(2),
97
- new MockValueObject(3),
98
- new MockValueObject(2)
99
- ]);
100
- const sequence2: ImmutableSequence<MockValueObject<number>> = sequence1.duplicate();
101
-
102
- expect(sequence1.size()).toBe(sequence2.size());
103
- expect(sequence1).not.toBe(sequence2);
104
- sequence1.forEach((v: MockValueObject<number>, k: number) => {
105
- expect(v).toBe(sequence2.get(k));
106
- });
107
- });
108
- });
109
-
110
- describe('filter', () => {
111
- it('returns ImmutableSequence.EMPTY when no match', () => {
112
- const value1: MockValueObject<number> = new MockValueObject(1);
113
- const value2: MockValueObject<number> = new MockValueObject(2);
114
- const value3: MockValueObject<number> = new MockValueObject(3);
115
- const value4: MockValueObject<number> = new MockValueObject(2);
116
-
117
- const sequence: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
118
- value1,
119
- value2,
120
- value3,
121
- value4
122
- ]);
123
-
124
- const filtered: ImmutableSequence<MockValueObject<number>> = sequence.filter((v: MockValueObject<number>) => {
125
- return v.get() > 100;
126
- });
127
-
128
- expect(filtered.size()).toBe(0);
129
- expect(filtered).toBe(ImmutableSequence.empty<number>());
130
- });
131
-
132
- it('can remove match values', () => {
133
- const value1: MockValueObject<number> = new MockValueObject(1);
134
- const value2: MockValueObject<number> = new MockValueObject(2);
135
- const value3: MockValueObject<number> = new MockValueObject(3);
136
- const value4: MockValueObject<number> = new MockValueObject(2);
137
- const value5: MockValueObject<number> = new MockValueObject(5);
138
-
139
- const sequence: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
140
- value1,
141
- value2,
142
- value3,
143
- value4
144
- ]);
145
-
146
- const filtered1: ImmutableSequence<MockValueObject<number>> = sequence.filter((v: MockValueObject<number>) => {
147
- return v.get() % 2 === 0;
148
- });
149
- const filtered2: ImmutableSequence<MockValueObject<number>> = sequence.filter((v: MockValueObject<number>) => {
150
- return v === value4;
151
- });
152
- const filtered3: ImmutableSequence<MockValueObject<number>> = sequence.filter((v: MockValueObject<number>) => {
153
- return v === value5;
154
- });
155
-
156
- expect(filtered1.size()).toBe(2);
157
- expect(filtered1.get(0)).toBe(value2);
158
- expect(filtered1.get(1)).toBe(value4);
159
- expect(filtered2.size()).toBe(1);
160
- expect(filtered2.get(0)).toBe(value4);
161
- expect(filtered3.size()).toBe(0);
162
- });
163
- });
164
-
165
- describe('isEmpty', () => {
166
- it('returns true if the value size is 0', () => {
167
- const sequence1: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
168
- new MockValueObject(1),
169
- new MockValueObject(2)
170
- ]);
171
- const sequence2: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([]);
172
-
173
- expect(sequence1.isEmpty()).toBe(false);
174
- expect(sequence2.isEmpty()).toBe(true);
175
- });
176
- });
177
-
178
- describe('map', () => {
179
- it('execute the mapper function and returns mapped Address immutably', () => {
180
- const sequence1: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
181
- new MockValueObject(1),
182
- new MockValueObject(2),
183
- new MockValueObject(3)
184
- ]);
185
- const sequence2: ImmutableSequence<MockValueObject<string>> = sequence1.map(
186
- (value: MockValueObject<number>): MockValueObject<string> => {
187
- const num: number = value.get();
188
-
189
- return new MockValueObject<string>(`${num ** 2}`);
190
- }
191
- );
192
-
193
- expect(sequence1.size()).toBe(sequence2.size());
194
- expect(sequence1).not.toBe(sequence2);
195
- sequence2.forEach((v: MockValueObject<string>, k: number) => {
196
- const value: Nullable<MockValueObject<number>> = sequence1.get(k);
197
-
198
- if (value === null) {
199
- fail();
200
- return;
201
- }
202
-
203
- expect(v.get()).toBe(`${value.get() ** 2}`);
204
- });
205
- });
206
- });
207
-
208
- describe('remove', () => {
209
- it('can remove retaining value if it contains', () => {
210
- const value1: MockValueObject<number> = new MockValueObject(1);
211
- const value2: MockValueObject<number> = new MockValueObject(2);
212
- const value3: MockValueObject<number> = new MockValueObject(3);
213
-
214
- const sequence1: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
215
- value1,
216
- value2,
217
- value3
218
- ]);
219
-
220
- const sequence2: ImmutableSequence<MockValueObject<number>> = sequence1.remove(0);
221
-
222
- expect(sequence1).not.toBe(sequence2);
223
- expect(sequence1.size()).toBe(3);
224
- expect(sequence2.size()).toBe(2);
225
- expect(sequence2.get(0)).toBe(value2);
226
- expect(sequence2.get(1)).toBe(value3);
227
- });
228
-
229
- it('removes middle value', () => {
230
- const value1: MockValueObject<number> = new MockValueObject(1);
231
- const value2: MockValueObject<number> = new MockValueObject(2);
232
- const value3: MockValueObject<number> = new MockValueObject(3);
233
-
234
- const sequence1: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
235
- value1,
236
- value2,
237
- value3
238
- ]);
239
- const sequence2: ImmutableSequence<MockValueObject<number>> = sequence1.remove(1);
240
-
241
- expect(sequence1).not.toBe(sequence2);
242
- expect(sequence1.size()).toBe(3);
243
- expect(sequence2.size()).toBe(2);
244
- expect(sequence2.get(0)).toBe(value1);
245
- expect(sequence2.get(1)).toBe(value3);
246
- });
247
-
248
- it('removes last value', () => {
249
- const value1: MockValueObject<number> = new MockValueObject(1);
250
- const value2: MockValueObject<number> = new MockValueObject(2);
251
- const value3: MockValueObject<number> = new MockValueObject(3);
252
-
253
- const sequence1: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
254
- value1,
255
- value2,
256
- value3
257
- ]);
258
- const sequence2: ImmutableSequence<MockValueObject<number>> = sequence1.remove(2);
259
-
260
- expect(sequence1).not.toBe(sequence2);
261
- expect(sequence1.size()).toBe(3);
262
- expect(sequence2.size()).toBe(2);
263
- expect(sequence2.get(0)).toBe(value1);
264
- expect(sequence2.get(1)).toBe(value2);
265
- });
266
-
267
- it('returns itself when given key is greater than sequence length', () => {
268
- const value1: MockValueObject<number> = new MockValueObject(1);
269
- const value2: MockValueObject<number> = new MockValueObject(2);
270
- const value3: MockValueObject<number> = new MockValueObject(3);
271
-
272
- const sequence1: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
273
- value1,
274
- value2,
275
- value3
276
- ]);
277
- const sequence2: ImmutableSequence<MockValueObject<number>> = sequence1.remove(3);
278
-
279
- expect(sequence1).toBe(sequence2);
280
- });
281
-
282
- it('returns itself when given key is less than 0', () => {
283
- const value1: MockValueObject<number> = new MockValueObject(1);
284
- const value2: MockValueObject<number> = new MockValueObject(2);
285
- const value3: MockValueObject<number> = new MockValueObject(3);
286
-
287
- const sequence1: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
288
- value1,
289
- value2,
290
- value3
291
- ]);
292
- const sequence2: ImmutableSequence<MockValueObject<number>> = sequence1.remove(-1);
293
-
294
- expect(sequence1).toBe(sequence2);
295
- });
296
-
297
- it('returns itself when given key is not integer', () => {
298
- const value1: MockValueObject<number> = new MockValueObject(1);
299
- const value2: MockValueObject<number> = new MockValueObject(2);
300
- const value3: MockValueObject<number> = new MockValueObject(3);
301
-
302
- const sequence1: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
303
- value1,
304
- value2,
305
- value3
306
- ]);
307
- const sequence2: ImmutableSequence<MockValueObject<number>> = sequence1.remove(0.8);
308
-
309
- expect(sequence1).toBe(sequence2);
310
- });
311
- });
312
-
313
- describe('set', () => {
314
- it('can be set the value into first position', () => {
315
- const value1: MockValueObject<number> = new MockValueObject(1);
316
- const value2: MockValueObject<number> = new MockValueObject(2);
317
- const value3: MockValueObject<number> = new MockValueObject(3);
318
- const value4: MockValueObject<number> = new MockValueObject(4);
319
-
320
- const sequence1: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
321
- value1,
322
- value2,
323
- value3
324
- ]);
325
- const sequence2: ImmutableSequence<MockValueObject<number>> = sequence1.set(0, value4);
326
-
327
- expect(sequence1).not.toBe(sequence2);
328
- expect(sequence1.size()).toBe(3);
329
- expect(sequence2.size()).toBe(3);
330
- expect(sequence2.get(0)).toBe(value4);
331
- expect(sequence2.get(1)).toBe(value2);
332
- expect(sequence2.get(2)).toBe(value3);
333
- });
334
-
335
- it('can be set the value into middle position', () => {
336
- const value1: MockValueObject<number> = new MockValueObject(1);
337
- const value2: MockValueObject<number> = new MockValueObject(2);
338
- const value3: MockValueObject<number> = new MockValueObject(3);
339
- const value4: MockValueObject<number> = new MockValueObject(4);
340
-
341
- const sequence1: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
342
- value1,
343
- value2,
344
- value3
345
- ]);
346
- const sequence2: ImmutableSequence<MockValueObject<number>> = sequence1.set(1, value4);
347
-
348
- expect(sequence1).not.toBe(sequence2);
349
- expect(sequence1.size()).toBe(3);
350
- expect(sequence2.size()).toBe(3);
351
- expect(sequence2.get(0)).toBe(value1);
352
- expect(sequence2.get(1)).toBe(value4);
353
- expect(sequence2.get(2)).toBe(value3);
354
- });
355
-
356
- it('can be set the value into last position', () => {
357
- const value1: MockValueObject<number> = new MockValueObject(1);
358
- const value2: MockValueObject<number> = new MockValueObject(2);
359
- const value3: MockValueObject<number> = new MockValueObject(3);
360
- const value4: MockValueObject<number> = new MockValueObject(4);
361
-
362
- const sequence1: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
363
- value1,
364
- value2,
365
- value3
366
- ]);
367
- const sequence2: ImmutableSequence<MockValueObject<number>> = sequence1.set(2, value4);
368
-
369
- expect(sequence1).not.toBe(sequence2);
370
- expect(sequence1.size()).toBe(3);
371
- expect(sequence2.size()).toBe(3);
372
- expect(sequence2.get(0)).toBe(value1);
373
- expect(sequence2.get(1)).toBe(value2);
374
- expect(sequence2.get(2)).toBe(value4);
375
- });
376
-
377
- it('returns itself when given key is less than 0', () => {
378
- const value1: MockValueObject<number> = new MockValueObject(1);
379
- const value2: MockValueObject<number> = new MockValueObject(2);
380
- const value3: MockValueObject<number> = new MockValueObject(3);
381
- const value4: MockValueObject<number> = new MockValueObject(4);
382
-
383
- const sequence1: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
384
- value1,
385
- value2,
386
- value3
387
- ]);
388
- const sequence2: ImmutableSequence<MockValueObject<number>> = sequence1.set(-1, value4);
389
-
390
- expect(sequence1).toBe(sequence2);
391
- });
392
-
393
- it('returns itself when given key is greater than sequence length', () => {
394
- const value1: MockValueObject<number> = new MockValueObject(1);
395
- const value2: MockValueObject<number> = new MockValueObject(2);
396
- const value3: MockValueObject<number> = new MockValueObject(3);
397
- const value4: MockValueObject<number> = new MockValueObject(4);
398
-
399
- const sequence1: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
400
- value1,
401
- value2,
402
- value3
403
- ]);
404
-
405
- const sequence2: ImmutableSequence<MockValueObject<number>> = sequence1.set(sequence1.size(), value4);
406
-
407
- expect(sequence1).toBe(sequence2);
408
- });
409
-
410
- it('returns itself when given key is not integer', () => {
411
- const value1: MockValueObject<number> = new MockValueObject(1);
412
- const value2: MockValueObject<number> = new MockValueObject(2);
413
- const value3: MockValueObject<number> = new MockValueObject(3);
414
- const value4: MockValueObject<number> = new MockValueObject(4);
415
-
416
- const sequence1: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
417
- value1,
418
- value2,
419
- value3
420
- ]);
421
-
422
- const sequence2: ImmutableSequence<MockValueObject<number>> = sequence1.set(2.2, value4);
423
-
424
- expect(sequence1).toBe(sequence2);
425
- });
426
- });
427
-
428
- describe('sort', () => {
429
- it('when the size is 0, do nothing', () => {
430
- const sequence: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.empty();
431
- const sorted: ImmutableSequence<MockValueObject<number>> = sequence.sort(() => {
432
- return 1;
433
- });
434
-
435
- expect(sorted.size()).toBe(0);
436
- expect(sequence).toBe(sorted);
437
- });
438
-
439
- it('when the size is 1, just copy a sequence shallowly', () => {
440
- const arr: Array<MockValueObject<number>> = [
441
- new MockValueObject(2)
442
- ];
443
- const sequence: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray(arr);
444
- const sorted: ImmutableSequence<MockValueObject<number>> = sequence.sort(() => {
445
- return 1;
446
- });
447
-
448
- expect(sorted.size()).toBe(1);
449
- expect(sequence).not.toBe(sorted);
450
- expect(sequence.get(0)).toBe(sorted.get(0));
451
- });
452
-
453
- it('returns like an array', () => {
454
- const arr: Array<MockValueObject<number>> = [
455
- new MockValueObject(4),
456
- new MockValueObject(2),
457
- new MockValueObject(3),
458
- new MockValueObject(1)
459
- ];
460
- const sequence: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray(arr);
461
- const sorted: ImmutableSequence<MockValueObject<number>> = sequence.sort((m1: MockValueObject<number>, m2: MockValueObject<number>) => {
462
- return m1.get() - m2.get();
463
- });
464
-
465
- expect(sorted.size()).toBe(sequence.size());
466
- expect(sequence).not.toBe(sorted);
467
- expect(sorted.get(0)).toBe(sequence.get(3));
468
- expect(sorted.get(0)?.get()).toBe(1);
469
- expect(sorted.get(1)).toBe(sequence.get(1));
470
- expect(sorted.get(1)?.get()).toBe(2);
471
- expect(sorted.get(2)).toBe(sequence.get(2));
472
- expect(sorted.get(2)?.get()).toBe(3);
473
- expect(sorted.get(3)).toBe(sequence.get(0));
474
- expect(sorted.get(3)?.get()).toBe(4);
475
- });
476
- });
477
- });