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

ruby-changes:64692

From: nagachika <ko1@a...>
Date: Thu, 31 Dec 2020 18:34:23 +0900 (JST)
Subject: [ruby-changes:64692] d069339110 (ruby_2_7): merge revision(s) ed549f80b645aafd62376f65c3a27b66bafa2a38,eff0c5bf2ad47d10a440c5211be5eddb3bbf4028,f6b6a7ad345c50eeb3f7206ceabdf41ba94b7d85,5b48686691c2443d8d7113e593494c4d9302da0e,2af4c1fc5b19fc96203c2d7e917e689510d3527e,c9213aa864fb8527388679c21f1ea8ce129e2f1a,224f29c8e92094af10bc666c474b81a3545d6adf:

https://git.ruby-lang.org/ruby.git/commit/?id=d069339110

From d0693391103672b7fc3976e5ae8ae414059b3e97 Mon Sep 17 00:00:00 2001
From: nagachika <nagachika@r...>
Date: Thu, 31 Dec 2020 18:34:09 +0900
Subject: merge revision(s)
 ed549f80b645aafd62376f65c3a27b66bafa2a38,eff0c5bf2ad47d10a440c5211be5eddb3bbf4028,f6b6a7ad345c50eeb3f7206ceabdf41ba94b7d85,5b48686691c2443d8d7113e593494c4d9302da0e,2af4c1fc5b19fc96203c2d7e917e689510d3527e,c9213aa864fb8527388679c21f1ea8ce129e2f1a,224f29c8e92094af10bc666c474b81a3545d6adf:

	spec/ruby/core/process/clock_getres_spec.rb: skip on Android

	in the same way as FreeBSD and OpenBSD.
	I guess that the spec makes too strong assumption.

	Try to avoid random failures on clock_getres_spec.rb

	This spec fails too often
	https://github.com/ruby/ruby/runs/529546249
	https://github.com/ruby/ruby/runs/524933256

	Show failed times

	Remove Process.clock_getres "matches the resolution in practice"
	 specs

	* Almost all platforms return incorrect values for Process.clock_getres,
	  it should be removed: https://bugs.ruby-lang.org/issues/16740

	Skip Process#clock_getres specs on Android

	... just like AIX and OpenBSD.

	Update to ruby/spec@d394dfd

	spec/ruby/core/process/clock_getres_spec.rb: lax the resolution limit

	Android is Linux, but the clock resolution is 10 milliseconds.
	I think that 1 microsecond is too strict for embedded environment.
	This change laxes the limit to 10 milliseconds.

diff --git a/spec/ruby/core/process/clock_getres_spec.rb b/spec/ruby/core/process/clock_getres_spec.rb
index f1ecb74..85aa2b2 100644
--- a/spec/ruby/core/process/clock_getres_spec.rb
+++ b/spec/ruby/core/process/clock_getres_spec.rb
@@ -1,34 +1,6 @@ https://github.com/ruby/ruby/blob/trunk/spec/ruby/core/process/clock_getres_spec.rb#L1
 require_relative '../../spec_helper'
-require_relative 'fixtures/clocks'
 
 describe "Process.clock_getres" do
-  # clock_getres() seems completely buggy on FreeBSD:
-  # https://rubyci.org/logs/rubyci.s3.amazonaws.com/freebsd11zfs/ruby-trunk/log/20190428T093003Z.fail.html.gz
-  platform_is_not :freebsd, :openbsd do
-    # NOTE: Look at fixtures/clocks.rb for clock and OS-specific exclusions
-    ProcessSpecs.clock_constants_for_resolution_checks.each do |name, value|
-      it "matches the clock in practice for Process::#{name}" do
-        times = 10_000.times.map { Process.clock_gettime(value, :nanosecond) }
-        reported = Process.clock_getres(value, :nanosecond)
-
-        # The clock should not be more accurate than reported (times should be
-        # a multiple of reported precision.)
-        times.select { |t| t % reported > 0 }.should be_empty
-
-        # We're assuming precision is a multiple of ten - it may or may not
-        # be an incompatibility if it isn't but we'd like to notice this,
-        # and the spec following these wouldn't work if it isn't.
-        reported.should > 0
-        (reported == 1 || reported % 10 == 0).should be_true
-
-        # The clock should not be less accurate than reported (times should
-        # not all be a multiple of the next precision up, assuming precisions
-        # are multiples of ten.)
-        times.select { |t| t % (reported * 10) == 0 }.size.should_not == times.size
-      end
-    end
-  end
-
   # These are documented
 
   it "with :GETTIMEOFDAY_BASED_CLOCK_REALTIME reports 1 microsecond" do
@@ -47,15 +19,15 @@ describe "Process.clock_getres" do https://github.com/ruby/ruby/blob/trunk/spec/ruby/core/process/clock_getres_spec.rb#L19
 
   # These are observed
 
-  platform_is_not :solaris, :aix, :openbsd do
-    it "with Process::CLOCK_REALTIME reports at least 1 microsecond" do
-      Process.clock_getres(Process::CLOCK_REALTIME, :nanosecond).should <= 1_000
+  platform_is :linux, :darwin, :windows do
+    it "with Process::CLOCK_REALTIME reports at least 10 millisecond" do
+      Process.clock_getres(Process::CLOCK_REALTIME, :nanosecond).should <= 10_000_000
     end
   end
 
-  platform_is_not :aix, :openbsd do
-    it "with Process::CLOCK_MONOTONIC reports at least 1 microsecond" do
-      Process.clock_getres(Process::CLOCK_MONOTONIC, :nanosecond).should <= 1_000
+  platform_is :linux, :darwin, :windows do
+    it "with Process::CLOCK_MONOTONIC reports at least 10 millisecond" do
+      Process.clock_getres(Process::CLOCK_MONOTONIC, :nanosecond).should <= 10_000_000
     end
   end
 end
diff --git a/spec/ruby/core/process/fixtures/clocks.rb b/spec/ruby/core/process/fixtures/clocks.rb
index 7537cfa..f043f6a 100644
--- a/spec/ruby/core/process/fixtures/clocks.rb
+++ b/spec/ruby/core/process/fixtures/clocks.rb
@@ -15,46 +15,4 @@ module ProcessSpecs https://github.com/ruby/ruby/blob/trunk/spec/ruby/core/process/fixtures/clocks.rb#L15
       [c, Process.const_get(c)]
     }
   end
-
-  def self.clock_constants_for_resolution_checks
-    clocks = clock_constants
-
-    # These clocks in practice on Linux do not seem to match their reported resolution.
-    platform_is :linux do
-      clocks = clocks.reject { |clock, value|
-        [:CLOCK_REALTIME_COARSE, :CLOCK_MONOTONIC_COARSE].include?(clock)
-      }
-    end
-
-    # These clocks in practice on macOS seem to be less precise than advertised by clock_getres
-    platform_is :darwin do
-      clocks = clocks.reject { |clock, value|
-        [:CLOCK_UPTIME_RAW_APPROX, :CLOCK_MONOTONIC_RAW_APPROX].include?(clock)
-      }
-    end
-
-    # These clocks in practice on ARM on Linux do not seem to match their reported resolution.
-    platform_is :armv7, :armv8, :aarch64 do
-      clocks = clocks.reject { |clock, value|
-        [:CLOCK_PROCESS_CPUTIME_ID, :CLOCK_THREAD_CPUTIME_ID, :CLOCK_MONOTONIC_RAW].include?(clock)
-      }
-    end
-
-    # These clocks in practice on AIX seem to be more precise than their reported resolution.
-    platform_is :aix do
-      clocks = clocks.reject { |clock, value|
-        [:CLOCK_REALTIME, :CLOCK_MONOTONIC].include?(clock)
-      }
-    end
-
-    # On a Hyper-V Linux guest machine, these clocks in practice
-    # seem to be less precise than advertised by clock_getres
-    platform_is :linux do
-      clocks = clocks.reject { |clock, value|
-        clock == :CLOCK_MONOTONIC_RAW
-      }
-    end
-
-    clocks
-  end
 end
diff --git a/version.h b/version.h
index e852c18..fa6b79c 100644
--- a/version.h
+++ b/version.h
@@ -2,7 +2,7 @@ https://github.com/ruby/ruby/blob/trunk/version.h#L2
 # define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR
 #define RUBY_VERSION_TEENY 3
 #define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR
-#define RUBY_PATCHLEVEL 145
+#define RUBY_PATCHLEVEL 146
 
 #define RUBY_RELEASE_YEAR 2020
 #define RUBY_RELEASE_MONTH 12
-- 
cgit v0.10.2


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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