File: //usr/local/rvm/src/ruby-3.0.2/spec/ruby/core/process/clock_gettime_spec.rb
require_relative '../../spec_helper'
require_relative 'fixtures/clocks'
describe "Process.clock_gettime" do
ProcessSpecs.clock_constants.each do |name, value|
it "can be called with Process::#{name}" do
Process.clock_gettime(value).should be_an_instance_of(Float)
end
end
describe 'time units' do
it 'handles a fixed set of time units' do
[:nanosecond, :microsecond, :millisecond, :second].each do |unit|
Process.clock_gettime(Process::CLOCK_MONOTONIC, unit).should be_kind_of(Integer)
end
[:float_microsecond, :float_millisecond, :float_second].each do |unit|
Process.clock_gettime(Process::CLOCK_MONOTONIC, unit).should be_an_instance_of(Float)
end
end
it 'raises an ArgumentError for an invalid time unit' do
-> { Process.clock_gettime(Process::CLOCK_MONOTONIC, :bad) }.should raise_error(ArgumentError)
end
it 'defaults to :float_second' do
t1 = Process.clock_gettime(Process::CLOCK_MONOTONIC)
t2 = Process.clock_gettime(Process::CLOCK_MONOTONIC, :float_second)
t1.should be_an_instance_of(Float)
t2.should be_an_instance_of(Float)
t2.should be_close(t1, TIME_TOLERANCE)
end
it 'uses the default time unit (:float_second) when passed nil' do
t1 = Process.clock_gettime(Process::CLOCK_MONOTONIC, nil)
t2 = Process.clock_gettime(Process::CLOCK_MONOTONIC, :float_second)
t1.should be_an_instance_of(Float)
t2.should be_an_instance_of(Float)
t2.should be_close(t1, TIME_TOLERANCE)
end
end
describe "supports the platform clocks mentioned in the documentation" do
it "CLOCK_REALTIME" do
Process.clock_gettime(Process::CLOCK_REALTIME).should be_an_instance_of(Float)
end
it "CLOCK_MONOTONIC" do
Process.clock_gettime(Process::CLOCK_MONOTONIC).should be_an_instance_of(Float)
end
# These specs need macOS 10.12+ / darwin 16+
guard_not -> { platform_is_not(:darwin) or RUBY_PLATFORM[/darwin\d+/].to_i >= 16 } do
platform_is :linux, :openbsd, :darwin do
it "CLOCK_PROCESS_CPUTIME_ID" do
Process.clock_gettime(Process::CLOCK_PROCESS_CPUTIME_ID).should be_an_instance_of(Float)
end
end
platform_is :linux, :freebsd, :openbsd, :darwin do
it "CLOCK_THREAD_CPUTIME_ID" do
Process.clock_gettime(Process::CLOCK_THREAD_CPUTIME_ID).should be_an_instance_of(Float)
end
end
platform_is :freebsd, :openbsd do
it "CLOCK_VIRTUAL" do
Process.clock_gettime(Process::CLOCK_VIRTUAL).should be_an_instance_of(Float)
end
it "CLOCK_PROF" do
Process.clock_gettime(Process::CLOCK_PROF).should be_an_instance_of(Float)
end
it "CLOCK_UPTIME" do
Process.clock_gettime(Process::CLOCK_UPTIME).should be_an_instance_of(Float)
end
end
platform_is :linux, :darwin do
it "CLOCK_MONOTONIC_RAW" do
Process.clock_gettime(Process::CLOCK_MONOTONIC_RAW).should be_an_instance_of(Float)
end
end
platform_is :darwin do
it "CLOCK_MONOTONIC_RAW_APPROX" do
Process.clock_gettime(Process::CLOCK_MONOTONIC_RAW_APPROX).should be_an_instance_of(Float)
end
it "CLOCK_UPTIME_RAW and CLOCK_UPTIME_RAW_APPROX" do
Process.clock_gettime(Process::CLOCK_UPTIME_RAW).should be_an_instance_of(Float)
Process.clock_gettime(Process::CLOCK_UPTIME_RAW_APPROX).should be_an_instance_of(Float)
end
end
platform_is :freebsd do
it "CLOCK_REALTIME_FAST and CLOCK_REALTIME_PRECISE" do
Process.clock_gettime(Process::CLOCK_REALTIME_FAST).should be_an_instance_of(Float)
Process.clock_gettime(Process::CLOCK_REALTIME_PRECISE).should be_an_instance_of(Float)
end
it "CLOCK_MONOTONIC_FAST and CLOCK_MONOTONIC_PRECISE" do
Process.clock_gettime(Process::CLOCK_MONOTONIC_FAST).should be_an_instance_of(Float)
Process.clock_gettime(Process::CLOCK_MONOTONIC_PRECISE).should be_an_instance_of(Float)
end
it "CLOCK_UPTIME_FAST and CLOCK_UPTIME_PRECISE" do
Process.clock_gettime(Process::CLOCK_UPTIME_FAST).should be_an_instance_of(Float)
Process.clock_gettime(Process::CLOCK_UPTIME_PRECISE).should be_an_instance_of(Float)
end
it "CLOCK_SECOND" do
Process.clock_gettime(Process::CLOCK_SECOND).should be_an_instance_of(Float)
end
end
platform_is :linux do
it "CLOCK_REALTIME_COARSE and CLOCK_REALTIME_ALARM" do
Process.clock_gettime(Process::CLOCK_REALTIME_COARSE).should be_an_instance_of(Float)
Process.clock_gettime(Process::CLOCK_REALTIME_ALARM).should be_an_instance_of(Float)
end
it "CLOCK_MONOTONIC_COARSE" do
Process.clock_gettime(Process::CLOCK_MONOTONIC_COARSE).should be_an_instance_of(Float)
end
it "CLOCK_BOOTTIME and CLOCK_BOOTTIME_ALARM" do
Process.clock_gettime(Process::CLOCK_BOOTTIME).should be_an_instance_of(Float)
Process.clock_gettime(Process::CLOCK_BOOTTIME_ALARM).should be_an_instance_of(Float)
end
end
end
end
end