133 lines
13 KiB
Python
133 lines
13 KiB
Python
from typing import Any
|
|
from toolbox import format_time, format_time_ns
|
|
|
|
def Assert(name: str, expected: Any, result: Any):
|
|
"""Test if a given result is equal of the expected one and log result
|
|
|
|
Args:
|
|
name (str): name of the unit test
|
|
expected (Any): expected result of the function call
|
|
result (Any): result of the function
|
|
"""
|
|
if expected != result:
|
|
print(f"For test name {name} Expected '{expected}' but got '{result}' instead")
|
|
assert False
|
|
|
|
def format_time_test() -> None:
|
|
"""Test suite for the format_time output
|
|
|
|
See https://en.wikipedia.org/wiki/Unit_of_time for details
|
|
"""
|
|
Assert("format_time null", "0s", format_time(0))
|
|
Assert("format_time second", "1s", format_time(1))
|
|
Assert("format_time decasecond", "10s", format_time(10))
|
|
Assert("format_time minute", "1m", format_time(60))
|
|
Assert("format_time milliday", "1m 26s", format_time(86)) # missing 0.4s due to precision
|
|
Assert("format_time hectosecond", "1m 40s", format_time(100))
|
|
Assert("format_time kilosecond", "16m 40s", format_time(int(1e3)))
|
|
Assert("format_time hour", "1h", format_time(3600))
|
|
Assert("format_time day", "1j", format_time(86400))
|
|
Assert("format_time week/sennight", "1w", format_time(604800))
|
|
Assert("format_time megasecond", "1w 4j 13h 46m 40s", format_time(int(1e6)))
|
|
Assert("format_time fortnight", "2w", format_time(1209600))
|
|
Assert("format_time lunar month (draconitic)", "3w 6j 5h 5m 35s", format_time(2351135)) # missing 0.8 due to precision
|
|
Assert("format_time lunar month (tropical)", "3w 6j 7h 43m 4s", format_time(2360584)) # missing 0.7 due to precision
|
|
Assert("format_time lunar month (sidereal)", "3w 6j 7h 43m 11s", format_time(2360591)) # missing 0.6 to precision
|
|
Assert("format_time lunar month (anomalistic)", "3w 6j 13h 18m 33s", format_time(2380713)) # missing 0.2 due to precision
|
|
Assert("format_time lunar month (synodic)", "4w 1j 12h 44m 2s", format_time(2551442)) # missing 0.9 due to precision
|
|
Assert("format_time month", "1M", format_time(2678400))
|
|
Assert("format_time quarantine", "1M 1w 2j", format_time(int(3456e3)))
|
|
Assert("format_time semester", "4M 2j", format_time(10886400))
|
|
Assert("format_time lunar year", "11M 1w 6j 8h 52m 48s", format_time(30617568))
|
|
Assert("format_time year", "1y", format_time(int(31536e3)))
|
|
Assert("format_time tropical year", "1y 5h 48m 45s", format_time(31556925)) # missing 0.216 due to precision
|
|
Assert("format_time gregorian year", "1y 5h 49m 12s", format_time(31556952))
|
|
Assert("format_time sidereal year", "1y 6h 9m 9s", format_time(31558149)) # missing 0.7635456 due to precision
|
|
Assert("format_time leap year", "1y 1j", format_time(31622400))
|
|
Assert("format_time olympiad", "4y", format_time(int(126144e3)))
|
|
Assert("format_time lusturm", "5y", format_time(int(15768e4)))
|
|
Assert("format_time decade", "10y", format_time(int(31536e4)))
|
|
Assert("format_time indiction", "15y", format_time(int(47304e4)))
|
|
Assert("format_time score", "20y", format_time(int(63072e4)))
|
|
Assert("format_time gigasecond", "31y 8M 1w 4j 1h 46m 40s", format_time(int(1e9)))
|
|
Assert("format_time jubilee", "50y", format_time(int(15768e5)))
|
|
Assert("format_time century", "1c", format_time(int(31536e5)))
|
|
Assert("format_time millennium", "10c", format_time(int(31536e6)))
|
|
Assert("format_time age", "257c 72y", format_time(int(812745792e3)))
|
|
Assert("format_time terasecond", "3170c 97y 10M 3w 4j 17h 46m 40s", format_time(int(1e13)))
|
|
Assert("format_time megaannum", "10000c", format_time(int(31536e9)))
|
|
Assert("format_time petasecond", "317097c 91y 11M 2w 4j 1h 46m 40s", format_time(int(1e15)))
|
|
Assert("format_time galactic year", "2300000c", format_time(int(725328e10)))
|
|
Assert("format_time eon", "10000000c", format_time(int(31536e12)))
|
|
Assert("format_time kalpa", "43200000c", format_time(int(13623552e10)))
|
|
Assert("format_time exasecond", "317097919c 83y 9M 1h 46m 40s", format_time(int(1e18)))
|
|
# Cannot use number bigger than currently supported ISO Python
|
|
#Assert("format_time zettasecond", "", format_time(1e21))
|
|
#Assert("format_time yottasecond", "", format_time(1e24))
|
|
#Assert("format_time ronnasecond", "", format_time(1e27))
|
|
#Assert("format_time quettasecond", "", format_time(1e30))
|
|
# uint64_t_MAX == 2**64 == 18446744073709551615 == -1
|
|
Assert("format_time max", "5849424173c 55y 3w 5j 7h 16s", format_time(int(2**64 - 1)))
|
|
|
|
def format_time_ns_test() -> None:
|
|
"""Test suite for the format_time_ns output
|
|
|
|
See https://en.wikipedia.org/wiki/Unit_of_time for details
|
|
"""
|
|
Assert("format_time_ns null", "0ns", format_time_ns(0))
|
|
Assert("format_time_ns nanosecond", "1ns", format_time_ns(1))
|
|
Assert("format_time_ns shake", "10ns", format_time_ns(10))
|
|
Assert("format_time_ns microsecond", "1µs", format_time_ns(int(1e3)))
|
|
Assert("format_time_ns millisecond", "1ms", format_time_ns(int(1e6)))
|
|
Assert("format_time_ns centisecond", "10ms", format_time_ns(int(1e7)))
|
|
Assert("format_time_ns decisecond", "100ms", format_time_ns(int(1e8)))
|
|
Assert("format_time_ns second", "1s", format_time_ns(int(1e9)))
|
|
Assert("format_time_ns decasecond", "10s", format_time_ns(int(1e10)))
|
|
Assert("format_time_ns minute", "1m", format_time_ns(int(6e10)))
|
|
Assert("format_time_ns milliday", "1m 26s 400ms", format_time_ns(int(864e8)))
|
|
Assert("format_time_ns hectosecond", "1m 40s", format_time_ns(int(1e11)))
|
|
Assert("format_time_ns kilosecond", "16m 40s", format_time_ns(int(1e12)))
|
|
Assert("format_time_ns hour", "1h", format_time_ns(int(36e11)))
|
|
Assert("format_time_ns day", "1j", format_time_ns(int(864e11)))
|
|
Assert("format_time_ns week/sennight", "1w", format_time_ns(int(6048e11)))
|
|
Assert("format_time_ns megasecond", "1w 4j 13h 46m 40s", format_time_ns(int(1e15)))
|
|
Assert("format_time_ns fortnight", "2w", format_time_ns(int(12096e11)))
|
|
Assert("format_time_ns lunar month (draconitic)", "3w 6j 5h 5m 35s 800ms", format_time_ns(int(23511358e8)))
|
|
Assert("format_time_ns lunar month (tropical)", "3w 6j 7h 43m 4s 700ms", format_time_ns(int(23605847e8)))
|
|
Assert("format_time_ns lunar month (sidereal)", "3w 6j 7h 43m 11s 600ms", format_time_ns(int(23605916e8)))
|
|
Assert("format_time_ns lunar month (anomalistic)", "3w 6j 13h 18m 33s 200ms", format_time_ns(int(23807132e8)))
|
|
Assert("format_time_ns lunar month (synodic)", "4w 1j 12h 44m 2s 900ms", format_time_ns(int(25514429e8)))
|
|
Assert("format_time_ns month", "1M", format_time_ns(int(26784e11)))
|
|
Assert("format_time_ns quarantine", "1M 1w 2j", format_time_ns(int(3456e12)))
|
|
Assert("format_time_ns semester", "4M 2j", format_time_ns(int(108864e11)))
|
|
Assert("format_time_ns lunar year", "11M 1w 6j 8h 52m 48s", format_time_ns(int(30617568e9)))
|
|
Assert("format_time_ns year", "1y", format_time_ns(int(31536e12)))
|
|
Assert("format_time_ns tropical year", "1y 5h 48m 45s 216ms", format_time_ns(int(31556925216e6)))
|
|
Assert("format_time_ns gregorian year", "1y 5h 49m 12s", format_time_ns(int(31556952e9)))
|
|
Assert("format_time_ns sidereal year", "1y 6h 9m 9s 763ms 545µs 600ns", format_time_ns(int(315581497635456e2)))
|
|
Assert("format_time_ns leap year", "1y 1j", format_time_ns(int(316224e11)))
|
|
Assert("format_time_ns olympiad", "4y", format_time_ns(int(126144e12)))
|
|
Assert("format_time_ns lusturm", "5y", format_time_ns(int(15768e13)))
|
|
Assert("format_time_ns decade", "10y", format_time_ns(int(31536e13)))
|
|
Assert("format_time_ns indiction", "15y", format_time_ns(int(47304e13)))
|
|
Assert("format_time_ns score", "20y", format_time_ns(int(63072e13)))
|
|
Assert("format_time_ns gigasecond", "31y 8M 1w 4j 1h 46m 40s", format_time_ns(int(1e18)))
|
|
Assert("format_time_ns jubilee", "50y", format_time_ns(int(15768e14)))
|
|
Assert("format_time_ns century", "1c", format_time_ns(int(31536e14)))
|
|
Assert("format_time_ns millennium", "10c", format_time_ns(int(31536e15)))
|
|
Assert("format_time_ns age", "257c 72y", format_time_ns(int(812745792e12)))
|
|
Assert("format_time_ns terasecond", "3170c 97y 10M 3w 4j 17h 46m 40s", format_time_ns(int(1e22)))
|
|
Assert("format_time_ns megaannum", "10000c", format_time_ns(int(31536e18)))
|
|
# Cannot use number bigger than currently supported ISO Python
|
|
# Assert("format_time_ns petasecond", "317097c 91y 11M 2w 4j 1h 46m 40s", format_time_ns(int(1e24)))
|
|
# Assert("format_time_ns galactic year", "2300000c", format_time_ns(int(725328e19)))
|
|
# Assert("format_time_ns eon", "10000000c", format_time_ns(int(31536e21)))
|
|
# Assert("format_time_ns kalpa", "43200000c", format_time_ns(int(13623552e19)))
|
|
# Assert("format_time_ns exasecond", "317097919c 83y 9M 1h 46m 40s", format_time_ns(int(1e27)))
|
|
# Assert("format_time_ns zettasecond", "", format_time_ns(int(1e30)))
|
|
# Assert("format_time_ns yottasecond", "", format_time_ns(int(1e33)))
|
|
# Assert("format_time_ns ronnasecond", "", format_time_ns(int(1e36)))
|
|
# Assert("format_time_ns quettasecond", "", format_time_ns(int(1e39)))
|
|
# uint64_t_MAX == 2**64 == 18446744073709551615 == -1
|
|
Assert("format_time_ns max", "5c 84y 11M 2j 23h 34m 33s 709ms 551µs 615ns", format_time_ns(2**64 - 1))
|