diff options
Diffstat (limited to 'jni/ruby/test/mkmf')
| -rw-r--r-- | jni/ruby/test/mkmf/base.rb | 139 | ||||
| -rw-r--r-- | jni/ruby/test/mkmf/test_config.rb | 16 | ||||
| -rw-r--r-- | jni/ruby/test/mkmf/test_constant.rb | 37 | ||||
| -rw-r--r-- | jni/ruby/test/mkmf/test_convertible.rb | 34 | ||||
| -rw-r--r-- | jni/ruby/test/mkmf/test_find_executable.rb | 50 | ||||
| -rw-r--r-- | jni/ruby/test/mkmf/test_flags.rb | 56 | ||||
| -rw-r--r-- | jni/ruby/test/mkmf/test_framework.rb | 48 | ||||
| -rw-r--r-- | jni/ruby/test/mkmf/test_have_func.rb | 14 | ||||
| -rw-r--r-- | jni/ruby/test/mkmf/test_have_library.rb | 55 | ||||
| -rw-r--r-- | jni/ruby/test/mkmf/test_have_macro.rb | 35 | ||||
| -rw-r--r-- | jni/ruby/test/mkmf/test_libs.rb | 86 | ||||
| -rw-r--r-- | jni/ruby/test/mkmf/test_signedness.rb | 29 | ||||
| -rw-r--r-- | jni/ruby/test/mkmf/test_sizeof.rb | 47 | 
13 files changed, 646 insertions, 0 deletions
| diff --git a/jni/ruby/test/mkmf/base.rb b/jni/ruby/test/mkmf/base.rb new file mode 100644 index 0000000..ea6a9d8 --- /dev/null +++ b/jni/ruby/test/mkmf/base.rb @@ -0,0 +1,139 @@ +$extmk = true + +require 'test/unit' +require 'mkmf' +require 'tmpdir' + +$extout = '$(topdir)/'+RbConfig::CONFIG["EXTOUT"] +RbConfig::CONFIG['topdir'] = CONFIG['topdir'] = File.expand_path(CONFIG['topdir']) +RbConfig::CONFIG["extout"] = CONFIG["extout"] = $extout +$INCFLAGS << " -I." +$extout_prefix = "$(extout)$(target_prefix)/" + +class TestMkmf < Test::Unit::TestCase +  MKMFLOG = proc {File.read("mkmf.log") rescue ""} + +  class Capture +    attr_accessor :origin +    def initialize +      @buffer = "" +      @filter = nil +      @out = true +      @origin = nil +    end +    def clear +      @buffer.clear +    end +    def flush +      STDOUT.print @filter ? @filter.call(@buffer) : @buffer +      clear +    end +    def reopen(io) +      case io +      when Capture +        initialize_copy(io) +      when File +        @out = false +        @origin.reopen(io) if @origin +      when IO +        @out = true +        @origin.reopen(io) if @origin +      else +        @out = false +      end +    end +    def filter(&block) +      @filter = block +    end +    def write(s) +      @buffer << s if @out +    end +  end +end + +module TestMkmf::Base +  attr_reader :stdout + +  def mkmflog(msg) +    proc {MKMFLOG[] << msg} +  end + +  def setup +    @rbconfig = rbconfig0 = RbConfig::CONFIG +    @mkconfig = mkconfig0 = RbConfig::MAKEFILE_CONFIG +    rbconfig = { +      "hdrdir" => $hdrdir, +      "srcdir" => $srcdir, +      "topdir" => $topdir, +    } +    mkconfig = { +      "hdrdir" => "$(top_srcdir)/include", +      "srcdir" => "$(top_srcdir)", +      "topdir" => $topdir, +    } +    rbconfig0.each_pair {|key, val| rbconfig[key] ||= val.dup} +    mkconfig0.each_pair {|key, val| mkconfig[key] ||= val.dup} +    RbConfig.module_eval { +      remove_const(:CONFIG) +      const_set(:CONFIG, rbconfig) +      remove_const(:MAKEFILE_CONFIG) +      const_set(:MAKEFILE_CONFIG, mkconfig) +    } +    MakeMakefile.class_eval { +      remove_const(:CONFIG) +      const_set(:CONFIG, mkconfig) +    } +    @tmpdir = Dir.mktmpdir +    @curdir = Dir.pwd +    @mkmfobj = Object.new +    @stdout = TestMkmf::Capture.new +    Dir.chdir(@tmpdir) +    @quiet, Logging.quiet = Logging.quiet, true +    init_mkmf +    $INCFLAGS[0, 0] = "-I. " +  end + +  def teardown +    rbconfig0 = @rbconfig +    mkconfig0 = @mkconfig +    RbConfig.module_eval { +      remove_const(:CONFIG) +      const_set(:CONFIG, rbconfig0) +      remove_const(:MAKEFILE_CONFIG) +      const_set(:MAKEFILE_CONFIG, mkconfig0) +    } +    MakeMakefile.class_eval { +      remove_const(:CONFIG) +      const_set(:CONFIG, mkconfig0) +    } +    Logging.quiet = @quiet +    Logging.log_close +    FileUtils.rm_f("mkmf.log") +    Dir.chdir(@curdir) +    FileUtils.rm_rf(@tmpdir) +  end + +  def mkmf(*args, &block) +    @stdout.clear +    stdout, @stdout.origin, $stdout = @stdout.origin, $stdout, @stdout +    @mkmfobj.instance_eval(*args, &block) +  ensure +    $stdout, @stdout.origin = @stdout.origin, stdout +  end + +  def config_value(name) +    create_tmpsrc("---config-value=#{name}") +    xpopen(cpp_command('')) do |f| +      f.grep(/^---config-value=(.*)/) {return $1} +    end +    nil +  end +end + +class TestMkmf +  include TestMkmf::Base + +  def assert_separately(args, src, *rest) +    super(args + ["-r#{__FILE__}"], "extend TestMkmf::Base; setup\n#{src}", *rest) +  end +end diff --git a/jni/ruby/test/mkmf/test_config.rb b/jni/ruby/test/mkmf/test_config.rb new file mode 100644 index 0000000..7bf537e --- /dev/null +++ b/jni/ruby/test/mkmf/test_config.rb @@ -0,0 +1,16 @@ +$extmk = true + +require 'test/unit' +require 'mkmf' + +class TestMkmf < Test::Unit::TestCase +  class TestConfig < Test::Unit::TestCase +    def test_dir_config +      bug8074 = '[Bug #8074]' +      lib = RbConfig.expand(RbConfig::MAKEFILE_CONFIG["libdir"], "exec_prefix"=>"") +      assert_separately %w[-rmkmf - -- --with-foo-dir=/test/foo], %{ +        assert_equal(%w[/test/foo/include /test/foo#{lib}], dir_config("foo"), #{bug8074.dump}) +      } +    end +  end +end diff --git a/jni/ruby/test/mkmf/test_constant.rb b/jni/ruby/test/mkmf/test_constant.rb new file mode 100644 index 0000000..fd1f940 --- /dev/null +++ b/jni/ruby/test/mkmf/test_constant.rb @@ -0,0 +1,37 @@ +require_relative 'base' + +class TestMkmf +  class TestTryConstant < TestMkmf +    def test_simple +      assert_equal( 0, mkmf {try_constant("0")}, MKMFLOG) +      assert_equal( 1, mkmf {try_constant("1")}, MKMFLOG) +      assert_equal(-1, mkmf {try_constant("-1")}, MKMFLOG) +    end + +    def test_sizeof +      assert_equal(config_value("SIZEOF_INT").to_i, mkmf {try_constant("sizeof(int)")}, MKMFLOG) +      assert_equal(config_value("SIZEOF_LONG").to_i, mkmf {try_constant("sizeof(long)")}, MKMFLOG) +      assert_equal(config_value("SIZEOF_VOIDP").to_i, mkmf {try_constant("sizeof(void*)")}, MKMFLOG) +      assert_equal(config_value("SIZEOF_VALUE").to_i, mkmf {try_constant("sizeof(Qnil)")}, MKMFLOG) +    end + +    def test_long +      sizeof_int = config_value("SIZEOF_INT").to_i +      sizeof_long = config_value("SIZEOF_LONG").to_i +      if sizeof_long > sizeof_int +        type = 'long' +      else +        sizeof_long_long = config_value("SIZEOF_LONG_LONG").to_i +        return if !sizeof_long_long or sizeof_long_long <= sizeof_int +        type = 'LONG_LONG' +      end + +      decl = "#define CONFTEST_VALUE (unsigned #{type})(((unsigned #{type})1)<<(CHAR_BIT*sizeof(int)))" +      assert_operator(mkmf {try_constant("CONFTEST_VALUE", [[decl]])}, :>, 0, MKMFLOG) +    end + +    def test_large_unsigned +      assert_operator(mkmf {try_constant("1U<<(CHAR_BIT*sizeof(int)-1)")}, :>, 0, MKMFLOG) +    end +  end +end diff --git a/jni/ruby/test/mkmf/test_convertible.rb b/jni/ruby/test/mkmf/test_convertible.rb new file mode 100644 index 0000000..eec2d12 --- /dev/null +++ b/jni/ruby/test/mkmf/test_convertible.rb @@ -0,0 +1,34 @@ +require_relative 'base' + +class TestMkmf +  class TestConvertible < TestMkmf +    def test_typeof_builtin +      ["", ["signed ", ""], "unsigned "].each do |signed, prefix| +        %w[short int long].each do |type| +          assert_equal((prefix || signed)+type, +                       mkmf {convertible_int(signed+type)}, MKMFLOG) +        end +      end +    end + +    def test_typeof_typedef +      ["", ["signed ", ""], "unsigned "].each do |signed, prefix| +        %w[short int long].each do |type| +          open("confdefs.h", "w") {|f| +            f.puts "typedef #{signed}#{type} test1_t;" +          } +          $defs.clear +          assert_equal((prefix || signed)+type, +                       mkmf {convertible_int("test1_t", "confdefs.h")}, MKMFLOG) +          (u = signed[/^u/]) and u.upcase! +          assert_include($defs, "-DTYPEOF_TEST1_T="+"#{prefix||signed}#{type}".quote) +          assert_include($defs, "-DPRI_TEST1T_PREFIX=PRI_#{type.upcase}_PREFIX") +          assert_include($defs, "-DTEST1T2NUM=#{u}#{type.upcase}2NUM") +          assert_include($defs, "-DNUM2TEST1T=NUM2#{u}#{type.upcase}") +        end +      end +    ensure +      File.unlink("confdefs.h") +    end +  end +end diff --git a/jni/ruby/test/mkmf/test_find_executable.rb b/jni/ruby/test/mkmf/test_find_executable.rb new file mode 100644 index 0000000..fe45ef2 --- /dev/null +++ b/jni/ruby/test/mkmf/test_find_executable.rb @@ -0,0 +1,50 @@ +require_relative 'base' + +class TestMkmf +  class TestFindExecutable < TestMkmf +    def setup +      super +      @path, ENV["PATH"] = ENV["PATH"], @tmpdir +    end + +    def teardown +      ENV["PATH"] = @path +      super +    end + +    def test_find_executable +      bug2669 = '[ruby-core:27912]' +      name = "foobar#{$$}#{rand(1000)}" +      exts = mkmf {self.class::CONFIG['EXECUTABLE_EXTS']}.split +      stdout.filter {|s| s.sub(name, "<executable>")} +      exts[0] ||= "" +      exts.each do |ext| +        full = name+ext +        begin +          open(full, "w") {|ff| ff.chmod(0755)} +          result = mkmf {find_executable(name)} +        ensure +          File.unlink(full) +        end +        assert_equal("#{@tmpdir}/#{name}#{ext}", result, bug2669) +      end +    end + +    def test_find_executable_dir +      name = "foobar#{$$}#{rand(1000)}" +      exts = mkmf {self.class::CONFIG['EXECUTABLE_EXTS']}.split +      stdout.filter {|s| s.sub(name, "<executable>")} +      exts[0] ||= "" +      exts.each do |ext| +        full = name+ext +        begin +          Dir.mkdir(full) +          result = mkmf {find_executable(name)} +        ensure +          Dir.rmdir(full) +        end +        assert_nil(result) +      end +    end +  end +end diff --git a/jni/ruby/test/mkmf/test_flags.rb b/jni/ruby/test/mkmf/test_flags.rb new file mode 100644 index 0000000..e49d474 --- /dev/null +++ b/jni/ruby/test/mkmf/test_flags.rb @@ -0,0 +1,56 @@ +require_relative 'base' + +class TestMkmf +  class TestFlags < TestMkmf +    def test_valid_warnflags +      val = $extmk +      warnflags = $warnflags +      makefile = mkmf do +        $extmk = false +        self.class::CONFIG['warnflags'] = %w"-Wextra +        -Wno-unused-parameter -Wno-parentheses -Wno-long-long +        -Wno-missing-field-initializers -Werror=pointer-arith +        -Werror=write-strings -Werror=declaration-after-statement +        -Werror=shorten-64-to-32 +        -Werror-implicit-function-declaration +        ".join(' ') +        self.class::CONFIG['GCC'] = 'yes' +        init_mkmf(self.class::CONFIG) +        configuration '.' +      end +      generated_flags = makefile.grep(/warnflags/).first[/^warnflags = (.*)$/, 1].split + +      assert_equal %w" +      -Wextra -Wno-unused-parameter -Wno-parentheses +      -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith +      -Wwrite-strings -Wdeclaration-after-statement +      -Wshorten-64-to-32 -Wimplicit-function-declaration +      ", generated_flags + +    ensure +      $warnflags = warnflags +      $extmk = val +    end + +    def test_try_ldflag_invalid_opt +      assert_separately([], <<-'end;') #do +        assert(!try_ldflags("nosuch.c"), TestMkmf::MKMFLOG) +        assert(have_devel?, TestMkmf::MKMFLOG) +      end; +    end + +    def test_try_cflag_invalid_opt +      assert_separately([], <<-'end;') #do +        assert(!try_cflags("nosuch.c"), TestMkmf::MKMFLOG) +        assert(have_devel?, TestMkmf::MKMFLOG) +      end; +    end + +    def test_try_cppflag_invalid_opt +      assert_separately([], <<-'end;') #do +        assert(!try_cppflags("nosuch.c"), TestMkmf::MKMFLOG) +        assert(have_devel?, TestMkmf::MKMFLOG) +      end; +    end +  end +end diff --git a/jni/ruby/test/mkmf/test_framework.rb b/jni/ruby/test/mkmf/test_framework.rb new file mode 100644 index 0000000..cad6b05 --- /dev/null +++ b/jni/ruby/test/mkmf/test_framework.rb @@ -0,0 +1,48 @@ +require_relative 'base' + +class TestMkmf +  class TestHaveFramework < TestMkmf +    def create_framework(fw, hdrname = "#{fw}.h") +      Dir.mktmpdir("frameworks") do |dir| +        fwdir = "#{dir}/#{fw}.framework" +        hdrdir = "#{fwdir}/Headers" +        FileUtils.mkdir_p(hdrdir) +        File.write("#{hdrdir}/#{hdrname}", "") +        src = "#{fwdir}/main.c" +        File.write(src, "void #{fw}(void) {}") +        cmd = LINK_SO.dup +        RbConfig.expand(cmd, RbConfig::CONFIG.merge("OBJS"=>src)) +        cmd.gsub!("$@", "#{fwdir}/#{fw}") +        cmd.gsub!(/ -bundle /, ' -dynamiclib ') +        assert(xsystem(cmd), MKMFLOG) +        $INCFLAGS << " " << "-F#{dir}".quote +        yield fw, hdrname +      end +    end + +    def test_core_foundation_framework +      assert(have_framework("CoreFoundation"), mkmflog("try as Objective-C")) +    end + +    def test_multi_frameworks +      assert(have_framework("CoreFoundation"), mkmflog("try as Objective-C")) +      create_framework("MkmfTest") do |fw| +        assert(have_framework(fw), MKMFLOG) +      end +    end + +    def test_empty_framework +      create_framework("MkmfTest") do |fw| +        assert(have_framework(fw), MKMFLOG) +      end +    end + +    def test_different_name_header +      _bug8593 = '[ruby-core:55745] [Bug #8593]' +      create_framework("MkmfTest", "test_mkmf.h") do |fw, hdrname| +        assert(!have_framework(fw), MKMFLOG) +        assert(have_framework([fw, hdrname]), MKMFLOG) +      end +    end +  end +end if /darwin/ =~ RUBY_PLATFORM diff --git a/jni/ruby/test/mkmf/test_have_func.rb b/jni/ruby/test/mkmf/test_have_func.rb new file mode 100644 index 0000000..8049ffb --- /dev/null +++ b/jni/ruby/test/mkmf/test_have_func.rb @@ -0,0 +1,14 @@ +require_relative 'base' +require 'tempfile' + +class TestMkmf +  class TestHaveFunc < TestMkmf +    def test_have_func +      assert_equal(true, have_func("ruby_init"), MKMFLOG) +    end + +    def test_not_have_func +      assert_equal(false, have_func("no_ruby_init"), MKMFLOG) +    end +  end +end diff --git a/jni/ruby/test/mkmf/test_have_library.rb b/jni/ruby/test/mkmf/test_have_library.rb new file mode 100644 index 0000000..bf17b85 --- /dev/null +++ b/jni/ruby/test/mkmf/test_have_library.rb @@ -0,0 +1,55 @@ +require_relative 'base' +require 'tempfile' + +class TestMkmf +  class TestHaveLibrary < TestMkmf +    LIBRARY_NAME = 'mkmftest' +    HEADER_NAME = "#{LIBRARY_NAME}.h" +    FUNC_NAME = 'ruby_mkmftest_foo' +    ARPREFIX = config_string('LIBRUBY_A') {|lib| lib[/\A\w+/]} + +    def create_library(libname = LIBRARY_NAME) +      lib = "#{ARPREFIX}#{libname}.#{$LIBEXT}" +      open(HEADER_NAME, "w") do |hdr| +        hdr.puts "void #{FUNC_NAME}(void);" +        hdr.puts "void #{FUNC_NAME}_fake(void);" +      end +      create_tmpsrc("#include \"#{HEADER_NAME}\"\n""void #{FUNC_NAME}(void) {}") +      assert(xsystem(cc_command), "compile failed: #{cc_command}") +      command = "#{CONFIG['AR']} #{config_string('ARFLAGS') || 'cru '}#{lib} #{CONFTEST}.#{$OBJEXT}" +      assert(xsystem(command), "making library failed: #{command}") +      File.unlink("#{CONFTEST}.#{$OBJEXT}") +      config_string('RANLIB') do |ranlib| +        command = "#{ranlib} #{lib}" +        assert(xsystem(command), "ranlib failed: #{command}") +      end +    end + +    def assert_have_library(*args) +      assert_equal(true, have_library(LIBRARY_NAME, *args), MKMFLOG) +    end + +    def assert_not_have_library(*args) +      assert_equal(false, have_library(LIBRARY_NAME, *args), MKMFLOG) +    end + +    def test_have_library +      create_library +      assert_have_library +    end + +    def test_have_library_with_name +      create_library +      assert_have_library(FUNC_NAME, HEADER_NAME) +    end + +    def test_not_have_library +      assert_not_have_library +    end + +    def test_not_have_library_with_name +      create_library +      assert_not_have_library("#{FUNC_NAME}_fake", HEADER_NAME) +    end +  end +end diff --git a/jni/ruby/test/mkmf/test_have_macro.rb b/jni/ruby/test/mkmf/test_have_macro.rb new file mode 100644 index 0000000..43c4029 --- /dev/null +++ b/jni/ruby/test/mkmf/test_have_macro.rb @@ -0,0 +1,35 @@ +require_relative 'base' +require 'tempfile' + +class TestMkmf +  class TestHaveMacro < TestMkmf +    MACRO_NAME = "RUBY_MKMFTEST_FOOBAR" + +    def test_have_macro_opt +      assert_equal(true, have_macro(MACRO_NAME, nil, "-D#{MACRO_NAME}"), MKMFLOG) +    end + +    def test_have_macro_header +      Tempfile.create(%w"test_mkmf .h", ".") do |tmp| +        tmp.puts("#undef #{MACRO_NAME}") +        tmp.puts("#define #{MACRO_NAME} 1") +        tmp.close +        base = File.basename(tmp.path) +        assert_equal(true, have_macro(MACRO_NAME, base, "-I."), MKMFLOG) +      end +    end + +    def test_not_have_macro_opt +      assert_equal(false, have_macro(MACRO_NAME, nil, "-U#{MACRO_NAME}"), MKMFLOG) +    end + +    def test_not_have_macro_header +      Tempfile.create(%w"test_mkmf .h", ".") do |tmp| +        tmp.puts("#undef #{MACRO_NAME}") +        tmp.close +        base = File.basename(tmp.path) +        assert_equal(false, have_macro(MACRO_NAME, base, "-I."), MKMFLOG) +      end +    end +  end +end diff --git a/jni/ruby/test/mkmf/test_libs.rb b/jni/ruby/test/mkmf/test_libs.rb new file mode 100644 index 0000000..27674df --- /dev/null +++ b/jni/ruby/test/mkmf/test_libs.rb @@ -0,0 +1,86 @@ +require_relative 'base' + +class TestMkmf +  class TestLibs < TestMkmf +    def test_split_libs +      assert_equal(%w[-lfoo -lbar], split_libs("-lfoo -lbar")) +      assert_equal(%w[-ObjC -framework\ Ruby], split_libs("-ObjC -framework Ruby"), 'Bug #6987') +    end + +    def assert_in_order(array, x, y, mesg = nil) +      mesg = "#{x} must proceed to #{y}#{': ' if mesg}#{mesg}" +      assert_operator(array.index(x), :<, array.rindex(y), mesg) +    end + +    def test_merge_simple +      bug = '[ruby-dev:21765]' +      assert_equal([], merge_libs(%w[])) +      assert_equal(%w[a b], merge_libs(%w[a], %w[b])) +      array = merge_libs(%w[a c], %w[b]) +      assert_in_order(array, "a", "c", bug) +    end + +    def test_merge_seq +      bug = '[ruby-dev:21765]' +      array = merge_libs(%w[a c d], %w[c b e]) +      assert_in_order(array, "a", "c", bug) +      assert_in_order(array, "c", "d", bug) +      assert_in_order(array, "c", "b", bug) +      assert_in_order(array, "b", "e", bug) +    end + +    def test_merge_seq_pre +      bug = '[ruby-dev:21765]' +      array = merge_libs(%w[a c d], %w[b c d e]) +      assert_in_order(array, "a", "c", bug) +      assert_in_order(array, "c", "d", bug) +      assert_in_order(array, "b", "c", bug) +      assert_in_order(array, "d", "e", bug) +    end + +    def test_merge_cyclic +      bug = '[ruby-dev:21765]' +      array = merge_libs(%w[a c d], %w[b c b]) +      assert_in_order(array, "a", "c", bug) +      assert_in_order(array, "c", "d", bug) +      assert_in_order(array, "b", "c", bug) +      assert_in_order(array, "c", "b", bug) +    end + +    def test_merge_cyclic_2 +      bug = '[ruby-dev:21765]' +      array = merge_libs(%w[a c a d], %w[b c b]) +      assert_in_order(array, "a", "c", bug) +      assert_in_order(array, "c", "a", bug) +      assert_in_order(array, "c", "d", bug) +      assert_in_order(array, "a", "d", bug) +      assert_in_order(array, "b", "c", bug) +      assert_in_order(array, "c", "b", bug) +    end + +    def test_merge_reversal +      bug = '[ruby-dev:22440]' +      array = merge_libs(%w[a b c], %w[c d a]) +      assert_in_order(array, "a", "b" , bug) +      assert_in_order(array, "c", "d" , bug) +      ## assume that a and c have no dependency +    end + +    def test_merge_reversal_followed +      bug7467 = '[ruby-core:50314] [Bug #7467]' +      array = nil +      assert_nothing_raised(bug7467) { +        array = merge_libs(%w[a b c d e f g h], %w[d c d e], []) +      } +      assert_in_order(array, "a", "b", bug7467) +      assert_in_order(array, "b", "c", bug7467) +      assert_in_order(array, "c", "d", bug7467) +      assert_in_order(array, "d", "e", bug7467) +      assert_in_order(array, "e", "f", bug7467) +      assert_in_order(array, "f", "g", bug7467) +      assert_in_order(array, "g", "h", bug7467) +      assert_in_order(array, "d", "c", bug7467) +      assert_in_order(array, "c", "e", bug7467) +    end +  end +end if RUBY_ENGINE == "ruby" diff --git a/jni/ruby/test/mkmf/test_signedness.rb b/jni/ruby/test/mkmf/test_signedness.rb new file mode 100644 index 0000000..8d58073 --- /dev/null +++ b/jni/ruby/test/mkmf/test_signedness.rb @@ -0,0 +1,29 @@ +require_relative 'base' + +class TestMkmf +  class TestSignedness < TestMkmf +    def test_typeof_builtin +      bug4144 = '[ruby-dev:42731]' +      [["", "-1"], ["signed ", "-1"], ["unsigned ", "+1"]].each do |signed, expect| +        %w[short int long].each do |type| +          assert_equal(expect.to_i, mkmf {check_signedness(signed+type)}, mkmflog(bug4144)) +        end +      end +    end + +    def test_typeof_typedef +      [["", "-1"], ["signed ", "-1"], ["unsigned ", "+1"]].each do |signed, expect| +        %w[short int long].each do |type| +          open("confdefs.h", "w") {|f| +            f.puts "typedef #{signed}#{type} test1_t;" +          } +          $defs.clear +          assert_equal(expect.to_i, mkmf {check_signedness("test1_t", "confdefs.h")}, MKMFLOG) +          assert_include($defs, "-DSIGNEDNESS_OF_TEST1_T=#{expect}") +        end +      end +    ensure +      File.unlink("confdefs.h") +    end +  end +end diff --git a/jni/ruby/test/mkmf/test_sizeof.rb b/jni/ruby/test/mkmf/test_sizeof.rb new file mode 100644 index 0000000..c014422 --- /dev/null +++ b/jni/ruby/test/mkmf/test_sizeof.rb @@ -0,0 +1,47 @@ +require_relative 'base' + +class TestMkmf +  class TestSizeof < TestMkmf +    def setup +      super +      @sizeof_short = config_value("SIZEOF_SHORT").to_i +      @sizeof_int = config_value("SIZEOF_INT").to_i +      @sizeof_long = config_value("SIZEOF_LONG").to_i +      @sizeof_long_long = config_value("SIZEOF_LONG_LONG").to_i +      @sizeof___int64 = config_value("SIZEOF___INT64").to_i +    end + +    def test_sizeof_builtin +      %w[char short int long float double void*].each do |type| +        assert_kind_of(Integer, mkmf {check_sizeof(type)}, MKMFLOG) +      end +      assert_operator(@sizeof_short, :<=, @sizeof_int) +      assert_operator(@sizeof_int, :<=, @sizeof_long) +      assert_operator(@sizeof_long, :<=, @sizeof_long_long) unless @sizeof_long_long.zero? +      assert_equal(8, @sizeof___int64) unless @sizeof___int64.zero? +    end + +    def test_sizeof_struct +      open("confdefs.h", "w") {|f| +        f.puts "typedef struct {char x;} test1_t;" +      } +      assert_equal(1, mkmf {check_sizeof("test1_t", "confdefs.h")}, MKMFLOG) + +      open("confdefs.h", "w") {|f| +        f.puts "typedef struct {char x, y;} test1_t;" +      } +      assert_equal(2, mkmf {check_sizeof("test1_t", "confdefs.h")}, MKMFLOG) + +      open("confdefs.h", "w") {|f| +        f.puts "typedef struct {int x;} test1_t;" +      } +      assert_equal(@sizeof_int, mkmf {check_sizeof("test1_t", "confdefs.h")}, MKMFLOG) +      open("confdefs.h", "w") {|f| +        f.puts "typedef struct {int x, y;} test1_t;" +      } +      assert_equal(2 * @sizeof_int, mkmf {check_sizeof("test1_t", "confdefs.h")}, MKMFLOG) +    ensure +      File.unlink("confdefs.h") +    end +  end +end | 
