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