зеркало из https://github.com/github/ruby.git
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. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48127 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
5940b1f6fc
Коммит
26143970c1
|
@ -44,6 +44,18 @@ module Rake
|
|||
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
|
||||
|
|
|
@ -8,43 +8,61 @@ class TestRakeCpuCounter < Rake::TestCase
|
|||
@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/
|
||||
|
||||
skip 'cannot find which for this test'
|
||||
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
|
||||
|
||||
def test_run
|
||||
with_ruby_in_path do |ruby|
|
||||
assert_equal 7, @cpu_counter.run(ruby, '-e', 'puts 3 + 4')
|
||||
end
|
||||
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 with_ruby_in_path
|
||||
ruby = File.basename Gem.ruby
|
||||
ruby_dir = File.dirname Gem.ruby
|
||||
class TestClassMethod < Rake::TestCase
|
||||
def setup
|
||||
super
|
||||
|
||||
begin
|
||||
orig_path, ENV['PATH'] =
|
||||
ENV['PATH'], [ruby_dir, *ENV['PATH']].join(File::PATH_SEPARATOR)
|
||||
|
||||
yield ruby
|
||||
ensure
|
||||
ENV['PATH'] = orig_path
|
||||
end
|
||||
@klass = Class.new(Rake::CpuCounter)
|
||||
end
|
||||
|
||||
def test_count
|
||||
@klass.class_eval do
|
||||
def count; 8; end
|
||||
end
|
||||
assert_equal(8, @klass.count)
|
||||
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
|
||||
|
|
Загрузка…
Ссылка в новой задаче