From 95eaffda4daab454940fae89d17e2f9ff81aebd0 Mon Sep 17 00:00:00 2001 From: saundersp Date: Mon, 22 Jul 2024 22:03:30 +0200 Subject: [PATCH] Added testing targets --- cpp/Dockerfile | 2 +- cpp/Makefile | 16 ++- cpp/projet_test.cpp | 31 ++++++ python/Makefile | 8 +- python/project_test.py | 15 +++ python/toolbox_unit_test.py | 207 ++++++++++++++++++------------------ 6 files changed, 171 insertions(+), 108 deletions(-) create mode 100644 cpp/projet_test.cpp create mode 100644 python/project_test.py diff --git a/cpp/Dockerfile b/cpp/Dockerfile index 55cdeb2..91a8a61 100644 --- a/cpp/Dockerfile +++ b/cpp/Dockerfile @@ -3,7 +3,7 @@ FROM nvidia/cuda:12.5.0-devel-ubi9 as builder WORKDIR /home/ViolaJones/cpp COPY *.cu *.cpp *.hpp Makefile ./ -RUN make -j "$(nproc)" +RUN make -j "$(nproc)" && make -j "$(nproc)" ./bin/ViolaJonesTest FROM nvidia/cuda:12.5.0-base-ubi9 diff --git a/cpp/Makefile b/cpp/Makefile index 5f32a04..def67f4 100644 --- a/cpp/Makefile +++ b/cpp/Makefile @@ -10,8 +10,10 @@ CFLAGS := -dlto -O2 -Xcompiler -O2 #CFLAGS := -dlto -O2 -g -Xcompiler -O2,-g,-ggdb CFLAGS := $(CFLAGS) -MMD -MP -Werror=all-warnings -Xcompiler -Wall,-Werror,-Wextra EXEC := $(OBJ_DIR)/ViolaJones +EXEC_TEST := $(OBJ_DIR)/ViolaJonesTest DATA := $(DATA_PATH)/X_train.bin $(DATA_PATH)/X_test.bin $(DATA_PATH)/y_train.bin $(DATA_PATH)/y_test.bin -SRC := $(shell find $(SRC_DIR) -name '*.cpp' -o -name '*.cu') +SRC := $(shell find $(SRC_DIR) \( -name '*.cpp' -o -name '*.cu' \) -and -not -name projet_test.cpp) +SRC_TEST := $(shell find $(SRC_DIR) \( -name '*.cpp' -o -name '*.cu' \) -and -not -name projet.cpp) OBJ_EXT := o ifeq ($(OS), Windows_NT) EXEC := $(EXEC).exe @@ -19,6 +21,8 @@ ifeq ($(OS), Windows_NT) endif OBJ := $(SRC:$(SRC_DIR)/%.cpp=$(OBJ_DIR)/%.$(OBJ_EXT)) OBJ := $(OBJ:$(SRC_DIR)/%.cu=$(OBJ_DIR)/%.$(OBJ_EXT)) +OBJ_TEST := $(SRC_TEST:$(SRC_DIR)/%.cpp=$(OBJ_DIR)/%.$(OBJ_EXT)) +OBJ_TEST := $(OBJ_TEST:$(SRC_DIR)/%.cu=$(OBJ_DIR)/%.$(OBJ_EXT)) .PHONY: all all: $(EXEC) @@ -42,6 +46,12 @@ $(EXEC): $(OBJ) @echo Linking objects files to $@ @$(CC) $(CFLAGS) $^ -o $@ +# FIXME When using the docker image, Make check prequisites even when the target already exists +#$(EXEC_TEST): $(OBJ_TEST) | check-nvcc-works +$(EXEC_TEST): $(OBJ_TEST) + @echo Linking objects files to $@ + @$(CC) $(CFLAGS) $^ -o $@ + $(DATA): @echo 'Missing $(DATA) files, use downloader first' && exit 1 @@ -49,6 +59,10 @@ $(DATA): start: $(EXEC) $(DATA) @./$(EXEC) +.PHONY: test +test: $(EXEC_TEST) + @./$(EXEC_TEST) + .PHONY: debug debug: $(EXEC) $(DATA) #@cuda-gdb -q $(EXEC) diff --git a/cpp/projet_test.cpp b/cpp/projet_test.cpp new file mode 100644 index 0000000..3f40f24 --- /dev/null +++ b/cpp/projet_test.cpp @@ -0,0 +1,31 @@ +#include "toolbox.hpp" +#include "config.hpp" +#include "toolbox_unit_test.hpp" +#include "ViolaJones.hpp" + +#if GPU_BOOSTED +#include "gpu_unit_test.hpp" +#endif + +int32_t main(void){ + setlocale(LC_NUMERIC, ""); // Allow proper number display + + const std::chrono::system_clock::time_point unit_timestamp = perf_counter_ns(); + const std::array unit_gaps = { 27, -18, 29 }; + header(unit_gaps, { "Unit testing", "Time spent (ns)", "Formatted time spent" }); +#if GPU_BOOSTED + benchmark_function_void("Testing GPU capabilities 1D", unit_gaps[0], test_working, 50000); + benchmark_function_void("Testing GPU capabilities 2D", unit_gaps[0], test_working_2d, 200, 500); + benchmark_function_void("Testing GPU capabilities 3D", unit_gaps[0], test_working_3d, 30, 40, 500); +#endif + benchmark_function_void("Testing format_time", unit_gaps[0], format_time_test); + benchmark_function_void("Testing format_time_ns", unit_gaps[0], format_time_ns_test); + benchmark_function_void("Testing format_byte_size", unit_gaps[0], format_byte_size_test); + benchmark_function_void("Testing thousand_sep", unit_gaps[0], thousand_sep_test); + const long long time_spent = duration_ns(perf_counter_ns() - unit_timestamp); + formatted_line(unit_gaps, "├", "┼", "─", "┤"); + formatted_row(unit_gaps, { "Unit testing summary", thousand_sep(time_spent).c_str(), format_time_ns(time_spent).c_str() }); + footer(unit_gaps); + + return EXIT_SUCCESS; +} diff --git a/python/Makefile b/python/Makefile index f6ca224..1718c65 100644 --- a/python/Makefile +++ b/python/Makefile @@ -17,6 +17,10 @@ venv: start: $(DATA) | venv check-python-works @sh -c '. ./activate.sh && python projet.py' +.PHONY: test +test: | venv check-python-works + @sh -c '. ./activate.sh && python toolbox_unit_test.py' + .PHONY: debug debug: $(DATA) | venv check-python-works check-pudb-works @bash -c 'source activate.sh && pudb projet.py' @@ -45,9 +49,7 @@ log: $(DATA) reset | venv .PHONY: reset reset: @echo 'Deleting generated states and models' - @rm -frv $(OUT_DIR)/* $(MODELS_DIR)/* -#@ln -sv /mnt/pierre_stuffs/ViolaJones/python/models . -#@ln -sv /mnt/pierre_stuffs/ViolaJones/python/out . + @rm -frv $(OUT_DIR) $(MODELS_DIR) .PHONY: clean clean: diff --git a/python/project_test.py b/python/project_test.py new file mode 100644 index 0000000..b156905 --- /dev/null +++ b/python/project_test.py @@ -0,0 +1,15 @@ +from toolbox_unit_test import format_time_test, format_time_ns_test +from toolbox import header, footer, formatted_row, formatted_line +from toolbox import format_time_ns, benchmark_function +from time import perf_counter_ns + +if __name__ == '__main__': + unit_timestamp = perf_counter_ns() + unit_gaps = [27, -18, 29] + header(unit_gaps, ['Unit testing', 'Time spent (ns)', 'Formatted time spent']) + benchmark_function('testing format_time', unit_gaps[0], format_time_test) + benchmark_function('testing format_time_ns', unit_gaps[0], format_time_ns_test) + time_spent = perf_counter_ns() - unit_timestamp + formatted_line(unit_gaps, '├', '┼', '─', '┤') + formatted_row(unit_gaps, ['Unit testing summary', f'{time_spent:,}', format_time_ns(time_spent)]) + footer(unit_gaps) diff --git a/python/toolbox_unit_test.py b/python/toolbox_unit_test.py index 208c303..509d920 100644 --- a/python/toolbox_unit_test.py +++ b/python/toolbox_unit_test.py @@ -1,5 +1,5 @@ -from typing import Any from toolbox import format_time, format_time_ns +from typing import Any def Assert(name: str, expected: Any, result: Any): """Test if a given result is equal of the expected one and log result @@ -18,115 +18,116 @@ def format_time_test() -> None: 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))) + 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)) + # 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))) + 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))) + 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))) + # Python int too large to convert to C long + # 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))) + # 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)) + Assert('format_time_ns max', '5c 84y 11M 2j 23h 34m 33s 709ms 551µs 615ns', format_time_ns(2**64 - 1))