opal 0.3.27 → 0.3.28

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 (148) hide show
  1. data/.gitignore +2 -1
  2. data/CONTRIBUTING.md +24 -0
  3. data/README.md +6 -5
  4. data/Rakefile +12 -2
  5. data/core/array.rb +3 -31
  6. data/core/enumerable.rb +32 -4
  7. data/core/hash.rb +218 -186
  8. data/core/json.rb +3 -2
  9. data/core/kernel.rb +28 -28
  10. data/core/numeric.rb +2 -2
  11. data/core/runtime.js +0 -1
  12. data/lib/opal.rb +4 -2
  13. data/lib/opal/grammar.rb +6 -2
  14. data/lib/opal/grammar.y +3 -0
  15. data/lib/opal/lexer.rb +25 -10
  16. data/lib/opal/parser.rb +75 -34
  17. data/lib/opal/scope.rb +7 -7
  18. data/lib/opal/version.rb +1 -1
  19. data/opal.gemspec +1 -1
  20. data/spec/core/array/reduce_spec.rb +31 -0
  21. data/spec/{opal → core}/array/to_json_spec.rb +0 -0
  22. data/spec/core/boolean/and_spec.rb +17 -0
  23. data/spec/core/boolean/inspect_spec.rb +9 -0
  24. data/spec/core/boolean/or_spec.rb +17 -0
  25. data/spec/{opal → core}/boolean/singleton_class_spec.rb +0 -0
  26. data/spec/{opal → core}/boolean/to_json_spec.rb +1 -1
  27. data/spec/core/boolean/to_s_spec.rb +9 -0
  28. data/spec/core/boolean/xor_spec.rb +17 -0
  29. data/spec/{opal → core}/class/bridge_class_spec.rb +0 -0
  30. data/spec/{opal → core}/class/instance_methods_spec.rb +0 -0
  31. data/spec/core/class/last_value_spec.rb +68 -0
  32. data/spec/core/enumerable/detect_spec.rb +1 -1
  33. data/spec/core/enumerable/find_spec.rb +1 -1
  34. data/spec/{opal → core}/hash/to_json_spec.rb +0 -0
  35. data/spec/{opal → core}/hash/to_native_spec.rb +0 -0
  36. data/spec/{opal → core}/json/parse_spec.rb +0 -0
  37. data/spec/core/kernel/block_given.rb +30 -0
  38. data/spec/core/kernel/methods_spec.rb +11 -0
  39. data/spec/core/kernel/p_spec.rb +13 -0
  40. data/spec/{opal → core}/kernel/to_json_spec.rb +0 -0
  41. data/spec/{opal → core}/nil/to_json_spec.rb +0 -0
  42. data/spec/core/numeric/abs_spec.rb +12 -0
  43. data/spec/core/numeric/bit_and_spec.rb +7 -0
  44. data/spec/core/numeric/bit_or_spec.rb +8 -0
  45. data/spec/core/numeric/bit_xor_spec.rb +6 -0
  46. data/spec/core/numeric/ceil_spec.rb +8 -0
  47. data/spec/core/numeric/chr_spec.rb +8 -0
  48. data/spec/core/numeric/comparison_spec.rb +24 -0
  49. data/spec/core/numeric/complement_spec.rb +8 -0
  50. data/spec/core/numeric/divide_spec.rb +10 -0
  51. data/spec/core/numeric/downto_spec.rb +19 -0
  52. data/spec/core/numeric/eql_spec.rb +9 -0
  53. data/spec/core/numeric/even_spec.rb +21 -0
  54. data/spec/core/numeric/exponent_spec.rb +33 -0
  55. data/spec/core/numeric/floor_spec.rb +8 -0
  56. data/spec/core/numeric/gt_spec.rb +11 -0
  57. data/spec/core/numeric/gte_spec.rb +12 -0
  58. data/spec/core/numeric/integer_spec.rb +9 -0
  59. data/spec/core/numeric/left_shift_spec.rb +21 -0
  60. data/spec/core/numeric/lt_spec.rb +11 -0
  61. data/spec/core/numeric/lte_spec.rb +12 -0
  62. data/spec/core/numeric/magnitude_spec.rb +12 -0
  63. data/spec/core/numeric/minus_spec.rb +8 -0
  64. data/spec/core/numeric/modulo_spec.rb +19 -0
  65. data/spec/core/numeric/multiply_spec.rb +9 -0
  66. data/spec/core/numeric/next_spec.rb +9 -0
  67. data/spec/core/numeric/odd_spec.rb +21 -0
  68. data/spec/core/numeric/ord_spec.rb +9 -0
  69. data/spec/core/numeric/plus_spec.rb +8 -0
  70. data/spec/core/numeric/pred_spec.rb +7 -0
  71. data/spec/core/numeric/right_shift_spec.rb +25 -0
  72. data/spec/core/numeric/succ_spec.rb +9 -0
  73. data/spec/core/numeric/times_spec.rb +36 -0
  74. data/spec/core/numeric/to_f_spec.rb +7 -0
  75. data/spec/core/numeric/to_i_spec.rb +7 -0
  76. data/spec/{opal → core}/numeric/to_json_spec.rb +0 -0
  77. data/spec/core/numeric/to_s_spec.rb +8 -0
  78. data/spec/core/numeric/uminus_spec.rb +9 -0
  79. data/spec/core/numeric/upto_spec.rb +19 -0
  80. data/spec/core/numeric/zero_spec.rb +7 -0
  81. data/spec/{opal → core}/runtime/call_spec.rb +0 -0
  82. data/spec/{opal → core}/runtime/class_hierarchy_spec.rb +0 -0
  83. data/spec/{opal → core}/runtime/def_spec.rb +0 -0
  84. data/spec/{opal → core}/runtime/defined_spec.rb +0 -0
  85. data/spec/{opal → core}/runtime/super_spec.rb +0 -0
  86. data/spec/{opal → core}/string/demodulize_spec.rb +0 -0
  87. data/spec/{opal → core}/string/to_json_spec.rb +0 -0
  88. data/spec/{opal → core}/string/underscore_spec.rb +0 -0
  89. data/spec/{opal → core}/strscan/check_spec.rb +0 -0
  90. data/spec/{opal → core}/strscan/scan_spec.rb +0 -0
  91. data/spec/{lib/grammar → grammar}/alias_spec.rb +0 -0
  92. data/spec/{lib/grammar → grammar}/and_spec.rb +0 -0
  93. data/spec/{lib/grammar → grammar}/array_spec.rb +0 -0
  94. data/spec/{lib/grammar → grammar}/attrasgn_spec.rb +0 -0
  95. data/spec/{lib/grammar → grammar}/begin_spec.rb +0 -0
  96. data/spec/{lib/grammar → grammar}/block_spec.rb +0 -0
  97. data/spec/{lib/grammar → grammar}/break_spec.rb +0 -0
  98. data/spec/{lib/grammar → grammar}/call_spec.rb +23 -1
  99. data/spec/{lib/grammar → grammar}/class_spec.rb +0 -0
  100. data/spec/{lib/grammar → grammar}/const_spec.rb +0 -0
  101. data/spec/{lib/grammar → grammar}/cvar_spec.rb +0 -0
  102. data/spec/{lib/grammar → grammar}/def_spec.rb +0 -0
  103. data/spec/{lib/grammar → grammar}/false_spec.rb +0 -0
  104. data/spec/{lib/grammar → grammar}/file_spec.rb +0 -0
  105. data/spec/{lib/grammar → grammar}/gvar_spec.rb +0 -0
  106. data/spec/{lib/grammar → grammar}/hash_spec.rb +0 -0
  107. data/spec/{lib/grammar → grammar}/iasgn_spec.rb +0 -0
  108. data/spec/{lib/grammar → grammar}/if_spec.rb +0 -0
  109. data/spec/{lib/grammar → grammar}/iter_spec.rb +0 -0
  110. data/spec/{lib/grammar → grammar}/ivar_spec.rb +0 -0
  111. data/spec/{lib/grammar → grammar}/lambda_spec.rb +0 -0
  112. data/spec/{lib/grammar → grammar}/lasgn_spec.rb +0 -0
  113. data/spec/{lib/grammar → grammar}/line_spec.rb +0 -0
  114. data/spec/{lib/grammar → grammar}/lvar_spec.rb +0 -0
  115. data/spec/{lib/grammar → grammar}/masgn_spec.rb +0 -0
  116. data/spec/{lib/grammar → grammar}/module_spec.rb +0 -0
  117. data/spec/{lib/grammar → grammar}/nil_spec.rb +0 -0
  118. data/spec/{lib/grammar → grammar}/not_spec.rb +0 -0
  119. data/spec/{lib/grammar → grammar}/op_asgn1_spec.rb +0 -0
  120. data/spec/{lib/grammar → grammar}/op_asgn2_spec.rb +0 -0
  121. data/spec/{lib/grammar → grammar}/or_spec.rb +0 -0
  122. data/spec/{lib/grammar → grammar}/return_spec.rb +0 -0
  123. data/spec/{lib/grammar → grammar}/sclass_spec.rb +0 -0
  124. data/spec/{lib/grammar → grammar}/self_spec.rb +0 -0
  125. data/spec/{lib/grammar → grammar}/str_spec.rb +7 -0
  126. data/spec/{lib/grammar → grammar}/super_spec.rb +0 -0
  127. data/spec/{lib/grammar → grammar}/true_spec.rb +0 -0
  128. data/spec/{lib/grammar → grammar}/undef_spec.rb +0 -0
  129. data/spec/{lib/grammar → grammar}/unless_spec.rb +0 -0
  130. data/spec/{lib/grammar → grammar}/while_spec.rb +0 -0
  131. data/spec/{lib/grammar → grammar}/xstr_spec.rb +0 -0
  132. data/spec/{lib/grammar → grammar}/yield_spec.rb +0 -0
  133. data/spec/language/string_spec.rb +5 -0
  134. data/spec/{lib/parser → parser}/simple_spec.rb +0 -0
  135. metadata +231 -159
  136. data/spec/core/false/and_spec.rb +0 -9
  137. data/spec/core/false/inspect_spec.rb +0 -5
  138. data/spec/core/false/or_spec.rb +0 -9
  139. data/spec/core/false/to_s_spec.rb +0 -5
  140. data/spec/core/false/xor_spec.rb +0 -9
  141. data/spec/core/true/and_spec.rb +0 -9
  142. data/spec/core/true/inspect_spec.rb +0 -5
  143. data/spec/core/true/or_spec.rb +0 -9
  144. data/spec/core/true/to_s_spec.rb +0 -5
  145. data/spec/core/true/xor_spec.rb +0 -9
  146. data/spec/lib/erb_parser/simple.erb +0 -1
  147. data/spec/opal/kernel/attribute_spec.rb +0 -57
  148. data/spec/opal/runtime/method_missing_spec.rb +0 -17
@@ -0,0 +1,10 @@
1
+ describe "Numeric#/" do
2
+ it "returns self divided by the given argument" do
3
+ (2 / 2).should == 1
4
+ (3 / 2).should == 1.5
5
+ end
6
+
7
+ it "supports dividing negative numbers" do
8
+ (-1 / 10).should == -0.1
9
+ end
10
+ end
@@ -0,0 +1,19 @@
1
+ describe "Numeric#downto [stop] when self and stop are Fixnums" do
2
+ it "does not yield when stop is greater than self" do
3
+ result = []
4
+ 5.downto(6) { |x| result << x }
5
+ result.should == []
6
+ end
7
+
8
+ it "yields once when stop equals self" do
9
+ result = []
10
+ 5.downto(5) { |x| result << x }
11
+ result.should == [5]
12
+ end
13
+
14
+ it "yields while decreasing self until it is less than stop" do
15
+ result = []
16
+ 5.downto(2) { |x| result << x }
17
+ result.should == [5, 4, 3, 2]
18
+ end
19
+ end
@@ -0,0 +1,9 @@
1
+ describe "Numeric#eql?" do
2
+ it "returns true if self has the same value as other" do
3
+ (1.eql? 1).should == true
4
+ (9.eql? 5).should == false
5
+
6
+ (9.eql? 9.0).should == true
7
+ (9.eql? 9.01).should == false
8
+ end
9
+ end
@@ -0,0 +1,21 @@
1
+ describe "Numeric#even?" do
2
+ it "is true for zero" do
3
+ 0.even?.should be_true
4
+ end
5
+
6
+ it "is true for even positive Fixnums" do
7
+ 4.even?.should be_true
8
+ end
9
+
10
+ it "is true for even negative Fixnums" do
11
+ (-4).even?.should be_true
12
+ end
13
+
14
+ it "is false for odd positive Fixnums" do
15
+ 5.even?.should be_false
16
+ end
17
+
18
+ it "is false for odd negative Fixnums" do
19
+ (-5).even?.should be_false
20
+ end
21
+ end
@@ -0,0 +1,33 @@
1
+ describe "Numeric#**" do
2
+ it "returns self raised to the given power" do
3
+ (2 ** 0).should == 1
4
+ (2 ** 1).should == 2
5
+ (2 ** 2).should == 4
6
+
7
+ (2 ** 40).should == 1099511627776
8
+ end
9
+
10
+ it "overflows the answer to a bignum transparantly" do
11
+ (2 ** 29).should == 536870912
12
+ (2 ** 30).should == 1073741824
13
+ (2 ** 31).should == 2147483648
14
+ (2 ** 32).should == 4294967296
15
+
16
+ (2 ** 61).should == 2305843009213693952
17
+ (2 ** 62).should == 4611686018427387904
18
+ (2 ** 63).should == 9223372036854775808
19
+ (2 ** 64).should == 18446744073709551616
20
+ end
21
+
22
+ it "raises negative numbers to the given power" do
23
+ ((-2) ** 29).should == -536870912
24
+ ((-2) ** 30).should == 1073741824
25
+ ((-2) ** 31).should == -2147483648
26
+ ((-2) ** 32).should == 4294967296
27
+
28
+ ((-2) ** 61).should == -2305843009213693952
29
+ ((-2) ** 62).should == 4611686018427387904
30
+ ((-2) ** 63).should == -9223372036854775808
31
+ ((-2) ** 64).should == 18446744073709551616
32
+ end
33
+ end
@@ -0,0 +1,8 @@
1
+ describe "Numeric#floor" do
2
+ it "returns the floor'ed value" do
3
+ 1.floor.should == 1
4
+ (-42).floor.should == -42
5
+ 3.142.floor.should == 3
6
+ 0.floor.should == 0
7
+ end
8
+ end
@@ -0,0 +1,11 @@
1
+ describe "Numeric#>" do
2
+ it "returns true if self is greater than the given argument" do
3
+ (13 > 2).should == true
4
+ (-500 > -600).should == true
5
+
6
+ (1 > 5).should == false
7
+ (5 > 5).should == false
8
+
9
+ (5 > 4.999).should == true
10
+ end
11
+ end
@@ -0,0 +1,12 @@
1
+ describe "Numeric#>=" do
2
+ it "returns true if self is greater than or equal to the given argument" do
3
+ (13 >= 2).should == true
4
+ (-500 >= -600).should == true
5
+
6
+ (1 >= 5).should == false
7
+ (2 >= 2).should == true
8
+ (5 >= 5).should == true
9
+
10
+ (5 >= 4.999).should == true
11
+ end
12
+ end
@@ -0,0 +1,9 @@
1
+ describe "Numeric#integer?" do
2
+ it "returns true if number is integer, false otherwise" do
3
+ 0.integer?.should == true
4
+ (-1).integer?.should == true
5
+ 1.integer?.should == true
6
+
7
+ 3.142.integer?.should == false
8
+ end
9
+ end
@@ -0,0 +1,21 @@
1
+ describe "Numeric#<< with n << m" do
2
+ it "returns n shifted left m bits when n > 0, m > 0" do
3
+ (1 << 1).should == 2
4
+ end
5
+
6
+ it "returns n shifted left m bits when n < 0, m > 0" do
7
+ (-1 << 1).should == -2
8
+ end
9
+
10
+ it "returns 0 when n == 0" do
11
+ (0 << 1).should == 0
12
+ end
13
+
14
+ it "returns n when n > 0, m == 0" do
15
+ (1 << 0).should == 1
16
+ end
17
+
18
+ it "returns n when n < 0, m == 0" do
19
+ (-1 << 0).should == -1
20
+ end
21
+ end
@@ -0,0 +1,11 @@
1
+ describe "Numeric#<" do
2
+ it "returns true if self is less than the given argument" do
3
+ (2 < 13).should == true
4
+ (-600 < -500).should == true
5
+
6
+ (5 < 1).should == false
7
+ (5 < 5).should == false
8
+
9
+ (5 < 4.999).should == false
10
+ end
11
+ end
@@ -0,0 +1,12 @@
1
+ describe "Numeric#<=" do
2
+ it "returns true if self is less than or equal to other" do
3
+ (2 <= 13).should == true
4
+ (-600 <= -500).should == true
5
+
6
+ (5 <= 1).should == false
7
+ (5 <= 5).should == true
8
+ (-2 <= -2).should == true
9
+
10
+ (5 <= 4.999).should == false
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ describe "Numeric#magnitude" do
2
+ it "returns self's absolute value" do
3
+ (-100).magnitude.should == 100
4
+ (100).magnitude.should == 100
5
+
6
+ (-0).magnitude.should == 0
7
+ (0).magnitude.should == 0
8
+
9
+ (-42).magnitude.should == 42
10
+ (42).magnitude.should == 42
11
+ end
12
+ end
@@ -0,0 +1,8 @@
1
+ describe "Numeric#-" do
2
+ it "returns self minus the given Integer" do
3
+ (5 - 10).should == -5
4
+ (9237212 - 5_280).should == 9231932
5
+
6
+ (781 - 0.5).should == 780.5
7
+ end
8
+ end
@@ -0,0 +1,19 @@
1
+ describe "Numeric#modulo" do
2
+ it "returns the modulus obtained from dividing self by the given argument" do
3
+ 13.modulo(4).should == 1
4
+ 4.modulo(13).should == 4
5
+
6
+ 13.modulo(4.0).should == 1
7
+ 4.modulo(13.0).should == 4
8
+ end
9
+ end
10
+
11
+ describe "Numeric#%" do
12
+ it "returns the modulus obtained from dividing self by the given argument" do
13
+ (13 % 4).should == 1
14
+ (4 % 13).should == 4
15
+
16
+ (13 % 4.0).should == 1
17
+ (4 % 13.0).should == 4
18
+ end
19
+ end
@@ -0,0 +1,9 @@
1
+ describe "Numeric#*" do
2
+ it "returns self multiplied by the given Integer" do
3
+ (4923 * 2).should == 9846
4
+ (1342177 * 800).should == 1073741600
5
+ (65536 * 65536).should == 4294967296
6
+
7
+ (6712 * 0.25).should == 1678.0
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ describe "Numeric#next" do
2
+ it "returns the next larger positive Fixnum" do
3
+ 2.next.should == 3
4
+ end
5
+
6
+ it "returns the next larger negative Fixnum" do
7
+ (-2).next.should == -1
8
+ end
9
+ end
@@ -0,0 +1,21 @@
1
+ describe "Numeric#odd?" do
2
+ it "is false for zero" do
3
+ 0.odd?.should be_false
4
+ end
5
+
6
+ it "is false for even positive Fixnums" do
7
+ 4.odd?.should be_false
8
+ end
9
+
10
+ it "is false for even negative Fixnums" do
11
+ (-4).odd?.should be_false
12
+ end
13
+
14
+ it "is true for odd positive Fixnums" do
15
+ 5.odd?.should be_true
16
+ end
17
+
18
+ it "is true for odd negative Fixnums" do
19
+ (-5).odd?.should be_true
20
+ end
21
+ end
@@ -0,0 +1,9 @@
1
+ describe "Numeric#ord" do
2
+ it "returns self" do
3
+ 20.ord.should == 20
4
+ 40.ord.should == 40
5
+
6
+ 0.ord.should == 0
7
+ (-10).ord.should == -10
8
+ end
9
+ end
@@ -0,0 +1,8 @@
1
+ describe "Numeric#+" do
2
+ it "returns self plus the given Integer" do
3
+ (491 + 2).should == 493
4
+ (90210 + 10).should == 90220
5
+
6
+ (1001 + 5.219).should == 1006.219
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+ describe "Numeric#pred" do
2
+ it "returns the Integer equal to self - 1" do
3
+ 0.pred.should == -1
4
+ (-1).pred.should == -2
5
+ 20.pred.should == 19
6
+ end
7
+ end
@@ -0,0 +1,25 @@
1
+ describe "Numeric#>> with n >> m" do
2
+ it "returns n shifted right m bits when n > 0, m > 0" do
3
+ (2 >> 1).should == 1
4
+ end
5
+
6
+ it "returns n shifted right m bits when n < 0, m > 0" do
7
+ (-2 >> 1).should == -1
8
+ end
9
+
10
+ it "returns 0 when n == 0" do
11
+ (0 >> 1).should == 0
12
+ end
13
+
14
+ it "returns n when n > 0, m == 0" do
15
+ (1 >> 0).should == 1
16
+ end
17
+
18
+ it "returns n when n < 0, m == 0" do
19
+ (-1 >> 0).should == -1
20
+ end
21
+
22
+ it "returns 0 when m > 0 and m == p where 2**p > n >= 2**(p-1)" do
23
+ (4 >> 3).should == 0
24
+ end
25
+ end
@@ -0,0 +1,9 @@
1
+ describe "Numeric#succ" do
2
+ it "returns the next larger positive Fixnum" do
3
+ 2.succ.should == 3
4
+ end
5
+
6
+ it "returns the next larger negative Fixnum" do
7
+ (-2).succ.should == -1
8
+ end
9
+ end
@@ -0,0 +1,36 @@
1
+ describe "Numeric#times" do
2
+ it "returns self" do
3
+ 5.times {}.should == 5
4
+ 9.times {}.should == 9
5
+ 9.times { |n| n - 2 }.should == 9
6
+ end
7
+
8
+ it "yields each value from 0 to self - 1" do
9
+ a = []
10
+ 9.times { |i| a << i }
11
+ (-2).times { |i| a << i }
12
+ a.should == [0, 1, 2, 3, 4, 5, 6, 7, 8]
13
+ end
14
+
15
+ it "skips the current iteration when encountering 'next'" do
16
+ a = []
17
+ 3.times do |i|
18
+ next if i == 1
19
+ a << i
20
+ end
21
+ a.should == [0, 2]
22
+ end
23
+
24
+ it "skips all iterations when encountering 'break'" do
25
+ a = []
26
+ 5.times do |i|
27
+ break if i == 3
28
+ a << i
29
+ end
30
+ a.should == [0, 1, 2]
31
+ end
32
+
33
+ it "skips all iterations when encountering break with an argument and returns that argument" do
34
+ 9.times { break 2 }.should == 2
35
+ end
36
+ end
@@ -0,0 +1,7 @@
1
+ describe "Numeric#to_f" do
2
+ it "returns self converted to a Float" do
3
+ 0.to_f.should == 0.0
4
+ (-500).to_f.should == -500.0
5
+ 9_641_278.to_f.should == 9641278.0
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ describe "Numeric#to_i" do
2
+ it "returns self as an integer" do
3
+ 10.to_i.should == 10
4
+ (-15).to_i.should == -15
5
+ 3.142.to_i.should == 3
6
+ end
7
+ end
File without changes
@@ -0,0 +1,8 @@
1
+ describe "Numeric#to_s when no base given" do
2
+ it "returns self converted to a String using base 10" do
3
+ 255.to_s.should == '255'
4
+ 3.to_s.should == '3'
5
+ 0.to_s.should == '0'
6
+ (-9002).to_s.should == '-9002'
7
+ end
8
+ end
@@ -0,0 +1,9 @@
1
+ describe "Numeric#-@" do
2
+ it "returns self as a negative value" do
3
+ 2.send(:-@).should == -2
4
+ (-2).should == -2
5
+ (-268435455).should == -268435455
6
+ (--5).should == 5
7
+ (-8).send(:-@).should == 8
8
+ end
9
+ end
@@ -0,0 +1,19 @@
1
+ describe "Numeric#upto [stop] when self and stop are Fixnums" do
2
+ it "does not yield when stop is less than self" do
3
+ result = []
4
+ 5.upto(4) { |x| result << x }
5
+ result.should == []
6
+ end
7
+
8
+ it "yields once when stop equals self" do
9
+ result = []
10
+ 5.upto(5) { |x| result << x }
11
+ result.should == [5]
12
+ end
13
+
14
+ it "yields while increasing self until it is less than stop" do
15
+ result = []
16
+ 2.upto(5) { |x| result << x }
17
+ result.should == [2, 3, 4, 5]
18
+ end
19
+ end