source: EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-enum-chain/test/enum_chain.rb@ 439

Last change on this file since 439 was 439, checked in by coas-nagasima, 4 years ago

mrubyを2.1.1に更新

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-ruby;charset=UTF-8
File size: 2.6 KB
Line 
1##
2# Enumerator::Chain test
3
4assert("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 }
13end
14
15assert("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 }
25end
26
27assert("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)
40end
41
42assert("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 }
60end
61
62assert("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
76end
77
78assert("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
97end
98
99assert("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
108end
Note: See TracBrowser for help on using the repository browser.