`-define:ODIN_TEST_NAMES=...` is capable of selecting test by package
and name or name only, with the ability to access packages included by
`-all-packages`.
Add a new option `ODIN_TEST_RANDOM_SEED` which is picked from the cycle
counter at startup, if it's not specified by the user.
This number is sent to every test in the `T` struct and reset every test
(just in case).
This will automatically calculate how wide the progress bars should be
based on the package with the greatest number of tests.
The progress width is now capped to 100.
Changes
- Support multi-threaded testing.
- Support `set_fail_timeout` on all platforms.
- Display an animated progress report.
- Setup all tests with a context logger.
- Give all tests their own separate custom allocators.
- Support tracking test memory usage.
- Display a summary of the failed tests at the end.
- Let users select only specific tests to run.
- Support copying failed tests to the clipboard to run again.
- Support catching SIGINT (CTRL-C) to cancel early.
- Record context in cleanup procs.
- Write all log messages to STDERR for easy redirection.
- Possibly more I've forgotten.
New Options
- `-define:test_threads=N`: Specify thread count.
- `-define:test_thread_memory=B`: Specify initial memory block size in bytes to each thread.
- `-define:test_track_memory=true`: Track the memory usage of individual tests.
- `-define:test_fancy=false`: Disable animated progress report.
- `-define:test_select=package.test_name,...`: Run only select tests.
- `-define:test_clipboard=true`: Copy names of failed tests to the clipboard.
- `-define:test_progress_width=24`: Change the width of the animated progress bars.
- Extracts common code between C and Python-like syntax into its own
sub-procedures.
- Fixes Python-like syntax from treating `}` as a verb.
- Makes C-like syntax treat ' ' as a missing verb.
- Fixes EXTRA arguments being formatted with options that were
previously set, instead using default options now.
- Makes error messaging more consistent between C and Python-like
syntax.
- Requires argument index to be specified immediately before the verb
in C-like syntax, per the documentation, instead of after `%` _or_
before the verb.
- Tracks argument usage through a `bit_set`, allowing for reporting of
unused arguments even when reordered.
- Moves exit for C-like syntax if next byte is `%` to beginning of
block instead of needlessly trying to parse through all options.
- Pops next unused argument for unspecified formatters like `%i` or
`{}`, instead of taking the argument after the last one used.
- Fixes unspecified precision `%.f` from not setting precision to zero,
per the documentation.
If the error count exceeded `MAX_ERROR_COLLECTOR_COUNT`, multiple
threads could print and exit simultaneously, causing a segfault.
This change moves the mutex lock back before the conditional.