backports 2.3.0 → 2.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.irbrc +1 -0
- data/README.rdoc +55 -3
- data/Rakefile +1 -0
- data/VERSION.yml +1 -1
- data/backports.gemspec +99 -118
- data/lib/backports/1.8.7/string.rb +1 -1
- data/lib/backports/1.9.1/array.rb +1 -2
- data/lib/backports/1.9.1/file.rb +20 -0
- data/lib/backports/1.9.1/float.rb +19 -0
- data/lib/backports/1.9.1/hash.rb +20 -3
- data/lib/backports/1.9.1/integer.rb +19 -0
- data/lib/backports/1.9.1/io.rb +18 -3
- data/lib/backports/1.9.1/numeric.rb +9 -0
- data/lib/backports/1.9.1/regexp.rb +1 -6
- data/lib/backports/1.9.1/stdlib/prime.rb +495 -0
- data/lib/backports/1.9.1/stdlib.rb +1 -0
- data/lib/backports/1.9.1/string.rb +2 -7
- data/lib/backports/1.9.2/array.rb +3 -4
- data/lib/backports/1.9.2/complex.rb +6 -0
- data/lib/backports/1.9.2/stdlib/matrix/eigenvalue_decomposition.rb +886 -0
- data/lib/backports/1.9.2/stdlib/matrix/lup_decomposition.rb +218 -0
- data/lib/backports/1.9.2/stdlib/matrix.rb +1872 -0
- data/lib/backports/1.9.2/stdlib/set.rb +13 -0
- data/lib/backports/1.9.2/stdlib.rb +1 -0
- data/lib/backports/1.9.3/io.rb +12 -0
- data/lib/backports/1.9.3.rb +5 -0
- data/lib/backports/1.9.rb +1 -1
- data/lib/backports/basic_object.rb +3 -2
- data/lib/backports/force/array_map.rb +1 -0
- data/lib/backports/force/enumerable_map.rb +3 -0
- data/lib/backports/force/hash_select.rb +9 -0
- data/lib/backports/force/string_length.rb +10 -0
- data/lib/backports/force/string_size.rb +1 -0
- data/lib/backports/tools.rb +137 -1
- data/test/README +13 -0
- metadata +25 -42
- data/.gitignore +0 -7
- data/test/_README +0 -1
- data/test/array_test.rb +0 -82
- data/test/basic_object_test.rb +0 -70
- data/test/binding_test.rb +0 -20
- data/test/enumerable_test.rb +0 -244
- data/test/enumerator_test.rb +0 -45
- data/test/hash_test.rb +0 -26
- data/test/kernel_test.rb +0 -31
- data/test/math_test.rb +0 -59
- data/test/method_missing_test.rb +0 -37
- data/test/method_test.rb +0 -73
- data/test/module_test.rb +0 -20
- data/test/object_test.rb +0 -35
- data/test/proc_test.rb +0 -116
- data/test/regexp_test.rb +0 -14
- data/test/string_test.rb +0 -74
- data/test/symbol_test.rb +0 -23
- data/test/test_helper.rb +0 -8
data/test/enumerable_test.rb
DELETED
@@ -1,244 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
require 'stringio'
|
3
|
-
|
4
|
-
class EnumerableTest < Test::Unit::TestCase
|
5
|
-
context "Enumerable" do
|
6
|
-
context "#count" do
|
7
|
-
should "conform to doc" do
|
8
|
-
assert_equal 4, (1..4).count
|
9
|
-
assert_equal 1, (1..4).count(3)
|
10
|
-
assert_equal 2, (1..4).count{|obj| obj > 2 }
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
context "#cycle" do
|
15
|
-
should "conform to doc" do
|
16
|
-
assert_equal ["a", "b", "c", "a", "b", "c"], ('a'..'c').cycle(2).to_a
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
context "#drop" do
|
21
|
-
should "conform to doc" do
|
22
|
-
assert_equal [5, 8, 13], [ 1, 1, 2, 3, 5, 8, 13 ].drop(4)
|
23
|
-
assert_equal [], [ 1, 1, 2, 3, 5, 8, 13 ].drop(99)
|
24
|
-
end
|
25
|
-
|
26
|
-
should "work with enums" do
|
27
|
-
assert_equal [14,15], (10...16).drop(4)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
context "#drop_while" do
|
32
|
-
should "conform to doc" do
|
33
|
-
assert_equal [8, 13], [ 1, 1, 2, 3, 5, 8, 13 ].drop_while {|item| item < 6 }
|
34
|
-
end
|
35
|
-
|
36
|
-
should "work with enums" do
|
37
|
-
assert_equal [14,15], (10...16).drop_while {|item| item < 14}
|
38
|
-
end
|
39
|
-
|
40
|
-
should "work with extemity cases" do
|
41
|
-
assert_equal [10,11,12,13,14,15], (10...16).drop_while {|item| false}
|
42
|
-
assert_equal [], (10...16).drop_while {|item| true}
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
context "#each_cons" do
|
47
|
-
should "conform to doc" do
|
48
|
-
assert_equal [[1,2],[2,3],[3,4]], (1..4).each_cons(2).to_a
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
context "#each_slice" do
|
53
|
-
should "conform to doc" do
|
54
|
-
res = []
|
55
|
-
(1..10).each_slice(4){|ar| res << ar}
|
56
|
-
assert_equal [[1, 2, 3, 4],[5, 6, 7, 8],[9, 10]], res
|
57
|
-
assert_equal [[1, 2, 3, 4],[5, 6, 7, 8],[9, 10]], (1..10).each_slice(4).to_a
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
context "#each_with_index" do
|
62
|
-
should "conform to doc" do
|
63
|
-
hash = Hash.new
|
64
|
-
%w(cat dog wombat).each_with_index do |item, index|
|
65
|
-
hash[item] = index
|
66
|
-
end
|
67
|
-
assert_equal({"cat"=>0, "wombat"=>2, "dog"=>1}, hash)
|
68
|
-
end
|
69
|
-
|
70
|
-
should "be ok with arguments and no block" do
|
71
|
-
s = StringIO.new("Hello world!")
|
72
|
-
assert_equal [["Hello",0], [" wo",1], ["rld!",2]], s.each_with_index("o").to_a
|
73
|
-
end
|
74
|
-
|
75
|
-
end
|
76
|
-
|
77
|
-
context "#each_with_object" do
|
78
|
-
should "conform to doc" do
|
79
|
-
hash = %w(cat dog wombat).each_with_object({}) do |item, memo|
|
80
|
-
memo[item] = item.upcase.reverse
|
81
|
-
end
|
82
|
-
assert_equal({"cat"=>"TAC", "dog"=>"GOD", "wombat"=>"TABMOW"}, hash)
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
context "#find" do
|
87
|
-
should "not require a block" do
|
88
|
-
assert_equal 3, (1..10).find.each {|item| item > 2 }
|
89
|
-
end
|
90
|
-
|
91
|
-
should "work as expected" do
|
92
|
-
assert_equal 3, (1..10).find {|item| item > 2 }
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
context "#find_index" do
|
97
|
-
should "conform to doc" do
|
98
|
-
assert_equal 3, %w{ant bat cat dog}.find_index {|item| item =~ /g/ }
|
99
|
-
assert_equal nil, %w{ant bat cat dog}.find_index {|item| item =~ /h/ }
|
100
|
-
end
|
101
|
-
|
102
|
-
should "work for enumerables too" do
|
103
|
-
assert_equal 69-42, (42..666).find_index(69)
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
context "#group_by" do
|
108
|
-
should "conform to doc" do
|
109
|
-
x = (1..5).group_by{|item| item.even? ? :even : :odd }
|
110
|
-
assert_equal({:even => [2,4], :odd => [1,3,5]}, x)
|
111
|
-
assert_equal nil, x[:xyz]
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
context "#inject" do
|
116
|
-
should "conform to doc" do
|
117
|
-
assert_equal 45, (5..10).inject(0) {|sum, n| sum + n }
|
118
|
-
assert_equal 45, (5..10).inject {|sum, n| sum + n }
|
119
|
-
assert_equal 45, (5..10).inject(0, :+)
|
120
|
-
assert_equal 45, (5..10).inject(:+)
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
context "#max_by" do
|
125
|
-
should "conform to doc" do
|
126
|
-
a = %w(albatross dog horse fox)
|
127
|
-
assert_equal "albatross" , a.max_by {|item| item.length }
|
128
|
-
assert_equal "fox", a.max_by {|item| item.reverse }
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
context "#min_by" do
|
133
|
-
should "conform to doc" do
|
134
|
-
a = %w(albatross dog horse fox)
|
135
|
-
assert_equal "dog" , a.min_by {|item| item.length }
|
136
|
-
assert_equal "horse", a.min_by {|item| item.reverse }
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
context "#minmax" do
|
141
|
-
should "conform to doc" do
|
142
|
-
a = %w(albatross dog horse)
|
143
|
-
assert_equal ["albatross", "horse"], a.minmax
|
144
|
-
assert_equal ["dog", "albatross"], a.minmax {|a,b| a.length <=> b.length }
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
context "#one" do
|
149
|
-
should "conform to doc" do
|
150
|
-
assert_equal false, %w{ ant bear cat}.one? {|word| word.length >= 3}
|
151
|
-
assert_equal true, %w{ ant bear cat}.one? {|word| word.length >= 4}
|
152
|
-
assert_equal true, [ nil, nil, 99 ].one?
|
153
|
-
end
|
154
|
-
end
|
155
|
-
|
156
|
-
context "#reverse_each" do
|
157
|
-
should "work as expected" do
|
158
|
-
assert_equal [4,3,2], (1..4).reverse_each.take(3)
|
159
|
-
end
|
160
|
-
end
|
161
|
-
|
162
|
-
context "#take" do
|
163
|
-
should "conform to doc" do
|
164
|
-
assert_equal [1, 2, 3], (1..7).take(3)
|
165
|
-
assert_equal [["a", 1], ["b", 2]], { 'a'=>1, 'b'=>2, 'c'=>3 }.take(2)
|
166
|
-
end
|
167
|
-
|
168
|
-
should "only consume what's needed" do
|
169
|
-
assert_equal [], Enumerator.new(nil).take(0)
|
170
|
-
assert_raises(NoMethodError) { Enumerator.new(nil).take(1) }
|
171
|
-
end
|
172
|
-
end
|
173
|
-
|
174
|
-
context "#take_while" do
|
175
|
-
should "conform to doc" do
|
176
|
-
assert_equal [1,2], (1..7).take_while {|item| item < 3 }
|
177
|
-
assert_equal [2,4,6], [ 2, 4, 6, 9, 11, 16 ].take_while(&:even?)
|
178
|
-
end
|
179
|
-
|
180
|
-
should "work with infinite enumerables" do
|
181
|
-
assert_equal [1,2], (1..(1/0.0)).take_while {|item| item < 3 }
|
182
|
-
end
|
183
|
-
end
|
184
|
-
|
185
|
-
context "#to_a" do
|
186
|
-
should "work with arguments" do
|
187
|
-
s = StringIO.new("Hello world!")
|
188
|
-
assert_equal ["Hello", " wo", "rld!"], s.to_a("o")
|
189
|
-
end
|
190
|
-
end
|
191
|
-
|
192
|
-
context "#chunk" do
|
193
|
-
context "given no argument" do
|
194
|
-
should "should chunk correctly even for non-consecutive but similar keys" do
|
195
|
-
e = (1..7).chunk{|i| (i/3) % 2}
|
196
|
-
assert_equal true, e.is_a?(Enumerator)
|
197
|
-
assert_equal [
|
198
|
-
[0, [1,2]],
|
199
|
-
[1, [3,4,5]],
|
200
|
-
[0, [6,7]]], e.to_a
|
201
|
-
end
|
202
|
-
|
203
|
-
should "should pass two arguments to the block" do
|
204
|
-
e = (1..7).chunk{|i| (i/3) % 2}
|
205
|
-
e.each do |key, val|
|
206
|
-
assert_equal 0, key
|
207
|
-
assert_equal [1,2], val
|
208
|
-
break
|
209
|
-
end
|
210
|
-
end
|
211
|
-
|
212
|
-
should "handles nil & :_symbol" do
|
213
|
-
a = [1,1,nil,1,:_separator, 1, :_singleton, 1]
|
214
|
-
e = a.size.times.chunk{|i| a[i]}
|
215
|
-
assert_equal [
|
216
|
-
[1,[0,1]],
|
217
|
-
[1,[3]],
|
218
|
-
[1,[5]],
|
219
|
-
[:_singleton, [6]],
|
220
|
-
[1,[7]]
|
221
|
-
], e.to_a
|
222
|
-
end
|
223
|
-
|
224
|
-
end
|
225
|
-
|
226
|
-
context "given an initial_state argument" do
|
227
|
-
should "give a new copy" do
|
228
|
-
a = []
|
229
|
-
e = (1..3).chunk(a) do |i, x|
|
230
|
-
assert_equal true, x.empty?
|
231
|
-
x << :yo
|
232
|
-
:_singleton
|
233
|
-
end
|
234
|
-
assert_equal [
|
235
|
-
[:_singleton, [1]],
|
236
|
-
[:_singleton, [2]],
|
237
|
-
[:_singleton, [3]]], e.to_a
|
238
|
-
end
|
239
|
-
end
|
240
|
-
|
241
|
-
end
|
242
|
-
|
243
|
-
end
|
244
|
-
end
|
data/test/enumerator_test.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
|
4
|
-
class EnumeratorTest < Test::Unit::TestCase
|
5
|
-
context "Enumerator" do
|
6
|
-
context "#with_object" do
|
7
|
-
should "conform to doc" do
|
8
|
-
animals = %w(cat dog wombat).to_enum
|
9
|
-
hash = animals.with_object({}).each do |item, memo|
|
10
|
-
memo[item] = item.upcase.reverse
|
11
|
-
end
|
12
|
-
assert_equal({"cat"=>"TAC", "dog"=>"GOD", "wombat"=>"TABMOW"}, hash)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
context "#new" do
|
17
|
-
should "should accept block" do
|
18
|
-
enum = Enumerator.new do |yielder|
|
19
|
-
yielder.yield "This syntax is"
|
20
|
-
yielder.yield "cool!"
|
21
|
-
end
|
22
|
-
assert enum.is_a?(Enumerator)
|
23
|
-
2.times do
|
24
|
-
assert_equal ["This syntax is", "cool!"], enum.to_a
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
context "#each" do
|
30
|
-
should "should not require block" do
|
31
|
-
assert_nothing_raised { [42].to_enum.each }
|
32
|
-
assert_equal [42], [42].to_enum.each.to_a
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
context "#next" do
|
37
|
-
should "conform to doc" do
|
38
|
-
enum = [10, 20].to_enum
|
39
|
-
assert_equal 10, enum.next
|
40
|
-
assert_equal 20, enum.next
|
41
|
-
assert_raise(StopIteration){ enum.next}
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
data/test/hash_test.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class HashTest < Test::Unit::TestCase
|
4
|
-
context "Hash" do
|
5
|
-
should "should be constructible from key value pairs" do
|
6
|
-
assert_equal({1 => 2, 3 => 4}, Hash[[[1,2],[3,4]]])
|
7
|
-
end
|
8
|
-
|
9
|
-
context "#default_proc=" do
|
10
|
-
should "conform to doc" do
|
11
|
-
h = { :foo => :bar }
|
12
|
-
h.default = "Go fish"
|
13
|
-
h.default_proc=lambda do |hash, key|
|
14
|
-
key + key
|
15
|
-
end
|
16
|
-
assert_equal :bar, h[:foo]
|
17
|
-
assert_equal 4, h[2]
|
18
|
-
assert_equal "catcat", h["cat"]
|
19
|
-
h.default=nil
|
20
|
-
assert_equal nil, h[2]
|
21
|
-
assert_equal nil, h["cat"]
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
data/test/kernel_test.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
$outside = __callee__
|
4
|
-
def fred
|
5
|
-
"I'm in #{__callee__.inspect}"
|
6
|
-
end
|
7
|
-
|
8
|
-
class KernelTest < Test::Unit::TestCase
|
9
|
-
context "Kernel" do
|
10
|
-
context ".loop" do
|
11
|
-
should "catch StopIteration" do
|
12
|
-
i = 0
|
13
|
-
r = []
|
14
|
-
loop do
|
15
|
-
r << i
|
16
|
-
i += 1
|
17
|
-
raise StopIteration if i > 2
|
18
|
-
end
|
19
|
-
assert_equal [0, 1, 2], r
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
|
24
|
-
context ".__callee__" do
|
25
|
-
should "conform to doc" do
|
26
|
-
assert_equal "I'm in :fred", fred
|
27
|
-
assert_equal nil, $outside
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
data/test/math_test.rb
DELETED
@@ -1,59 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class MathTest < Test::Unit::TestCase
|
4
|
-
context "Math" do
|
5
|
-
context ".log" do
|
6
|
-
should "accept one argument" do
|
7
|
-
assert_nothing_raised(ArgumentError) { Math.log(1) }
|
8
|
-
end
|
9
|
-
|
10
|
-
should "accept two arguments" do
|
11
|
-
assert_nothing_raised(ArgumentError) { Math.log(2, 2) }
|
12
|
-
end
|
13
|
-
|
14
|
-
should "accept valid arguments" do
|
15
|
-
assert_nothing_raised(TypeError) { Math.log(2, 2) }
|
16
|
-
assert_nothing_raised(TypeError) { Math.log(2, 2.0) }
|
17
|
-
end
|
18
|
-
|
19
|
-
should "reject invalid arguments" do
|
20
|
-
assert_raises(TypeError) { Math.log(2, nil) }
|
21
|
-
assert_raises(TypeError) { Math.log(2, "2") }
|
22
|
-
end
|
23
|
-
|
24
|
-
should "return the correct value" do
|
25
|
-
assert_equal 0.0, Math.log(1)
|
26
|
-
assert_equal 1.0, Math.log(Math::E)
|
27
|
-
assert_equal 3.0, Math.log(Math::E**3)
|
28
|
-
assert_equal 3.0, Math.log(8, 2)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
context ".log2" do
|
33
|
-
should "be defined" do
|
34
|
-
assert_respond_to Math, :log2
|
35
|
-
end
|
36
|
-
|
37
|
-
should "accept one argument" do
|
38
|
-
assert_nothing_raised(ArgumentError) { Math.log2(1) }
|
39
|
-
end
|
40
|
-
|
41
|
-
should "accept valid arguments" do
|
42
|
-
assert_nothing_raised(TypeError) { Math.log2(1) }
|
43
|
-
assert_nothing_raised(TypeError) { Math.log2(1.0) }
|
44
|
-
end
|
45
|
-
|
46
|
-
should "reject invalid arguments" do
|
47
|
-
assert_raises(TypeError) { Math.log2(nil) }
|
48
|
-
assert_raises(TypeError) { Math.log2("1") }
|
49
|
-
end
|
50
|
-
|
51
|
-
should "return the correct value" do
|
52
|
-
assert_equal 0.0, Math.log2(1)
|
53
|
-
assert_equal 1.0, Math.log2(2)
|
54
|
-
assert_equal 15.0, Math.log2(32768)
|
55
|
-
assert_equal 16.0, Math.log2(65536)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
data/test/method_missing_test.rb
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
|
4
|
-
class MethodMissingTest < Test::Unit::TestCase
|
5
|
-
|
6
|
-
class A
|
7
|
-
def respond_to_missing? method
|
8
|
-
:ok_if_missing == method
|
9
|
-
end
|
10
|
-
|
11
|
-
def method_missing method, *args
|
12
|
-
:bar
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
context "#respond_to?" do
|
17
|
-
should "takes #respond_to_missing? into account" do
|
18
|
-
assert_equal true, A.new.respond_to?(:ok_if_missing)
|
19
|
-
assert_equal false, A.new.respond_to?(:not_ok_if_missing)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
context "#method" do
|
24
|
-
should "returns a nice Method with respond_to_missing?" do
|
25
|
-
assert_equal :bar, A.new.method(:ok_if_missing).call
|
26
|
-
assert_raise(NameError){ A.new.method(:not_ok_if_missing) }
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
context "Method#unbind" do
|
31
|
-
should "works for missing Methods" do
|
32
|
-
assert_equal :ok_if_missing, A.new.method(:ok_if_missing).unbind.name
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
|
37
|
-
end
|
data/test/method_test.rb
DELETED
@@ -1,73 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class ArrayTest < Test::Unit::TestCase
|
4
|
-
|
5
|
-
context "Method" do
|
6
|
-
setup do
|
7
|
-
@cat = "cat"
|
8
|
-
@bound = @cat.method(:upcase)
|
9
|
-
end
|
10
|
-
|
11
|
-
context "#name" do
|
12
|
-
should "conform to doc" do
|
13
|
-
assert_equal "upcase", @bound.name
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
context "#owner" do
|
18
|
-
should "conform to doc" do
|
19
|
-
assert_equal String, @bound.owner
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
context "#receiver" do
|
24
|
-
should "conform to doc" do
|
25
|
-
assert @cat === @bound.receiver
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
context "Unbound" do
|
30
|
-
setup do
|
31
|
-
@unbound = @bound.unbind
|
32
|
-
end
|
33
|
-
|
34
|
-
context "#name" do
|
35
|
-
should "conform to doc" do
|
36
|
-
assert_equal "upcase", @unbound.name
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
context "#owner" do
|
41
|
-
should "conform to doc" do
|
42
|
-
assert_equal String, @unbound.owner
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
context "bound again" do
|
47
|
-
setup do
|
48
|
-
@dog = "dog"
|
49
|
-
@bound_again = @unbound.bind(@dog)
|
50
|
-
end
|
51
|
-
|
52
|
-
context "#name" do
|
53
|
-
should "conform to doc" do
|
54
|
-
assert_equal "upcase", @bound_again.name
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
context "#owner" do
|
59
|
-
should "conform to doc" do
|
60
|
-
assert_equal String, @bound_again.owner
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
context "#receiver" do
|
65
|
-
should "conform to doc" do
|
66
|
-
assert @dog === @bound_again.receiver
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
data/test/module_test.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class Thing
|
4
|
-
end
|
5
|
-
|
6
|
-
class ModuleTest < Test::Unit::TestCase
|
7
|
-
context "Module" do
|
8
|
-
context "#module_exec" do
|
9
|
-
should "conform to doc" do
|
10
|
-
name = :new_instance_variable
|
11
|
-
Thing.module_exec(name) do |iv_name|
|
12
|
-
attr_accessor iv_name
|
13
|
-
end
|
14
|
-
t = Thing.new
|
15
|
-
t.new_instance_variable = "wibble"
|
16
|
-
assert_equal "wibble", t.new_instance_variable
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
data/test/object_test.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class ObjectTest < Test::Unit::TestCase
|
4
|
-
class KlassWithSecret
|
5
|
-
def initialize
|
6
|
-
@secret = 99
|
7
|
-
end
|
8
|
-
end
|
9
|
-
context "Object" do
|
10
|
-
context "#instance_exec" do
|
11
|
-
should "conform to doc" do
|
12
|
-
k = KlassWithSecret.new
|
13
|
-
assert_equal 104, k.instance_exec(5) {|x| @secret+x }
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
context "#define_singleton_method" do
|
18
|
-
should "conform to doc" do
|
19
|
-
a = "cat"
|
20
|
-
a.define_singleton_method(:speak) do
|
21
|
-
"miaow"
|
22
|
-
end
|
23
|
-
assert_equal "miaow", a.speak
|
24
|
-
|
25
|
-
KlassWithSecret.class_eval do
|
26
|
-
define_method(:one) { "instance method" }
|
27
|
-
define_singleton_method(:two) { "class method" }
|
28
|
-
end
|
29
|
-
t = KlassWithSecret.new
|
30
|
-
assert_equal "instance method", t.one
|
31
|
-
assert_equal "class method", KlassWithSecret.two
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
data/test/proc_test.rb
DELETED
@@ -1,116 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class ProcTest < Test::Unit::TestCase
|
4
|
-
# method names correspond with Ruby docs
|
5
|
-
def n(&b) b.lambda? end
|
6
|
-
def m() end
|
7
|
-
|
8
|
-
class C
|
9
|
-
define_method(:d) {}
|
10
|
-
define_method(:e, &proc {})
|
11
|
-
end
|
12
|
-
|
13
|
-
def implicit
|
14
|
-
Proc.new
|
15
|
-
end
|
16
|
-
|
17
|
-
context "Proc" do
|
18
|
-
context "#lambda?" do
|
19
|
-
context "basic usage" do
|
20
|
-
should "conform to docs" do
|
21
|
-
assert lambda {}.lambda?
|
22
|
-
assert !proc {}.lambda?
|
23
|
-
assert !Proc.new {}.lambda?
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
context "propagation" do
|
28
|
-
should "conform to docs" do
|
29
|
-
assert lambda(&lambda {}).lambda?
|
30
|
-
assert proc(&lambda {}).lambda?
|
31
|
-
assert Proc.new(&lambda {}).lambda?
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
context "blocks passed to methods" do
|
36
|
-
should "conform to docs" do
|
37
|
-
assert !n { }
|
38
|
-
assert n(&lambda {})
|
39
|
-
assert !n(&proc {})
|
40
|
-
assert !n(&Proc.new {})
|
41
|
-
end
|
42
|
-
|
43
|
-
should "not break Proc.new" do
|
44
|
-
implicit { }
|
45
|
-
implicit(&proc {})
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
context "Method#to_proc" do
|
50
|
-
should "conform to docs" do
|
51
|
-
assert method(:m).to_proc.lambda?
|
52
|
-
assert n(&method(:m))
|
53
|
-
assert n(&method(:m).to_proc)
|
54
|
-
assert C.new.method(:d).to_proc.lambda?
|
55
|
-
assert C.new.method(:e).to_proc.lambda?
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
context "#curry" do
|
61
|
-
context "proc" do
|
62
|
-
context "no arguments" do
|
63
|
-
should "conform to docs" do
|
64
|
-
b = proc { :foo }
|
65
|
-
assert_equal :foo, b.curry[]
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
context "arity > 0" do
|
70
|
-
should "conform to docs" do
|
71
|
-
b = Proc.new {|x, y, z| (x||0) + (y||0) + (z||0) }
|
72
|
-
assert_equal 6, b.curry[1][2][3]
|
73
|
-
assert_equal 6, b.curry[1, 2][3, 4]
|
74
|
-
assert_equal 6, b.curry(5)[1][2][3][4][5]
|
75
|
-
assert_equal 6, b.curry(5)[1, 2][3, 4][5]
|
76
|
-
assert_equal 1, b.curry(1)[1]
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
context "arity < 0" do
|
81
|
-
should "conform to docs" do
|
82
|
-
b = Proc.new {|x, y, z, *w| (x||0) + (y||0) + (z||0) + w.inject(0, &:+) }
|
83
|
-
assert_equal 6, b.curry[1][2][3]
|
84
|
-
assert_equal 10, b.curry[1, 2][3, 4]
|
85
|
-
assert_equal 15, b.curry(5)[1][2][3][4][5]
|
86
|
-
assert_equal 15, b.curry(5)[1, 2][3, 4][5]
|
87
|
-
assert_equal 1, b.curry(1)[1]
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
context "lambda" do
|
93
|
-
context "arity > 0" do
|
94
|
-
should "conform to docs" do
|
95
|
-
b = lambda {|x, y, z| (x||0) + (y||0) + (z||0) }
|
96
|
-
assert_equal 6, b.curry[1][2][3]
|
97
|
-
assert_raises(ArgumentError) { b.curry[1, 2][3, 4] }
|
98
|
-
assert_raises(ArgumentError) { b.curry(5) }
|
99
|
-
assert_raises(ArgumentError) { b.curry(1) }
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
context "arity < 0" do
|
104
|
-
should "conform to docs" do
|
105
|
-
b = lambda {|x, y, z, *w| (x||0) + (y||0) + (z||0) + w.inject(0, &:+) }
|
106
|
-
assert_equal 6, b.curry[1][2][3]
|
107
|
-
assert_equal 10, b.curry[1, 2][3, 4]
|
108
|
-
assert_equal 15, b.curry(5)[1][2][3][4][5]
|
109
|
-
assert_equal 15, b.curry(5)[1, 2][3, 4][5]
|
110
|
-
assert_raises(ArgumentError) { b.curry(1) }
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|