[439] | 1 | ##
|
---|
| 2 | # Enumerator::Chain test
|
---|
| 3 |
|
---|
| 4 | assert("Enumerable#chain") do
|
---|
| 5 | a = []
|
---|
| 6 | b = {}
|
---|
| 7 | c = Object.new # not has #each method
|
---|
| 8 |
|
---|
| 9 | assert_kind_of Enumerator::Chain, a.chain
|
---|
| 10 | assert_kind_of Enumerator::Chain, a.chain(b)
|
---|
| 11 | assert_kind_of Enumerator::Chain, a.chain(b, c)
|
---|
| 12 | assert_raise(NoMethodError) { c.chain }
|
---|
| 13 | end
|
---|
| 14 |
|
---|
| 15 | assert("Enumerator#+") do
|
---|
| 16 | a = [].each
|
---|
| 17 | b = {}.each
|
---|
| 18 | c = Object.new # not has #each method
|
---|
| 19 |
|
---|
| 20 | assert_kind_of Enumerator::Chain, a + b
|
---|
| 21 | assert_kind_of Enumerator::Chain, a + c
|
---|
| 22 | assert_kind_of Enumerator::Chain, b + a
|
---|
| 23 | assert_kind_of Enumerator::Chain, b + c
|
---|
| 24 | assert_raise(NoMethodError) { c + a }
|
---|
| 25 | end
|
---|
| 26 |
|
---|
| 27 | assert("Enumerator::Chain.new") do
|
---|
| 28 | a = []
|
---|
| 29 | b = {}
|
---|
| 30 | c = Object.new # not has #each method
|
---|
| 31 |
|
---|
| 32 | assert_kind_of Enumerator::Chain, Enumerator::Chain.new
|
---|
| 33 | assert_kind_of Enumerator::Chain, Enumerator::Chain.new(a, a)
|
---|
| 34 | assert_kind_of Enumerator::Chain, Enumerator::Chain.new(a, b)
|
---|
| 35 | assert_kind_of Enumerator::Chain, Enumerator::Chain.new(a, c)
|
---|
| 36 | assert_kind_of Enumerator::Chain, Enumerator::Chain.new(b, a)
|
---|
| 37 | assert_kind_of Enumerator::Chain, Enumerator::Chain.new(b, b)
|
---|
| 38 | assert_kind_of Enumerator::Chain, Enumerator::Chain.new(b, c)
|
---|
| 39 | assert_kind_of Enumerator::Chain, Enumerator::Chain.new(c, a)
|
---|
| 40 | end
|
---|
| 41 |
|
---|
| 42 | assert("Enumerator::Chain#each") do
|
---|
| 43 | a = [1, 2, 3]
|
---|
| 44 |
|
---|
| 45 | aa = a.chain(a)
|
---|
| 46 | assert_kind_of Enumerator, aa.each
|
---|
| 47 | assert_equal [1, 2, 3, 1, 2, 3], aa.each.to_a
|
---|
| 48 |
|
---|
| 49 | aa = a.chain(6..9)
|
---|
| 50 | assert_kind_of Enumerator, aa.each
|
---|
| 51 | assert_equal [1, 2, 3, 6, 7, 8, 9], aa.each.to_a
|
---|
| 52 |
|
---|
| 53 | aa = a.chain((-3..-2).each_with_index, a)
|
---|
| 54 | assert_kind_of Enumerator, aa.each
|
---|
| 55 | assert_equal [1, 2, 3, [-3, 0], [-2, 1], 1, 2, 3], aa.each.to_a
|
---|
| 56 |
|
---|
| 57 | aa = a.chain(Object.new)
|
---|
| 58 | assert_kind_of Enumerator, aa.each
|
---|
| 59 | assert_raise(NoMethodError) { aa.each.to_a }
|
---|
| 60 | end
|
---|
| 61 |
|
---|
| 62 | assert("Enumerator::Chain#size") do
|
---|
| 63 | a = [1, 2, 3]
|
---|
| 64 |
|
---|
| 65 | aa = a.chain(a)
|
---|
| 66 | assert_equal 6, aa.size
|
---|
| 67 |
|
---|
| 68 | aa = a.chain(3..4)
|
---|
| 69 | assert_nil aa.size
|
---|
| 70 |
|
---|
| 71 | aa = a.chain(3..4, a)
|
---|
| 72 | assert_nil aa.size
|
---|
| 73 |
|
---|
| 74 | aa = a.chain(Object.new)
|
---|
| 75 | assert_nil aa.size
|
---|
| 76 | end
|
---|
| 77 |
|
---|
| 78 | assert("Enumerator::Chain#rewind") do
|
---|
| 79 | rewound = nil
|
---|
| 80 | e1 = [1, 2]
|
---|
| 81 | e2 = (4..6)
|
---|
| 82 | (class << e1; self end).define_method(:rewind) { rewound << self }
|
---|
| 83 | (class << e2; self end).define_method(:rewind) { rewound << self }
|
---|
| 84 | c = e1.chain(e2)
|
---|
| 85 |
|
---|
| 86 | rewound = []
|
---|
| 87 | c.rewind
|
---|
| 88 | assert_equal [], rewound
|
---|
| 89 |
|
---|
| 90 | rewound = []
|
---|
| 91 | c.each{break c}.rewind
|
---|
| 92 | assert_equal [e1], rewound
|
---|
| 93 |
|
---|
| 94 | rewound = []
|
---|
| 95 | c.each{}.rewind
|
---|
| 96 | assert_equal [e2, e1], rewound
|
---|
| 97 | end
|
---|
| 98 |
|
---|
| 99 | assert("Enumerator::Chain#+") do
|
---|
| 100 | a = [].chain
|
---|
| 101 | b = {}.chain
|
---|
| 102 | c = Object.new # not has #each method
|
---|
| 103 |
|
---|
| 104 | assert_kind_of Enumerator::Chain, a + b
|
---|
| 105 | assert_kind_of Enumerator::Chain, a + c
|
---|
| 106 | assert_kind_of Enumerator::Chain, b + a
|
---|
| 107 | assert_kind_of Enumerator::Chain, b + c
|
---|
| 108 | end
|
---|