opal 0.3.27 → 0.3.28

Sign up to get free protection for your applications and to get access to all the features.
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