@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.
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