Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Calculate travel_offset to align with the precision of argument to Timecop.travel #421

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions History.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

## Unreleased

- Calculate travel_offset to align with the precision of argument to Timecop.travel ([#421](https://github.com/travisjeffery/timecop/pull/421))

## v0.9.10

- Make Process.clock_gettime configurable and turned off by default (for backwards compatability) ([#427](https://github.com/travisjeffery/timecop/pull/427))
Expand Down
2 changes: 1 addition & 1 deletion lib/timecop/time_stack_item.rb
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ def parse_time(*args)
end

def compute_travel_offset
time - Time.now_without_mock_time
time.to_r - Time.now_without_mock_time.to_r
end

def times_are_equal_within_epsilon t1, t2, epsilon_in_seconds
Expand Down
18 changes: 18 additions & 0 deletions test/time_stack_item_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -296,4 +296,22 @@ def test_datetime_timezones
assert_equal dt, now, "#{dt.to_f}, #{now.to_f}"
end
end

def test_travel_offset_aligns_to_clock
t = Time.now
stack_item = Timecop::TimeStackItem.new(:travel, t)
travel_offset_denom = stack_item.travel_offset.to_r.denominator
clock_resolution = Process.clock_getres(:CLOCK_REALTIME, :hertz)
assert_equal 0, clock_resolution.modulo(travel_offset_denom),
"travel offset precision (#{travel_offset_denom}) does not align with clock resolution (#{clock_resolution})"
end

def test_travel_offset_aligns_to_travel_time
t = Time.now + 0.001_002_003_004
stack_item = Timecop::TimeStackItem.new(:travel, t)
travel_offset_denom = stack_item.travel_offset.to_r.denominator
travel_time_denom = t.to_r.denominator
assert_equal 0, travel_time_denom.modulo(travel_offset_denom),
"travel offset precision (#{travel_offset_denom}) does not align with travel time precision (#{travel_time_denom})"
end
end