scaruby 0.0.5 → 0.0.6

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.
@@ -1,301 +1,301 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- require 'scaruby'
4
-
5
- describe Seq do
6
-
7
- one_to_five = 1.upto 5
8
- one_to_five_shuffled = one_to_five.sort_by {rand}
9
-
10
- it 'does not accept invalid args' do
11
- begin
12
- Seq.new('aaaa').should eq(nil)
13
- raise 'Expected exception did not be raised!'
14
- rescue AssertionError
15
- end
16
- begin
17
- Seq.new(12345).should eq(nil)
18
- raise 'Expected exception did not be raised!'
19
- rescue AssertionError
20
- end
21
- end
22
-
23
- # as a sub type of Enumerable
24
- it 'has #each' do
25
- expected = 0
26
- returned = Seq.new([0,1,2,3]).each do |e|
27
- e.should eq(expected)
28
- expected += 1
29
- end
30
- returned.should eq(nil)
31
- end
32
- it 'has #all?' do
33
- Seq.new([1,2,3]).all? {|e| e < 4 }.should eq(true)
34
- Seq.new([1,2,3]).all? {|e| e > 2 }.should eq(false)
35
- end
36
-
37
- # defined
38
- it 'has #to_a' do
39
- Seq.new(one_to_five).to_a.should eq([1,2,3,4,5])
40
- end
41
- it 'has #corresponds' do
42
- Seq.new([1,2,3]).corresponds([1,2,3]) {|a,b| a == b }.should eq(true)
43
- Seq.new([1,2,3]).corresponds([3,1,2]) {|a,b| a == b }.should eq(false)
44
- end
45
- it 'has #count' do
46
- Seq.new(one_to_five).count {|i| i > 2 }.should eq(3)
47
- end
48
- it 'has #diff' do
49
- Seq.new([1,2,3]).diff([2,3,4]).to_a.should eq([1])
50
- end
51
- it 'has #distinct' do
52
- Seq.new([1,2,4,1,3,3,3,2,4,1]).distinct.to_a.should eq([1,2,4,3])
53
- end
54
- it 'has #drop' do
55
- Seq.new(one_to_five).drop(3).to_a.should eq([4,5])
56
- Seq.new(one_to_five).drop(7).to_a.should eq([])
57
- end
58
- it 'has #drop_right' do
59
- Seq.new(one_to_five).drop_right(3).to_a.should eq([1,2])
60
- Seq.new(one_to_five).drop_right(7).to_a.should eq([])
61
- end
62
- it 'has #drop_while' do
63
- Seq.new([5,3,2,4,1]).drop_while {|e| e > 2 }.to_a.should eq([2,4,1])
64
- end
65
- it 'has #ends_with' do
66
- Seq.new([1,2,3]).ends_with([1,2]).should eq(false)
67
- Seq.new([1,2,3]).ends_with([1,2,3]).should eq(true)
68
- Seq.new([1,2,3]).ends_with([1,1,2,3]).should eq(false)
69
- Seq.new([1,2,3]).ends_with([2,3]).should eq(true)
70
- Seq.new([1,2,3]).ends_with([3]).should eq(true)
71
- end
72
- it 'has #exists' do
73
- Seq.new([1,2,3]).exists {|i| i < 2 }.should eq(true)
74
- Seq.new([1,2,3]).exists {|i| i < 4 }.should eq(true)
75
- Seq.new([2,3,4]).exists {|i| i > 4 }.should eq(false)
76
- end
77
- it 'has #filter' do
78
- Seq.new(one_to_five).filter {|i| i > 3 }.to_a.should eq([4,5])
79
- Seq.new(one_to_five).filter {|i| i > 10 }.to_a.should eq([])
80
- end
81
- it 'has #filter_not' do
82
- Seq.new(one_to_five).filter_not {|i| i > 3 }.to_a.should eq([1,2,3])
83
- Seq.new(one_to_five).filter_not {|i| i > 10 }.to_a.should eq([1,2,3,4,5])
84
- end
85
- it 'has #find' do
86
- some = Seq.new(one_to_five).find {|i| i < 3 }
87
- some.get.should eq(1)
88
- none = Seq.new(one_to_five).find {|i| i > 10 }
89
- none.is_defined.should eq(false)
90
- end
91
- it 'has #flat_map and it works with nested arrays' do
92
- Seq.new([[1,2],[3,4],[5]]).flat_map {|i| i }.to_a.should eq([1,2,3,4,5])
93
- end
94
- it 'has #flat_map and it works with Option elements' do
95
- Seq.new([1,2,nil,3]).flat_map {|i| Option.new(i) }.to_a.should eq([1,2,3])
96
- end
97
- it 'has #fold_left' do
98
- input = [1,2,3]
99
- expected = [1,2,3]
100
- idx = 0
101
- Seq.new(input).fold_left(0) {|z,x|
102
- x.should eq(expected[idx])
103
- idx += 1
104
- z + x
105
- }.should eq(6)
106
- end
107
- it 'has #fold_right' do
108
- input = [1,2,3]
109
- expected = [3,2,1]
110
- idx = 0
111
- Seq.new(input).fold_right(0) {|z,x|
112
- x.should eq(expected[idx])
113
- idx += 1
114
- z + x
115
- }.should eq(6)
116
- end
117
- it 'has #flatten' do
118
- Seq.new([[1,2],[3,4],[5]]).flatten.to_a.should eq([1,2,3,4,5])
119
- Seq.new(
120
- [Option.new(1),
121
- Option.new(2),
122
- Option.new(nil),
123
- Option.new(3)]
124
- ).flatten.to_a.should eq([1,2,3])
125
- end
126
- it 'has #forall' do
127
- Seq.new([1,2,3]).forall {|i| i > 0 }.should eq(true)
128
- Seq.new([1,2,3]).forall {|i| i > 1 }.should eq(false)
129
- end
130
- it 'has #foreach' do
131
- count = 0
132
- returned = Seq.new([1,2,3]).foreach do |i|
133
- count += 1
134
- end
135
- count.should eq(3)
136
- returned.should eq(nil)
137
- end
138
- it 'has #group_by' do
139
- expected = {3=>[3,3,3], 1=>[1,1,1], 2=>[2,2]}
140
- Seq.new([1,1,1,2,3,2,3,3]).group_by {|i| i }.to_hash.should eq(expected)
141
- end
142
- it 'has #head' do
143
- Seq.new(one_to_five).head.should eq(1)
144
- end
145
- it 'has #head_option and it works with Some' do
146
- some = Seq.new(one_to_five).head_option
147
- some.get_or_else(999).should eq(1)
148
- end
149
- it 'has #head_option and it works with None' do
150
- none = Seq.new([]).head_option
151
- none.get_or_else(999).should eq(999)
152
- end
153
- it 'has #indices' do
154
- Seq.new([1,2,3]).indices.to_a.should eq([0,1,2])
155
- end
156
- it 'has #init' do
157
- Seq.new([1,2,3]).init.to_a.should eq([1,2])
158
- end
159
- it 'has #intersect' do
160
- Seq.new([1,2,3]).intersect([2,3,4]).to_a.should eq([2,3])
161
- end
162
- it 'has #is_empty' do
163
- Seq.new([1,2,3]).is_empty.should eq(false)
164
- Seq.new([nil]).is_empty.should eq(false)
165
- Seq.new([]).is_empty.should eq(true)
166
- Seq.new(nil).is_empty.should eq(true)
167
- end
168
- it 'has #last' do
169
- Seq.new([1,2,3]).last.should eq(3)
170
- end
171
- it 'has #last_option' do
172
- some = Seq.new([1,2,3]).last_option
173
- some.get.should eq(3)
174
- none = Seq.new([]).last_option
175
- none.is_defined.should eq(false)
176
- end
177
- it 'has #lift' do
178
- seq_lift = Seq.new([1,2,3]).lift
179
- seq_lift.apply(0).get.should eq(1)
180
- seq_lift.apply(1).get.should eq(2)
181
- seq_lift.apply(2).get.should eq(3)
182
- seq_lift.apply(3).is_defined.should eq(false)
183
- seq_lift.call(0).get.should eq(1)
184
- seq_lift.call(1).get.should eq(2)
185
- seq_lift.call(2).get.should eq(3)
186
- seq_lift.call(3).is_defined.should eq(false)
187
- end
188
- it 'has #map' do
189
- Seq.new([1,2,3]).map {|i| i + i }.to_a.should eq([2,4,6])
190
- end
191
- it 'has #max' do
192
- Seq.new(one_to_five_shuffled).max.should eq(5)
193
- end
194
- it 'has #min' do
195
- Seq.new(one_to_five_shuffled).min.should eq(1)
196
- end
197
- it 'has #mk_string' do
198
- Seq.new(one_to_five).mk_string.should eq('12345')
199
- Seq.new(one_to_five).mk_string(',').should eq('1,2,3,4,5')
200
- Seq.new(one_to_five).mk_string('^',',','$').should eq('^1,2,3,4,5$')
201
- begin
202
- Seq.new(one_to_five).mk_string('a','b').should eq(nil)
203
- rescue ArgumentError
204
- end
205
- Seq.new(one_to_five).mk_string('^',',','$','zzz').should eq('^1,2,3,4,5$')
206
- end
207
- it 'has #non_empty' do
208
- Seq.new(one_to_five).non_empty.should eq(true)
209
- Seq.new([]).non_empty.should eq(false)
210
- Seq.new(nil).non_empty.should eq(false)
211
- end
212
- it 'has #partition' do
213
- Seq.new([5,2,3,1,4,2,3]).partition {|i| i < 3 }.to_a.should eq([[2,1,2],[5,3,4,3]])
214
- end
215
- it 'has #patch' do
216
- Seq.new([5,2,3,1,4,2,3]).patch(3,[111,222],3).to_a.should eq([5,2,3,111,222,3])
217
- end
218
- it 'has #reverse' do
219
- Seq.new([1,2,3]).reverse.to_a.should eq([3,2,1])
220
- end
221
- it 'has #reverse_map' do
222
- Seq.new([1,2,3]).reverse_map {|i| i + i }.to_a.should eq([6,4,2])
223
- end
224
- it 'has #same_elements' do
225
- Seq.new([1,2,3]).same_elements([1,2,3]).should eq(true)
226
- Seq.new([1,2,3]).same_elements([1,3,2]).should eq(false)
227
- Seq.new([1,2,3]).same_elements([1,2]).should eq(false)
228
- end
229
- it 'has #scan_left' do
230
- Seq.new([1,2,3]).scan_left(1) {|a,b| a + b }.to_a.should eq([1,2,4,7])
231
- end
232
- it 'has #scan_right' do
233
- Seq.new([1,2,3]).scan_right(1) {|a,b| a + b }.to_a.should eq([7,6,4,1])
234
- end
235
- it 'has #slice' do
236
- Seq.new([1,2,3,4,5]).slice(1,1).to_a.should eq([])
237
- Seq.new([1,2,3,4,5]).slice(1,2).to_a.should eq([2])
238
- Seq.new([1,2,3,4,5]).slice(1,3).to_a.should eq([2,3])
239
- Seq.new([1,2,3,4,5]).slice(1,4).to_a.should eq([2,3,4])
240
- end
241
- it 'has #sliding' do
242
- Seq.new([1,2,3,4,5]).sliding(2).to_a.should eq([[1,2],[2,3],[3,4],[4,5]])
243
- end
244
- it 'has #sort_with' do
245
- Seq.new([1,3,2,4,5]).sort_with {|a,b| b <=> a }.to_a.should eq([5,4,3,2,1])
246
- end
247
- it 'has #span' do
248
- Seq.new([1,2,3,2,1]).span {|i| i < 3 }.to_a.should eq([[1,2],[3,2,1]])
249
- end
250
- it 'has #split_at' do
251
- Seq.new([1,2,3,2,1]).split_at(3).to_a.should eq([[1,2,3],[2,1]])
252
- end
253
- it 'has #starts_with' do
254
- Seq.new([1,2,3]).starts_with([1]).should eq(true)
255
- Seq.new([1,2,3]).starts_with([1,2]).should eq(true)
256
- Seq.new([1,2,3]).starts_with([1,2,3]).should eq(true)
257
- Seq.new([1,2,3]).starts_with([1,2,3,4]).should eq(false)
258
- Seq.new([1,2,3]).starts_with([2,3]).should eq(false)
259
- Seq.new([1,2,3]).starts_with([4,1,2,3]).should eq(false)
260
- end
261
- it 'has #sum' do
262
- Seq.new([1,2,3]).sum.should eq(6)
263
- end
264
- it 'has #tail' do
265
- Seq.new([1,2,3]).tail.to_a.should eq([2,3])
266
- Seq.new([]).tail.to_a.should eq([])
267
- end
268
- it 'has #take' do
269
- Seq.new([1,2,3]).take(0).to_a.should eq([])
270
- Seq.new([1,2,3]).take(1).to_a.should eq([1])
271
- Seq.new([1,2,3]).take(2).to_a.should eq([1,2])
272
- Seq.new([1,2,3]).take(3).to_a.should eq([1,2,3])
273
- Seq.new([1,2,3]).take(4).to_a.should eq([1,2,3])
274
- end
275
- it 'has #take_right' do
276
- Seq.new([1,2,3]).take_right(0).to_a.should eq([])
277
- Seq.new([1,2,3]).take_right(1).to_a.should eq([3])
278
- Seq.new([1,2,3]).take_right(2).to_a.should eq([2,3])
279
- Seq.new([1,2,3]).take_right(3).to_a.should eq([1,2,3])
280
- Seq.new([1,2,3]).take_right(4).to_a.should eq([1,2,3])
281
- end
282
- it 'has #take_while' do
283
- Seq.new([5,3,2,4,1]).take_while {|e| e > 2 }.to_a.should eq([5,3])
284
- end
285
- it 'has #union' do
286
- Seq.new([1,2,3]).union([2,3,4]).to_a.should eq([1,2,3,2,3,4])
287
- end
288
- it 'has #updated' do
289
- Seq.new([1,2,3]).updated(1,999).to_a.should eq([1,999,3])
290
- end
291
- it 'has #zip' do
292
- Seq.new([1,2,3]).zip([2,3]).to_a.should eq([[1,2],[2,3]])
293
- Seq.new([1,2,3]).zip([2,3,4]).to_a.should eq([[1,2],[2,3],[3,4]])
294
- Seq.new([1,2,3]).zip([2,3,4,5]).to_a.should eq([[1,2],[2,3],[3,4]])
295
- end
296
- it 'has #zip_with_index' do
297
- Seq.new([]).zip_with_index.to_a.should eq([])
298
- Seq.new([1,2,3]).zip_with_index.to_a.should eq([[1,0],[2,1],[3,2]])
299
- end
300
-
301
- end
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'scaruby'
4
+
5
+ describe Seq do
6
+
7
+ one_to_five = 1.upto 5
8
+ one_to_five_shuffled = one_to_five.sort_by { rand }
9
+
10
+ it 'does not accept invalid args' do
11
+ begin
12
+ Seq.new('aaaa').should eq(nil)
13
+ raise 'Expected exception did not be raised!'
14
+ rescue AssertionError
15
+ end
16
+ begin
17
+ Seq.new(12345).should eq(nil)
18
+ raise 'Expected exception did not be raised!'
19
+ rescue AssertionError
20
+ end
21
+ end
22
+
23
+ # as a sub type of Enumerable
24
+ it 'has #each' do
25
+ expected = 0
26
+ returned = Seq.new([0, 1, 2, 3]).each do |e|
27
+ e.should eq(expected)
28
+ expected += 1
29
+ end
30
+ returned.should eq(nil)
31
+ end
32
+ it 'has #all?' do
33
+ Seq.new([1, 2, 3]).all? { |e| e < 4 }.should eq(true)
34
+ Seq.new([1, 2, 3]).all? { |e| e > 2 }.should eq(false)
35
+ end
36
+
37
+ # defined
38
+ it 'has #to_a' do
39
+ Seq.new(one_to_five).to_a.should eq([1, 2, 3, 4, 5])
40
+ end
41
+ it 'has #corresponds' do
42
+ Seq.new([1, 2, 3]).corresponds([1, 2, 3]) { |a, b| a == b }.should eq(true)
43
+ Seq.new([1, 2, 3]).corresponds([3, 1, 2]) { |a, b| a == b }.should eq(false)
44
+ end
45
+ it 'has #count' do
46
+ Seq.new(one_to_five).count { |i| i > 2 }.should eq(3)
47
+ end
48
+ it 'has #diff' do
49
+ Seq.new([1, 2, 3]).diff([2, 3, 4]).to_a.should eq([1])
50
+ end
51
+ it 'has #distinct' do
52
+ Seq.new([1, 2, 4, 1, 3, 3, 3, 2, 4, 1]).distinct.to_a.should eq([1, 2, 4, 3])
53
+ end
54
+ it 'has #drop' do
55
+ Seq.new(one_to_five).drop(3).to_a.should eq([4, 5])
56
+ Seq.new(one_to_five).drop(7).to_a.should eq([])
57
+ end
58
+ it 'has #drop_right' do
59
+ Seq.new(one_to_five).drop_right(3).to_a.should eq([1, 2])
60
+ Seq.new(one_to_five).drop_right(7).to_a.should eq([])
61
+ end
62
+ it 'has #drop_while' do
63
+ Seq.new([5, 3, 2, 4, 1]).drop_while { |e| e > 2 }.to_a.should eq([2, 4, 1])
64
+ end
65
+ it 'has #ends_with' do
66
+ Seq.new([1, 2, 3]).ends_with([1, 2]).should eq(false)
67
+ Seq.new([1, 2, 3]).ends_with([1, 2, 3]).should eq(true)
68
+ Seq.new([1, 2, 3]).ends_with([1, 1, 2, 3]).should eq(false)
69
+ Seq.new([1, 2, 3]).ends_with([2, 3]).should eq(true)
70
+ Seq.new([1, 2, 3]).ends_with([3]).should eq(true)
71
+ end
72
+ it 'has #exists' do
73
+ Seq.new([1, 2, 3]).exists { |i| i < 2 }.should eq(true)
74
+ Seq.new([1, 2, 3]).exists { |i| i < 4 }.should eq(true)
75
+ Seq.new([2, 3, 4]).exists { |i| i > 4 }.should eq(false)
76
+ end
77
+ it 'has #filter' do
78
+ Seq.new(one_to_five).filter { |i| i > 3 }.to_a.should eq([4, 5])
79
+ Seq.new(one_to_five).filter { |i| i > 10 }.to_a.should eq([])
80
+ end
81
+ it 'has #filter_not' do
82
+ Seq.new(one_to_five).filter_not { |i| i > 3 }.to_a.should eq([1, 2, 3])
83
+ Seq.new(one_to_five).filter_not { |i| i > 10 }.to_a.should eq([1, 2, 3, 4, 5])
84
+ end
85
+ it 'has #find' do
86
+ some = Seq.new(one_to_five).find { |i| i < 3 }
87
+ some.get.should eq(1)
88
+ none = Seq.new(one_to_five).find { |i| i > 10 }
89
+ none.is_defined.should eq(false)
90
+ end
91
+ it 'has #flat_map and it works with nested arrays' do
92
+ Seq.new([[1, 2], [3, 4], [5]]).flat_map { |i| i }.to_a.should eq([1, 2, 3, 4, 5])
93
+ end
94
+ it 'has #flat_map and it works with Option elements' do
95
+ Seq.new([1, 2, nil, 3]).flat_map { |i| Option.new(i) }.to_a.should eq([1, 2, 3])
96
+ end
97
+ it 'has #fold_left' do
98
+ input = [1, 2, 3]
99
+ expected = [1, 2, 3]
100
+ idx = 0
101
+ Seq.new(input).fold_left(0) { |z, x|
102
+ x.should eq(expected[idx])
103
+ idx += 1
104
+ z + x
105
+ }.should eq(6)
106
+ end
107
+ it 'has #fold_right' do
108
+ input = [1, 2, 3]
109
+ expected = [3, 2, 1]
110
+ idx = 0
111
+ Seq.new(input).fold_right(0) { |z, x|
112
+ x.should eq(expected[idx])
113
+ idx += 1
114
+ z + x
115
+ }.should eq(6)
116
+ end
117
+ it 'has #flatten' do
118
+ Seq.new([[1, 2], [3, 4], [5]]).flatten.to_a.should eq([1, 2, 3, 4, 5])
119
+ Seq.new(
120
+ [Option.new(1),
121
+ Option.new(2),
122
+ Option.new(nil),
123
+ Option.new(3)]
124
+ ).flatten.to_a.should eq([1, 2, 3])
125
+ end
126
+ it 'has #forall' do
127
+ Seq.new([1, 2, 3]).forall { |i| i > 0 }.should eq(true)
128
+ Seq.new([1, 2, 3]).forall { |i| i > 1 }.should eq(false)
129
+ end
130
+ it 'has #foreach' do
131
+ count = 0
132
+ returned = Seq.new([1, 2, 3]).foreach do |i|
133
+ count += 1
134
+ end
135
+ count.should eq(3)
136
+ returned.should eq(nil)
137
+ end
138
+ it 'has #group_by' do
139
+ expected = {3 => [3, 3, 3], 1 => [1, 1, 1], 2 => [2, 2]}
140
+ Seq.new([1, 1, 1, 2, 3, 2, 3, 3]).group_by { |i| i }.to_hash.should eq(expected)
141
+ end
142
+ it 'has #head' do
143
+ Seq.new(one_to_five).head.should eq(1)
144
+ end
145
+ it 'has #head_option and it works with Some' do
146
+ some = Seq.new(one_to_five).head_option
147
+ some.get_or_else(999).should eq(1)
148
+ end
149
+ it 'has #head_option and it works with None' do
150
+ none = Seq.new([]).head_option
151
+ none.get_or_else(999).should eq(999)
152
+ end
153
+ it 'has #indices' do
154
+ Seq.new([1, 2, 3]).indices.to_a.should eq([0, 1, 2])
155
+ end
156
+ it 'has #init' do
157
+ Seq.new([1, 2, 3]).init.to_a.should eq([1, 2])
158
+ end
159
+ it 'has #intersect' do
160
+ Seq.new([1, 2, 3]).intersect([2, 3, 4]).to_a.should eq([2, 3])
161
+ end
162
+ it 'has #is_empty' do
163
+ Seq.new([1, 2, 3]).is_empty.should eq(false)
164
+ Seq.new([nil]).is_empty.should eq(false)
165
+ Seq.new([]).is_empty.should eq(true)
166
+ Seq.new(nil).is_empty.should eq(true)
167
+ end
168
+ it 'has #last' do
169
+ Seq.new([1, 2, 3]).last.should eq(3)
170
+ end
171
+ it 'has #last_option' do
172
+ some = Seq.new([1, 2, 3]).last_option
173
+ some.get.should eq(3)
174
+ none = Seq.new([]).last_option
175
+ none.is_defined.should eq(false)
176
+ end
177
+ it 'has #lift' do
178
+ seq_lift = Seq.new([1, 2, 3]).lift
179
+ seq_lift.apply(0).get.should eq(1)
180
+ seq_lift.apply(1).get.should eq(2)
181
+ seq_lift.apply(2).get.should eq(3)
182
+ seq_lift.apply(3).is_defined.should eq(false)
183
+ seq_lift.call(0).get.should eq(1)
184
+ seq_lift.call(1).get.should eq(2)
185
+ seq_lift.call(2).get.should eq(3)
186
+ seq_lift.call(3).is_defined.should eq(false)
187
+ end
188
+ it 'has #map' do
189
+ Seq.new([1, 2, 3]).map { |i| i + i }.to_a.should eq([2, 4, 6])
190
+ end
191
+ it 'has #max' do
192
+ Seq.new(one_to_five_shuffled).max.should eq(5)
193
+ end
194
+ it 'has #min' do
195
+ Seq.new(one_to_five_shuffled).min.should eq(1)
196
+ end
197
+ it 'has #mk_string' do
198
+ Seq.new(one_to_five).mk_string.should eq('12345')
199
+ Seq.new(one_to_five).mk_string(',').should eq('1,2,3,4,5')
200
+ Seq.new(one_to_five).mk_string('^', ',', '$').should eq('^1,2,3,4,5$')
201
+ begin
202
+ Seq.new(one_to_five).mk_string('a', 'b').should eq(nil)
203
+ rescue ArgumentError
204
+ end
205
+ Seq.new(one_to_five).mk_string('^', ',', '$', 'zzz').should eq('^1,2,3,4,5$')
206
+ end
207
+ it 'has #non_empty' do
208
+ Seq.new(one_to_five).non_empty.should eq(true)
209
+ Seq.new([]).non_empty.should eq(false)
210
+ Seq.new(nil).non_empty.should eq(false)
211
+ end
212
+ it 'has #partition' do
213
+ Seq.new([5, 2, 3, 1, 4, 2, 3]).partition { |i| i < 3 }.to_a.should eq([[2, 1, 2], [5, 3, 4, 3]])
214
+ end
215
+ it 'has #patch' do
216
+ Seq.new([5, 2, 3, 1, 4, 2, 3]).patch(3, [111, 222], 3).to_a.should eq([5, 2, 3, 111, 222, 3])
217
+ end
218
+ it 'has #reverse' do
219
+ Seq.new([1, 2, 3]).reverse.to_a.should eq([3, 2, 1])
220
+ end
221
+ it 'has #reverse_map' do
222
+ Seq.new([1, 2, 3]).reverse_map { |i| i + i }.to_a.should eq([6, 4, 2])
223
+ end
224
+ it 'has #same_elements' do
225
+ Seq.new([1, 2, 3]).same_elements([1, 2, 3]).should eq(true)
226
+ Seq.new([1, 2, 3]).same_elements([1, 3, 2]).should eq(false)
227
+ Seq.new([1, 2, 3]).same_elements([1, 2]).should eq(false)
228
+ end
229
+ it 'has #scan_left' do
230
+ Seq.new([1, 2, 3]).scan_left(1) { |a, b| a + b }.to_a.should eq([1, 2, 4, 7])
231
+ end
232
+ it 'has #scan_right' do
233
+ Seq.new([1, 2, 3]).scan_right(1) { |a, b| a + b }.to_a.should eq([7, 6, 4, 1])
234
+ end
235
+ it 'has #slice' do
236
+ Seq.new([1, 2, 3, 4, 5]).slice(1, 1).to_a.should eq([])
237
+ Seq.new([1, 2, 3, 4, 5]).slice(1, 2).to_a.should eq([2])
238
+ Seq.new([1, 2, 3, 4, 5]).slice(1, 3).to_a.should eq([2, 3])
239
+ Seq.new([1, 2, 3, 4, 5]).slice(1, 4).to_a.should eq([2, 3, 4])
240
+ end
241
+ it 'has #sliding' do
242
+ Seq.new([1, 2, 3, 4, 5]).sliding(2).to_a.should eq([[1, 2], [2, 3], [3, 4], [4, 5]])
243
+ end
244
+ it 'has #sort_with' do
245
+ Seq.new([1, 3, 2, 4, 5]).sort_with { |a, b| b <=> a }.to_a.should eq([5, 4, 3, 2, 1])
246
+ end
247
+ it 'has #span' do
248
+ Seq.new([1, 2, 3, 2, 1]).span { |i| i < 3 }.to_a.should eq([[1, 2], [3, 2, 1]])
249
+ end
250
+ it 'has #split_at' do
251
+ Seq.new([1, 2, 3, 2, 1]).split_at(3).to_a.should eq([[1, 2, 3], [2, 1]])
252
+ end
253
+ it 'has #starts_with' do
254
+ Seq.new([1, 2, 3]).starts_with([1]).should eq(true)
255
+ Seq.new([1, 2, 3]).starts_with([1, 2]).should eq(true)
256
+ Seq.new([1, 2, 3]).starts_with([1, 2, 3]).should eq(true)
257
+ Seq.new([1, 2, 3]).starts_with([1, 2, 3, 4]).should eq(false)
258
+ Seq.new([1, 2, 3]).starts_with([2, 3]).should eq(false)
259
+ Seq.new([1, 2, 3]).starts_with([4, 1, 2, 3]).should eq(false)
260
+ end
261
+ it 'has #sum' do
262
+ Seq.new([1, 2, 3]).sum.should eq(6)
263
+ end
264
+ it 'has #tail' do
265
+ Seq.new([1, 2, 3]).tail.to_a.should eq([2, 3])
266
+ Seq.new([]).tail.to_a.should eq([])
267
+ end
268
+ it 'has #take' do
269
+ Seq.new([1, 2, 3]).take(0).to_a.should eq([])
270
+ Seq.new([1, 2, 3]).take(1).to_a.should eq([1])
271
+ Seq.new([1, 2, 3]).take(2).to_a.should eq([1, 2])
272
+ Seq.new([1, 2, 3]).take(3).to_a.should eq([1, 2, 3])
273
+ Seq.new([1, 2, 3]).take(4).to_a.should eq([1, 2, 3])
274
+ end
275
+ it 'has #take_right' do
276
+ Seq.new([1, 2, 3]).take_right(0).to_a.should eq([])
277
+ Seq.new([1, 2, 3]).take_right(1).to_a.should eq([3])
278
+ Seq.new([1, 2, 3]).take_right(2).to_a.should eq([2, 3])
279
+ Seq.new([1, 2, 3]).take_right(3).to_a.should eq([1, 2, 3])
280
+ Seq.new([1, 2, 3]).take_right(4).to_a.should eq([1, 2, 3])
281
+ end
282
+ it 'has #take_while' do
283
+ Seq.new([5, 3, 2, 4, 1]).take_while { |e| e > 2 }.to_a.should eq([5, 3])
284
+ end
285
+ it 'has #union' do
286
+ Seq.new([1, 2, 3]).union([2, 3, 4]).to_a.should eq([1, 2, 3, 2, 3, 4])
287
+ end
288
+ it 'has #updated' do
289
+ Seq.new([1, 2, 3]).updated(1, 999).to_a.should eq([1, 999, 3])
290
+ end
291
+ it 'has #zip' do
292
+ Seq.new([1, 2, 3]).zip([2, 3]).to_a.should eq([[1, 2], [2, 3]])
293
+ Seq.new([1, 2, 3]).zip([2, 3, 4]).to_a.should eq([[1, 2], [2, 3], [3, 4]])
294
+ Seq.new([1, 2, 3]).zip([2, 3, 4, 5]).to_a.should eq([[1, 2], [2, 3], [3, 4]])
295
+ end
296
+ it 'has #zip_with_index' do
297
+ Seq.new([]).zip_with_index.to_a.should eq([])
298
+ Seq.new([1, 2, 3]).zip_with_index.to_a.should eq([[1, 0], [2, 1], [3, 2]])
299
+ end
300
+
301
+ end