Merge branch 'asserts' into bleeding
This commit is contained in:
commit
2a9bd3c6f5
4 changed files with 161 additions and 41 deletions
|
@ -50,15 +50,26 @@ parameter, and an optional failure message:
|
|||
|
||||
On top of those, more assertions are available for common operations:
|
||||
|
||||
* ``{assert,expect}Equal(Actual, Expected, [Message])``
|
||||
* ``{assert,expect}NotEqual(Actual, Unexpected, [Message])``
|
||||
* ``{assert,expect}StringsEqual(Actual, Expected, [Message])``
|
||||
* ``{assert,expect}StringsNotEqual(Actual, Unexpected, [Message])``
|
||||
* ``{assert,expect}ArraysEqual(Actual, Expected, Size, [Message])``
|
||||
* ``{assert,expect}ArraysNotEqual(Actual, Unexpected, Size, [Message])``
|
||||
* ``{assert,expect}_not(Actual, Expected, [Message])``
|
||||
* ``{assert,expect}_equal(Actual, Expected, [Message])``
|
||||
* ``{assert,expect}_not_equal(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}_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])``
|
||||
|
||||
Initialization and finalization
|
||||
-------------------------------
|
||||
Fixtures
|
||||
--------
|
||||
|
||||
Tests that need some setup and teardown can register functions that will
|
||||
run before and after the test function:
|
||||
|
|
|
@ -37,7 +37,7 @@ enum criterion_assert_kind {
|
|||
FATAL
|
||||
};
|
||||
|
||||
# define assertImpl(Kind, Condition, ...) \
|
||||
# define assert_impl(Kind, Condition, ...) \
|
||||
do { \
|
||||
int passed = !!(Condition); \
|
||||
struct criterion_assert_stats stat = { \
|
||||
|
@ -53,45 +53,110 @@ enum criterion_assert_kind {
|
|||
return; \
|
||||
} while (0)
|
||||
|
||||
# define assert(Condition, ...) assertImpl(FATAL, (Condition), ## __VA_ARGS__)
|
||||
# define expect(Condition, ...) assertImpl(NORMAL, (Condition), ## __VA_ARGS__)
|
||||
// Common asserts
|
||||
|
||||
# define assertArraysEqual(A, B, Size, ...) \
|
||||
assert(!memcmp((A), (B), (Size)), ## __VA_ARGS__)
|
||||
# define expectArraysEqual(A, B, Size, ...) \
|
||||
expect(!memcmp((A), (B), (Size)), ## __VA_ARGS__)
|
||||
# define assert(Condition, ...) assert_impl(FATAL, Condition, "" __VA_ARGS__)
|
||||
# define expect(Condition, ...) assert_impl(NORMAL, Condition, "" __VA_ARGS__)
|
||||
|
||||
# define assertEqual(Actual, Expected, ...) \
|
||||
assert((Actual) == (Expected), ## __VA_ARGS__)
|
||||
# define expectEqual(Actual, Expected, ...) \
|
||||
expect((Actual) == (Expected), ## __VA_ARGS__)
|
||||
# define assert_not(Condition, ...) assert(!(Condition), "" __VA_ARGS__)
|
||||
# define expect_not(Condition, ...) expect(!(Condition), "" __VA_ARGS__)
|
||||
|
||||
# define assertFloatEqual(Actual, Expected, Epsilon, ...) \
|
||||
assert((Expected) - (Actual) < (Epsilon) && (Actual) - (Expected) < (Epsilon), ## __VA_ARGS__)
|
||||
# define expectFloatEqual(Actual, Expected, Epsilon, ...) \
|
||||
expect((Expected) - (Actual) < (Epsilon) && (Actual) - (Expected) < (Epsilon), ## __VA_ARGS__)
|
||||
// Native asserts
|
||||
|
||||
# define assertStringsEqual(Actual, Expected, ...) \
|
||||
assert(!strcmp((Actual), (Expected)), ## __VA_ARGS__)
|
||||
# define expectStringsEqual(Actual, Expected, ...) \
|
||||
expect(!strcmp((Actual), (Expected)), ## __VA_ARGS__)
|
||||
# define assert_op(Actual, Expected, Op, ...) \
|
||||
assert((Actual) Op (Expected), "" __VA_ARGS__)
|
||||
# define expect_op(Actual, Expected, Op, ...) \
|
||||
expect((Actual) Op (Expected), "" __VA_ARGS__)
|
||||
|
||||
# define assertNot(Condition, ...) assert(!(Condition), ## __VA_ARGS__)
|
||||
# define expectNot(Condition, ...) expect(!(Condition), ## __VA_ARGS__)
|
||||
# define assert_equal(Actual, Expected, ...) \
|
||||
assert_op(Actual, Expected, ==, "" __VA_ARGS__)
|
||||
# define expect_equal(Actual, Expected, ...) \
|
||||
expect_op(Actual, Expected, ==, "" __VA_ARGS__)
|
||||
|
||||
# define assertNotEqual(Actual, Expected, ...) \
|
||||
assert((Actual) != (Expected), ## __VA_ARGS__)
|
||||
# define assert_not_equal(Actual, Expected, ...) \
|
||||
assert_op(Actual, Expected, !=, "" __VA_ARGS__)
|
||||
# define expectNotEqual(Actual, Expected, ...) \
|
||||
expect((Actual) != (Expected), ## __VA_ARGS__)
|
||||
expect_op(Actual, Expected, !=, "" __VA_ARGS__)
|
||||
|
||||
# define assertArraysNotEqual(A, B, Size, ...) \
|
||||
assert(memcmp((A), (B), (Size)), ## __VA_ARGS__)
|
||||
# define expectArraysNotEqual(A, B, Size, ...) \
|
||||
expect(memcmp((A), (B), (Size)), ## __VA_ARGS__)
|
||||
# define assert_lt(Actual, Expected, ...) \
|
||||
assert_op(Actual, Expected, <, "" __VA_ARGS__)
|
||||
# define expect_lt(Actual, Expected, ...) \
|
||||
expect_op(Actual, Expected, <, "" __VA_ARGS__)
|
||||
|
||||
# define assertStringsNotEqual(Actual, Expected, ...) \
|
||||
assert(strcmp((Actual), (Expected)), ## __VA_ARGS__)
|
||||
# define expectStringsNotEqual(Actual, Expected, ...) \
|
||||
expect(strcmp((Actual), (Expected)), ## __VA_ARGS__)
|
||||
# define assert_gt(Actual, Expected, ...) \
|
||||
assert_op(Actual, Expected, >, "" __VA_ARGS__)
|
||||
# define expect_gt(Actual, Expected, ...) \
|
||||
expect_op(Actual, Expected, >, "" __VA_ARGS__)
|
||||
|
||||
# define assert_leq(Actual, Expected, ...) \
|
||||
assert_op(Actual, Expected, <=, "" __VA_ARGS__)
|
||||
# define expect_leq(Actual, Expected, ...) \
|
||||
expect_op(Actual, Expected, <=, "" __VA_ARGS__)
|
||||
|
||||
# define assert_geq(Actual, Expected, ...) \
|
||||
assert_op(Actual, Expected, >=, "" __VA_ARGS__)
|
||||
# define expect_geq(Actual, Expected, ...) \
|
||||
expect_op(Actual, Expected, >=, "" __VA_ARGS__)
|
||||
|
||||
// Floating-point asserts
|
||||
|
||||
# define assert_float_equal(Actual, Expected, Epsilon, ...) \
|
||||
assert((Expected) - (Actual) <= (Epsilon) && (Actual) - (Expected) <= (Epsilon), "" __VA_ARGS__)
|
||||
# define expect_float_equal(Actual, Expected, Epsilon, ...) \
|
||||
expect((Expected) - (Actual) <= (Epsilon) && (Actual) - (Expected) <= (Epsilon), "" __VA_ARGS__)
|
||||
|
||||
# define assert_float_not_equal(Actual, Expected, Epsilon, ...) \
|
||||
assert((Expected) - (Actual) > (Epsilon) || (Actual) - (Expected) > (Epsilon), "" __VA_ARGS__)
|
||||
# define expect_float_not_equal(Actual, Expected, Epsilon, ...) \
|
||||
expect((Expected) - (Actual) > (Epsilon) || (Actual) - (Expected) > (Epsilon), "" __VA_ARGS__)
|
||||
|
||||
// String asserts
|
||||
|
||||
# define assert_strings(Actual, Expected, Op, ...) \
|
||||
assert(strcmp((Actual), (Expected)) Op 0, "" __VA_ARGS__)
|
||||
# define expect_strings(Actual, Expected, Op, ...) \
|
||||
expect(strcmp((Actual), (Expected)) Op 0, "" __VA_ARGS__)
|
||||
|
||||
# define assert_strings_equal(Actual, Expected, ...) \
|
||||
assert_strings(Actual, Expected, ==, "" __VA_ARGS__)
|
||||
# define expect_strings_equal(Actual, Expected, ...) \
|
||||
expect_strings(Actual, Expected, ==, "" __VA_ARGS__)
|
||||
|
||||
# define assert_strings_gt(Actual, Expected, ...) \
|
||||
assert_strings(Actual, Expected, >, "" __VA_ARGS__)
|
||||
# define expect_strings_gt(Actual, Expected, ...) \
|
||||
expect_strings(Actual, Expected, >, "" __VA_ARGS__)
|
||||
|
||||
# define assert_strings_lt(Actual, Expected, ...) \
|
||||
assert_strings(Actual, Expected, <, "" __VA_ARGS__)
|
||||
# define expect_strings_lt(Actual, Expected, ...) \
|
||||
expect_strings(Actual, Expected, <, "" __VA_ARGS__)
|
||||
|
||||
# define assert_strings_geq(Actual, Expected, ...) \
|
||||
assert_strings(Actual, Expected, >=, "" __VA_ARGS__)
|
||||
# define expect_strings_geq(Actual, Expected, ...) \
|
||||
expect_strings(Actual, Expected, >=, "" __VA_ARGS__)
|
||||
|
||||
# define assert_strings_leq(Actual, Expected, ...) \
|
||||
assert_strings(Actual, Expected, <=, "" __VA_ARGS__)
|
||||
# define expect_strings_leq(Actual, Expected, ...) \
|
||||
expect_strings(Actual, Expected, <=, "" __VA_ARGS__)
|
||||
|
||||
# define assert_strings_not_equal(Actual, Expected, ...) \
|
||||
assert_strings(Actual, Expected, !=, "" __VA_ARGS__)
|
||||
# define expect_strings_not_equal(Actual, Expected, ...) \
|
||||
expect_strings(Actual, Expected, !=, "" __VA_ARGS__)
|
||||
|
||||
// Array asserts
|
||||
|
||||
# define assert_arrays_equal(A, B, Size, ...) \
|
||||
assert(!memcmp((A), (B), (Size)), "" __VA_ARGS__)
|
||||
# define expect_arrays_equal(A, B, Size, ...) \
|
||||
expect(!memcmp((A), (B), (Size)), "" __VA_ARGS__)
|
||||
|
||||
# define assert_arrays_not_equal(A, B, Size, ...) \
|
||||
assert(memcmp((A), (B), (Size)), "" __VA_ARGS__)
|
||||
# define expect_arrays_not_equal(A, B, Size, ...) \
|
||||
expect(memcmp((A), (B), (Size)), "" __VA_ARGS__)
|
||||
|
||||
#endif /* !CRITERION_ASSERT_H_ */
|
||||
|
|
|
@ -3,10 +3,11 @@ TESTS = \
|
|||
report \
|
||||
suites \
|
||||
fixtures \
|
||||
asserts \
|
||||
simple
|
||||
|
||||
TESTS_ENVIRONMENT = CRITERION_ALWAYS_SUCCEED=1
|
||||
|
||||
check_PROGRAMS = $(TESTS)
|
||||
CFLAGS = -I$(top_srcdir)/include/
|
||||
CFLAGS = -I$(top_srcdir)/include/ -std=c99
|
||||
LDADD = -L$(top_srcdir)/ -lcriterion
|
||||
|
|
43
samples/asserts.c
Normal file
43
samples/asserts.c
Normal file
|
@ -0,0 +1,43 @@
|
|||
#include <criterion/criterion.h>
|
||||
|
||||
Test(asserts, base) {
|
||||
assert(true);
|
||||
expect(true);
|
||||
|
||||
assert(true, "Assertions may take failure messages");
|
||||
|
||||
expect(false, "assert is fatal, expect isn't");
|
||||
assert(false, "This assert runs");
|
||||
assert(false, "This does not");
|
||||
}
|
||||
|
||||
Test(asserts, string) {
|
||||
assert_strings_equal("hello", "hello");
|
||||
assert_strings_not_equal("hello", "olleh");
|
||||
|
||||
assert_strings_gt("hello", "hell");
|
||||
assert_strings_geq("hello", "hell");
|
||||
assert_strings_geq("hello", "hello");
|
||||
|
||||
assert_strings_lt("hell", "hello");
|
||||
assert_strings_leq("hell", "hello");
|
||||
assert_strings_leq("hello", "hello");
|
||||
}
|
||||
|
||||
Test(asserts, native) {
|
||||
assert_equal(1, 1);
|
||||
assert_not_equal(1, 2);
|
||||
|
||||
assert_lt(1, 2);
|
||||
assert_leq(1, 2);
|
||||
assert_leq(2, 2);
|
||||
|
||||
assert_gt(2, 1);
|
||||
assert_geq(2, 1);
|
||||
assert_geq(2, 2);
|
||||
}
|
||||
|
||||
Test(asserts, float) {
|
||||
assert_not_equal(0.1 * 0.1, 0.01);
|
||||
assert_float_equal(0.1 * 0.1, 0.01, 0.001);
|
||||
}
|
Loading…
Add table
Reference in a new issue