@jamashita/lluvia-sequence 2.5.0 → 2.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. package/dist/cjs/ASequence.d.ts +9 -8
  2. package/dist/cjs/ASequence.d.ts.map +1 -1
  3. package/dist/cjs/ASequence.js +39 -50
  4. package/dist/cjs/ASequence.js.map +1 -1
  5. package/dist/cjs/ImmutableSequence.d.ts +4 -5
  6. package/dist/cjs/ImmutableSequence.d.ts.map +1 -1
  7. package/dist/cjs/ImmutableSequence.js +0 -1
  8. package/dist/cjs/ImmutableSequence.js.map +1 -1
  9. package/dist/cjs/MutableSequence.d.ts +7 -8
  10. package/dist/cjs/MutableSequence.d.ts.map +1 -1
  11. package/dist/cjs/MutableSequence.js +3 -4
  12. package/dist/cjs/MutableSequence.js.map +1 -1
  13. package/dist/cjs/ReadonlySequence.d.ts +2 -1
  14. package/dist/cjs/ReadonlySequence.d.ts.map +1 -1
  15. package/dist/cjs/Sequence.d.ts +1 -1
  16. package/dist/cjs/Sequence.d.ts.map +1 -1
  17. package/dist/cjs/index.d.ts +1 -1
  18. package/dist/cjs/index.js +6 -2
  19. package/dist/cjs/index.js.map +1 -1
  20. package/dist/cjs/{Mock → mock}/MockSequence.d.ts +1 -2
  21. package/dist/cjs/mock/MockSequence.d.ts.map +1 -0
  22. package/dist/cjs/{Mock → mock}/MockSequence.js +0 -1
  23. package/dist/cjs/mock/MockSequence.js.map +1 -0
  24. package/dist/esm/ASequence.d.ts +9 -8
  25. package/dist/esm/ASequence.d.ts.map +1 -1
  26. package/dist/esm/ASequence.js +39 -50
  27. package/dist/esm/ASequence.js.map +1 -1
  28. package/dist/esm/ImmutableSequence.d.ts +4 -5
  29. package/dist/esm/ImmutableSequence.d.ts.map +1 -1
  30. package/dist/esm/ImmutableSequence.js +0 -1
  31. package/dist/esm/ImmutableSequence.js.map +1 -1
  32. package/dist/esm/MutableSequence.d.ts +7 -8
  33. package/dist/esm/MutableSequence.d.ts.map +1 -1
  34. package/dist/esm/MutableSequence.js +3 -4
  35. package/dist/esm/MutableSequence.js.map +1 -1
  36. package/dist/esm/ReadonlySequence.d.ts +2 -1
  37. package/dist/esm/ReadonlySequence.d.ts.map +1 -1
  38. package/dist/esm/Sequence.d.ts +1 -1
  39. package/dist/esm/Sequence.d.ts.map +1 -1
  40. package/dist/esm/index.d.ts +1 -1
  41. package/dist/esm/index.js +1 -1
  42. package/dist/esm/{Mock → mock}/MockSequence.d.ts +1 -2
  43. package/dist/esm/mock/MockSequence.d.ts.map +1 -0
  44. package/dist/esm/{Mock → mock}/MockSequence.js +0 -1
  45. package/dist/esm/mock/MockSequence.js.map +1 -0
  46. package/dist/tsconfig.cjs.tsbuildinfo +1 -1
  47. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  48. package/package.json +6 -8
  49. package/src/ASequence.ts +53 -67
  50. package/src/ImmutableSequence.ts +19 -21
  51. package/src/MutableSequence.ts +16 -18
  52. package/src/ReadonlySequence.ts +3 -1
  53. package/src/Sequence.ts +1 -1
  54. package/src/__tests__/ASequence.spec.ts +227 -229
  55. package/src/__tests__/ImmutableSequence.spec.ts +231 -285
  56. package/src/__tests__/MutableSequence.spec.ts +210 -260
  57. package/src/index.ts +1 -1
  58. package/src/{Mock → mock}/MockSequence.ts +1 -3
  59. package/dist/cjs/Mock/MockSequence.d.ts.map +0 -1
  60. package/dist/cjs/Mock/MockSequence.js.map +0 -1
  61. package/dist/esm/Mock/MockSequence.d.ts.map +0 -1
  62. 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 '../Mock/MockSequence';
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
- expect.assertions(1);
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 value1: MockValueObject<number> = new MockValueObject<number>(1);
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
- expect.assertions(3);
72
-
73
- const value1: MockValueObject<number> = new MockValueObject<number>(1);
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<MockValueObject<number>>([value1, value2]);
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('isEmpty', () => {
86
- it('returns true if the values does not exist', () => {
87
- expect.assertions(2);
30
+ describe('equals', () => {
31
+ it('returns true when the same instance given', () => {
32
+ const value: MockValueObject<number> = new MockValueObject(1);
88
33
 
89
- const sequence1: MockSequence<MockValueObject<number>> = new MockSequence<MockValueObject<number>>([
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(sequence1.isEmpty()).toBe(false);
96
- expect(sequence2.isEmpty()).toBe(true);
36
+ expect(sequence.equals(sequence)).toBe(true);
97
37
  });
98
- });
99
38
 
100
- describe('forEach', () => {
101
- it('calls back as much as the size of set', () => {
102
- expect.assertions(4);
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 sequence: MockSequence<MockValueObject<number>> = new MockSequence<MockValueObject<number>>([
105
- new MockValueObject<number>(1),
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(sequence.size()).toBe(3);
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
- describe('find', () => {
118
- it('returns the first found value', () => {
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
- const value1: MockValueObject<number> = new MockValueObject<number>(1);
122
- const value2: MockValueObject<number> = new MockValueObject<number>(2);
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
- const sequence: MockSequence<MockValueObject<number>> = new MockSequence<MockValueObject<number>>([
127
- value1,
128
- value2,
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 found1: Nullable<MockValueObject<number>> = sequence.find((v: MockValueObject<number>) => {
134
- return v.get() === 1;
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(found1).toBe(value1);
147
- expect(found2).toBe(value2);
148
- expect(found3).toBe(value2);
149
- expect(found4).toBeNull();
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
- expect.assertions(1);
156
-
157
- const sequence: MockSequence<MockValueObject<number>> = new MockSequence<MockValueObject<number>>([
158
- new MockValueObject<number>(2),
159
- new MockValueObject<number>(4),
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
- expect.assertions(6);
173
-
174
- const value1: MockValueObject<number> = new MockValueObject<number>(1);
175
- const value2: MockValueObject<number> = new MockValueObject<number>(4);
176
- const value3: MockValueObject<number> = new MockValueObject<number>(6);
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<MockValueObject<number>>([
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<MockValueObject<number>>([
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<MockValueObject<number>>([
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<MockValueObject<number>>([
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<MockValueObject<number>>([
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<MockValueObject<number>>([
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('some', () => {
238
- it('returns true if at least one of the values returns true', () => {
239
- expect.assertions(2);
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 sequence1: MockSequence<MockValueObject<number>> = new MockSequence<MockValueObject<number>>([
242
- new MockValueObject<number>(2),
243
- new MockValueObject<number>(4),
244
- new MockValueObject<number>(6),
245
- new MockValueObject<number>(8)
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 predicate: Predicate<MockValueObject<number>> = (v: MockValueObject<number>) => {
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
- const some1: boolean = sequence1.some(predicate);
259
- const some2: boolean = sequence2.some(predicate);
183
+ expect(found1).toBe(value1);
184
+ expect(found2).toBe(value2);
185
+ expect(found3).toBe(value2);
186
+ expect(found4).toBeNull();
187
+ });
188
+ });
260
189
 
261
- expect(some1).toBe(true);
262
- expect(some2).toBe(true);
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
- it('returns false if none of the values are true', () => {
266
- expect.assertions(1);
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 value1: MockValueObject<number> = new MockValueObject<number>(2);
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
- const sequence: MockSequence<MockValueObject<number>> = new MockSequence<MockValueObject<number>>([
274
- value1,
275
- value2,
276
- value3,
277
- value4
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
- const predicate: Predicate<MockValueObject<number>> = (v: MockValueObject<number>) => {
281
- return v.get() % 2 === 1;
282
- };
228
+ expect(sequence.get(-1)).toBeNull();
229
+ expect(sequence.get(3)).toBeNull();
230
+ });
231
+ });
283
232
 
284
- const some: boolean = sequence.some(predicate);
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(some).toBe(false);
241
+ expect(sequence1.isEmpty()).toBe(false);
242
+ expect(sequence2.isEmpty()).toBe(true);
287
243
  });
288
244
  });
289
245
 
290
- describe('equals', () => {
291
- it('returns true when the same instance given', () => {
292
- expect.assertions(1);
293
-
294
- const value: MockValueObject<number> = new MockValueObject<number>(1);
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
- const sequence: MockSequence<MockValueObject<number>> = new MockSequence<MockValueObject<number>>([value]);
253
+ let i: number = 0;
297
254
 
298
- expect(sequence.equals(sequence)).toBe(true);
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
- it('returns false if the size is different', () => {
302
- expect.assertions(1);
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(sequence1.equals(sequence2)).toBe(false);
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 false when the different class instance given', () => {
314
- expect.assertions(1);
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
- const sequence: MockSequence<MockValueObject<number>> = new MockSequence<MockValueObject<number>>([]);
317
-
318
- expect(sequence.equals(new MockValueObject('mock'))).toBe(false);
278
+ expect(sequence.reduce((_o1: MockValueObject<number>, o2: MockValueObject<number>) => {
279
+ return o2;
280
+ }, o)).toBe(o);
319
281
  });
320
282
 
321
- it('returns true even if the order is different', () => {
322
- expect.assertions(1);
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
- const value1: MockValueObject<number> = new MockValueObject<number>(1);
325
- const value2: MockValueObject<number> = new MockValueObject<number>(2);
287
+ expect(sequence.reduce((o1: MockValueObject<number>) => {
288
+ return o1;
289
+ })).toBe(o);
290
+ });
326
291
 
327
- const sequence1: MockSequence<MockValueObject<number>> = new MockSequence<MockValueObject<number>>([value2, value1]);
328
- const sequence2: MockSequence<MockValueObject<number>> = new MockSequence<MockValueObject<number>>([value1, value2]);
292
+ it('returns reduced value', () => {
293
+ const sequence: MockSequence<number> = new MockSequence([1, 2, 3, 4]);
329
294
 
330
- expect(sequence1.equals(sequence2)).toBe(false);
295
+ expect(sequence.reduce((o1: number, o2: number) => {
296
+ return o1 + o2;
297
+ })).toBe(10);
331
298
  });
299
+ });
332
300
 
333
- it('returns true if the length is the same and the sequence is the same', () => {
334
- expect.assertions(1);
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 value1: MockValueObject<number> = new MockValueObject<number>(1);
337
- const value2: MockValueObject<number> = new MockValueObject<number>(2);
316
+ const predicate: Predicate<MockValueObject<number>> = (v: MockValueObject<number>) => {
317
+ return v.get() % 2 === 0;
318
+ };
338
319
 
339
- const sequence1: MockSequence<MockValueObject<number>> = new MockSequence<MockValueObject<number>>([value1, value2]);
340
- const sequence2: MockSequence<MockValueObject<number>> = new MockSequence<MockValueObject<number>>([value1, value2]);
320
+ const some1: boolean = sequence1.some(predicate);
321
+ const some2: boolean = sequence2.some(predicate);
341
322
 
342
- expect(sequence1.equals(sequence2)).toBe(true);
323
+ expect(some1).toBe(true);
324
+ expect(some2).toBe(true);
343
325
  });
344
- });
345
326
 
346
- describe('toString', () => {
347
- it('returns concatenated string', () => {
348
- expect.assertions(1);
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<MockValueObject<number>>([
351
- new MockValueObject<number>(1),
352
- new MockValueObject<number>(2),
353
- new MockValueObject<number>(3)
333
+ const sequence: MockSequence<MockValueObject<number>> = new MockSequence([
334
+ value1,
335
+ value2,
336
+ value3,
337
+ value4
354
338
  ]);
355
339
 
356
- expect(sequence.toString()).toBe('1, 2, 3');
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<number>(1),
366
- new MockValueObject<number>(2),
367
- new MockValueObject<number>(3)
353
+ new MockValueObject(1),
354
+ new MockValueObject(2),
355
+ new MockValueObject(3)
368
356
  ];
369
357
 
370
- const sequence: MockSequence<MockValueObject<number>> = new MockSequence<MockValueObject<number>>(values);
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<number>(4));
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<number>(1),
390
- new MockValueObject<number>(2)
387
+ new MockValueObject(1),
388
+ new MockValueObject(2)
391
389
  ];
392
- const sequence: MockSequence<MockValueObject<number>> = new MockSequence<MockValueObject<number>>(values);
390
+ const sequence: MockSequence<MockValueObject<number>> = new MockSequence(values);
393
391
 
394
392
  let i: number = 0;
395
393