From 547bd032d22e77b3a4ab610b57b34c85bce7915a Mon Sep 17 00:00:00 2001 From: Snaipe Date: Tue, 17 Mar 2015 16:11:32 +0100 Subject: [PATCH] Renamed equal asserts, added asserts sample in README, added abort_test --- README.md | 2 ++ doc/starter.rst | 16 ++++----- include/criterion/assert.h | 70 +++++++++++++++++++++----------------- samples/asserts.c | 21 ++++++++---- 4 files changed, 63 insertions(+), 46 deletions(-) diff --git a/README.md b/README.md index 0657f16..ac9d5b7 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/doc/starter.rst b/doc/starter.rst index 54e3819..b974bdd 100644 --- a/doc/starter.rst +++ b/doc/starter.rst @@ -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 -------- diff --git a/include/criterion/assert.h b/include/criterion/assert.h index 75e3c61..9f2e7cd 100644 --- a/include/criterion/assert.h +++ b/include/criterion/assert.h @@ -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_ */ diff --git a/samples/asserts.c b/samples/asserts.c index deec0b4..811824f 100644 --- a/samples/asserts.c +++ b/samples/asserts.c @@ -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); }