From dafbaabc04e5a2d34045af78629a7249fd8c7481 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Sun, 23 Apr 2023 11:54:31 +0900 Subject: Check the precision of `getrusage` at runtime --- spec/ruby/core/process/times_spec.rb | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'spec/ruby') diff --git a/spec/ruby/core/process/times_spec.rb b/spec/ruby/core/process/times_spec.rb index 1cf8d5e8bb..d2610f6415 100644 --- a/spec/ruby/core/process/times_spec.rb +++ b/spec/ruby/core/process/times_spec.rb @@ -17,8 +17,18 @@ describe "Process.times" do end end + # TODO: The precision of `getrusage` depends on platforms (OpenBSD + # seems not supporting under-milliseconds in fact); this example is + # very questionable as an example of Ruby, and it just repeats the + # guard condition. guard -> do - Process.clock_gettime(:GETRUSAGE_BASED_CLOCK_PROCESS_CPUTIME_ID) + 1000.times.any? do + # If getrusage has precision beyond milliseconds, there will be + # very likely at least one non-zero microsecond results when + # repeating enough. + time = Process.clock_gettime(:GETRUSAGE_BASED_CLOCK_PROCESS_CPUTIME_ID) + not ('%.6f' % time).end_with?('000') + end rescue Errno::EINVAL false end do -- cgit v1.2.1