Renamed equal asserts, added asserts sample in README, added abort_test
This commit is contained in:
parent
56ff31b135
commit
547bd032d2
4 changed files with 63 additions and 46 deletions
|
@ -52,6 +52,7 @@ Sample tests can be found in the [sample directory][samples].
|
|||
|
||||
* [A simple test][sample-simple]
|
||||
* [Using multiple suites][sample-suites]
|
||||
* [Writing assertions][sample-asserts]
|
||||
* [Adding test fixtures][sample-fixtures]
|
||||
* [Tests with signals][sample-signal]
|
||||
* [Using report hooks][sample-report]
|
||||
|
@ -85,6 +86,7 @@ A. Yes, you can, Cygwin is only required to compile the static library if
|
|||
[samples]: ./samples/
|
||||
[sample-simple]: ./samples/simple.c
|
||||
[sample-suites]: ./samples/suites.c
|
||||
[sample-asserts]: ./samples/asserts.c
|
||||
[sample-fixtures]: ./samples/fixtures.c
|
||||
[sample-signal]: ./samples/signal.c
|
||||
[sample-report]: ./samples/report.c
|
||||
|
|
|
@ -51,22 +51,22 @@ parameter, and an optional failure message:
|
|||
On top of those, more assertions are available for common operations:
|
||||
|
||||
* ``{assert,expect}_not(Actual, Expected, [Message])``
|
||||
* ``{assert,expect}_equal(Actual, Expected, [Message])``
|
||||
* ``{assert,expect}_not_equal(Actual, Unexpected, [Message])``
|
||||
* ``{assert,expect}_eq(Actual, Expected, [Message])``
|
||||
* ``{assert,expect}_neq(Actual, Unexpected, [Message])``
|
||||
* ``{assert,expect}_lt(Actual, Expected, [Message])``
|
||||
* ``{assert,expect}_leq(Actual, Expected, [Message])``
|
||||
* ``{assert,expect}_gt(Actual, Expected, [Message])``
|
||||
* ``{assert,expect}_geq(Actual, Expected, [Message])``
|
||||
* ``{assert,expect}_float_equal(Actual, Expected, Epsilon, [Message])``
|
||||
* ``{assert,expect}_float_not_equal(Actual, Unexpected, Epsilon, [Message])``
|
||||
* ``{assert,expect}_strings_equal(Actual, Expected, [Message])``
|
||||
* ``{assert,expect}_strings_not_equal(Actual, Unexpected, [Message])``
|
||||
* ``{assert,expect}_float_eq(Actual, Expected, Epsilon, [Message])``
|
||||
* ``{assert,expect}_float_neq(Actual, Unexpected, Epsilon, [Message])``
|
||||
* ``{assert,expect}_strings_eq(Actual, Expected, [Message])``
|
||||
* ``{assert,expect}_strings_neq(Actual, Unexpected, [Message])``
|
||||
* ``{assert,expect}_strings_lt(Actual, Expected, [Message])``
|
||||
* ``{assert,expect}_strings_leq(Actual, Expected, [Message])``
|
||||
* ``{assert,expect}_strings_gt(Actual, Expected, [Message])``
|
||||
* ``{assert,expect}_strings_geq(Actual, Expected, [Message])``
|
||||
* ``{assert,expect}_arrays_equal(Actual, Expected, Size, [Message])``
|
||||
* ``{assert,expect}_arrays_not_equal(Actual, Unexpected, Size, [Message])``
|
||||
* ``{assert,expect}_arrays_eq(Actual, Expected, Size, [Message])``
|
||||
* ``{assert,expect}_arrays_neq(Actual, Unexpected, Size, [Message])``
|
||||
|
||||
Fixtures
|
||||
--------
|
||||
|
|
|
@ -65,6 +65,12 @@ struct criterion_assert_args {
|
|||
|
||||
// Common asserts
|
||||
|
||||
# define abort_test(Message) \
|
||||
assert(0, \
|
||||
.default_msg = "The conditions for this test were not met.", \
|
||||
.msg = (Message) \
|
||||
)
|
||||
|
||||
# define assert(...) assert_(__VA_ARGS__, .sentinel_ = 0)
|
||||
# define expect(...) expect_(__VA_ARGS__, .sentinel_ = 0)
|
||||
|
||||
|
@ -86,11 +92,11 @@ struct criterion_assert_args {
|
|||
# define expect_op_(Op, Actual, Expected, ...) \
|
||||
assert_impl(NORMAL, (Actual) Op (Expected), __VA_ARGS__)
|
||||
|
||||
# define assert_equal(...) assert_op_(==, __VA_ARGS__, .sentinel_ = 0)
|
||||
# define expect_equal(...) expect_op_(==, __VA_ARGS__, .sentinel_ = 0)
|
||||
# define assert_eq(...) assert_op_(==, __VA_ARGS__, .sentinel_ = 0)
|
||||
# define expect_eq(...) expect_op_(==, __VA_ARGS__, .sentinel_ = 0)
|
||||
|
||||
# define assert_not_equal(...) assert_op_(!=, __VA_ARGS__, .sentinel_ = 0)
|
||||
# define expect_not_equal(...) expect_op_(!=, __VA_ARGS__, .sentinel_ = 0)
|
||||
# define assert_neq(...) assert_op_(!=, __VA_ARGS__, .sentinel_ = 0)
|
||||
# define expect_neq(...) expect_op_(!=, __VA_ARGS__, .sentinel_ = 0)
|
||||
|
||||
# define assert_lt(...) assert_op_(<, __VA_ARGS__, .sentinel_ = 0)
|
||||
# define expect_lt(...) expect_op_(<, __VA_ARGS__, .sentinel_ = 0)
|
||||
|
@ -106,30 +112,30 @@ struct criterion_assert_args {
|
|||
|
||||
// Floating-point asserts
|
||||
|
||||
# define assert_float_equal(...) \
|
||||
assert_float_equal_(__VA_ARGS__, .sentinel_ = 0)
|
||||
# define expect_float_equal(...) \
|
||||
expect_float_equal_(__VA_ARGS__, .sentinel_ = 0)
|
||||
# define assert_float_eq(...) \
|
||||
assert_float_eq_(__VA_ARGS__, .sentinel_ = 0)
|
||||
# define expect_float_eq(...) \
|
||||
expect_float_eq_(__VA_ARGS__, .sentinel_ = 0)
|
||||
|
||||
# define assert_float_equal_(Actual, Expected, Epsilon, ...) \
|
||||
# define assert_float_eq_(Actual, Expected, Epsilon, ...) \
|
||||
assert_impl(FATAL, (Expected) - (Actual) <= (Epsilon) \
|
||||
&& (Actual) - (Expected) <= (Epsilon), \
|
||||
__VA_ARGS__)
|
||||
# define expect_float_equal_(Actual, Expected, Epsilon, ...) \
|
||||
# define expect_float_eq_(Actual, Expected, Epsilon, ...) \
|
||||
assert_impl(NORMAL, (Expected) - (Actual) <= (Epsilon) \
|
||||
&& (Actual) - (Expected) <= (Epsilon), \
|
||||
__VA_ARGS__)
|
||||
|
||||
# define assert_float_not_equal(...) \
|
||||
assert_float_not_equal_(__VA_ARGS__, .sentinel_ = 0)
|
||||
# define expect_float_not_equal(...) \
|
||||
expect_float_not_equal_(__VA_ARGS__, .sentinel_ = 0)
|
||||
# define assert_float_neq(...) \
|
||||
assert_float_neq_(__VA_ARGS__, .sentinel_ = 0)
|
||||
# define expect_float_neq(...) \
|
||||
expect_float_neq_(__VA_ARGS__, .sentinel_ = 0)
|
||||
|
||||
# define assert_float_not_equal_(Actual, Expected, Epsilon, ...) \
|
||||
# define assert_float_neq_(Actual, Expected, Epsilon, ...) \
|
||||
assert_impl(FATAL, (Expected) - (Actual) > (Epsilon) \
|
||||
|| (Actual) - (Expected) > (Epsilon), \
|
||||
__VA_ARGS__)
|
||||
# define expect_float_not_equal_(Actual, Expected, Epsilon, ...) \
|
||||
# define expect_float_neq_(Actual, Expected, Epsilon, ...) \
|
||||
assert_impl(NORMAL, (Expected) - (Actual) > (Epsilon) \
|
||||
|| (Actual) - (Expected) > (Epsilon), \
|
||||
__VA_ARGS__)
|
||||
|
@ -141,14 +147,14 @@ struct criterion_assert_args {
|
|||
# define expect_strings_(Op, Actual, Expected, ...) \
|
||||
assert_impl(NORMAL, strcmp((Actual), (Expected)) Op 0, __VA_ARGS__)
|
||||
|
||||
# define assert_strings_equal(...) \
|
||||
# define assert_strings_eq(...) \
|
||||
assert_strings_(==, __VA_ARGS__, .sentinel_ = 0)
|
||||
# define expect_strings_equal(...) \
|
||||
# define expect_strings_eq(...) \
|
||||
expect_strings_(==, __VA_ARGS__, .sentinel_ = 0)
|
||||
|
||||
# define assert_strings_not_equal(...) \
|
||||
# define assert_strings_neq(...) \
|
||||
assert_strings_(!=, __VA_ARGS__, .sentinel_ = 0)
|
||||
# define expect_strings_not_equal(...) \
|
||||
# define expect_strings_neq(...) \
|
||||
expect_strings_(!=, __VA_ARGS__, .sentinel_ = 0)
|
||||
|
||||
# define assert_strings_gt(...) assert_strings_(>, __VA_ARGS__, .sentinel_ = 0)
|
||||
|
@ -165,24 +171,24 @@ struct criterion_assert_args {
|
|||
|
||||
// Array asserts
|
||||
|
||||
# define assert_arrays_equal(...) \
|
||||
assert_arrays_equal_(__VA_ARGS__, .sentinel = 0)
|
||||
# define expect_arrays_equal(...) \
|
||||
expect_arrays_equal_(__VA_ARGS__, .sentinel = 0)
|
||||
# define assert_arrays_eq(...) \
|
||||
assert_arrays_eq_(__VA_ARGS__, .sentinel = 0)
|
||||
# define expect_arrays_eq(...) \
|
||||
expect_arrays_eq_(__VA_ARGS__, .sentinel = 0)
|
||||
|
||||
# define assert_arrays_not_equal(...) \
|
||||
assert_arrays_not_equal_(__VA_ARGS__, .sentinel = 0)
|
||||
# define expect_arrays_not_equal(...) \
|
||||
expect_arrays_not_equal_(__VA_ARGS__, .sentinel = 0)
|
||||
# define assert_arrays_neq(...) \
|
||||
assert_arrays_neq_(__VA_ARGS__, .sentinel = 0)
|
||||
# define expect_arrays_neq(...) \
|
||||
expect_arrays_neq_(__VA_ARGS__, .sentinel = 0)
|
||||
|
||||
# define assert_arrays_equal_(A, B, Size, ...) \
|
||||
# define assert_arrays_eq_(A, B, Size, ...) \
|
||||
assert_impl(FATAL, !memcmp((A), (B), (Size)), __VA_ARGS__)
|
||||
# define expect_arrays_equal_(A, B, Size, ...) \
|
||||
# define expect_arrays_eq_(A, B, Size, ...) \
|
||||
assert_impl(NORMAL, !memcmp((A), (B), (Size)), __VA_ARGS__)
|
||||
|
||||
# define assert_arrays_not_equal_(A, B, Size, ...) \
|
||||
# define assert_arrays_neq_(A, B, Size, ...) \
|
||||
assert_impl(FATAL, memcmp((A), (B), (Size)), __VA_ARGS__)
|
||||
# define expect_arrays_not_equal_(A, B, Size, ...) \
|
||||
# define expect_arrays_neq_(A, B, Size, ...) \
|
||||
assert_impl(NORMAL, memcmp((A), (B), (Size)), __VA_ARGS__)
|
||||
|
||||
#endif /* !CRITERION_ASSERT_H_ */
|
||||
|
|
|
@ -6,14 +6,23 @@ Test(asserts, base) {
|
|||
|
||||
assert(true, "Assertions may take failure messages");
|
||||
|
||||
assert(true, .msg = "You can use explicit named arguments");
|
||||
|
||||
expect(false, "assert is fatal, expect isn't");
|
||||
assert(false, "This assert runs");
|
||||
assert(false, "This does not");
|
||||
}
|
||||
|
||||
Test(asserts, old_school) {
|
||||
if (false)
|
||||
abort_test("You can abort the test with a message from anywhere");
|
||||
|
||||
abort_test(NULL); // or without a message
|
||||
}
|
||||
|
||||
Test(asserts, string) {
|
||||
assert_strings_equal("hello", "hello");
|
||||
assert_strings_not_equal("hello", "olleh");
|
||||
assert_strings_eq("hello", "hello");
|
||||
assert_strings_neq("hello", "olleh");
|
||||
|
||||
assert_strings_gt("hello", "hell");
|
||||
assert_strings_geq("hello", "hell");
|
||||
|
@ -25,8 +34,8 @@ Test(asserts, string) {
|
|||
}
|
||||
|
||||
Test(asserts, native) {
|
||||
assert_equal(1, 1);
|
||||
assert_not_equal(1, 2);
|
||||
assert_eq(1, 1);
|
||||
assert_neq(1, 2);
|
||||
|
||||
assert_lt(1, 2);
|
||||
assert_leq(1, 2);
|
||||
|
@ -38,6 +47,6 @@ Test(asserts, native) {
|
|||
}
|
||||
|
||||
Test(asserts, float) {
|
||||
assert_not_equal(0.1 * 0.1, 0.01);
|
||||
assert_float_equal(0.1 * 0.1, 0.01, 0.001);
|
||||
assert_neq(0.1 * 0.1, 0.01);
|
||||
assert_float_eq(0.1 * 0.1, 0.01, 0.001);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue