diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2012-06-21 00:11:35 -0700 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2012-06-21 00:11:35 -0700 |
| commit | d105ea496f686b6ef3071e127864fab4677befac (patch) | |
| tree | 792c7429c9ab5f93171ebe7f5f852d3157fdccd7 | |
| parent | 0f2b69642d589aa5a55de7b4807d9b3072e4cc52 (diff) | |
| parent | 4780b653a47c1bacd2412130d77cbe5b3f0b30d3 (diff) | |
| download | mruby-d105ea496f686b6ef3071e127864fab4677befac.tar.gz mruby-d105ea496f686b6ef3071e127864fab4677befac.zip | |
Merge pull request #305 from bovi/optional-feature
Tests are executed based on available features
| -rw-r--r-- | mrblib/struct.rb | 78 | ||||
| -rw-r--r-- | test/t/math.rb | 178 | ||||
| -rw-r--r-- | test/t/struct.rb | 101 | ||||
| -rw-r--r-- | test/t/time.rb | 278 |
4 files changed, 323 insertions, 312 deletions
diff --git a/mrblib/struct.rb b/mrblib/struct.rb index 4b6d767a9..5d0ede90f 100644 --- a/mrblib/struct.rb +++ b/mrblib/struct.rb @@ -2,45 +2,49 @@ # Struct # # ISO 15.2.18 -class Struct - ## - # Calls the given block for each element of +self+ - # and pass the respective element. - # - # ISO 15.2.18.4.4 - def each(&block) - self.class.members.each{|field| - block.call(self[field]) - } - self - end +if Object.const_defined?(:Struct) + class Struct - ## - # Calls the given block for each element of +self+ - # and pass the name and value of the respectiev - # element. - # - # ISO 15.2.18.4.5 - def each_pair(&block) - self.class.members.each{|field| - block.call(field.to_sym, self[field]) - } - self - end + ## + # Calls the given block for each element of +self+ + # and pass the respective element. + # + # ISO 15.2.18.4.4 + def each(&block) + self.class.members.each{|field| + block.call(self[field]) + } + self + end - ## - # Calls the given block for each element of +self+ - # and returns an array with all elements of which - # block is not false. - # - # ISO 15.2.18.4.7 - def select(&block) - ary = [] - self.class.members.each{|field| - val = self[field] - ary.push(val) if block.call(val) - } - ary + ## + # Calls the given block for each element of +self+ + # and pass the name and value of the respectiev + # element. + # + # ISO 15.2.18.4.5 + def each_pair(&block) + self.class.members.each{|field| + block.call(field.to_sym, self[field]) + } + self + end + + ## + # Calls the given block for each element of +self+ + # and returns an array with all elements of which + # block is not false. + # + # ISO 15.2.18.4.7 + def select(&block) + ary = [] + self.class.members.each{|field| + val = self[field] + ary.push(val) if block.call(val) + } + ary + end end end + diff --git a/test/t/math.rb b/test/t/math.rb index 47a3bf527..025551b82 100644 --- a/test/t/math.rb +++ b/test/t/math.rb @@ -1,115 +1,117 @@ ## # Math Test -assert('Math.sin 0') do - check_float(Math.sin(0), 0) -end +if Object.const_defined?(:Math) + assert('Math.sin 0') do + check_float(Math.sin(0), 0) + end -assert('Math.sin PI/2') do - check_float(Math.sin(Math::PI / 2), 1) -end + assert('Math.sin PI/2') do + check_float(Math.sin(Math::PI / 2), 1) + end + assert('Fundamental trig identities') do + result = true + N = 15 + N.times do |i| + a = Math::PI / N * i + ca = Math::PI / 2 - a + s = Math.sin(a) + c = Math.cos(a) + t = Math.tan(a) + result &= check_float(s, Math.cos(ca)) + result &= check_float(t, 1 / Math.tan(ca)) + result &= check_float(s ** 2 + c ** 2, 1) + result &= check_float(t ** 2 + 1, (1/c) ** 2) + result &= check_float((1/t) ** 2 + 1, (1/s) ** 2) + end + result + end -assert('Fundamental trig identities') do - result = true - N = 15 - N.times do |i| - a = Math::PI / N * i - ca = Math::PI / 2 - a - s = Math.sin(a) - c = Math.cos(a) - t = Math.tan(a) - result &= check_float(s, Math.cos(ca)) - result &= check_float(t, 1 / Math.tan(ca)) - result &= check_float(s ** 2 + c ** 2, 1) - result &= check_float(t ** 2 + 1, (1/c) ** 2) - result &= check_float((1/t) ** 2 + 1, (1/s) ** 2) - end - result -end + assert('Math.erf 0') do + check_float(Math.erf(0), 0) + end -assert('Math.erf 0') do - check_float(Math.erf(0), 0) -end + assert('Math.exp 0') do + check_float(Math.exp(0), 1.0) + end -assert('Math.exp 0') do - check_float(Math.exp(0), 1.0) -end + assert('Math.exp 1') do + check_float(Math.exp(1), 2.718281828459045) + end -assert('Math.exp 1') do - check_float(Math.exp(1), 2.718281828459045) -end + assert('Math.exp 1.5') do + check_float(Math.exp(1.5), 4.4816890703380645) + end -assert('Math.exp 1.5') do - check_float(Math.exp(1.5), 4.4816890703380645) -end + assert('Math.log 1') do + check_float(Math.log(1), 0) + end -assert('Math.log 1') do - check_float(Math.log(1), 0) -end + assert('Math.log E') do + check_float(Math.log(Math::E), 1.0) + end -assert('Math.log E') do - check_float(Math.log(Math::E), 1.0) -end + assert('Math.log E**3') do + check_float(Math.log(Math::E**3), 3.0) + end -assert('Math.log E**3') do - check_float(Math.log(Math::E**3), 3.0) -end + assert('Math.log2 1') do + check_float(Math.log2(1), 0.0) + end -assert('Math.log2 1') do - check_float(Math.log2(1), 0.0) -end + assert('Math.log2 2') do + check_float(Math.log2(2), 1.0) + end -assert('Math.log2 2') do - check_float(Math.log2(2), 1.0) -end + assert('Math.log10 1') do + check_float(Math.log10(1), 0.0) + end -assert('Math.log10 1') do - check_float(Math.log10(1), 0.0) -end + assert('Math.log10 10') do + check_float(Math.log10(10), 1.0) + end -assert('Math.log10 10') do - check_float(Math.log10(10), 1.0) -end + assert('Math.log10 10**100') do + check_float(Math.log10(10**100), 100.0) + end -assert('Math.log10 10**100') do - check_float(Math.log10(10**100), 100.0) -end + assert('Math.sqrt') do + num = [0.0, 1.0, 2.0, 3.0, 4.0] + sqr = [0, 1, 4, 9, 16] + result = true + sqr.each_with_index do |v,i| + result &= check_float(Math.sqrt(v), num[i]) + end + result + end -assert('Math.sqrt') do - num = [0.0, 1.0, 2.0, 3.0, 4.0] - sqr = [0, 1, 4, 9, 16] - result = true - sqr.each_with_index do |v,i| - result &= check_float(Math.sqrt(v), num[i]) + assert('Math.cbrt') do + num = [-2.0, -1.0, 0.0, 1.0, 2.0] + cub = [-8, -1, 0, 1, 8] + result = true + cub.each_with_index do |v,i| + result &= check_float(Math.cbrt(v), num[i]) + end + result end - result -end -assert('Math.cbrt') do - num = [-2.0, -1.0, 0.0, 1.0, 2.0] - cub = [-8, -1, 0, 1, 8] - result = true - cub.each_with_index do |v,i| - result &= check_float(Math.cbrt(v), num[i]) + assert('Math.hypot') do + check_float(Math.hypot(3, 4), 5.0) end - result -end -assert('Math.hypot') do - check_float(Math.hypot(3, 4), 5.0) -end + assert('Math.frexp 1234') do + n = 1234 + fraction, exponent = Math.frexp(n) + check_float(Math.ldexp(fraction, exponent), n) + end -assert('Math.frexp 1234') do - n = 1234 - fraction, exponent = Math.frexp(n) - check_float(Math.ldexp(fraction, exponent), n) -end + assert('Math.erf 1') do + check_float(Math.erf(1), 0.842700792949715) + end -assert('Math.erf 1') do - check_float(Math.erf(1), 0.842700792949715) + assert('Math.erfc 1') do + check_float(Math.erfc(1), 0.157299207050285) + end end -assert('Math.erfc 1') do - check_float(Math.erfc(1), 0.157299207050285) -end diff --git a/test/t/struct.rb b/test/t/struct.rb index 5a74c6205..fff02ee56 100644 --- a/test/t/struct.rb +++ b/test/t/struct.rb @@ -1,61 +1,64 @@ ## # Struct ISO Test -assert('Struct', '15.2.18') do - Struct.class == Class -end +if Object.const_defined?(:Struct) + assert('Struct', '15.2.18') do + Struct.class == Class + end -assert('Struct superclass', '15.2.18.2') do - Struct.superclass == Object -end + assert('Struct superclass', '15.2.18.2') do + Struct.superclass == Object + end -assert('Struct.new', '15.2.18.3.1') do - c = Struct.new(:m1, :m2) - c.superclass == Struct and - c.members == [:m1,:m2] -end + assert('Struct.new', '15.2.18.3.1') do + c = Struct.new(:m1, :m2) + c.superclass == Struct and + c.members == [:m1,:m2] + end -assert('Struct#[]', '15.2.18.4.2') do - c = Struct.new(:m1, :m2) - cc = c.new(1,2) - cc[:m1] == 1 and cc["m2"] == 2 -end + assert('Struct#[]', '15.2.18.4.2') do + c = Struct.new(:m1, :m2) + cc = c.new(1,2) + cc[:m1] == 1 and cc["m2"] == 2 + end -assert('Struct#[]=', '15.2.18.4.3') do - c = Struct.new(:m1, :m2) - cc = c.new(1,2) - cc[:m1] = 3 - cc[:m1] == 3 -end + assert('Struct#[]=', '15.2.18.4.3') do + c = Struct.new(:m1, :m2) + cc = c.new(1,2) + cc[:m1] = 3 + cc[:m1] == 3 + end -assert('Struct#each', '15.2.18.4.4') do - c = Struct.new(:m1, :m2) - cc = c.new(1,2) - a = [] - cc.each{|x| - a << x - } - a[0] == 1 and a[1] == 2 -end + assert('Struct#each', '15.2.18.4.4') do + c = Struct.new(:m1, :m2) + cc = c.new(1,2) + a = [] + cc.each{|x| + a << x + } + a[0] == 1 and a[1] == 2 + end -assert('Struct#each_pair', '15.2.18.4.5') do - c = Struct.new(:m1, :m2) - cc = c.new(1,2) - a = [] - cc.each_pair{|k,v| - a << [k,v] - } - a[0] == [:m1, 1] and a[1] == [:m2, 2] -end + assert('Struct#each_pair', '15.2.18.4.5') do + c = Struct.new(:m1, :m2) + cc = c.new(1,2) + a = [] + cc.each_pair{|k,v| + a << [k,v] + } + a[0] == [:m1, 1] and a[1] == [:m2, 2] + end -assert('Struct#members', '15.2.18.4.6') do - c = Struct.new(:m1, :m2) - cc = c.new(1,2) - cc.members == [:m1,:m2] -end + assert('Struct#members', '15.2.18.4.6') do + c = Struct.new(:m1, :m2) + cc = c.new(1,2) + cc.members == [:m1,:m2] + end -assert('Struct#select', '15.2.18.4.7') do - c = Struct.new(:m1, :m2) - cc = c.new(1,2) - cc.select{|v| v % 2 == 0} == [2] + assert('Struct#select', '15.2.18.4.7') do + c = Struct.new(:m1, :m2) + cc = c.new(1,2) + cc.select{|v| v % 2 == 0} == [2] + end end + diff --git a/test/t/time.rb b/test/t/time.rb index 045c5b185..6140be1a8 100644 --- a/test/t/time.rb +++ b/test/t/time.rb @@ -1,189 +1,191 @@ ## # Time ISO Test -assert('Time.new', '15.2.3.3.3') do - Time.new.class == Time -end +if Object.const_defined?(:Time) + assert('Time.new', '15.2.3.3.3') do + Time.new.class == Time + end -assert('Time', '15.2.19') do - Time.class == Class -end + assert('Time', '15.2.19') do + Time.class == Class + end -assert('Time superclass', '15.2.19.2') do - Time.superclass == Object -end + assert('Time superclass', '15.2.19.2') do + Time.superclass == Object + end -assert('Time.at', '15.2.19.6.1') do - Time.at(1300000000.0) -end + assert('Time.at', '15.2.19.6.1') do + Time.at(1300000000.0) + end -assert('Time.gm', '15.2.19.6.2') do - Time.gm(2012, 12, 23) -end + assert('Time.gm', '15.2.19.6.2') do + Time.gm(2012, 12, 23) + end -assert('Time.local', '15.2.19.6.3') do - Time.local(2012, 12, 23) -end + assert('Time.local', '15.2.19.6.3') do + Time.local(2012, 12, 23) + end -assert('Time.mktime', '15.2.19.6.4') do - Time.mktime(2012, 12, 23) -end + assert('Time.mktime', '15.2.19.6.4') do + Time.mktime(2012, 12, 23) + end -assert('Time.now', '15.2.19.6.5') do - Time.now.class == Time -end + assert('Time.now', '15.2.19.6.5') do + Time.now.class == Time + end -assert('Time.utc', '15.2.19.6.6') do - Time.utc(2012, 12, 23) -end + assert('Time.utc', '15.2.19.6.6') do + Time.utc(2012, 12, 23) + end -assert('Time#+', '15.2.19.7.1') do - t1 = Time.at(1300000000.0) - t2 = t1.+(60) + assert('Time#+', '15.2.19.7.1') do + t1 = Time.at(1300000000.0) + t2 = t1.+(60) - t2.utc.asctime == "Sun Mar 13 07:07:40 UTC 2011" -end + t2.utc.asctime == "Sun Mar 13 07:07:40 UTC 2011" + end -assert('Time#-', '15.2.19.7.2') do - t1 = Time.at(1300000000.0) - t2 = t1.-(60) + assert('Time#-', '15.2.19.7.2') do + t1 = Time.at(1300000000.0) + t2 = t1.-(60) - t2.utc.asctime == "Sun Mar 13 07:05:40 UTC 2011" -end + t2.utc.asctime == "Sun Mar 13 07:05:40 UTC 2011" + end -assert('Time#<=>', '15.2.19.7.3') do - t1 = Time.at(1300000000.0) - t2 = Time.at(1400000000.0) - t3 = Time.at(1500000000.0) + assert('Time#<=>', '15.2.19.7.3') do + t1 = Time.at(1300000000.0) + t2 = Time.at(1400000000.0) + t3 = Time.at(1500000000.0) - t2.<=>(t1) == 1 and - t2.<=>(t2) == 0 and - t2.<=>(t3) == -1 and - t2.<=>(nil) == nil -end + t2.<=>(t1) == 1 and + t2.<=>(t2) == 0 and + t2.<=>(t3) == -1 and + t2.<=>(nil) == nil + end -assert('Time#asctime', '15.2.19.7.4') do - Time.at(1300000000.0).utc.asctime == "Sun Mar 13 07:06:40 UTC 2011" -end + assert('Time#asctime', '15.2.19.7.4') do + Time.at(1300000000.0).utc.asctime == "Sun Mar 13 07:06:40 UTC 2011" + end -assert('Time#ctime', '15.2.19.7.5') do - Time.at(1300000000.0).utc.ctime == "Sun Mar 13 07:06:40 UTC 2011" -end + assert('Time#ctime', '15.2.19.7.5') do + Time.at(1300000000.0).utc.ctime == "Sun Mar 13 07:06:40 UTC 2011" + end -assert('Time#day', '15.2.19.7.6') do - Time.gm(2012, 12, 23).day == 23 -end + assert('Time#day', '15.2.19.7.6') do + Time.gm(2012, 12, 23).day == 23 + end -assert('Time#dst?', '15.2.19.7.7') do - not Time.gm(2012, 12, 23).utc.dst? -end + assert('Time#dst?', '15.2.19.7.7') do + not Time.gm(2012, 12, 23).utc.dst? + end -assert('Time#getgm', '15.2.19.7.8') do - Time.at(1300000000.0).getgm.asctime == "Sun Mar 13 07:06:40 UTC 2011" -end + assert('Time#getgm', '15.2.19.7.8') do + Time.at(1300000000.0).getgm.asctime == "Sun Mar 13 07:06:40 UTC 2011" + end -assert('Time#getlocal', '15.2.19.7.9') do - t1 = Time.at(1300000000.0) - t2 = Time.at(1300000000.0) - t3 = t1.getlocal + assert('Time#getlocal', '15.2.19.7.9') do + t1 = Time.at(1300000000.0) + t2 = Time.at(1300000000.0) + t3 = t1.getlocal - t1 == t3 and t3 == t2.getlocal -end + t1 == t3 and t3 == t2.getlocal + end -assert('Time#getutc', '15.2.19.7.10') do - Time.at(1300000000.0).getutc.asctime == "Sun Mar 13 07:06:40 UTC 2011" -end + assert('Time#getutc', '15.2.19.7.10') do + Time.at(1300000000.0).getutc.asctime == "Sun Mar 13 07:06:40 UTC 2011" + end -assert('Time#gmt?', '15.2.19.7.11') do - Time.at(1300000000.0).utc.gmt? -end + assert('Time#gmt?', '15.2.19.7.11') do + Time.at(1300000000.0).utc.gmt? + end -# ATM not implemented -# assert('Time#gmt_offset', '15.2.19.7.12') do + # ATM not implemented + # assert('Time#gmt_offset', '15.2.19.7.12') do -assert('Time#gmtime', '15.2.19.7.13') do - Time.at(1300000000.0).gmtime -end + assert('Time#gmtime', '15.2.19.7.13') do + Time.at(1300000000.0).gmtime + end -# ATM not implemented -# assert('Time#gmtoff', '15.2.19.7.14') do + # ATM not implemented + # assert('Time#gmtoff', '15.2.19.7.14') do -assert('Time#hour', '15.2.19.7.15') do - Time.gm(2012, 12, 23, 7, 6).hour == 7 -end + assert('Time#hour', '15.2.19.7.15') do + Time.gm(2012, 12, 23, 7, 6).hour == 7 + end -# ATM doesn't really work -# assert('Time#initialize', '15.2.19.7.16') do + # ATM doesn't really work + # assert('Time#initialize', '15.2.19.7.16') do -assert('Time#initialize_copy', '15.2.19.7.17') do - time_tmp_2 = Time.at(7.0e6) - time_tmp_2.clone == time_tmp_2 -end + assert('Time#initialize_copy', '15.2.19.7.17') do + time_tmp_2 = Time.at(7.0e6) + time_tmp_2.clone == time_tmp_2 + end -assert('Time#localtime', '15.2.19.7.18') do - t1 = Time.at(1300000000.0) - t2 = Time.at(1300000000.0) + assert('Time#localtime', '15.2.19.7.18') do + t1 = Time.at(1300000000.0) + t2 = Time.at(1300000000.0) - t1.localtime - t1 == t2.getlocal -end + t1.localtime + t1 == t2.getlocal + end -assert('Time#mday', '15.2.19.7.19') do - Time.gm(2012, 12, 23).mday == 23 -end + assert('Time#mday', '15.2.19.7.19') do + Time.gm(2012, 12, 23).mday == 23 + end -assert('Time#min', '15.2.19.7.20') do - Time.gm(2012, 12, 23, 7, 6).min == 6 -end + assert('Time#min', '15.2.19.7.20') do + Time.gm(2012, 12, 23, 7, 6).min == 6 + end -assert('Time#mon', '15.2.19.7.21') do - Time.gm(2012, 12, 23).mon == 12 -end + assert('Time#mon', '15.2.19.7.21') do + Time.gm(2012, 12, 23).mon == 12 + end -assert('Time#month', '15.2.19.7.22') do - Time.gm(2012, 12, 23).month == 12 -end + assert('Time#month', '15.2.19.7.22') do + Time.gm(2012, 12, 23).month == 12 + end -assert('Times#sec', '15.2.19.7.23') do - Time.gm(2012, 12, 23, 7, 6, 40).sec == 40 -end + assert('Times#sec', '15.2.19.7.23') do + Time.gm(2012, 12, 23, 7, 6, 40).sec == 40 + end -assert('Time#to_f', '15.2.19.7.24') do - Time.at(1300000000.0).to_f == 1300000000.0 -end + assert('Time#to_f', '15.2.19.7.24') do + Time.at(1300000000.0).to_f == 1300000000.0 + end -assert('Time#to_i', '15.2.19.7.25') do - Time.at(1300000000.0).to_i == 1300000000 -end + assert('Time#to_i', '15.2.19.7.25') do + Time.at(1300000000.0).to_i == 1300000000 + end -assert('Time#usec', '15.2.19.7.26') do - Time.at(1300000000.0).usec == 0 -end + assert('Time#usec', '15.2.19.7.26') do + Time.at(1300000000.0).usec == 0 + end -assert('Time#utc', '15.2.19.7.27') do - Time.at(1300000000.0).utc -end + assert('Time#utc', '15.2.19.7.27') do + Time.at(1300000000.0).utc + end -assert('Time#utc?', '15.2.19.7.28') do - Time.at(1300000000.0).utc.utc? -end + assert('Time#utc?', '15.2.19.7.28') do + Time.at(1300000000.0).utc.utc? + end -# ATM not implemented -# assert('Time#utc_offset', '15.2.19.7.29') do + # ATM not implemented + # assert('Time#utc_offset', '15.2.19.7.29') do -assert('Time#wday', '15.2.19.7.30') do - Time.gm(2012, 12, 23).wday == 0 -end + assert('Time#wday', '15.2.19.7.30') do + Time.gm(2012, 12, 23).wday == 0 + end -assert('Time#yday', '15.2.19.7.31') do - Time.gm(2012, 12, 23).yday == 357 -end + assert('Time#yday', '15.2.19.7.31') do + Time.gm(2012, 12, 23).yday == 357 + end -assert('Time#year', '15.2.19.7.32') do - Time.gm(2012, 12, 23).year == 2012 -end + assert('Time#year', '15.2.19.7.32') do + Time.gm(2012, 12, 23).year == 2012 + end -assert('Time#zone', '15.2.19.7.33') do - Time.at(1300000000.0).utc.zone == 'UTC' + assert('Time#zone', '15.2.19.7.33') do + Time.at(1300000000.0).utc.zone == 'UTC' + end end |
