@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
@@ -1,80 +1,25 @@
|
|
1
1
|
import { MockValueObject } from '@jamashita/anden-object';
|
2
2
|
import { Nullable, Predicate } from '@jamashita/anden-type';
|
3
|
-
import { MockSequence } from '../
|
3
|
+
import { MockSequence } from '../mock/MockSequence';
|
4
4
|
|
5
5
|
describe('ASequence', () => {
|
6
|
-
describe('iterator', () => {
|
7
|
-
it('returns [number, MockValueObject<number>]', () => {
|
8
|
-
expect.assertions(4);
|
9
|
-
|
10
|
-
const sequence: MockSequence<MockValueObject<number>> = new MockSequence<MockValueObject<number>>([
|
11
|
-
new MockValueObject<number>(1),
|
12
|
-
new MockValueObject<number>(2)
|
13
|
-
]);
|
14
|
-
|
15
|
-
let i: number = 0;
|
16
|
-
|
17
|
-
for (const value of sequence) {
|
18
|
-
expect(value[0]).toBe(i);
|
19
|
-
expect(value[1].get()).toBe(sequence.get(i)?.get());
|
20
|
-
i++;
|
21
|
-
}
|
22
|
-
});
|
23
|
-
});
|
24
|
-
|
25
|
-
describe('get', () => {
|
26
|
-
it('returns value at the correct key', () => {
|
27
|
-
expect.assertions(4);
|
28
|
-
|
29
|
-
const values: Array<MockValueObject<number>> = [
|
30
|
-
new MockValueObject<number>(1),
|
31
|
-
new MockValueObject<number>(2),
|
32
|
-
new MockValueObject<number>(3)
|
33
|
-
];
|
34
|
-
|
35
|
-
const sequence: MockSequence<MockValueObject<number>> = new MockSequence<MockValueObject<number>>(values);
|
36
|
-
|
37
|
-
expect(sequence.size()).toBe(values.length);
|
38
|
-
for (let i: number = 0; i < sequence.size(); i++) {
|
39
|
-
expect(sequence.get(i)).toBe(values[i]);
|
40
|
-
}
|
41
|
-
});
|
42
|
-
|
43
|
-
it('returns null at incorrect keys', () => {
|
44
|
-
expect.assertions(2);
|
45
|
-
|
46
|
-
const sequence: MockSequence<MockValueObject<number>> = new MockSequence<MockValueObject<number>>([
|
47
|
-
new MockValueObject<number>(1),
|
48
|
-
new MockValueObject<number>(2),
|
49
|
-
new MockValueObject<number>(3)
|
50
|
-
]);
|
51
|
-
|
52
|
-
expect(sequence.get(-1)).toBeNull();
|
53
|
-
expect(sequence.get(3)).toBeNull();
|
54
|
-
});
|
55
|
-
});
|
56
|
-
|
57
6
|
describe('contains', () => {
|
58
7
|
it('returns false if the value does not exist', () => {
|
59
|
-
|
8
|
+
const value1: MockValueObject<number> = new MockValueObject(1);
|
9
|
+
const value2: MockValueObject<number> = new MockValueObject(2);
|
10
|
+
const value3: MockValueObject<number> = new MockValueObject(3);
|
60
11
|
|
61
|
-
const
|
62
|
-
const value2: MockValueObject<number> = new MockValueObject<number>(2);
|
63
|
-
const value3: MockValueObject<number> = new MockValueObject<number>(3);
|
64
|
-
|
65
|
-
const sequence: MockSequence<MockValueObject<number>> = new MockSequence<MockValueObject<number>>([value1, value2]);
|
12
|
+
const sequence: MockSequence<MockValueObject<number>> = new MockSequence([value1, value2]);
|
66
13
|
|
67
14
|
expect(sequence.contains(value3)).toBe(false);
|
68
15
|
});
|
69
16
|
|
70
17
|
it('returns true if the value exists', () => {
|
71
|
-
|
72
|
-
|
73
|
-
const
|
74
|
-
const value2: MockValueObject<number> = new MockValueObject<number>(2);
|
75
|
-
const value3: MockValueObject<number> = new MockValueObject<number>(2);
|
18
|
+
const value1: MockValueObject<number> = new MockValueObject(1);
|
19
|
+
const value2: MockValueObject<number> = new MockValueObject(2);
|
20
|
+
const value3: MockValueObject<number> = new MockValueObject(2);
|
76
21
|
|
77
|
-
const sequence: MockSequence<MockValueObject<number>> = new MockSequence
|
22
|
+
const sequence: MockSequence<MockValueObject<number>> = new MockSequence([value1, value2]);
|
78
23
|
|
79
24
|
expect(sequence.contains(value1)).toBe(true);
|
80
25
|
expect(sequence.contains(value2)).toBe(true);
|
@@ -82,83 +27,59 @@ describe('ASequence', () => {
|
|
82
27
|
});
|
83
28
|
});
|
84
29
|
|
85
|
-
describe('
|
86
|
-
it('returns true
|
87
|
-
|
30
|
+
describe('equals', () => {
|
31
|
+
it('returns true when the same instance given', () => {
|
32
|
+
const value: MockValueObject<number> = new MockValueObject(1);
|
88
33
|
|
89
|
-
const
|
90
|
-
new MockValueObject<number>(1),
|
91
|
-
new MockValueObject<number>(2)
|
92
|
-
]);
|
93
|
-
const sequence2: MockSequence<MockValueObject<number>> = new MockSequence<MockValueObject<number>>([]);
|
34
|
+
const sequence: MockSequence<MockValueObject<number>> = new MockSequence([value]);
|
94
35
|
|
95
|
-
expect(
|
96
|
-
expect(sequence2.isEmpty()).toBe(true);
|
36
|
+
expect(sequence.equals(sequence)).toBe(true);
|
97
37
|
});
|
98
|
-
});
|
99
38
|
|
100
|
-
|
101
|
-
|
102
|
-
|
39
|
+
it('returns false if the size is different', () => {
|
40
|
+
const value1: MockValueObject<number> = new MockValueObject(1);
|
41
|
+
const value2: MockValueObject<number> = new MockValueObject(2);
|
103
42
|
|
104
|
-
const
|
105
|
-
|
106
|
-
new MockValueObject<number>(2),
|
107
|
-
new MockValueObject<number>(3)
|
108
|
-
]);
|
43
|
+
const sequence1: MockSequence<MockValueObject<number>> = new MockSequence([value1]);
|
44
|
+
const sequence2: MockSequence<MockValueObject<number>> = new MockSequence([value1, value2]);
|
109
45
|
|
110
|
-
expect(
|
111
|
-
sequence.forEach((value: MockValueObject<number>, index: number) => {
|
112
|
-
expect(sequence.get(index)).toBe(value);
|
113
|
-
});
|
46
|
+
expect(sequence1.equals(sequence2)).toBe(false);
|
114
47
|
});
|
115
|
-
});
|
116
48
|
|
117
|
-
|
118
|
-
|
119
|
-
expect.assertions(4);
|
49
|
+
it('returns false when the different class instance given', () => {
|
50
|
+
const sequence: MockSequence<MockValueObject<number>> = new MockSequence([]);
|
120
51
|
|
121
|
-
|
122
|
-
|
123
|
-
const value3: MockValueObject<number> = new MockValueObject<number>(3);
|
124
|
-
const value4: MockValueObject<number> = new MockValueObject<number>(4);
|
52
|
+
expect(sequence.equals(new MockValueObject('mock'))).toBe(false);
|
53
|
+
});
|
125
54
|
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
value3,
|
130
|
-
value4
|
131
|
-
]);
|
55
|
+
it('returns true even if the order is different', () => {
|
56
|
+
const value1: MockValueObject<number> = new MockValueObject(1);
|
57
|
+
const value2: MockValueObject<number> = new MockValueObject(2);
|
132
58
|
|
133
|
-
const
|
134
|
-
|
135
|
-
});
|
136
|
-
const found2: Nullable<MockValueObject<number>> = sequence.find((v: MockValueObject<number>) => {
|
137
|
-
return v.get() === 2;
|
138
|
-
});
|
139
|
-
const found3: Nullable<MockValueObject<number>> = sequence.find((v: MockValueObject<number>) => {
|
140
|
-
return v.get() % 2 === 0;
|
141
|
-
});
|
142
|
-
const found4: Nullable<MockValueObject<number>> = sequence.find((v: MockValueObject<number>) => {
|
143
|
-
return v.get() > 1000;
|
144
|
-
});
|
59
|
+
const sequence1: MockSequence<MockValueObject<number>> = new MockSequence([value2, value1]);
|
60
|
+
const sequence2: MockSequence<MockValueObject<number>> = new MockSequence([value1, value2]);
|
145
61
|
|
146
|
-
expect(
|
147
|
-
|
148
|
-
|
149
|
-
|
62
|
+
expect(sequence1.equals(sequence2)).toBe(false);
|
63
|
+
});
|
64
|
+
|
65
|
+
it('returns true if the length is the same and the sequence is the same', () => {
|
66
|
+
const value1: MockValueObject<number> = new MockValueObject(1);
|
67
|
+
const value2: MockValueObject<number> = new MockValueObject(2);
|
68
|
+
|
69
|
+
const sequence1: MockSequence<MockValueObject<number>> = new MockSequence([value1, value2]);
|
70
|
+
const sequence2: MockSequence<MockValueObject<number>> = new MockSequence([value1, value2]);
|
71
|
+
|
72
|
+
expect(sequence1.equals(sequence2)).toBe(true);
|
150
73
|
});
|
151
74
|
});
|
152
75
|
|
153
76
|
describe('every', () => {
|
154
77
|
it('returns true if all the values are the same', () => {
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
new MockValueObject
|
159
|
-
new MockValueObject
|
160
|
-
new MockValueObject<number>(6),
|
161
|
-
new MockValueObject<number>(8)
|
78
|
+
const sequence: MockSequence<MockValueObject<number>> = new MockSequence([
|
79
|
+
new MockValueObject(2),
|
80
|
+
new MockValueObject(4),
|
81
|
+
new MockValueObject(6),
|
82
|
+
new MockValueObject(8)
|
162
83
|
]);
|
163
84
|
|
164
85
|
const every: boolean = sequence.every((v: MockValueObject<number>) => {
|
@@ -169,45 +90,43 @@ describe('ASequence', () => {
|
|
169
90
|
});
|
170
91
|
|
171
92
|
it('returns false if at least one of the values is not false', () => {
|
172
|
-
|
173
|
-
|
174
|
-
const
|
175
|
-
const
|
176
|
-
const
|
177
|
-
const value4: MockValueObject<number> = new MockValueObject<number>(8);
|
178
|
-
const value5: MockValueObject<number> = new MockValueObject<number>(3);
|
93
|
+
const value1: MockValueObject<number> = new MockValueObject(1);
|
94
|
+
const value2: MockValueObject<number> = new MockValueObject(4);
|
95
|
+
const value3: MockValueObject<number> = new MockValueObject(6);
|
96
|
+
const value4: MockValueObject<number> = new MockValueObject(8);
|
97
|
+
const value5: MockValueObject<number> = new MockValueObject(3);
|
179
98
|
|
180
|
-
const sequence1: MockSequence<MockValueObject<number>> = new MockSequence
|
99
|
+
const sequence1: MockSequence<MockValueObject<number>> = new MockSequence([
|
181
100
|
value1,
|
182
101
|
value2,
|
183
102
|
value3,
|
184
103
|
value4
|
185
104
|
]);
|
186
|
-
const sequence2: MockSequence<MockValueObject<number>> = new MockSequence
|
105
|
+
const sequence2: MockSequence<MockValueObject<number>> = new MockSequence([
|
187
106
|
value2,
|
188
107
|
value1,
|
189
108
|
value3,
|
190
109
|
value4
|
191
110
|
]);
|
192
|
-
const sequence3: MockSequence<MockValueObject<number>> = new MockSequence
|
111
|
+
const sequence3: MockSequence<MockValueObject<number>> = new MockSequence([
|
193
112
|
value2,
|
194
113
|
value3,
|
195
114
|
value1,
|
196
115
|
value4
|
197
116
|
]);
|
198
|
-
const sequence4: MockSequence<MockValueObject<number>> = new MockSequence
|
117
|
+
const sequence4: MockSequence<MockValueObject<number>> = new MockSequence([
|
199
118
|
value2,
|
200
119
|
value3,
|
201
120
|
value4,
|
202
121
|
value1
|
203
122
|
]);
|
204
|
-
const sequence5: MockSequence<MockValueObject<number>> = new MockSequence
|
123
|
+
const sequence5: MockSequence<MockValueObject<number>> = new MockSequence([
|
205
124
|
value1,
|
206
125
|
value5,
|
207
126
|
value3,
|
208
127
|
value4
|
209
128
|
]);
|
210
|
-
const sequence6: MockSequence<MockValueObject<number>> = new MockSequence
|
129
|
+
const sequence6: MockSequence<MockValueObject<number>> = new MockSequence([
|
211
130
|
value1,
|
212
131
|
value2,
|
213
132
|
value5,
|
@@ -234,140 +153,209 @@ describe('ASequence', () => {
|
|
234
153
|
});
|
235
154
|
});
|
236
155
|
|
237
|
-
describe('
|
238
|
-
it('returns
|
239
|
-
|
156
|
+
describe('find', () => {
|
157
|
+
it('returns the first found value', () => {
|
158
|
+
const value1: MockValueObject<number> = new MockValueObject(1);
|
159
|
+
const value2: MockValueObject<number> = new MockValueObject(2);
|
160
|
+
const value3: MockValueObject<number> = new MockValueObject(3);
|
161
|
+
const value4: MockValueObject<number> = new MockValueObject(4);
|
240
162
|
|
241
|
-
const
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
]);
|
247
|
-
const sequence2: MockSequence<MockValueObject<number>> = new MockSequence<MockValueObject<number>>([
|
248
|
-
new MockValueObject<number>(1),
|
249
|
-
new MockValueObject<number>(4),
|
250
|
-
new MockValueObject<number>(3),
|
251
|
-
new MockValueObject<number>(3)
|
163
|
+
const sequence: MockSequence<MockValueObject<number>> = new MockSequence([
|
164
|
+
value1,
|
165
|
+
value2,
|
166
|
+
value3,
|
167
|
+
value4
|
252
168
|
]);
|
253
169
|
|
254
|
-
const
|
170
|
+
const found1: Nullable<MockValueObject<number>> = sequence.find((v: MockValueObject<number>) => {
|
171
|
+
return v.get() === 1;
|
172
|
+
});
|
173
|
+
const found2: Nullable<MockValueObject<number>> = sequence.find((v: MockValueObject<number>) => {
|
174
|
+
return v.get() === 2;
|
175
|
+
});
|
176
|
+
const found3: Nullable<MockValueObject<number>> = sequence.find((v: MockValueObject<number>) => {
|
255
177
|
return v.get() % 2 === 0;
|
256
|
-
};
|
178
|
+
});
|
179
|
+
const found4: Nullable<MockValueObject<number>> = sequence.find((v: MockValueObject<number>) => {
|
180
|
+
return v.get() > 1000;
|
181
|
+
});
|
257
182
|
|
258
|
-
|
259
|
-
|
183
|
+
expect(found1).toBe(value1);
|
184
|
+
expect(found2).toBe(value2);
|
185
|
+
expect(found3).toBe(value2);
|
186
|
+
expect(found4).toBeNull();
|
187
|
+
});
|
188
|
+
});
|
260
189
|
|
261
|
-
|
262
|
-
|
190
|
+
describe('forEach', () => {
|
191
|
+
it('calls back as much as the size of set', () => {
|
192
|
+
const sequence: MockSequence<MockValueObject<number>> = new MockSequence([
|
193
|
+
new MockValueObject(1),
|
194
|
+
new MockValueObject(2),
|
195
|
+
new MockValueObject(3)
|
196
|
+
]);
|
197
|
+
|
198
|
+
expect(sequence.size()).toBe(3);
|
199
|
+
sequence.forEach((value: MockValueObject<number>, index: number) => {
|
200
|
+
expect(sequence.get(index)).toBe(value);
|
201
|
+
});
|
263
202
|
});
|
203
|
+
});
|
264
204
|
|
265
|
-
|
266
|
-
|
205
|
+
describe('get', () => {
|
206
|
+
it('returns value at the correct key', () => {
|
207
|
+
const values: Array<MockValueObject<number>> = [
|
208
|
+
new MockValueObject(1),
|
209
|
+
new MockValueObject(2),
|
210
|
+
new MockValueObject(3)
|
211
|
+
];
|
267
212
|
|
268
|
-
const
|
269
|
-
const value2: MockValueObject<number> = new MockValueObject<number>(4);
|
270
|
-
const value3: MockValueObject<number> = new MockValueObject<number>(6);
|
271
|
-
const value4: MockValueObject<number> = new MockValueObject<number>(8);
|
213
|
+
const sequence: MockSequence<MockValueObject<number>> = new MockSequence(values);
|
272
214
|
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
215
|
+
expect(sequence.size()).toBe(values.length);
|
216
|
+
for (let i: number = 0; i < sequence.size(); i++) {
|
217
|
+
expect(sequence.get(i)).toBe(values[i]);
|
218
|
+
}
|
219
|
+
});
|
220
|
+
|
221
|
+
it('returns null at incorrect keys', () => {
|
222
|
+
const sequence: MockSequence<MockValueObject<number>> = new MockSequence([
|
223
|
+
new MockValueObject(1),
|
224
|
+
new MockValueObject(2),
|
225
|
+
new MockValueObject(3)
|
278
226
|
]);
|
279
227
|
|
280
|
-
|
281
|
-
|
282
|
-
|
228
|
+
expect(sequence.get(-1)).toBeNull();
|
229
|
+
expect(sequence.get(3)).toBeNull();
|
230
|
+
});
|
231
|
+
});
|
283
232
|
|
284
|
-
|
233
|
+
describe('isEmpty', () => {
|
234
|
+
it('returns true if the values does not exist', () => {
|
235
|
+
const sequence1: MockSequence<MockValueObject<number>> = new MockSequence([
|
236
|
+
new MockValueObject(1),
|
237
|
+
new MockValueObject(2)
|
238
|
+
]);
|
239
|
+
const sequence2: MockSequence<MockValueObject<number>> = new MockSequence([]);
|
285
240
|
|
286
|
-
expect(
|
241
|
+
expect(sequence1.isEmpty()).toBe(false);
|
242
|
+
expect(sequence2.isEmpty()).toBe(true);
|
287
243
|
});
|
288
244
|
});
|
289
245
|
|
290
|
-
describe('
|
291
|
-
it('returns
|
292
|
-
|
293
|
-
|
294
|
-
|
246
|
+
describe('iterator', () => {
|
247
|
+
it('returns [number, MockValueObject<number>]', () => {
|
248
|
+
const sequence: MockSequence<MockValueObject<number>> = new MockSequence([
|
249
|
+
new MockValueObject(1),
|
250
|
+
new MockValueObject(2)
|
251
|
+
]);
|
295
252
|
|
296
|
-
|
253
|
+
let i: number = 0;
|
297
254
|
|
298
|
-
|
255
|
+
for (const value of sequence) {
|
256
|
+
expect(value[0]).toBe(i);
|
257
|
+
expect(value[1].get()).toBe(sequence.get(i)?.get());
|
258
|
+
i++;
|
259
|
+
}
|
299
260
|
});
|
261
|
+
});
|
300
262
|
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
const value1: MockValueObject<number> = new MockValueObject<number>(1);
|
305
|
-
const value2: MockValueObject<number> = new MockValueObject<number>(2);
|
306
|
-
|
307
|
-
const sequence1: MockSequence<MockValueObject<number>> = new MockSequence<MockValueObject<number>>([value1]);
|
308
|
-
const sequence2: MockSequence<MockValueObject<number>> = new MockSequence<MockValueObject<number>>([value1, value2]);
|
263
|
+
describe('reduce', () => {
|
264
|
+
it('throws TypeError when array size is 0 and initialValue is undefined', () => {
|
265
|
+
const sequence: MockSequence<MockValueObject<number>> = new MockSequence([]);
|
309
266
|
|
310
|
-
expect(
|
267
|
+
expect(() => {
|
268
|
+
sequence.reduce((_o1: MockValueObject<number>, o2: MockValueObject<number>) => {
|
269
|
+
return o2;
|
270
|
+
});
|
271
|
+
}).toThrow(TypeError);
|
311
272
|
});
|
312
273
|
|
313
|
-
it('returns
|
314
|
-
|
274
|
+
it('returns initialValue itself when the array size is 0', () => {
|
275
|
+
const o: MockValueObject<number> = new MockValueObject(1);
|
276
|
+
const sequence: MockSequence<MockValueObject<number>> = new MockSequence([]);
|
315
277
|
|
316
|
-
|
317
|
-
|
318
|
-
|
278
|
+
expect(sequence.reduce((_o1: MockValueObject<number>, o2: MockValueObject<number>) => {
|
279
|
+
return o2;
|
280
|
+
}, o)).toBe(o);
|
319
281
|
});
|
320
282
|
|
321
|
-
it('returns
|
322
|
-
|
283
|
+
it('returns first element when the array size is only 1', () => {
|
284
|
+
const o: MockValueObject<number> = new MockValueObject(1);
|
285
|
+
const sequence: MockSequence<MockValueObject<number>> = new MockSequence([o]);
|
323
286
|
|
324
|
-
|
325
|
-
|
287
|
+
expect(sequence.reduce((o1: MockValueObject<number>) => {
|
288
|
+
return o1;
|
289
|
+
})).toBe(o);
|
290
|
+
});
|
326
291
|
|
327
|
-
|
328
|
-
const
|
292
|
+
it('returns reduced value', () => {
|
293
|
+
const sequence: MockSequence<number> = new MockSequence([1, 2, 3, 4]);
|
329
294
|
|
330
|
-
expect(
|
295
|
+
expect(sequence.reduce((o1: number, o2: number) => {
|
296
|
+
return o1 + o2;
|
297
|
+
})).toBe(10);
|
331
298
|
});
|
299
|
+
});
|
332
300
|
|
333
|
-
|
334
|
-
|
301
|
+
describe('some', () => {
|
302
|
+
it('returns true if at least one of the values returns true', () => {
|
303
|
+
const sequence1: MockSequence<MockValueObject<number>> = new MockSequence([
|
304
|
+
new MockValueObject(2),
|
305
|
+
new MockValueObject(4),
|
306
|
+
new MockValueObject(6),
|
307
|
+
new MockValueObject(8)
|
308
|
+
]);
|
309
|
+
const sequence2: MockSequence<MockValueObject<number>> = new MockSequence([
|
310
|
+
new MockValueObject(1),
|
311
|
+
new MockValueObject(4),
|
312
|
+
new MockValueObject(3),
|
313
|
+
new MockValueObject(3)
|
314
|
+
]);
|
335
315
|
|
336
|
-
const
|
337
|
-
|
316
|
+
const predicate: Predicate<MockValueObject<number>> = (v: MockValueObject<number>) => {
|
317
|
+
return v.get() % 2 === 0;
|
318
|
+
};
|
338
319
|
|
339
|
-
const
|
340
|
-
const
|
320
|
+
const some1: boolean = sequence1.some(predicate);
|
321
|
+
const some2: boolean = sequence2.some(predicate);
|
341
322
|
|
342
|
-
expect(
|
323
|
+
expect(some1).toBe(true);
|
324
|
+
expect(some2).toBe(true);
|
343
325
|
});
|
344
|
-
});
|
345
326
|
|
346
|
-
|
347
|
-
|
348
|
-
|
327
|
+
it('returns false if none of the values are true', () => {
|
328
|
+
const value1: MockValueObject<number> = new MockValueObject(2);
|
329
|
+
const value2: MockValueObject<number> = new MockValueObject(4);
|
330
|
+
const value3: MockValueObject<number> = new MockValueObject(6);
|
331
|
+
const value4: MockValueObject<number> = new MockValueObject(8);
|
349
332
|
|
350
|
-
const sequence: MockSequence<MockValueObject<number>> = new MockSequence
|
351
|
-
|
352
|
-
|
353
|
-
|
333
|
+
const sequence: MockSequence<MockValueObject<number>> = new MockSequence([
|
334
|
+
value1,
|
335
|
+
value2,
|
336
|
+
value3,
|
337
|
+
value4
|
354
338
|
]);
|
355
339
|
|
356
|
-
|
340
|
+
const predicate: Predicate<MockValueObject<number>> = (v: MockValueObject<number>) => {
|
341
|
+
return v.get() % 2 === 1;
|
342
|
+
};
|
343
|
+
|
344
|
+
const some: boolean = sequence.some(predicate);
|
345
|
+
|
346
|
+
expect(some).toBe(false);
|
357
347
|
});
|
358
348
|
});
|
359
349
|
|
360
350
|
describe('toArray', () => {
|
361
351
|
it('returns its retaining shallow-copied array', () => {
|
362
|
-
expect.assertions(5);
|
363
|
-
|
364
352
|
const values: Array<MockValueObject<number>> = [
|
365
|
-
new MockValueObject
|
366
|
-
new MockValueObject
|
367
|
-
new MockValueObject
|
353
|
+
new MockValueObject(1),
|
354
|
+
new MockValueObject(2),
|
355
|
+
new MockValueObject(3)
|
368
356
|
];
|
369
357
|
|
370
|
-
const sequence: MockSequence<MockValueObject<number>> = new MockSequence
|
358
|
+
const sequence: MockSequence<MockValueObject<number>> = new MockSequence(values);
|
371
359
|
const array: Array<MockValueObject<number>> = sequence.toArray();
|
372
360
|
|
373
361
|
expect(sequence.size()).toBe(values.length);
|
@@ -375,21 +363,31 @@ describe('ASequence', () => {
|
|
375
363
|
expect(sequence.get(i)).toBe(array[i]);
|
376
364
|
}
|
377
365
|
|
378
|
-
array.push(new MockValueObject
|
366
|
+
array.push(new MockValueObject(4));
|
379
367
|
|
380
368
|
expect(sequence.size()).not.toBe(array.length);
|
381
369
|
});
|
382
370
|
});
|
383
371
|
|
372
|
+
describe('toString', () => {
|
373
|
+
it('returns concatenated string', () => {
|
374
|
+
const sequence: MockSequence<MockValueObject<number>> = new MockSequence([
|
375
|
+
new MockValueObject(1),
|
376
|
+
new MockValueObject(2),
|
377
|
+
new MockValueObject(3)
|
378
|
+
]);
|
379
|
+
|
380
|
+
expect(sequence.toString()).toBe('1, 2, 3');
|
381
|
+
});
|
382
|
+
});
|
383
|
+
|
384
384
|
describe('values', () => {
|
385
385
|
it('returns its retaining values', () => {
|
386
|
-
expect.assertions(2);
|
387
|
-
|
388
386
|
const values: Array<MockValueObject<number>> = [
|
389
|
-
new MockValueObject
|
390
|
-
new MockValueObject
|
387
|
+
new MockValueObject(1),
|
388
|
+
new MockValueObject(2)
|
391
389
|
];
|
392
|
-
const sequence: MockSequence<MockValueObject<number>> = new MockSequence
|
390
|
+
const sequence: MockSequence<MockValueObject<number>> = new MockSequence(values);
|
393
391
|
|
394
392
|
let i: number = 0;
|
395
393
|
|