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