@jamashita/lluvia-sequence 2.12.0 → 2.13.0

Sign up to get free protection for your applications and to get access to all the features.
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
- });