@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.
- package/dist/cjs/ASequence.d.ts +3 -3
- package/dist/cjs/ASequence.d.ts.map +1 -1
- package/dist/cjs/ASequence.js +10 -20
- package/dist/cjs/ASequence.js.map +1 -1
- package/dist/cjs/ImmutableSequence.d.ts +2 -2
- package/dist/cjs/ImmutableSequence.d.ts.map +1 -1
- package/dist/cjs/ImmutableSequence.js +6 -6
- package/dist/cjs/ImmutableSequence.js.map +1 -1
- package/dist/cjs/MutableSequence.d.ts +2 -2
- package/dist/cjs/MutableSequence.d.ts.map +1 -1
- package/dist/cjs/MutableSequence.js +2 -2
- package/dist/cjs/MutableSequence.js.map +1 -1
- package/dist/cjs/ReadonlySequence.d.ts +2 -2
- package/dist/cjs/ReadonlySequence.d.ts.map +1 -1
- package/dist/cjs/Sequence.d.ts +2 -2
- package/dist/cjs/Sequence.d.ts.map +1 -1
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/mock/index.d.ts +2 -0
- package/dist/cjs/mock/index.d.ts.map +1 -0
- package/dist/cjs/mock/index.js +18 -0
- package/dist/cjs/mock/index.js.map +1 -0
- package/dist/esm/ASequence.d.ts +3 -3
- package/dist/esm/ASequence.d.ts.map +1 -1
- package/dist/esm/ASequence.js +10 -20
- package/dist/esm/ASequence.js.map +1 -1
- package/dist/esm/ImmutableSequence.d.ts +2 -2
- package/dist/esm/ImmutableSequence.d.ts.map +1 -1
- package/dist/esm/ImmutableSequence.js +6 -6
- package/dist/esm/ImmutableSequence.js.map +1 -1
- package/dist/esm/MutableSequence.d.ts +2 -2
- package/dist/esm/MutableSequence.d.ts.map +1 -1
- package/dist/esm/MutableSequence.js +2 -2
- package/dist/esm/MutableSequence.js.map +1 -1
- package/dist/esm/ReadonlySequence.d.ts +2 -2
- package/dist/esm/ReadonlySequence.d.ts.map +1 -1
- package/dist/esm/Sequence.d.ts +2 -2
- package/dist/esm/Sequence.d.ts.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/mock/index.d.ts +2 -0
- package/dist/esm/mock/index.d.ts.map +1 -0
- package/dist/esm/mock/index.js +2 -0
- package/dist/esm/mock/index.js.map +1 -0
- package/dist/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +6 -7
- package/src/ASequence.ts +12 -26
- package/src/ImmutableSequence.ts +3 -3
- package/src/MutableSequence.ts +3 -3
- package/src/ReadonlySequence.ts +2 -2
- package/src/Sequence.ts +2 -2
- package/src/__tests__/ASequence.spec.ts +151 -151
- package/src/__tests__/ImmutableSequence.spec.ts +167 -167
- package/src/__tests__/MutableSequence.spec.ts +154 -154
- package/src/index.ts +1 -1
- package/src/mock/index.ts +1 -0
@@ -3,6 +3,16 @@ import { Nullable } from '@jamashita/anden-type';
|
|
3
3
|
import { MutableSequence } from '../MutableSequence';
|
4
4
|
|
5
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
|
+
|
6
16
|
describe('of', () => {
|
7
17
|
it('returns copied collection, does not use the same one', () => {
|
8
18
|
const sequence: MutableSequence<MockValueObject<number>> = MutableSequence.ofArray([
|
@@ -45,16 +55,6 @@ describe('MutableSequence', () => {
|
|
45
55
|
});
|
46
56
|
});
|
47
57
|
|
48
|
-
describe('empty', () => {
|
49
|
-
it('does not return singleton instance', () => {
|
50
|
-
expect(MutableSequence.empty()).not.toBe(MutableSequence.empty());
|
51
|
-
});
|
52
|
-
|
53
|
-
it('always returns 0-size array', () => {
|
54
|
-
expect(MutableSequence.empty().isEmpty()).toBe(true);
|
55
|
-
});
|
56
|
-
});
|
57
|
-
|
58
58
|
describe('add', () => {
|
59
59
|
it('can extend mutably', () => {
|
60
60
|
const value1: MockValueObject<number> = new MockValueObject(1);
|
@@ -88,101 +88,98 @@ describe('MutableSequence', () => {
|
|
88
88
|
});
|
89
89
|
});
|
90
90
|
|
91
|
-
describe('
|
92
|
-
it('
|
93
|
-
const value1: MockValueObject<number> = new MockValueObject(1);
|
94
|
-
const value2: MockValueObject<number> = new MockValueObject(2);
|
95
|
-
const value3: MockValueObject<number> = new MockValueObject(3);
|
96
|
-
const value4: MockValueObject<number> = new MockValueObject(4);
|
97
|
-
|
91
|
+
describe('duplicate', () => {
|
92
|
+
it('returns shallow-copied instance', () => {
|
98
93
|
const sequence1: MutableSequence<MockValueObject<number>> = MutableSequence.ofArray([
|
99
|
-
|
100
|
-
|
101
|
-
|
94
|
+
new MockValueObject(1),
|
95
|
+
new MockValueObject(2),
|
96
|
+
new MockValueObject(3),
|
97
|
+
new MockValueObject(2)
|
102
98
|
]);
|
103
|
-
const sequence2: MutableSequence<MockValueObject<number>> = sequence1.
|
99
|
+
const sequence2: MutableSequence<MockValueObject<number>> = sequence1.duplicate();
|
104
100
|
|
105
|
-
expect(sequence1).toBe(sequence2);
|
106
|
-
expect(sequence1
|
107
|
-
|
108
|
-
|
109
|
-
|
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
|
+
});
|
110
106
|
});
|
107
|
+
});
|
111
108
|
|
112
|
-
|
109
|
+
describe('filter', () => {
|
110
|
+
it('can remove match values', () => {
|
113
111
|
const value1: MockValueObject<number> = new MockValueObject(1);
|
114
112
|
const value2: MockValueObject<number> = new MockValueObject(2);
|
115
113
|
const value3: MockValueObject<number> = new MockValueObject(3);
|
116
|
-
const value4: MockValueObject<number> = new MockValueObject(
|
114
|
+
const value4: MockValueObject<number> = new MockValueObject(2);
|
115
|
+
const value5: MockValueObject<number> = new MockValueObject(5);
|
117
116
|
|
118
|
-
const
|
117
|
+
const sequence: MutableSequence<MockValueObject<number>> = MutableSequence.ofArray([
|
119
118
|
value1,
|
120
119
|
value2,
|
121
|
-
value3
|
120
|
+
value3,
|
121
|
+
value4
|
122
122
|
]);
|
123
|
-
const sequence2: MutableSequence<MockValueObject<number>> = sequence1.set(1, value4);
|
124
123
|
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
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
|
+
});
|
131
133
|
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
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
|
+
});
|
137
142
|
|
143
|
+
describe('isEmpty', () => {
|
144
|
+
it('returns true if the value size is 0', () => {
|
138
145
|
const sequence1: MutableSequence<MockValueObject<number>> = MutableSequence.ofArray([
|
139
|
-
|
140
|
-
|
141
|
-
value3
|
146
|
+
new MockValueObject(1),
|
147
|
+
new MockValueObject(2)
|
142
148
|
]);
|
143
|
-
const sequence2: MutableSequence<MockValueObject<number>> =
|
144
|
-
|
145
|
-
expect(sequence1).toBe(sequence2);
|
146
|
-
expect(sequence1.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
|
-
});
|
151
|
-
|
152
|
-
it('returns itself when given key is less than 0', () => {
|
153
|
-
const value: MockValueObject<number> = new MockValueObject(1);
|
154
|
-
|
155
|
-
const sequence1: MutableSequence<MockValueObject<number>> = MutableSequence.ofArray([]);
|
156
|
-
const beforeLength: number = sequence1.size();
|
157
|
-
|
158
|
-
const sequence2: MutableSequence<MockValueObject<number>> = sequence1.set(-1, value);
|
149
|
+
const sequence2: MutableSequence<MockValueObject<number>> = MutableSequence.ofArray([]);
|
159
150
|
|
160
|
-
expect(sequence1).toBe(
|
161
|
-
expect(
|
151
|
+
expect(sequence1.isEmpty()).toBe(false);
|
152
|
+
expect(sequence2.isEmpty()).toBe(true);
|
162
153
|
});
|
154
|
+
});
|
163
155
|
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
});
|
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();
|
175
166
|
|
176
|
-
|
177
|
-
|
167
|
+
return new MockValueObject<string>(`${num ** 2}`);
|
168
|
+
}
|
169
|
+
);
|
178
170
|
|
179
|
-
|
180
|
-
|
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);
|
181
175
|
|
182
|
-
|
176
|
+
if (value === null) {
|
177
|
+
fail();
|
178
|
+
return;
|
179
|
+
}
|
183
180
|
|
184
|
-
|
185
|
-
|
181
|
+
expect(v.get()).toBe(`${value.get() ** 2}`);
|
182
|
+
});
|
186
183
|
});
|
187
184
|
});
|
188
185
|
|
@@ -285,80 +282,101 @@ describe('MutableSequence', () => {
|
|
285
282
|
});
|
286
283
|
});
|
287
284
|
|
288
|
-
describe('
|
289
|
-
it('
|
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
|
+
|
290
292
|
const sequence1: MutableSequence<MockValueObject<number>> = MutableSequence.ofArray([
|
291
|
-
|
292
|
-
|
293
|
+
value1,
|
294
|
+
value2,
|
295
|
+
value3
|
293
296
|
]);
|
294
|
-
const sequence2: MutableSequence<MockValueObject<number>> =
|
297
|
+
const sequence2: MutableSequence<MockValueObject<number>> = sequence1.set(0, value4);
|
295
298
|
|
296
|
-
expect(sequence1
|
297
|
-
expect(
|
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);
|
298
304
|
});
|
299
|
-
});
|
300
305
|
|
301
|
-
|
302
|
-
|
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
|
+
|
303
312
|
const sequence1: MutableSequence<MockValueObject<number>> = MutableSequence.ofArray([
|
304
|
-
|
305
|
-
|
306
|
-
|
313
|
+
value1,
|
314
|
+
value2,
|
315
|
+
value3
|
307
316
|
]);
|
308
|
-
const sequence2: MutableSequence<MockValueObject<
|
309
|
-
(value: MockValueObject<number>): MockValueObject<string> => {
|
310
|
-
const num: number = value.get();
|
311
|
-
|
312
|
-
return new MockValueObject<string>(`${num ** 2}`);
|
313
|
-
}
|
314
|
-
);
|
315
|
-
|
316
|
-
expect(sequence1.size()).toBe(sequence2.size());
|
317
|
-
expect(sequence1).not.toBe(sequence2);
|
318
|
-
sequence2.forEach((v: MockValueObject<string>, k: number) => {
|
319
|
-
const value: Nullable<MockValueObject<number>> = sequence1.get(k);
|
320
|
-
|
321
|
-
if (value === null) {
|
322
|
-
fail();
|
323
|
-
return;
|
324
|
-
}
|
317
|
+
const sequence2: MutableSequence<MockValueObject<number>> = sequence1.set(1, value4);
|
325
318
|
|
326
|
-
|
327
|
-
|
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);
|
328
324
|
});
|
329
|
-
});
|
330
325
|
|
331
|
-
|
332
|
-
it('can remove match values', () => {
|
326
|
+
it('can be set the value into last position', () => {
|
333
327
|
const value1: MockValueObject<number> = new MockValueObject(1);
|
334
328
|
const value2: MockValueObject<number> = new MockValueObject(2);
|
335
329
|
const value3: MockValueObject<number> = new MockValueObject(3);
|
336
|
-
const value4: MockValueObject<number> = new MockValueObject(
|
337
|
-
const value5: MockValueObject<number> = new MockValueObject(5);
|
330
|
+
const value4: MockValueObject<number> = new MockValueObject(4);
|
338
331
|
|
339
|
-
const
|
332
|
+
const sequence1: MutableSequence<MockValueObject<number>> = MutableSequence.ofArray([
|
340
333
|
value1,
|
341
334
|
value2,
|
342
|
-
value3
|
343
|
-
value4
|
335
|
+
value3
|
344
336
|
]);
|
337
|
+
const sequence2: MutableSequence<MockValueObject<number>> = sequence1.set(2, value4);
|
345
338
|
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
const filtered3: MutableSequence<MockValueObject<number>> = sequence.filter((v: MockValueObject<number>) => {
|
353
|
-
return v === value5;
|
354
|
-
});
|
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
|
+
});
|
355
345
|
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
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);
|
362
380
|
});
|
363
381
|
});
|
364
382
|
|
@@ -411,22 +429,4 @@ describe('MutableSequence', () => {
|
|
411
429
|
expect(sorted.get(3)?.get()).toBe(4);
|
412
430
|
});
|
413
431
|
});
|
414
|
-
|
415
|
-
describe('duplicate', () => {
|
416
|
-
it('returns shallow-copied instance', () => {
|
417
|
-
const sequence1: MutableSequence<MockValueObject<number>> = MutableSequence.ofArray([
|
418
|
-
new MockValueObject(1),
|
419
|
-
new MockValueObject(2),
|
420
|
-
new MockValueObject(3),
|
421
|
-
new MockValueObject(2)
|
422
|
-
]);
|
423
|
-
const sequence2: MutableSequence<MockValueObject<number>> = sequence1.duplicate();
|
424
|
-
|
425
|
-
expect(sequence1.size()).toBe(sequence2.size());
|
426
|
-
expect(sequence1).not.toBe(sequence2);
|
427
|
-
sequence1.forEach((v: MockValueObject<number>, k: number) => {
|
428
|
-
expect(v).toBe(sequence2.get(k));
|
429
|
-
});
|
430
|
-
});
|
431
|
-
});
|
432
432
|
});
|
package/src/index.ts
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
export * from './MockSequence';
|