diff --git a/ChangeLog b/ChangeLog index 4abd7449f5..0f58a8658f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +Thu Jan 4 20:01:29 2007 Koichi Sasada + + * common.mk : rename yarv-test-[all/each] to compare-test[/-each]. + purpose of "compare-test" rule is to compare ruby (trunk) and + matzruby (branches/matzruby) binary in miniruby level. MATZRUBY + parameter means an path to miniruby of matzruby binary. to do this + comparison test, you should build matzruby branch. + + * yarvtest/yarvtest.rb : fix to use command line option as + command names to be compared. + + * yarvtest/runner.rb : remove a debug output. + Thu Jan 4 19:12:27 2007 Koichi Sasada * common.mk : fix to use test.rb script in build directory. diff --git a/common.mk b/common.mk index f82e9b1b22..cacb7e0108 100644 --- a/common.mk +++ b/common.mk @@ -523,6 +523,7 @@ blockinlining.$(OBJEXT): {$(VPATH)}yarv.h {$(VPATH)}yarvcore.h vm_opts.h BASERUBY = ruby +MATZRUBY = ruby INSNS2VMOPT = $(CPPFLAGS) --srcdir=$(srcdir) @@ -559,11 +560,11 @@ incs: docs: $(BASERUBY) -I$(srcdir) $(srcdir)/tool/makedocs.rb $(INSNS2VMOPT) -yarv-test-all: miniruby$(EXEEXT) - $(BASERUBY) -I$(srcdir) $(srcdir)/yarvtest/runner.rb $(OPT) yarv=$(MINIRUBY) ruby=$(BASERUBY) +compare-test: miniruby$(EXEEXT) + $(BASERUBY) -I$(srcdir) $(srcdir)/yarvtest/runner.rb $(OPT) ruby=$(MINIRUBY) matzruby=$(MATZRUBY) -yarv-test-each: miniruby$(EXEEXT) - $(BASERUBY) -I$(srcdir) $(srcdir)/yarvtest/test_$(ITEM).rb $(OPT) yarv=$(MINIRUBY) ruby=$(BASERUBY) +compare-test-each: miniruby$(EXEEXT) + $(BASERUBY) -I$(srcdir) $(srcdir)/yarvtest/test_$(ITEM).rb $(OPT) ruby=$(MINIRUBY) matzruby=$(MATZRUBY) allload: miniruby$(EXEEXT) $(MINIRUBY) -I$(srcdir) $(srcdir)/tool/allload.rb `$(BASERUBY) -rrbconfig -e 'print Config::CONFIG["rubylibdir"]'` diff --git a/yarvtest/runner.rb b/yarvtest/runner.rb index 25b813e99c..003967b804 100644 --- a/yarvtest/runner.rb +++ b/yarvtest/runner.rb @@ -1,10 +1,9 @@ -require 'test/unit' - -if $0 == __FILE__ - # exit Test::Unit::AutoRunner.run(false, File.dirname($0)) - Dir.glob(File.dirname($0) + '/test_*'){|file| - p file - require file - } -end - +require 'test/unit' + +if $0 == __FILE__ + # exit Test::Unit::AutoRunner.run(false, File.dirname($0)) + Dir.glob(File.dirname($0) + '/test_*'){|file| + require file + } +end + diff --git a/yarvtest/yarvtest.rb b/yarvtest/yarvtest.rb index 906af727b4..20085efe19 100644 --- a/yarvtest/yarvtest.rb +++ b/yarvtest/yarvtest.rb @@ -1,136 +1,110 @@ -require 'test/unit' - -if defined? YARV_PATCHED -require 'yarvutil' - -class YarvTestBase < Test::Unit::TestCase - - def remove_const sym - Object.module_eval{ - remove_const sym - } - end - - def remove_method sym - Object.module_eval{ - undef sym - } - end - - def ae str - # puts str - # puts YARVUtil.parse(str, $0, 0).disasm - - ruby = YARVUtil.eval_in_wrap(str) - yield if block_given? - - yarv = YARVUtil.eval(str) - yield if block_given? - - assert_equal(ruby, yarv) - end - - def test_ - end - -end - -else - -require 'rbconfig' -class YarvTestBase < Test::Unit::TestCase - def initialize *args - super - - if /mswin32/ !~ RUBY_PLATFORM - @yarv = './miniruby' - else - @yarv = 'miniruby' - end - @ruby = Config::CONFIG['ruby_install_name'] - end - - def remove_const sym - Object.module_eval{ - remove_const sym - } - end - - def remove_method sym - Object.module_eval{ - undef sym - } - end - - require 'tempfile' - def exec exec_file, program - dir = [] - dir << ENV['RAMDISK'] if ENV['RAMDISK'] - tmpf = Tempfile.new("yarvtest_#{Process.pid}_#{Time.now.to_i}", *dir) - tmpf.write program - tmpf.close - result = `#{exec_file} #{tmpf.path}` - tmpf.open - tmpf.close(true) - result - end - - def dump_and_exec exec_file, str - asmstr = <<-EOASMSTR - iseq = YARVCore::InstructionSequence.compile(<<-'EOS__') - #{str} - EOS__ - p YARVCore::InstructionSequence.load(iseq.to_a).eval - EOASMSTR - - exec(exec_file, asmstr) - end - - def exec_ exec_file, program - exec_file.tr!('\\', '/') - r = '' - IO.popen("#{exec_file}", 'r+'){|io| - # - io.write program - io.close_write - begin - while line = io.gets - r << line - # p line - end - rescue => e - # p e - end - } - r - end - - def ae str - evalstr = %{ - p eval(%q{ - #{str} - }) - } - - ruby = exec(@ruby, evalstr) - yarv = exec(@yarv, evalstr) - - if $DEBUG #|| true - puts "yarv (#@yarv): #{yarv}" - puts "ruby (#@ruby): #{ruby}" - end - - assert_equal(ruby.gsub(/\r/, ''), yarv.gsub(/\r/, '')) - - # store/load test - if false # || true - yarvasm = dump_and_exec(@yarv, str) - assert_equal(ruby.gsub(/\r/, ''), yarvasm.gsub(/\r/, '')) - end - end - - def test_ - end -end - -end +require 'test/unit' +require 'rbconfig' +require 'optparse' + +if /mswin32/ !~ RUBY_PLATFORM + $ruby = './miniruby' +else + $ruby = 'miniruby' +end +$matzruby = Config::CONFIG['ruby_install_name'] + +ARGV.each{|opt| + if /\Aruby=(.+)/ =~ opt + $ruby = $1 + elsif /\Amatzruby=(.+)/ =~ opt + $matzruby = $1 + end +} + +puts "matzruby: #{`#{$matzruby} -v`}" +puts "ruby : #{`#{$ruby} -v`}" + +class YarvTestBase < Test::Unit::TestCase + def initialize *args + super + + end + + def remove_const sym + Object.module_eval{ + remove_const sym + } + end + + def remove_method sym + Object.module_eval{ + undef sym + } + end + + require 'tempfile' + def exec exec_file, program + dir = [] + dir << ENV['RAMDISK'] if ENV['RAMDISK'] + tmpf = Tempfile.new("yarvtest_#{Process.pid}_#{Time.now.to_i}", *dir) + tmpf.write program + tmpf.close + result = `#{exec_file} #{tmpf.path}` + tmpf.open + tmpf.close(true) + result + end + + def dump_and_exec exec_file, str + asmstr = <<-EOASMSTR + iseq = YARVCore::InstructionSequence.compile(<<-'EOS__') + #{str} + EOS__ + p YARVCore::InstructionSequence.load(iseq.to_a).eval + EOASMSTR + + exec(exec_file, asmstr) + end + + def exec_ exec_file, program + exec_file.tr!('\\', '/') + r = '' + IO.popen("#{exec_file}", 'r+'){|io| + # + io.write program + io.close_write + begin + while line = io.gets + r << line + # p line + end + rescue => e + # p e + end + } + r + end + + def ae str + evalstr = %{ + p eval(%q{ + #{str} + }) + } + + matzruby = exec($matzruby, evalstr) + ruby = exec($ruby, evalstr) + + if $DEBUG #|| true + puts "matzruby (#$matzruby): #{matzruby}" + puts "ruby (#$ruby): #{ruby}" + end + + assert_equal(ruby.gsub(/\r/, ''), ruby.gsub(/\r/, '')) + + # store/load test + if false # || true + yarvasm = dump_and_exec($ruby, str) + assert_equal(ruby.gsub(/\r/, ''), yarvasm.gsub(/\r/, '')) + end + end + + def test_ + end +end