ruby-changes:36046
From: nobu <ko1@a...>
Date: Sat, 25 Oct 2014 12:52:59 +0900 (JST)
Subject: [ruby-changes:36046] nobu:r48127 (trunk): rake/cpu_counter.rb: use Etc.nprocessors
nobu 2014-10-25 12:52:46 +0900 (Sat, 25 Oct 2014) New Revision: 48127 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=48127 Log: rake/cpu_counter.rb: use Etc.nprocessors * lib/rake/cpu_counter.rb (count): prefer Etc.nprocessors, which is hundreds times faster. * test/rake/test_rake_cpu_counter.rb: add tests for features, and remove useless tests. Modified files: trunk/lib/rake/cpu_counter.rb trunk/test/rake/test_rake_cpu_counter.rb Index: lib/rake/cpu_counter.rb =================================================================== --- lib/rake/cpu_counter.rb (revision 48126) +++ lib/rake/cpu_counter.rb (revision 48127) @@ -44,6 +44,18 @@ module Rake https://github.com/ruby/ruby/blob/trunk/lib/rake/cpu_counter.rb#L44 end end + begin + require 'etc' + rescue LoadError + else + if Etc.respond_to?(:nprocessors) + undef count + def count + return Etc.nprocessors + end + end + end + def count_via_java_runtime Java::Java.lang.Runtime.getRuntime.availableProcessors rescue StandardError Index: test/rake/test_rake_cpu_counter.rb =================================================================== --- test/rake/test_rake_cpu_counter.rb (revision 48126) +++ test/rake/test_rake_cpu_counter.rb (revision 48127) @@ -8,43 +8,61 @@ class TestRakeCpuCounter < Rake::TestCas https://github.com/ruby/ruby/blob/trunk/test/rake/test_rake_cpu_counter.rb#L8 @cpu_counter = Rake::CpuCounter.new end - def test_count_via_win32 - if Rake::Win32.windows? then - assert_kind_of Numeric, @cpu_counter.count_via_win32 - else - assert_nil @cpu_counter.count_via_win32 - end + def test_count + num = @cpu_counter.count + skip 'cannot count CPU' if num == nil + assert_kind_of Numeric, num + assert_operator num, :>=, 1 end - def test_in_path_command - with_ruby_in_path do |ruby| - assert_equal ruby, @cpu_counter.in_path_command(ruby) - end - rescue Errno::ENOENT => e - raise unless e.message =~ /\bwhich\b/ + def test_count_with_default_nil + def @cpu_counter.count; nil; end + assert_equal(8, @cpu_counter.count_with_default(8)) + assert_equal(4, @cpu_counter.count_with_default) + end - skip 'cannot find which for this test' + def test_count_with_default_raise + def @cpu_counter.count; raise; end + assert_equal(8, @cpu_counter.count_with_default(8)) + assert_equal(4, @cpu_counter.count_with_default) end - def test_run - with_ruby_in_path do |ruby| - assert_equal 7, @cpu_counter.run(ruby, '-e', 'puts 3 + 4') + class TestClassMethod < Rake::TestCase + def setup + super + + @klass = Class.new(Rake::CpuCounter) end - end - def with_ruby_in_path - ruby = File.basename Gem.ruby - ruby_dir = File.dirname Gem.ruby - - begin - orig_path, ENV['PATH'] = - ENV['PATH'], [ruby_dir, *ENV['PATH']].join(File::PATH_SEPARATOR) - - yield ruby - ensure - ENV['PATH'] = orig_path + def test_count + @klass.class_eval do + def count; 8; end + end + assert_equal(8, @klass.count) end - end -end + def test_count_nil + counted = false + @klass.class_eval do + define_method(:count) do + counted = true + nil + end + end + assert_equal(4, @klass.count) + assert_equal(true, counted) + end + def test_count_raise + counted = false + @klass.class_eval do + define_method(:count) do + counted = true + raise + end + end + assert_equal(4, @klass.count) + assert_equal(true, counted) + end + end +end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/