Class: TIMEx::Clock::VirtualClock

Inherits:
Object
  • Object
show all
Defined in:
lib/timex/clock.rb

Overview

Mutable monotonic/wall pair used in tests to advance time without sleeping.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(monotonic_ns: 0, wall_ns: Process.clock_gettime(Process::CLOCK_REALTIME, :nanosecond)) ⇒ VirtualClock

Returns a new instance of VirtualClock.

Parameters:

  • monotonic_ns (Integer) (defaults to: 0)

    starting monotonic nanoseconds

  • wall_ns (Integer) (defaults to: Process.clock_gettime(Process::CLOCK_REALTIME, :nanosecond))

    starting wall nanoseconds (defaults to realtime now)



88
89
90
91
# File 'lib/timex/clock.rb', line 88

def initialize(monotonic_ns: 0, wall_ns: Process.clock_gettime(Process::CLOCK_REALTIME, :nanosecond))
  @monotonic_ns = monotonic_ns
  @wall_ns = wall_ns
end

Instance Attribute Details

#monotonic_nsObject

Returns the value of attribute monotonic_ns.



84
85
86
# File 'lib/timex/clock.rb', line 84

def monotonic_ns
  @monotonic_ns
end

#wall_nsObject

Returns the value of attribute wall_ns.



84
85
86
# File 'lib/timex/clock.rb', line 84

def wall_ns
  @wall_ns
end

Instance Method Details

#advance(seconds) ⇒ self

Advances both monotonic and wall by seconds (no sleep).

Parameters:

  • seconds (Numeric)

    delta in seconds

Returns:

  • (self)

    for chaining



97
98
99
100
101
102
# File 'lib/timex/clock.rb', line 97

def advance(seconds)
  delta = (seconds * Clock::NS_PER_SECOND).to_i
  @monotonic_ns += delta
  @wall_ns += delta
  self
end

#sleep(seconds) ⇒ self

Returns for chaining.

Parameters:

  • seconds (Numeric)

    virtual sleep; advances clocks like #advance

Returns:

  • (self)

    for chaining



106
107
108
# File 'lib/timex/clock.rb', line 106

def sleep(seconds)
  advance(seconds)
end