Changed default: GREATEST_USE_LONGJMP
now defaults to 0. This eliminates
a warning about variables that can possibly become stale/corrupt in the
presence of longjmp
. Since GREATEST_FAIL_WITH_LONGJMP
isn't frequently
used, it should probably be opt-in.
Added greatest_set_exact_name_match()
/ -e
flag, which changes the
name-based filtering from substring to exact match. Note that filtering
on an exact suite name will not skip tests run outside of any suite.
Added GREATEST_ASSERT_NEQ
and GREATEST_ASSERT_NEQm
. (Thanks @tekknolagi.)
Added GREATEST_ASSERT_GT
, GREATEST_ASSERT_GTE
, GREATEST_ASSERT_LT
,
and GREATEST_ASSERT_LTE
, along with their custom message (m
)
variants.
Makefile: Fix targets so all files are rebuilt when greatest.h
or the
Makefile
are modified, but without potentially breaking the build due
to including greatest.h
as a linker argument to example_trunc
(which
could happen with clang). (Thanks @vemakereporter, @theosotr.)
Calls to GREATEST_RUN_TEST
from inside another test are now ignored.
Other flags starting with --
besides --help
(print help) and --
(ignore rest of ARGV) now produce an "Unknown argument" message;
previously they were unintentionally handled like --
.
Added built example_cpp
executable to .gitignore
.
Expanded on the role of RUN_TEST
, RUN_TEST1
, RUN_TESTp
,
PASS
, SKIP
, and FAIL
in the README.
Addressed a -Wimplicit-fallthrough
warning when building with clang
using -Weverything
.
None.
Fixed configuration parameters for the PRNG (used for shuffling). Previously, certain rare combinations of test counts and input states could prevent the linear congruential RNG from having its full period before repeating values, which could cause tests to be run multiple times or skipped during shuffling.
Fixed an assertion in the example code where the expected annd actual parameters were swapped. (Reported by @shaohuasong.)
Updated a comment to reflect that GREATEST_ASSERT_STR_EQm
compares
using strncmp
, not strcmp
. (Reported by @orangewait.)
Minor formatting improvements in the README.
None.
Fixed a warning when compiled with -Wconversion
. (Thanks @HawkSK.)
Replaced a remaining direct use of fprintf
with GREATEST_FPRINTF
.
(Thanks @ligurio.)
Fixed typo in example code. (Thanks @ligurio.)
Bugfix: Previously, a test failure in first-fail mode didn't prevent later suites from running.
Added a comment noting that the duplicated declaration inside the
GREATEST_SUITE
macro is intentional.
Renamed exp
local variable to expd
, to prevent a possible
warning about shadowing exp(3)
.
Updated the command line argument documentation in the README and the usage message.
Added a description of output behaviors for each test case
result type, and clarified that the custom message variants
(e.g. SKIPm("TODO")
) can be used to set custom messages, but
do not affect whether or not the message is printed.
Added greatest_abort_on_fail
, which sets a flag to call abort()
on
the first test failure (-a
in the CLI test runner). If tests are
running inside a debugger, this will break right on the failure.
Feature suggestion and initial implementation by @fsaintjacques.
Added greatest_list_only()
, which sets the same flag as the -l
option in the CLI test runner.
Added greatest_set_test_suffix(const char *suffix)
, which can
be used to add a suffix to the name printed for the next test.
This can be used to distinguish between tests when running
parametric tests (particularly when shuffled). Note that this
suffix is included in the matching for -t
and -x
.
The greatest_info
struct now allocates a char
buffer for the test
name and optional '_' separator & suffix. The buffer size can be
configured by #define
ing GREATEST_TESTNAME_BUF_SIZE
. (See
example_trunc.c
.) If the test name plus optional suffix does not fit
in the buffer, it will be truncated and \0
terminated.
Made a couple functions static
that were previously exposed, but
explictly listed as being internal (greatest_do_pass
,
greatest_do_fail
, greatest_do_skip
, greatest_suite_pre
,
greatest_suite_post
, greatest_usage
).
Fixed link to ISC license in README.md. (Thanks @vaibhavsagar.)
Fixed issue link and whitespace in README.md and CONTRIBUTING.md. (Thanks @bebehei.)
Change a couple macros into functions: GREATEST_INIT
and
GREATEST_PRINT_REPORT
. Most of the macros have variable capture,
return from their call site, etc., but these two don't need to be
macros.
None.
Bugfix: GREATEST_SHUFFLE_TESTS
and GREATEST_SHUFFLE_SUITES
did not check for the stop_at_first_fail
flag, and could get
stuck in an infinite loop. Now their loops stop as expected.
Renamed example_random.c
to example_shuffle.c
, since its
focus is really on random shuffling of suites and tests.
Added GREATEST_SHUFFLE_SUITES(SEED, BODY)
macro (and SHUFFLE_SUITES
abbreviation). This runs any suites within BODY in pseudorandom order,
seeded by SEED.
Added GREATEST_SHUFFLE_TESTS(SEED, BODY)
macro (and SHUFFLE_TESTS
abbreviation). This runs any tests within BODY in pseudorandom order,
seeded by SEED.
If GREATEST_NO_EXTERN_CPLUSPLUS
is #define
d, then the C++
extern "C" { ... }
namespacing around greatest is disabled.
All calls to fprintf
have been wrapped in a macro, GREATEST_FPRINTF
,
which can be #define
d to substitute another function with the same
interface. Feature suggestion and initial implementation by
@AndreasMartin72.
Added greatest_stop_at_first_fail()
, to set the flag to stop the test
runner at the first failure (-f
in the CLI test runner).
Added void greatest_test_exclude(const char *filter)
, which takes a
filter string and ignores all tests whose names contain the filter
string. This takes precedence over greatest_test_filter
matches.
Added a CLI test runner option, -x
, which calls
greatest_test_exclude
with its argument.
Bugfix: GREATEST_SAVE_CONTEXT()
was only used in GREATEST_RUN_TEST
,
not GREATEST_RUN_TEST1
or GREATEST_RUN_TESTp
, which could cause
corruption when tests using them called ASSERT_OR_LONGJMPm
or
FAIL_WITH_LONGJMPm
. Reported and fixed by @tcarmelveilleux.
Add contrib/entapment
script, which converts a greatest test runner's
verbose-style output to TAP version 13 format.
Add contrib/testify
script, which converts calls to RUN_TEST(test);
to test functions with SKIPm("TODO");
.
Disabled -Weverything
in Makefile: it isn't portable.
Various improvements to the documentation.
If list (-l
) and test name filtering are both used, only tests that
would have run are printed. This can be used to test filter strings.
None.
Explicitly mention ISC License in README.
Always fflush(GREATEST_STDOUT)
after tests, rather than checking
whether GREATEST_STDOUT
expands to stdout
(the default) first. This
avoids a tautological comparison warning. Reported by @jibsen and
@nemequ.
Address warnings that can appear under -Weverything
: padding in
struct greatest_run_info
, a pointer cast that unintentionally removed
const
, and a non-literal printf
format string (caused by a literal
format string constructed and saved to a variable in a macro). Reported
by @kozross.
None.
Accept "--help" as an alternate form of "-h" in command line test runners. (Thanks @jibsen).
Avoid redundant evaluation of arguments in ASSERT_ENUM_EQ
.
Clarify type of ENUM_STR
argument in ASSERT_ENUM_EQ
. Use a function
pointer typedef so the compiler can give better type errors.
Warn about redundant evaluation of arguments in ASSERT_EQ_FMT
.
Prefix the variables used in the expansion of the ASSERT_EQ_FMT
,
ASSERT_ENUM_EQ
, and ASSERT_IN_RANGE
macros, to avoid name clashes
that can cause confusing compiler errors.
Added GREATEST_IGNORE_TEST
, which skips a test without warning about
the function being unused.
Added GREATEST_ASSERT_STRN_EQ
, which does a string comparison with an
explicit length (using strncmp
, rather than strcmp
).
Added GREATEST_ASSERT_MEM_EQ
, which does a memory comparison with an
explicit length (using memcmp
). If the memory differs, it will print a
hexdump which highlights the lines and individual bytes which differ.
(The greenest
script was also updated to colorize the hexdump's
difference markers.)
Added GREATEST_ASSERT_ENUM_EQ
, which compares two values and uses an
enum-specific function to convert them to strings before printing
failures.
The greenest
script has been moved into contrib/
.
Fixed a bug that kept the -f
(stop after first failure) flag from
stopping the test runner immediately when a failure occured just
before running a new suite.
Added extern "C" { ... }
guards for improved C++ compatibility.
Fixed a warning when compiling as C++.
Several updates to the README.
A file with contribution guidelines (CONTRIBUTING.md
) was added.
Align "Expected:"/"Got:" messages, so it's easier to compare values.
Fixed a bug that could lead to test suites running previous suites' setup/teardown callbacks. This was a bug in the optional suite support, so only v1.1.0 is affected.
Updated the README to note that the greenest
awk script expects
a Unix-like environment (i.e., it doesn't work on Windows).
Made suites optional, so that RUN_TEST
works outside of any suites.
This reduces boilerplate in cases where there would only be one "main"
suite anyway.
Added greatest_get_report()
, to populate a struct with the pass, fail,
skip, and assertion counts, for cases where getting the counts directly
is preferable to printing them with GREATEST_PRINT_REPORT()
or
GREATEST_MAIN_END()
(i.e., without a CLI test runner).
Added greatest_set_test_filter(substring)
and
greatest_set_suite_filter(substring)
, so only tests or suites matching a
filter substring can be run without using the CLI test runner.
Added greatest_set_flag()
, so the FIRST_FAIL flag can be set without
using the CLI test runner.
Added SUITE_EXTERN
macro, for declaring suites in other compilation units.
They could previously be declared using the SUITE
macro, but this made a
redundant declaration that could cause warnings.
Added multiple levels of verbosity. Can be checked and set with
greatest_get_verbosity()
, and greatest_set_verbosity()
respectively.
(GREATEST_IS_VERBOSE()
remains in the API.)
Stop parsing CLI options if --
is reached, so user code can include
its own afterward.
Added the "Key Features" section to the README, and updated the tagline to reflect that greatest isn't specific to unit testing.
Added this changelog.
Added LICENSE file (ISC License), to match common project layouts.
greatest already had its license in the greatest.h
header, but this
makes it easier to find at a glance.
Added a URL for finding the newest version of greatest to the header.
Updated the default report message: print "1 test", not "1 tests"; print "X passed, Y failed," instead of "X pass, Y fail,", etc.
Updated the CLI test runner's help message to reflect that the
-s
and -t
switches match by substring, not the full name.
Fixed C89 error due to incrementing assertion count before declaring variables (mixing declarations and code).
Fixed warnings.
The greatest_printf_cb
callback in struct greatest_type_info
type
should have an extra FILE *
argument (i.e., behave like fprintf, not
printf). This leads to cases where GREATEST_STDOUT
has been customized
and GREATEST_ASSERT_EQUAL_T
's "Expected:", "Got:" messages are printed
to the correct stream, but the callback still prints the values on
stdout. Resolving this is an interface change, so it will have to wait
until release v2.0.0. (The actual code change will be minor -- adding an
extra f argument to the callback, and passing it to fprinf rather than
using printf.)
The greatest_type_info
struct is typedef'd, which is inconsistent with
the API otherwise not typedef-ing user facing structs. (It is also in the
struct namespace.) Fixing this will have to wait until v2.0.0.
Added ASSERT_EQ_FMT(expected, actual, format)
to compare scalar values and
print them (if different) using the given format string (e.g. "0x%08x").
Added ASSERT_IN_RANGE(expected, actual, tolerance)
to check whether the
actual value is within a +/- tolerance, as a floating point comparison,
and print the actual value if out of bounds. The floating point type used
can be configured by overriding GREATEST_FLOAT.
Added GREATEST_USE_TIME
compile-time #define, which can be set to 0
to compile out all time.h / clock() related functionality.
Added check for _MSC_VER
, to detect C99 compatibility when built with
Visual Studio.
Patch version, increased due to bug fixes (thanks @pmj):
. Fix for issue #26 - must not longjmp to a context in an exited function. . Corrected use of non-prefixed FAILm() macro in ASSERT macros. . Avoid compile warnings about no previous definition of suite functions.
Added CHECK_CALL()
macro, to wrap a function call that can fail a test.
Added ASSERT_OR_LONGJMP()
/ FAIL_WITH_LONGJMP()
, to longjmp(3) from
failing functions rather than returning. This is optional, and can be
compiled out by #define
-ing GREATEST_USE_LONGJMP
to 0.
Restructured API so a CLI test runner is no longer necessary.
GREATEST_INIT()
and GREATEST_PRINT_REPORT()
can be called directly.
Explicitly documented the protocol for calling functions from a test that themselves call ASSERT(), SKIP(), FAIL(), etc. Added an enum for the test return type.
Fixed warnings, improved the documentation.
Fixed error when compiled as C++ by adding extern
to
greatest_type_info
struct.
Added ASSERT_EQUAL_T
, for comparing arbitrary structs and printing
them when they differ.
Added greenest
awk script, to color output.
Started counting the total number of assertions.
Fixed warnings.
Changed filters for test (-t
) and suite (-s
) names to use substring
search, rather than exact matches.
Added GREATEST_FAILURE_ABORT()
, to check whether the test runner is in
first-fail (-f
) mode and there have been failures.
Added check to always print a line break for "FAIL" messages, unless at column 0.
Added a C89-compatible form of parametric testing (GREATEST_RUN_TEST1
).
Fixed warnings when compiled as C++.
Added -f
to usage line in documentation.
Fixed warnings.
Added finish-at-first-failure (-f
) to CLI test runner.
Added suite-level setup/teardown hooks.
Fixed warnings.
Added help (-h
) and list (-l
) options to CLI test runner.
Added GREATEST_RUN_TESTp
for parametric testing in C99.
Added GREATEST_IS_VERBOSE()
, to check whether the verbose (-v
) flag
was set.
Added GREATEST_SET_TEARDOWN_CB()
, for setting a teardown callback.
Added custom message forms of PASS, FAIL, SKIP, e.g. PASSm()
.
Fixed warnings.
Initial public release of project.