[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]