test/backports_test.rb in backports-1.1.1 vs test/backports_test.rb in backports-1.2.0
- old
+ new
@@ -1,97 +1,159 @@
require 'test_helper'
class BackportsTest < Test::Unit::TestCase
- context "find_index" do
- should "conform to doc" do
- assert_equal 3, %w{ant bat cat dog}.find_index {|item| item =~ /g/ }
- assert_equal nil, %w{ant bat cat dog}.find_index {|item| item =~ /h/ }
+ context "Enumerable" do
+ context "#find_index" do
+ should "conform to doc" do
+ assert_equal 3, %w{ant bat cat dog}.find_index {|item| item =~ /g/ }
+ assert_equal nil, %w{ant bat cat dog}.find_index {|item| item =~ /h/ }
+ end
+
+ should "#work for enumerables too" do
+ assert_equal 69-42, (42..666).find_index(69)
+ end
end
- should "work for enumerables too" do
- assert_equal 69-42, (42..666).find_index(69)
+ context "#take" do
+ should "conform to doc" do
+ assert_equal [1, 2, 3], (1..7).take(3)
+ assert_equal [["a", 1], ["b", 2]], { 'a'=>1, 'b'=>2, 'c'=>3 }.take(2)
+ end
+
+ should "only consume what's needed" do
+ assert_equal [], Enumerator.new(nil).take(0)
+ assert_raises(NoMethodError) { Enumerator.new(nil).take(1) }
+ end
end
- end
+
+ context "#take_while" do
+ should "conform to doc" do
+ assert_equal [1,2], (1..7).take_while {|item| item < 3 }
+ assert_equal [2,4,6], [ 2, 4, 6, 9, 11, 16 ].take_while(&:even?)
+ end
- context "take" do
- should "conform to doc" do
- assert_equal [1, 2, 3], (1..7).take(3)
- assert_equal [["a", 1], ["b", 2]], { 'a'=>1, 'b'=>2, 'c'=>3 }.take(2)
+ should "work with infinite enumerables" do
+ assert_equal [1,2], (1..(1/0.0)).take_while {|item| item < 3 }
+ end
end
+
+ context "#drop" do
+ should "conform to doc" do
+ assert_equal [5, 8, 13], [ 1, 1, 2, 3, 5, 8, 13 ].drop(4)
+ assert_equal [], [ 1, 1, 2, 3, 5, 8, 13 ].drop(99)
+ end
- should "only consume what's needed" do
- assert_equal [], Enumerator.new(nil).take(0)
- assert_raises(NoMethodError) { Enumerator.new(nil).take(1) }
+ should "work with enums" do
+ assert_equal [14,15], (10...16).drop(4)
+ end
end
- end
- context "take_while" do
- should "conform to doc" do
- assert_equal [1,2], (1..7).take_while {|item| item < 3 }
- assert_equal [2,4,6], [ 2, 4, 6, 9, 11, 16 ].take_while(&:even?)
+ context "#drop_while" do
+ should "conform to doc" do
+ assert_equal [8, 13], [ 1, 1, 2, 3, 5, 8, 13 ].drop_while {|item| item < 6 }
+ end
+
+ should "work with enums" do
+ assert_equal [14,15], (10...16).drop_while {|item| item < 14}
+ end
+
+ should "work with extemity cases" do
+ assert_equal [10,11,12,13,14,15], (10...16).drop_while {|item| false}
+ assert_equal [], (10...16).drop_while {|item| true}
+ end
end
+
+ context "#reverse_each" do
+ should "work as expected" do
+ assert_equal [4,3,2], (1..4).reverse_each.take(3)
+ end
+ end
+
+ context "#each_slice" do
+ should "conform to doc" do
+ res = []
+ (1..10).each_slice(4){|ar| res << ar}
+ assert_equal [[1, 2, 3, 4],[5, 6, 7, 8],[9, 10]], res
+ assert_equal [[1, 2, 3, 4],[5, 6, 7, 8],[9, 10]], (1..10).each_slice(4).to_a
+ end
+ end
+
+ context "#count" do
+ should "conform to doc" do
+ assert_equal 4, (1..4).count
+ assert_equal 1, (1..4).count(3)
+ assert_equal 2, (1..4).count{|obj| obj > 2 }
+ end
+ end
- should "work with infinite enumerables" do
- assert_equal [1,2], (1..(1/0.0)).take_while {|item| item < 3 }
+ context "#cycle" do
+ should "conform to doc" do
+ assert_equal ["a", "b", "c", "a", "b", "c"], ('a'..'c').cycle(2).to_a
+ end
end
- end
-
- context "drop" do
- should "conform to doc" do
- assert_equal [5, 8, 13], [ 1, 1, 2, 3, 5, 8, 13 ].drop(4)
- assert_equal [], [ 1, 1, 2, 3, 5, 8, 13 ].drop(99)
+
+ context "#each_cons" do
+ should "conform to doc" do
+ assert_equal [[1,2],[2,3],[3,4]], (1..4).each_cons(2).to_a
+ end
end
- should "work with enums" do
- assert_equal [14,15], (10...16).drop(4)
+ context "#group_by" do
+ should "conform to doc" do
+ x = (1..5).group_by{|item| item.even? ? :even : :odd }
+ assert_equal({:even => [2,4], :odd => [1,3,5]}, x)
+ assert_equal nil, x[:xyz]
+ end
end
- end
+ end #Enumerable
- context "drop_while" do
- should "conform to doc" do
- assert_equal [8, 13], [ 1, 1, 2, 3, 5, 8, 13 ].drop_while {|item| item < 6 }
+ context "Array" do
+ context "#reverse_each" do
+ should "return an enumerator when no block is given" do
+ assert_equal [4,3,2], [1,2,3,4].reverse_each.take(3)
+ end
end
- should "work with enums" do
- assert_equal [14,15], (10...16).drop_while {|item| item < 14}
+ context "#flatten" do
+ should "conform to doc" do
+ s = [ 1, 2, 3 ] #=> [1, 2, 3]
+ t = [ 4, 5, 6, [7, 8] ] #=> [4, 5, 6, [7, 8]]
+ a = [ s, t, 9, 10 ] #=> [[1, 2, 3], [4, 5, 6, [7, 8]], 9, 10]
+ assert_equal [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], a.flatten
+ a = [ 1, 2, [3, [4, 5] ] ]
+ assert_equal [1, 2, 3, [4, 5]], a.flatten(1)
+ end
end
- should "work with extemity cases" do
- assert_equal [10,11,12,13,14,15], (10...16).drop_while {|item| false}
- assert_equal [], (10...16).drop_while {|item| true}
+ context "#index" do
+ should "conform to doc" do
+ a = [ "a", "b", "c" ]
+ assert_equal 1, a.index("b")
+ assert_equal nil, a.index("z")
+ assert_equal 1, a.index{|x|x=="b"}
+ end
end
end
context "Hash" do
should "should be constructible from key value pairs" do
assert_equal({1 => 2, 3 => 4}, Hash[[[1,2],[3,4]]])
end
- end
-
- context "flatten" do
- should "conform to doc" do
- s = [ 1, 2, 3 ] #=> [1, 2, 3]
- t = [ 4, 5, 6, [7, 8] ] #=> [4, 5, 6, [7, 8]]
- a = [ s, t, 9, 10 ] #=> [[1, 2, 3], [4, 5, 6, [7, 8]], 9, 10]
- assert_equal [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], a.flatten
- a = [ 1, 2, [3, [4, 5] ] ]
- assert_equal [1, 2, 3, [4, 5]], a.flatten(1)
+
+ context "#default_proc=" do
+ should "conform to doc" do
+ h = { :foo => :bar }
+ h.default = "Go fish"
+ h.default_proc=lambda do |hash, key|
+ key + key
+ end
+ assert_equal :bar, h[:foo]
+ assert_equal 4, h[2]
+ assert_equal "catcat", h["cat"]
+ h.default=nil
+ assert_equal nil, h[2]
+ assert_equal nil, h["cat"]
+ end
end
-
- should "conform work for recursive arrays" do
- x=[]
- x.push(x,x)
- 4.times {|n| assert_equal 2 << n, x.flatten(n).length}
- assert_raises(ArgumentError) {x.flatten}
- end
- end
-
- context "index" do
- should "conform to doc" do
- a = [ "a", "b", "c" ]
- assert_equal 1, a.index("b")
- assert_equal nil, a.index("z")
- assert_equal 1, a.index{|x|x=="b"}
- end
end
-
+
end