if: matrix.platform.image == 'i386/debian:latest'
run: apt -q update && apt -q -y install cmake gcc libc6-amd64 lib64stdc++6 make python3
- name: Check out
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Build
shell: bash
run: |
#include <sys/types.h>
#include <sys/stat.h>
+#ifndef va_copy
+# ifdef __va_copy
+# define va_copy(dst, src) __va_copy(dst, src)
+# else
+# define va_copy(dst, src) ((dst) = (src))
+# endif
+#endif
+
#if defined(__UCLIBC__) && ! defined(__UCLIBC_HAS_WCHAR__)
/*
* uClibc can optionally be built without wchar support, in which case
# define S_ISDIR(x) ((x & _S_IFDIR) != 0)
# endif
# define p_snprintf(buf,sz,fmt,...) _snprintf_s(buf,sz,_TRUNCATE,fmt,__VA_ARGS__)
+# define p_vsnprintf _vsnprintf
# else
# define p_snprintf snprintf
+# define p_vsnprintf vsnprintf
# endif
# define localtime_r(timer, buf) (localtime_s(buf, timer) == 0 ? buf : NULL)
# include <unistd.h>
# define _MAIN_CC
# define p_snprintf snprintf
+# define p_vsnprintf vsnprintf
typedef struct stat STAT_T;
#endif
abort_test();
}
-void clar__fail(
+static void clar__failv(
const char *file,
const char *function,
size_t line,
+ int should_abort,
const char *error_msg,
const char *description,
- int should_abort)
+ va_list args)
{
struct clar_error *error;
error->line_number = _clar.invoke_line ? _clar.invoke_line : line;
error->error_msg = error_msg;
- if (description != NULL &&
- (error->description = strdup(description)) == NULL)
- clar_abort("Failed to allocate description.\n");
+ if (description != NULL) {
+ va_list args_copy;
+ int len;
+
+ va_copy(args_copy, args);
+ if ((len = p_vsnprintf(NULL, 0, description, args_copy)) < 0)
+ clar_abort("Failed to compute description.");
+ va_end(args_copy);
+
+ if ((error->description = calloc(1, len + 1)) == NULL)
+ clar_abort("Failed to allocate buffer.");
+ p_vsnprintf(error->description, len + 1, description, args);
+ }
_clar.total_errors++;
_clar.last_report->status = CL_TEST_FAILURE;
abort_test();
}
+void clar__failf(
+ const char *file,
+ const char *function,
+ size_t line,
+ int should_abort,
+ const char *error_msg,
+ const char *description,
+ ...)
+{
+ va_list args;
+ va_start(args, description);
+ clar__failv(file, function, line, should_abort, error_msg,
+ description, args);
+ va_end(args);
+}
+
+void clar__fail(
+ const char *file,
+ const char *function,
+ size_t line,
+ const char *error_msg,
+ const char *description,
+ int should_abort)
+{
+ clar__failf(file, function, line, should_abort, error_msg,
+ description ? "%s" : NULL, description);
+}
+
void clar__assert(
int condition,
const char *file,
clar__fail(file, function, line, err, buf, should_abort);
}
+void clar__assert_compare_i(
+ const char *file,
+ const char *func,
+ size_t line,
+ int should_abort,
+ enum clar_comparison cmp,
+ intmax_t value1,
+ intmax_t value2,
+ const char *error,
+ const char *description,
+ ...)
+{
+ int fulfilled;
+ switch (cmp) {
+ case CLAR_COMPARISON_EQ:
+ fulfilled = value1 == value2;
+ break;
+ case CLAR_COMPARISON_LT:
+ fulfilled = value1 < value2;
+ break;
+ case CLAR_COMPARISON_LE:
+ fulfilled = value1 <= value2;
+ break;
+ case CLAR_COMPARISON_GT:
+ fulfilled = value1 > value2;
+ break;
+ case CLAR_COMPARISON_GE:
+ fulfilled = value1 >= value2;
+ break;
+ default:
+ cl_assert(0);
+ return;
+ }
+
+ if (!fulfilled) {
+ va_list args;
+ va_start(args, description);
+ clar__failv(file, func, line, should_abort, error,
+ description, args);
+ va_end(args);
+ }
+}
+
+void clar__assert_compare_u(
+ const char *file,
+ const char *func,
+ size_t line,
+ int should_abort,
+ enum clar_comparison cmp,
+ uintmax_t value1,
+ uintmax_t value2,
+ const char *error,
+ const char *description,
+ ...)
+{
+ int fulfilled;
+ switch (cmp) {
+ case CLAR_COMPARISON_EQ:
+ fulfilled = value1 == value2;
+ break;
+ case CLAR_COMPARISON_LT:
+ fulfilled = value1 < value2;
+ break;
+ case CLAR_COMPARISON_LE:
+ fulfilled = value1 <= value2;
+ break;
+ case CLAR_COMPARISON_GT:
+ fulfilled = value1 > value2;
+ break;
+ case CLAR_COMPARISON_GE:
+ fulfilled = value1 >= value2;
+ break;
+ default:
+ cl_assert(0);
+ return;
+ }
+
+ if (!fulfilled) {
+ va_list args;
+ va_start(args, description);
+ clar__failv(file, func, line, should_abort, error,
+ description, args);
+ va_end(args);
+ }
+}
+
void cl_set_cleanup(void (*cleanup)(void *), void *opaque)
{
_clar.local_cleanup = cleanup;
#ifndef __CLAR_TEST_H__
#define __CLAR_TEST_H__
+#include <inttypes.h>
#include <stdlib.h>
#include <limits.h>
* Forced failure/warning
*/
#define cl_fail(desc) clar__fail(CLAR_CURRENT_FILE, CLAR_CURRENT_FUNC, CLAR_CURRENT_LINE, "Test failed.", desc, 1)
+#define cl_failf(desc,...) clar__failf(CLAR_CURRENT_FILE, CLAR_CURRENT_FUNC, CLAR_CURRENT_LINE, 1, "Test failed.", desc, __VA_ARGS__)
#define cl_warning(desc) clar__fail(CLAR_CURRENT_FILE, CLAR_CURRENT_FUNC, CLAR_CURRENT_LINE, "Warning during test execution:", desc, 0)
#define cl_skip() clar__skip()
#define cl_assert_equal_wcsn(wcs1,wcs2,len) clar__assert_equal(CLAR_CURRENT_FILE,CLAR_CURRENT_FUNC,CLAR_CURRENT_LINE,"String mismatch: " #wcs1 " != " #wcs2, 1, "%.*ls", (wcs1), (wcs2), (int)(len))
#define cl_assert_equal_wcsn_(wcs1,wcs2,len,note) clar__assert_equal(CLAR_CURRENT_FILE,CLAR_CURRENT_FUNC,CLAR_CURRENT_LINE,"String mismatch: " #wcs1 " != " #wcs2 " (" #note ")", 1, "%.*ls", (wcs1), (wcs2), (int)(len))
-#define cl_assert_equal_i(i1,i2) clar__assert_equal(CLAR_CURRENT_FILE,CLAR_CURRENT_FUNC,CLAR_CURRENT_LINE,#i1 " != " #i2, 1, "%d", (int)(i1), (int)(i2))
-#define cl_assert_equal_i_(i1,i2,note) clar__assert_equal(CLAR_CURRENT_FILE,CLAR_CURRENT_FUNC,CLAR_CURRENT_LINE,#i1 " != " #i2 " (" #note ")", 1, "%d", (i1), (i2))
-#define cl_assert_equal_i_fmt(i1,i2,fmt) clar__assert_equal(CLAR_CURRENT_FILE,CLAR_CURRENT_FUNC,CLAR_CURRENT_LINE,#i1 " != " #i2, 1, (fmt), (int)(i1), (int)(i2))
+#define cl_assert_compare_i_(i1, i2, cmp, error, ...) clar__assert_compare_i(CLAR_CURRENT_FILE, CLAR_CURRENT_FUNC, CLAR_CURRENT_LINE, 1, cmp, \
+ (i1), (i2), "Expected comparison to hold: " error, __VA_ARGS__)
+#define cl_assert_compare_i(i1, i2, cmp, error, fmt) do { \
+ intmax_t v1 = (i1), v2 = (i2); \
+ clar__assert_compare_i(CLAR_CURRENT_FILE, CLAR_CURRENT_FUNC, CLAR_CURRENT_LINE, 1, cmp, \
+ v1, v2, "Expected comparison to hold: " error, fmt, v1, v2); \
+} while (0)
+#define cl_assert_equal_i_(i1, i2, ...) cl_assert_compare_i_(i1, i2, CLAR_COMPARISON_EQ, #i1 " == " #i2, __VA_ARGS__)
+#define cl_assert_equal_i(i1, i2) cl_assert_compare_i (i1, i2, CLAR_COMPARISON_EQ, #i1 " == " #i2, "%"PRIdMAX " != %"PRIdMAX)
+#define cl_assert_equal_i_fmt(i1, i2, fmt) cl_assert_compare_i_(i1, i2, CLAR_COMPARISON_EQ, #i1 " == " #i2, fmt " != " fmt, (int)(i1), (int)(i2))
+#define cl_assert_lt_i_(i1, i2, ...) cl_assert_compare_i_(i1, i2, CLAR_COMPARISON_LT, #i1 " < " #i2, __VA_ARGS__)
+#define cl_assert_lt_i(i1, i2) cl_assert_compare_i (i1, i2, CLAR_COMPARISON_LT, #i1 " < " #i2, "%"PRIdMAX " >= %"PRIdMAX)
+#define cl_assert_le_i_(i1, i2, ...) cl_assert_compare_i_(i1, i2, CLAR_COMPARISON_LE, #i1 " <= " #i2, __VA_ARGS__)
+#define cl_assert_le_i(i1, i2) cl_assert_compare_i (i1, i2, CLAR_COMPARISON_LE, #i1 " <= " #i2, "%"PRIdMAX " > %"PRIdMAX)
+#define cl_assert_gt_i_(i1, i2, ...) cl_assert_compare_i_(i1, i2, CLAR_COMPARISON_GT, #i1 " > " #i2, __VA_ARGS__)
+#define cl_assert_gt_i(i1, i2) cl_assert_compare_i (i1, i2, CLAR_COMPARISON_GT, #i1 " > " #i2, "%"PRIdMAX " <= %"PRIdMAX)
+#define cl_assert_ge_i_(i1, i2, ...) cl_assert_compare_i_(i1, i2, CLAR_COMPARISON_GE, #i1 " >= " #i2, __VA_ARGS__)
+#define cl_assert_ge_i(i1, i2) cl_assert_compare_i (i1, i2, CLAR_COMPARISON_GE, #i1 " >= " #i2, "%"PRIdMAX " < %"PRIdMAX)
+
+#define cl_assert_compare_u_(u1, u2, cmp, error, ...) clar__assert_compare_u(CLAR_CURRENT_FILE, CLAR_CURRENT_FUNC, CLAR_CURRENT_LINE, 1, cmp, \
+ (u1), (u2), "Expected comparison to hold: " error, __VA_ARGS__)
+#define cl_assert_compare_u(u1, u2, cmp, error, fmt) do { \
+ uintmax_t v1 = (u1), v2 = (u2); \
+ clar__assert_compare_u(CLAR_CURRENT_FILE, CLAR_CURRENT_FUNC, CLAR_CURRENT_LINE, 1, cmp, \
+ v1, v2, "Expected comparison to hold: " error, fmt, v1, v2); \
+} while (0)
+#define cl_assert_equal_u_(u1, u2, ...) cl_assert_compare_u_(u1, u2, CLAR_COMPARISON_EQ, #u1 " == " #u2, __VA_ARGS__)
+#define cl_assert_equal_u(u1, u2) cl_assert_compare_u (u1, u2, CLAR_COMPARISON_EQ, #u1 " == " #u2, "%"PRIuMAX " != %"PRIuMAX)
+#define cl_assert_lt_u_(u1, u2, ...) cl_assert_compare_u_(u1, u2, CLAR_COMPARISON_LT, #u1 " < " #u2, __VA_ARGS__)
+#define cl_assert_lt_u(u1, u2) cl_assert_compare_u (u1, u2, CLAR_COMPARISON_LT, #u1 " < " #u2, "%"PRIuMAX " >= %"PRIuMAX)
+#define cl_assert_le_u_(u1, u2, ...) cl_assert_compare_u_(u1, u2, CLAR_COMPARISON_LE, #u1 " <= " #u2, __VA_ARGS__)
+#define cl_assert_le_u(u1, u2) cl_assert_compare_u (u1, u2, CLAR_COMPARISON_LE, #u1 " <= " #u2, "%"PRIuMAX " > %"PRIuMAX)
+#define cl_assert_gt_u_(u1, u2, ...) cl_assert_compare_u_(u1, u2, CLAR_COMPARISON_GT, #u1 " > " #u2, __VA_ARGS__)
+#define cl_assert_gt_u(u1, u2) cl_assert_compare_u (u1, u2, CLAR_COMPARISON_GT, #u1 " > " #u2, "%"PRIuMAX " <= %"PRIuMAX)
+#define cl_assert_ge_u_(u1, u2, ...) cl_assert_compare_u_(u1, u2, CLAR_COMPARISON_GE, #u1 " >= " #u2, __VA_ARGS__)
+#define cl_assert_ge_u(u1, u2) cl_assert_compare_u (u1, u2, CLAR_COMPARISON_GE, #u1 " >= " #u2, "%"PRIuMAX " < %"PRIuMAX)
#define cl_assert_equal_b(b1,b2) clar__assert_equal(CLAR_CURRENT_FILE,CLAR_CURRENT_FUNC,CLAR_CURRENT_LINE,#b1 " != " #b2, 1, "%d", (int)((b1) != 0),(int)((b2) != 0))
const char *description,
int should_abort);
+void clar__failf(
+ const char *file,
+ const char *func,
+ size_t line,
+ int should_abort,
+ const char *error,
+ const char *description,
+ ...);
+
void clar__assert(
int condition,
const char *file,
const char *fmt,
...);
+enum clar_comparison {
+ CLAR_COMPARISON_EQ,
+ CLAR_COMPARISON_LT,
+ CLAR_COMPARISON_LE,
+ CLAR_COMPARISON_GT,
+ CLAR_COMPARISON_GE,
+};
+
+void clar__assert_compare_i(
+ const char *file,
+ const char *func,
+ size_t line,
+ int should_abort,
+ enum clar_comparison cmp,
+ intmax_t value1,
+ intmax_t value2,
+ const char *error,
+ const char *description,
+ ...);
+
+void clar__assert_compare_u(
+ const char *file,
+ const char *func,
+ size_t line,
+ int should_abort,
+ enum clar_comparison cmp,
+ uintmax_t value1,
+ uintmax_t value2,
+ const char *error,
+ const char *description,
+ ...);
+
void clar__set_invokepoint(
const char *file,
const char *func,
printf(" file: '"); print_escaped(error->file); printf("'\n");
printf(" line: %" PRIuMAX "\n", error->line_number);
printf(" function: '%s'\n", error->function);
- printf(" ---\n");
+ printf(" ...\n");
}
break;
5) Failure:
combined::int [file:42]
- 101 != value ("extra note on failing test")
+ Expected comparison to hold: 101 == value
101 != 100
6) Failure:
+combined::int_note [file:42]
+ Expected comparison to hold: 101 == value
+ extra note on failing test
+
+ 7) Failure:
combined::int_fmt [file:42]
- 022 != value
+ Expected comparison to hold: 022 == value
0022 != 0144
- 7) Failure:
+ 8) Failure:
combined::bool [file:42]
0 != value
0 != 1
- 8) Failure:
+ 9) Failure:
combined::multiline_description [file:42]
Function call failed: -1
description line 1
description line 2
- 9) Failure:
+ 10) Failure:
combined::null_string [file:42]
String mismatch: "expected" != actual ("this one fails")
'expected' != NULL
+ 11) Failure:
+combined::failf [file:42]
+ Test failed.
+ some reason: foo
+
+ 12) Failure:
+combined::compare_i [file:42]
+ Expected comparison to hold: two < 1
+ 2 >= 1
+
+ 13) Failure:
+combined::compare_i_with_format [file:42]
+ Expected comparison to hold: two < 1
+ foo: bar
+
+ 14) Failure:
+combined::compare_u [file:42]
+ Expected comparison to hold: two < 1
+ 2 >= 1
+
+ 15) Failure:
+combined::compare_u_with_format [file:42]
+ Expected comparison to hold: two < 1
+ foo: bar
+
Loaded 1 suites:
Started (test status codes: OK='.' FAILURE='F' SKIPPED='S')
-FFFFFFFFF
+FFFFFFFFFFFFFFF
1) Failure:
combined::1 [file:42]
5) Failure:
combined::int [file:42]
- 101 != value ("extra note on failing test")
+ Expected comparison to hold: 101 == value
101 != 100
6) Failure:
+combined::int_note [file:42]
+ Expected comparison to hold: 101 == value
+ extra note on failing test
+
+ 7) Failure:
combined::int_fmt [file:42]
- 022 != value
+ Expected comparison to hold: 022 == value
0022 != 0144
- 7) Failure:
+ 8) Failure:
combined::bool [file:42]
0 != value
0 != 1
- 8) Failure:
+ 9) Failure:
combined::multiline_description [file:42]
Function call failed: -1
description line 1
description line 2
- 9) Failure:
+ 10) Failure:
combined::null_string [file:42]
String mismatch: "expected" != actual ("this one fails")
'expected' != NULL
+ 11) Failure:
+combined::failf [file:42]
+ Test failed.
+ some reason: foo
+
+ 12) Failure:
+combined::compare_i [file:42]
+ Expected comparison to hold: two < 1
+ 2 >= 1
+
+ 13) Failure:
+combined::compare_i_with_format [file:42]
+ Expected comparison to hold: two < 1
+ foo: bar
+
+ 14) Failure:
+combined::compare_u [file:42]
+ Expected comparison to hold: two < 1
+ 2 >= 1
+
+ 15) Failure:
+combined::compare_u_with_format [file:42]
+ Expected comparison to hold: two < 1
+ foo: bar
+
written summary file to different.xml
Loaded 1 suites:
Started (test status codes: OK='.' FAILURE='F' SKIPPED='S')
-FFFFFFFFF
+FFFFFFFFFFFFFFF
1) Failure:
combined::1 [file:42]
5) Failure:
combined::int [file:42]
- 101 != value ("extra note on failing test")
+ Expected comparison to hold: 101 == value
101 != 100
6) Failure:
+combined::int_note [file:42]
+ Expected comparison to hold: 101 == value
+ extra note on failing test
+
+ 7) Failure:
combined::int_fmt [file:42]
- 022 != value
+ Expected comparison to hold: 022 == value
0022 != 0144
- 7) Failure:
+ 8) Failure:
combined::bool [file:42]
0 != value
0 != 1
- 8) Failure:
+ 9) Failure:
combined::multiline_description [file:42]
Function call failed: -1
description line 1
description line 2
- 9) Failure:
+ 10) Failure:
combined::null_string [file:42]
String mismatch: "expected" != actual ("this one fails")
'expected' != NULL
+ 11) Failure:
+combined::failf [file:42]
+ Test failed.
+ some reason: foo
+
+ 12) Failure:
+combined::compare_i [file:42]
+ Expected comparison to hold: two < 1
+ 2 >= 1
+
+ 13) Failure:
+combined::compare_i_with_format [file:42]
+ Expected comparison to hold: two < 1
+ foo: bar
+
+ 14) Failure:
+combined::compare_u [file:42]
+ Expected comparison to hold: two < 1
+ 2 >= 1
+
+ 15) Failure:
+combined::compare_u_with_format [file:42]
+ Expected comparison to hold: two < 1
+ foo: bar
+
written summary file to summary.xml
file: 'file'
line: 42
function: 'func'
- ---
+ ...
not ok 2 - combined::2
---
reason: |
file: 'file'
line: 42
function: 'func'
- ---
+ ...
not ok 3 - combined::strings
---
reason: |
file: 'file'
line: 42
function: 'func'
- ---
+ ...
not ok 4 - combined::strings_with_length
---
reason: |
file: 'file'
line: 42
function: 'func'
- ---
+ ...
not ok 5 - combined::int
---
reason: |
- 101 != value ("extra note on failing test")
+ Expected comparison to hold: 101 == value
101 != 100
at:
file: 'file'
line: 42
function: 'func'
+ ...
+not ok 6 - combined::int_note
---
-not ok 6 - combined::int_fmt
+ reason: |
+ Expected comparison to hold: 101 == value
+ extra note on failing test
+ at:
+ file: 'file'
+ line: 42
+ function: 'func'
+ ...
+not ok 7 - combined::int_fmt
---
reason: |
- 022 != value
+ Expected comparison to hold: 022 == value
0022 != 0144
at:
file: 'file'
line: 42
function: 'func'
- ---
-not ok 7 - combined::bool
+ ...
+not ok 8 - combined::bool
---
reason: |
0 != value
file: 'file'
line: 42
function: 'func'
- ---
-not ok 8 - combined::multiline_description
+ ...
+not ok 9 - combined::multiline_description
---
reason: |
Function call failed: -1
file: 'file'
line: 42
function: 'func'
- ---
-not ok 9 - combined::null_string
+ ...
+not ok 10 - combined::null_string
---
reason: |
String mismatch: "expected" != actual ("this one fails")
file: 'file'
line: 42
function: 'func'
+ ...
+not ok 11 - combined::failf
+ ---
+ reason: |
+ Test failed.
+ some reason: foo
+ at:
+ file: 'file'
+ line: 42
+ function: 'func'
+ ...
+not ok 12 - combined::compare_i
---
-1..9
+ reason: |
+ Expected comparison to hold: two < 1
+ 2 >= 1
+ at:
+ file: 'file'
+ line: 42
+ function: 'func'
+ ...
+not ok 13 - combined::compare_i_with_format
+ ---
+ reason: |
+ Expected comparison to hold: two < 1
+ foo: bar
+ at:
+ file: 'file'
+ line: 42
+ function: 'func'
+ ...
+not ok 14 - combined::compare_u
+ ---
+ reason: |
+ Expected comparison to hold: two < 1
+ 2 >= 1
+ at:
+ file: 'file'
+ line: 42
+ function: 'func'
+ ...
+not ok 15 - combined::compare_u_with_format
+ ---
+ reason: |
+ Expected comparison to hold: two < 1
+ foo: bar
+ at:
+ file: 'file'
+ line: 42
+ function: 'func'
+ ...
+1..15
Loaded 1 suites:
Started (test status codes: OK='.' FAILURE='F' SKIPPED='S')
-FFFFFFFFF
+FFFFFFFFFFFFFFF
1) Failure:
combined::1 [file:42]
5) Failure:
combined::int [file:42]
- 101 != value ("extra note on failing test")
+ Expected comparison to hold: 101 == value
101 != 100
6) Failure:
+combined::int_note [file:42]
+ Expected comparison to hold: 101 == value
+ extra note on failing test
+
+ 7) Failure:
combined::int_fmt [file:42]
- 022 != value
+ Expected comparison to hold: 022 == value
0022 != 0144
- 7) Failure:
+ 8) Failure:
combined::bool [file:42]
0 != value
0 != 1
- 8) Failure:
+ 9) Failure:
combined::multiline_description [file:42]
Function call failed: -1
description line 1
description line 2
- 9) Failure:
+ 10) Failure:
combined::null_string [file:42]
String mismatch: "expected" != actual ("this one fails")
'expected' != NULL
+ 11) Failure:
+combined::failf [file:42]
+ Test failed.
+ some reason: foo
+
+ 12) Failure:
+combined::compare_i [file:42]
+ Expected comparison to hold: two < 1
+ 2 >= 1
+
+ 13) Failure:
+combined::compare_i_with_format [file:42]
+ Expected comparison to hold: two < 1
+ foo: bar
+
+ 14) Failure:
+combined::compare_u [file:42]
+ Expected comparison to hold: two < 1
+ 2 >= 1
+
+ 15) Failure:
+combined::compare_u_with_format [file:42]
+ Expected comparison to hold: two < 1
+ foo: bar
+
void test_selftest__without_arguments(void)
{
- cl_invoke(assert_output("combined", "without_arguments", 9, NULL));
+ cl_invoke(assert_output("combined", "without_arguments", 15, NULL));
}
void test_selftest__specific_test(void)
void test_selftest__quiet(void)
{
- cl_invoke(assert_output("combined", "quiet", 9, "-q", NULL));
+ cl_invoke(assert_output("combined", "quiet", 15, "-q", NULL));
}
void test_selftest__tap(void)
{
- cl_invoke(assert_output("combined", "tap", 9, "-t", NULL));
+ cl_invoke(assert_output("combined", "tap", 15, "-t", NULL));
}
void test_selftest__suite_names(void)
void test_selftest__summary_without_filename(void)
{
struct stat st;
- cl_invoke(assert_output("combined", "summary_without_filename", 9, "-r", NULL));
+ cl_invoke(assert_output("combined", "summary_without_filename", 15, "-r", NULL));
/* The summary contains timestamps, so we cannot verify its contents. */
cl_must_pass(stat("summary.xml", &st));
}
void test_selftest__summary_with_filename(void)
{
struct stat st;
- cl_invoke(assert_output("combined", "summary_with_filename", 9, "-rdifferent.xml", NULL));
+ cl_invoke(assert_output("combined", "summary_with_filename", 15, "-rdifferent.xml", NULL));
/* The summary contains timestamps, so we cannot verify its contents. */
cl_must_pass(stat("different.xml", &st));
}
void test_combined__int(void)
{
int value = 100;
- cl_assert_equal_i(100, value);
+ cl_assert_equal_i(101, value);
+}
+
+void test_combined__int_note(void)
+{
+ int value = 100;
cl_assert_equal_i_(101, value, "extra note on failing test");
}
cl_assert_equal_s(actual, actual);
cl_assert_equal_s_("expected", actual, "this one fails");
}
+
+void test_combined__failf(void)
+{
+ cl_failf("some reason: %s", "foo");
+}
+
+void test_combined__compare_i(void)
+{
+ int one = 1, two = 2;
+
+ cl_assert_equal_i(one, 1);
+ cl_assert_equal_i(one, 1);
+ cl_assert_equal_i_(one, 1, "format");
+ cl_assert_lt_i(one, 2);
+ cl_assert_lt_i_(one, 2, "format");
+ cl_assert_le_i(one, 2);
+ cl_assert_le_i(two, 2);
+ cl_assert_le_i_(two, 2, "format");
+ cl_assert_gt_i(two, 1);
+ cl_assert_gt_i_(two, 1, "format");
+ cl_assert_ge_i(two, 2);
+ cl_assert_ge_i(3, two);
+ cl_assert_ge_i_(3, two, "format");
+
+ cl_assert_lt_i(two, 1); /* this one fails */
+}
+
+void test_combined__compare_i_with_format(void)
+{
+ int two = 2;
+ cl_assert_lt_i_(two, 1, "foo: %s", "bar");
+}
+
+void test_combined__compare_u(void)
+{
+ unsigned one = 1, two = 2;
+
+ cl_assert_equal_u(one, 1);
+ cl_assert_equal_u_(one, 1, "format");
+ cl_assert_lt_u(one, 2);
+ cl_assert_lt_u_(one, 2, "format");
+ cl_assert_le_u(one, 2);
+ cl_assert_le_u(two, 2);
+ cl_assert_le_u_(two, 2, "format");
+ cl_assert_gt_u(two, 1);
+ cl_assert_gt_u_(two, 1, "format");
+ cl_assert_ge_u(two, 2);
+ cl_assert_ge_u(3, two);
+ cl_assert_ge_u_(3, two, "format");
+
+ cl_assert_lt_u(two, 1); /* this one fails */
+}
+
+void test_combined__compare_u_with_format(void)
+{
+ unsigned two = 2;
+ cl_assert_lt_u_(two, 1, "foo: %s", "bar");
+}
#else
# include GIT_CLAR_DECLS_H
#endif
-
-#define cl_failf(fmt, ...) do { \
- char desc[4096]; \
- snprintf(desc, sizeof(desc), fmt, __VA_ARGS__); \
- clar__fail(__FILE__, __func__, __LINE__, "Test failed.", desc, 1); \
-} while (0)