From 04195a426041a19d08fb7a60259678d0edd9b954 Mon Sep 17 00:00:00 2001 From: Martijn Pieters Date: Mon, 9 Jun 2025 19:03:48 +0100 Subject: [PATCH] Use time.perf_counter_ns This gives an integer number of nanoseconds, with far greater precision than the `timeit.default_timer` == `time.perf_counter` timer which provides a float (double) value in seconds. --- codewars_test/test_framework.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/codewars_test/test_framework.py b/codewars_test/test_framework.py index 7b6fc6a..923152b 100644 --- a/codewars_test/test_framework.py +++ b/codewars_test/test_framework.py @@ -97,17 +97,19 @@ def it1(): def _timed_block_factory(opening_text): - from timeit import default_timer as timer + from time import perf_counter_ns as timer from traceback import format_exception from sys import exc_info + millis_per_nano = 1_000_000 + def _timed_block_decorator(s, before=None, after=None): display(opening_text, s) def wrapper(func): if callable(before): before() - time = timer() + time_ns = timer() try: func() except AssertionError as e: @@ -116,7 +118,7 @@ def wrapper(func): fail('Unexpected exception raised') tb_str = ''.join(format_exception(*exc_info())) display('ERROR', tb_str) - display('COMPLETEDIN', '{:.2f}'.format((timer() - time) * 1000)) + display('COMPLETEDIN', '{:.2f}'.format((timer() - time_ns) / millis_per_nano)) if callable(after): after() return wrapper