source: EcnlProtoTool/trunk/mruby-1.3.0/mrbgems/mruby-struct/test/struct.rb@ 331

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

prototoolに関連するプロジェクトをnewlibからmuslを使うよう変更・更新
ntshellをnewlibの下位の実装から、muslのsyscallの実装に変更・更新
以下のOSSをアップデート
・mruby-1.3.0
・musl-1.1.18
・onigmo-6.1.3
・tcc-0.9.27
以下のOSSを追加
・openssl-1.1.0e
・curl-7.57.0
・zlib-1.2.11
以下のmrbgemsを追加
・iij/mruby-digest
・iij/mruby-env
・iij/mruby-errno
・iij/mruby-iijson
・iij/mruby-ipaddr
・iij/mruby-mock
・iij/mruby-require
・iij/mruby-tls-openssl

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-ruby;charset=UTF-8
File size: 4.8 KB
Line 
1##
2# Struct ISO Test
3
4assert('Struct', '15.2.18') do
5 assert_equal Class, Struct.class
6end
7
8assert('Struct.new', '15.2.18.3.1') do
9 c = Struct.new(:m1, :m2)
10 assert_equal Struct, c.superclass
11 assert_equal [:m1, :m2], c.members
12end
13
14# Check crash bug with Struc.new and no params.
15assert('Struct.new', '15.2.18.3.1') do
16 c = Struct.new()
17 assert_equal Struct, c.superclass
18 assert_equal [], c.members
19end
20
21assert('Struct#==', '15.2.18.4.1') do
22 c = Struct.new(:m1, :m2)
23 cc1 = c.new(1,2)
24 cc2 = c.new(1,2)
25 assert_true cc1 == cc2
26
27 Struct.new(:m1, :m2) { def foo; end }
28 assert_raise(NoMethodError) { Struct.new(:m1).new.foo }
29end
30
31assert('Struct#[]', '15.2.18.4.2') do
32 c = Struct.new(:m1, :m2)
33 cc = c.new(1,2)
34 assert_equal 1, cc[:m1]
35 assert_equal 2, cc["m2"]
36 assert_equal 1, cc[0]
37 assert_equal 2, cc[-1]
38 assert_raise(TypeError) { cc[[]] }
39 assert_raise(IndexError) { cc[2] }
40 assert_raise(NameError) { cc['tama'] }
41end
42
43assert('Struct#[]=', '15.2.18.4.3') do
44 c = Struct.new(:m1, :m2)
45 cc = c.new(1,2)
46 cc[:m1] = 3
47 assert_equal 3, cc[:m1]
48 cc["m2"] = 3
49 assert_equal 3, cc["m2"]
50 cc[0] = 4
51 assert_equal 4, cc[0]
52 cc[-1] = 5
53 assert_equal 5, cc[-1]
54 assert_raise(TypeError) { cc[[]] = 3 }
55 assert_raise(IndexError) { cc[2] = 7 }
56 assert_raise(NameError) { cc['pochi'] = 8 }
57end
58
59assert('Struct#each', '15.2.18.4.4') do
60 c = Struct.new(:m1, :m2)
61 cc = c.new(1,2)
62 a = []
63 cc.each{|x|
64 a << x
65 }
66 assert_equal [1, 2], a
67end
68
69assert('Struct#each_pair', '15.2.18.4.5') do
70 c = Struct.new(:m1, :m2)
71 cc = c.new(1,2)
72 a = []
73 cc.each_pair{|k,v|
74 a << [k,v]
75 }
76 assert_equal [[:m1, 1], [:m2, 2]], a
77end
78
79assert('Struct#members', '15.2.18.4.6') do
80 c = Struct.new(:m1, :m2)
81 assert_equal [:m1, :m2], c.new(1,2).members
82end
83
84assert('Struct#select', '15.2.18.4.7') do
85 c = Struct.new(:m1, :m2)
86 assert_equal([2]) { c.new(1,2).select{|v| v % 2 == 0} }
87end
88
89assert('large struct') do
90 c = Struct.new(:m1, :m2, :m3, :m4, :m5, :m6, :m7, :m8, :m9, :m10, :m11, :m12, :m13)
91 cc = c.new(1,2,3,4,5,6,7,8,9,10,11,12,13)
92 assert_equal 1, cc.m1
93 assert_equal 2, cc.m2
94 assert_equal 3, cc.m3
95 assert_equal 4, cc.m4
96 assert_equal 5, cc.m5
97 assert_equal 6, cc.m6
98 assert_equal 7, cc.m7
99 assert_equal 8, cc.m8
100 assert_equal 9, cc.m9
101 assert_equal 10, cc.m10
102 assert_equal 13, cc.m13
103
104 cc.m13 = 'test'
105 assert_equal 'test', cc.m13
106
107 assert_raise(NoMethodError) { cc.m14 }
108end
109
110assert('wrong struct arg count') do
111 c = Struct.new(:m1)
112 assert_raise ArgumentError do
113 cc = c.new(1,2,3)
114 end
115end
116
117assert('struct dup') do
118 c = Struct.new(:m1, :m2, :m3, :m4, :m5)
119 cc = c.new(1,2,3,4,5)
120 assert_nothing_raised {
121 assert_equal(cc, cc.dup)
122 }
123end
124
125assert('struct inspect') do
126 c = Struct.new(:m1, :m2, :m3, :m4, :m5)
127 cc = c.new(1,2,3,4,5)
128 assert_equal "#<struct m1=1, m2=2, m3=3, m4=4, m5=5>", cc.inspect
129end
130
131assert('Struct#length, Struct#size') do
132 s = Struct.new(:f1, :f2).new(0, 1)
133 assert_equal 2, s.size
134 assert_equal 2, s.length
135end
136
137assert('Struct#to_a, Struct#values') do
138 s = Struct.new(:mem1, :mem2).new('a', 'b')
139 assert_equal ['a', 'b'], s.to_a
140 assert_equal ['a', 'b'], s.values
141end
142
143assert('Struct#to_h') do
144 s = Struct.new(:white, :red, :green).new('ruuko', 'yuzuki', 'hitoe')
145 assert_equal(:white => 'ruuko', :red => 'yuzuki', :green => 'hitoe') { s.to_h }
146end
147
148assert('Struct#values_at') do
149 a = Struct.new(:blue, :purple).new('aki', 'io')
150 assert_equal ['aki'], a.values_at(0)
151 assert_equal ['io', 'aki'], a.values_at(1, 0)
152 assert_raise(IndexError) { a.values_at 2 }
153end
154
155assert("Struct#dig") do
156 a = Struct.new(:blue, :purple).new('aki', Struct.new(:red).new(1))
157 assert_equal 'aki', a.dig(:blue)
158 assert_equal 1, a.dig(:purple, :red)
159 assert_equal 1, a.dig(1, 0)
160end
161
162assert("Struct.new removes existing constant") do
163 skip "redefining Struct with same name cause warnings"
164 begin
165 assert_not_equal Struct.new("Test", :a), Struct.new("Test", :a, :b)
166 ensure
167 Struct.remove_const :Test
168 end
169end
170
171assert("Struct#initialize_copy requires struct to be the same type") do
172 begin
173 Struct.new("Test", :a)
174 a = Struct::Test.new("a")
175 Struct.remove_const :Test
176 Struct.new("Test", :a, :b)
177 assert_raise(TypeError) do
178 a.initialize_copy(Struct::Test.new("a", "b"))
179 end
180 ensure
181 Struct.remove_const :Test
182 end
183end
184
185assert("Struct.new does not allow array") do
186 assert_raise(TypeError) do
187 Struct.new("Test", [:a])
188 end
189end
190
191assert("Struct.new generates subclass of Struct") do
192 begin
193 original_struct = Struct
194 Struct = String
195 assert_equal original_struct, original_struct.new.superclass
196 ensure
197 Struct = original_struct
198 end
199end
200
201assert 'Struct#freeze' do
202 c = Struct.new :m
203
204 o = c.new
205 o.m = :test
206 assert_equal :test, o.m
207
208 o.freeze
209 assert_raise(RuntimeError) { o.m = :modify }
210 assert_raise(RuntimeError) { o[:m] = :modify }
211 assert_equal :test, o.m
212end
Note: See TracBrowser for help on using the repository browser.