util2.format_elapsed_hr(): add rel_now, show_secs params; add test

This commit is contained in:
The MMGen Project 2024-04-15 09:48:15 +00:00
commit d6dba0d7f1
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2
2 changed files with 75 additions and 12 deletions

View file

@ -132,18 +132,30 @@ def format_elapsed_days_hr(t,now=None,cached={}):
cached[e] = f'{days} day{suf(days)} ' + ('ago' if e > 0 else 'in the future')
return cached[e]
def format_elapsed_hr(t,now=None,cached={}):
def format_elapsed_hr(t, now=None, cached={}, rel_now=True, show_secs=False):
e = int((now or time.time()) - t)
if not e in cached:
key = f'{e}:{rel_now}:{show_secs}'
if not key in cached:
def add_suffix():
return (
((' ago' if rel_now else '') if e > 0 else
(' in the future' if rel_now else ' (negative elapsed)'))
if (abs_e if show_secs else abs_e // 60) else
('just now' if rel_now else ('0 ' + ('seconds' if show_secs else 'minutes')))
)
abs_e = abs(e)
cached[e] = ' '.join(
f'{n} {desc}{suf(n)}' for desc,n in (
('day', abs_e // 86400),
('hour', abs_e // 3600 % 24),
('minute', abs_e // 60 % 60),
) if n
) + (' ago' if e > 0 else ' in the future') if abs_e // 60 else 'just now'
return cached[e]
data = (
('day', abs_e // 86400),
('hour', abs_e // 3600 % 24),
('minute', abs_e // 60 % 60),
('second', abs_e % 60),
) if show_secs else (
('day', abs_e // 86400),
('hour', abs_e // 3600 % 24),
('minute', abs_e // 60 % 60),
)
cached[key] = ' '.join(f'{n} {desc}{suf(n)}' for desc, n in data if n) + add_suffix()
return cached[key]
def pretty_format(s,width=80,pfx=''):
out = []

View file

@ -4,14 +4,65 @@
test.unit_tests_d.ut_misc: miscellaneous unit tests for the MMGen suite
"""
import re
import re, time
from collections import namedtuple
from mmgen.color import yellow, blue
from mmgen.color import yellow, blue, brown
from ..include.common import vmsg
class unit_tests:
def format_elapsed_hr(self, name, ut):
from mmgen.util2 import format_elapsed_hr
vectors = (
# t now rel_now show_secs out
(1, 1, False, False, '0 minutes'),
(1, 1, True, False, 'just now'),
(0, -2, True, False, 'just now'),
(0, -62, True, False, '1 minute in the future'),
(0, -62, False, False, '1 minute (negative elapsed)'),
(0, 7, False, False, '0 minutes'),
(0, 7, True, False, 'just now'),
(0, 60, True, False, '1 minute ago'),
(0, 67, True, False, '1 minute ago'),
(0, 7200, True, False, '2 hours ago'),
(0, 3600 + 180 + 1, True, False, '1 hour 3 minutes ago'),
(0, 3600*27 + 180 + 7, True, False, '1 day 3 hours 3 minutes ago'),
(0, 3600*24*367 + 180 + 7, True, False, '367 days 3 minutes ago'),
(1, 1, False, True, '0 seconds'),
(1, 1, True, True, 'just now'),
(0, -2, True, True, '2 seconds in the future'),
(0, -62, True, True, '1 minute 2 seconds in the future'),
(0, -62, False, True, '1 minute 2 seconds (negative elapsed)'),
(0, 7, False, True, '7 seconds'),
(0, 7, True, True, '7 seconds ago'),
(0, 60, False, True, '1 minute'),
(0, 67, False, True, '1 minute 7 seconds'),
(0, 7200, False, True, '2 hours'),
(0, 3600 + 180 + 1, False, True, '1 hour 3 minutes 1 second'),
(0, 3600*27 + 180 + 7, False, True, '1 day 3 hours 3 minutes 7 seconds'),
(0, 3600*24*367 + 180 + 7, True, True, '367 days 3 minutes 7 seconds ago'),
)
fs = ' {:7} {:9} {:<8} {}'
vmsg(brown(' vectors:'))
vmsg(fs.format('REL_NOW', 'SHOW_SECS', 'ELAPSED', 'OUTPUT'))
for (t, now, rel_now, show_secs, out_chk) in vectors:
out = format_elapsed_hr(t, now, rel_now=rel_now, show_secs=show_secs)
assert out == out_chk, f'{out} != {out_chk}'
vmsg(fs.format(repr(rel_now), repr(show_secs), now-t, out))
vmsg(brown(' real time:'))
start = time.time() - 3600 - 127
ret = format_elapsed_hr(start) # test old default behavior
vmsg(f' {3600 - 127:<8} {ret}')
ret = format_elapsed_hr(start, show_secs=True)
vmsg(f' {3600 - 127:<8} {ret}')
return True
def xmrwallet_uarg_info(self,name,ut): # WIP
from mmgen.xmrwallet import xmrwallet_uarg_info as uarg_info
vs = namedtuple('vector_data', ['text', 'groups'])