@jamashita/lluvia-sequence 2.7.0 → 2.10.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 (61) hide show
  1. package/dist/cjs/ASequence.d.ts +3 -3
  2. package/dist/cjs/ASequence.d.ts.map +1 -1
  3. package/dist/cjs/ASequence.js +10 -20
  4. package/dist/cjs/ASequence.js.map +1 -1
  5. package/dist/cjs/ImmutableSequence.d.ts +2 -2
  6. package/dist/cjs/ImmutableSequence.d.ts.map +1 -1
  7. package/dist/cjs/ImmutableSequence.js +6 -6
  8. package/dist/cjs/ImmutableSequence.js.map +1 -1
  9. package/dist/cjs/MutableSequence.d.ts +2 -2
  10. package/dist/cjs/MutableSequence.d.ts.map +1 -1
  11. package/dist/cjs/MutableSequence.js +2 -2
  12. package/dist/cjs/MutableSequence.js.map +1 -1
  13. package/dist/cjs/ReadonlySequence.d.ts +2 -2
  14. package/dist/cjs/ReadonlySequence.d.ts.map +1 -1
  15. package/dist/cjs/Sequence.d.ts +2 -2
  16. package/dist/cjs/Sequence.d.ts.map +1 -1
  17. package/dist/cjs/index.d.ts +1 -1
  18. package/dist/cjs/index.d.ts.map +1 -1
  19. package/dist/cjs/index.js +1 -1
  20. package/dist/cjs/index.js.map +1 -1
  21. package/dist/cjs/mock/index.d.ts +2 -0
  22. package/dist/cjs/mock/index.d.ts.map +1 -0
  23. package/dist/cjs/mock/index.js +18 -0
  24. package/dist/cjs/mock/index.js.map +1 -0
  25. package/dist/esm/ASequence.d.ts +3 -3
  26. package/dist/esm/ASequence.d.ts.map +1 -1
  27. package/dist/esm/ASequence.js +10 -20
  28. package/dist/esm/ASequence.js.map +1 -1
  29. package/dist/esm/ImmutableSequence.d.ts +2 -2
  30. package/dist/esm/ImmutableSequence.d.ts.map +1 -1
  31. package/dist/esm/ImmutableSequence.js +6 -6
  32. package/dist/esm/ImmutableSequence.js.map +1 -1
  33. package/dist/esm/MutableSequence.d.ts +2 -2
  34. package/dist/esm/MutableSequence.d.ts.map +1 -1
  35. package/dist/esm/MutableSequence.js +2 -2
  36. package/dist/esm/MutableSequence.js.map +1 -1
  37. package/dist/esm/ReadonlySequence.d.ts +2 -2
  38. package/dist/esm/ReadonlySequence.d.ts.map +1 -1
  39. package/dist/esm/Sequence.d.ts +2 -2
  40. package/dist/esm/Sequence.d.ts.map +1 -1
  41. package/dist/esm/index.d.ts +1 -1
  42. package/dist/esm/index.d.ts.map +1 -1
  43. package/dist/esm/index.js +1 -1
  44. package/dist/esm/index.js.map +1 -1
  45. package/dist/esm/mock/index.d.ts +2 -0
  46. package/dist/esm/mock/index.d.ts.map +1 -0
  47. package/dist/esm/mock/index.js +2 -0
  48. package/dist/esm/mock/index.js.map +1 -0
  49. package/dist/tsconfig.cjs.tsbuildinfo +1 -1
  50. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  51. package/package.json +6 -7
  52. package/src/ASequence.ts +12 -26
  53. package/src/ImmutableSequence.ts +3 -3
  54. package/src/MutableSequence.ts +3 -3
  55. package/src/ReadonlySequence.ts +2 -2
  56. package/src/Sequence.ts +2 -2
  57. package/src/__tests__/ASequence.spec.ts +151 -151
  58. package/src/__tests__/ImmutableSequence.spec.ts +167 -167
  59. package/src/__tests__/MutableSequence.spec.ts +154 -154
  60. package/src/index.ts +1 -1
  61. package/src/mock/index.ts +1 -0
@@ -3,6 +3,16 @@ import { Nullable } from '@jamashita/anden-type';
3
3
  import { ImmutableSequence } from '../ImmutableSequence';
4
4
 
5
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
+
6
16
  describe('of', () => {
7
17
  it('returns copied collection, does not use the same one', () => {
8
18
  const sequence: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
@@ -46,16 +56,6 @@ describe('ImmutableSequence', () => {
46
56
  });
47
57
  });
48
58
 
49
- describe('empty', () => {
50
- it('returns singleton instance', () => {
51
- expect(ImmutableSequence.empty()).toBe(ImmutableSequence.empty());
52
- });
53
-
54
- it('always returns 0-size array', () => {
55
- expect(ImmutableSequence.empty().isEmpty()).toBe(true);
56
- });
57
- });
58
-
59
59
  describe('add', () => {
60
60
  it('can extend immutably', () => {
61
61
  const value1: MockValueObject<number> = new MockValueObject(1);
@@ -85,118 +85,123 @@ describe('ImmutableSequence', () => {
85
85
  });
86
86
  });
87
87
 
88
- describe('set', () => {
89
- it('can be set the value into first position', () => {
90
- const value1: MockValueObject<number> = new MockValueObject(1);
91
- const value2: MockValueObject<number> = new MockValueObject(2);
92
- const value3: MockValueObject<number> = new MockValueObject(3);
93
- const value4: MockValueObject<number> = new MockValueObject(4);
88
+ describe('duplicate', () => {
89
+ it('returns ImmutableSequence.empty() when this is ImmutableSequence.empty()', () => {
90
+ expect(ImmutableSequence.empty().duplicate()).toBe(ImmutableSequence.empty());
91
+ });
94
92
 
93
+ it('returns shallow-copied instance', () => {
95
94
  const sequence1: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
96
- value1,
97
- value2,
98
- value3
95
+ new MockValueObject(1),
96
+ new MockValueObject(2),
97
+ new MockValueObject(3),
98
+ new MockValueObject(2)
99
99
  ]);
100
- const sequence2: ImmutableSequence<MockValueObject<number>> = sequence1.set(0, value4);
100
+ const sequence2: ImmutableSequence<MockValueObject<number>> = sequence1.duplicate();
101
101
 
102
+ expect(sequence1.size()).toBe(sequence2.size());
102
103
  expect(sequence1).not.toBe(sequence2);
103
- expect(sequence1.size()).toBe(3);
104
- expect(sequence2.size()).toBe(3);
105
- expect(sequence2.get(0)).toBe(value4);
106
- expect(sequence2.get(1)).toBe(value2);
107
- expect(sequence2.get(2)).toBe(value3);
104
+ sequence1.forEach((v: MockValueObject<number>, k: number) => {
105
+ expect(v).toBe(sequence2.get(k));
106
+ });
108
107
  });
108
+ });
109
109
 
110
- it('can be set the value into middle position', () => {
110
+ describe('filter', () => {
111
+ it('returns ImmutableSequence.EMPTY when no match', () => {
111
112
  const value1: MockValueObject<number> = new MockValueObject(1);
112
113
  const value2: MockValueObject<number> = new MockValueObject(2);
113
114
  const value3: MockValueObject<number> = new MockValueObject(3);
114
- const value4: MockValueObject<number> = new MockValueObject(4);
115
+ const value4: MockValueObject<number> = new MockValueObject(2);
115
116
 
116
- const sequence1: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
117
+ const sequence: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
117
118
  value1,
118
119
  value2,
119
- value3
120
+ value3,
121
+ value4
120
122
  ]);
121
- const sequence2: ImmutableSequence<MockValueObject<number>> = sequence1.set(1, value4);
122
123
 
123
- expect(sequence1).not.toBe(sequence2);
124
- expect(sequence1.size()).toBe(3);
125
- expect(sequence2.size()).toBe(3);
126
- expect(sequence2.get(0)).toBe(value1);
127
- expect(sequence2.get(1)).toBe(value4);
128
- expect(sequence2.get(2)).toBe(value3);
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>());
129
130
  });
130
131
 
131
- it('can be set the value into last position', () => {
132
+ it('can remove match values', () => {
132
133
  const value1: MockValueObject<number> = new MockValueObject(1);
133
134
  const value2: MockValueObject<number> = new MockValueObject(2);
134
135
  const value3: MockValueObject<number> = new MockValueObject(3);
135
- const value4: MockValueObject<number> = new MockValueObject(4);
136
+ const value4: MockValueObject<number> = new MockValueObject(2);
137
+ const value5: MockValueObject<number> = new MockValueObject(5);
136
138
 
137
- const sequence1: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
139
+ const sequence: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
138
140
  value1,
139
141
  value2,
140
- value3
142
+ value3,
143
+ value4
141
144
  ]);
142
- const sequence2: ImmutableSequence<MockValueObject<number>> = sequence1.set(2, value4);
143
145
 
144
- expect(sequence1).not.toBe(sequence2);
145
- expect(sequence1.size()).toBe(3);
146
- expect(sequence2.size()).toBe(3);
147
- expect(sequence2.get(0)).toBe(value1);
148
- expect(sequence2.get(1)).toBe(value2);
149
- expect(sequence2.get(2)).toBe(value4);
150
- });
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
+ });
151
155
 
152
- it('returns itself when given key is less than 0', () => {
153
- const value1: MockValueObject<number> = new MockValueObject(1);
154
- const value2: MockValueObject<number> = new MockValueObject(2);
155
- const value3: MockValueObject<number> = new MockValueObject(3);
156
- const value4: MockValueObject<number> = new MockValueObject(4);
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
+ });
157
164
 
165
+ describe('isEmpty', () => {
166
+ it('returns true if the value size is 0', () => {
158
167
  const sequence1: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
159
- value1,
160
- value2,
161
- value3
168
+ new MockValueObject(1),
169
+ new MockValueObject(2)
162
170
  ]);
163
- const sequence2: ImmutableSequence<MockValueObject<number>> = sequence1.set(-1, value4);
171
+ const sequence2: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([]);
164
172
 
165
- expect(sequence1).toBe(sequence2);
173
+ expect(sequence1.isEmpty()).toBe(false);
174
+ expect(sequence2.isEmpty()).toBe(true);
166
175
  });
176
+ });
167
177
 
168
- it('returns itself when given key is greater than sequence length', () => {
169
- const value1: MockValueObject<number> = new MockValueObject(1);
170
- const value2: MockValueObject<number> = new MockValueObject(2);
171
- const value3: MockValueObject<number> = new MockValueObject(3);
172
- const value4: MockValueObject<number> = new MockValueObject(4);
173
-
178
+ describe('map', () => {
179
+ it('execute the mapper function and returns mapped Address immutably', () => {
174
180
  const sequence1: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
175
- value1,
176
- value2,
177
- value3
181
+ new MockValueObject(1),
182
+ new MockValueObject(2),
183
+ new MockValueObject(3)
178
184
  ]);
185
+ const sequence2: ImmutableSequence<MockValueObject<string>> = sequence1.map(
186
+ (value: MockValueObject<number>): MockValueObject<string> => {
187
+ const num: number = value.get();
179
188
 
180
- const sequence2: ImmutableSequence<MockValueObject<number>> = sequence1.set(sequence1.size(), value4);
181
-
182
- expect(sequence1).toBe(sequence2);
183
- });
184
-
185
- it('returns itself when given key is not integer', () => {
186
- const value1: MockValueObject<number> = new MockValueObject(1);
187
- const value2: MockValueObject<number> = new MockValueObject(2);
188
- const value3: MockValueObject<number> = new MockValueObject(3);
189
- const value4: MockValueObject<number> = new MockValueObject(4);
189
+ return new MockValueObject<string>(`${num ** 2}`);
190
+ }
191
+ );
190
192
 
191
- const sequence1: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
192
- value1,
193
- value2,
194
- value3
195
- ]);
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);
196
197
 
197
- const sequence2: ImmutableSequence<MockValueObject<number>> = sequence1.set(2.2, value4);
198
+ if (value === null) {
199
+ fail();
200
+ return;
201
+ }
198
202
 
199
- expect(sequence1).toBe(sequence2);
203
+ expect(v.get()).toBe(`${value.get() ** 2}`);
204
+ });
200
205
  });
201
206
  });
202
207
 
@@ -305,101 +310,118 @@ describe('ImmutableSequence', () => {
305
310
  });
306
311
  });
307
312
 
308
- describe('isEmpty', () => {
309
- it('returns true if the value size is 0', () => {
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
+
310
320
  const sequence1: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
311
- new MockValueObject(1),
312
- new MockValueObject(2)
321
+ value1,
322
+ value2,
323
+ value3
313
324
  ]);
314
- const sequence2: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([]);
325
+ const sequence2: ImmutableSequence<MockValueObject<number>> = sequence1.set(0, value4);
315
326
 
316
- expect(sequence1.isEmpty()).toBe(false);
317
- expect(sequence2.isEmpty()).toBe(true);
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);
318
333
  });
319
- });
320
334
 
321
- describe('map', () => {
322
- it('execute the mapper function and returns mapped Address immutably', () => {
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
+
323
341
  const sequence1: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
324
- new MockValueObject(1),
325
- new MockValueObject(2),
326
- new MockValueObject(3)
342
+ value1,
343
+ value2,
344
+ value3
327
345
  ]);
328
- const sequence2: ImmutableSequence<MockValueObject<string>> = sequence1.map(
329
- (value: MockValueObject<number>): MockValueObject<string> => {
330
- const num: number = value.get();
346
+ const sequence2: ImmutableSequence<MockValueObject<number>> = sequence1.set(1, value4);
331
347
 
332
- return new MockValueObject<string>(`${num ** 2}`);
333
- }
334
- );
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);
335
368
 
336
- expect(sequence1.size()).toBe(sequence2.size());
337
369
  expect(sequence1).not.toBe(sequence2);
338
- sequence2.forEach((v: MockValueObject<string>, k: number) => {
339
- const value: Nullable<MockValueObject<number>> = sequence1.get(k);
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
+ });
340
376
 
341
- if (value === null) {
342
- fail();
343
- return;
344
- }
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);
345
382
 
346
- expect(v.get()).toBe(`${value.get() ** 2}`);
347
- });
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);
348
391
  });
349
- });
350
392
 
351
- describe('filter', () => {
352
- it('returns ImmutableSequence.EMPTY when no match', () => {
393
+ it('returns itself when given key is greater than sequence length', () => {
353
394
  const value1: MockValueObject<number> = new MockValueObject(1);
354
395
  const value2: MockValueObject<number> = new MockValueObject(2);
355
396
  const value3: MockValueObject<number> = new MockValueObject(3);
356
- const value4: MockValueObject<number> = new MockValueObject(2);
397
+ const value4: MockValueObject<number> = new MockValueObject(4);
357
398
 
358
- const sequence: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
399
+ const sequence1: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
359
400
  value1,
360
401
  value2,
361
- value3,
362
- value4
402
+ value3
363
403
  ]);
364
404
 
365
- const filtered: ImmutableSequence<MockValueObject<number>> = sequence.filter((v: MockValueObject<number>) => {
366
- return v.get() > 100;
367
- });
405
+ const sequence2: ImmutableSequence<MockValueObject<number>> = sequence1.set(sequence1.size(), value4);
368
406
 
369
- expect(filtered.size()).toBe(0);
370
- expect(filtered).toBe(ImmutableSequence.empty<number>());
407
+ expect(sequence1).toBe(sequence2);
371
408
  });
372
409
 
373
- it('can remove match values', () => {
410
+ it('returns itself when given key is not integer', () => {
374
411
  const value1: MockValueObject<number> = new MockValueObject(1);
375
412
  const value2: MockValueObject<number> = new MockValueObject(2);
376
413
  const value3: MockValueObject<number> = new MockValueObject(3);
377
- const value4: MockValueObject<number> = new MockValueObject(2);
378
- const value5: MockValueObject<number> = new MockValueObject(5);
414
+ const value4: MockValueObject<number> = new MockValueObject(4);
379
415
 
380
- const sequence: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
416
+ const sequence1: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
381
417
  value1,
382
418
  value2,
383
- value3,
384
- value4
419
+ value3
385
420
  ]);
386
421
 
387
- const filtered1: ImmutableSequence<MockValueObject<number>> = sequence.filter((v: MockValueObject<number>) => {
388
- return v.get() % 2 === 0;
389
- });
390
- const filtered2: ImmutableSequence<MockValueObject<number>> = sequence.filter((v: MockValueObject<number>) => {
391
- return v === value4;
392
- });
393
- const filtered3: ImmutableSequence<MockValueObject<number>> = sequence.filter((v: MockValueObject<number>) => {
394
- return v === value5;
395
- });
422
+ const sequence2: ImmutableSequence<MockValueObject<number>> = sequence1.set(2.2, value4);
396
423
 
397
- expect(filtered1.size()).toBe(2);
398
- expect(filtered1.get(0)).toBe(value2);
399
- expect(filtered1.get(1)).toBe(value4);
400
- expect(filtered2.size()).toBe(1);
401
- expect(filtered2.get(0)).toBe(value4);
402
- expect(filtered3.size()).toBe(0);
424
+ expect(sequence1).toBe(sequence2);
403
425
  });
404
426
  });
405
427
 
@@ -452,26 +474,4 @@ describe('ImmutableSequence', () => {
452
474
  expect(sorted.get(3)?.get()).toBe(4);
453
475
  });
454
476
  });
455
-
456
- describe('duplicate', () => {
457
- it('returns ImmutableSequence.empty() when this is ImmutableSequence.empty()', () => {
458
- expect(ImmutableSequence.empty().duplicate()).toBe(ImmutableSequence.empty());
459
- });
460
-
461
- it('returns shallow-copied instance', () => {
462
- const sequence1: ImmutableSequence<MockValueObject<number>> = ImmutableSequence.ofArray([
463
- new MockValueObject(1),
464
- new MockValueObject(2),
465
- new MockValueObject(3),
466
- new MockValueObject(2)
467
- ]);
468
- const sequence2: ImmutableSequence<MockValueObject<number>> = sequence1.duplicate();
469
-
470
- expect(sequence1.size()).toBe(sequence2.size());
471
- expect(sequence1).not.toBe(sequence2);
472
- sequence1.forEach((v: MockValueObject<number>, k: number) => {
473
- expect(v).toBe(sequence2.get(k));
474
- });
475
- });
476
- });
477
477
  });