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