Skip to content

Commit 45d9293

Browse files
authored
Merge pull request #538 from romuald/fix-time-ns-mock
Fix time_ns() freeze rounding error
2 parents 5b6c4a2 + 6f14dc3 commit 45d9293

File tree

2 files changed

+16
-5
lines changed

2 files changed

+16
-5
lines changed

freezegun/api.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ def fake_time() -> float:
195195
def fake_time_ns() -> int:
196196
if _should_use_real_time():
197197
return real_time_ns()
198-
return int(int(fake_time()) * 1e9)
198+
return int(fake_time() * 1e9)
199199

200200

201201
def fake_localtime(t: Optional[float]=None) -> time.struct_time:

tests/test_datetimes.py

+15-4
Original file line numberDiff line numberDiff line change
@@ -749,14 +749,25 @@ def test_time_ns() -> None:
749749
utc_time = local_time - datetime.timedelta(seconds=time.timezone)
750750
expected_timestamp = time.mktime(utc_time.timetuple())
751751

752-
freezer.start()
753-
assert time.time() == expected_timestamp
754-
assert time.time_ns() == expected_timestamp * 1e9
755-
freezer.stop()
752+
with freezer:
753+
assert time.time() == expected_timestamp
754+
assert time.time_ns() == expected_timestamp * 1e9
755+
756756
assert time.time() != expected_timestamp
757757
assert time.time_ns() != expected_timestamp * 1e9
758758

759759

760+
@pytest.mark.skipif(not HAS_TIME_NS,
761+
reason="time.time_ns is present only on 3.7 and above")
762+
def test_time_ns_with_microseconds() -> None:
763+
freezer = freeze_time("2024-03-20 18:21:10.12345")
764+
765+
with freezer:
766+
assert time.time_ns() == 1710958870123450112
767+
768+
assert time.time_ns() != 1710958870123450112
769+
770+
760771
def test_compare_datetime_and_time_with_timezone(monkeypatch: pytest.MonkeyPatch) -> None:
761772
"""
762773
Compare the result of datetime.datetime.now() and time.time() in a non-UTC timezone. These

0 commit comments

Comments
 (0)