git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Phillip Wood <phillip.wood123@gmail.com>
To: Patrick Steinhardt <ps@pks.im>, git@vger.kernel.org
Cc: "René Scharfe" <l.s.r@web.de>,
	"Junio C Hamano" <gitster@pobox.com>,
	"Kyle Lippincott" <spectral@google.com>,
	"Phillip Wood" <phillip.wood@dunelm.org.uk>,
	"Josh Steadmon" <steadmon@google.com>,
	rsbecker@nexbridge.com,
	"Edward Thomson" <ethomson@edwardthomson.com>,
	"Johannes Schindelin" <Johannes.Schindelin@gmx.de>
Subject: Re: [PATCH v6 11/13] t/unit-tests: convert strvec tests to use clar
Date: Wed, 28 Aug 2024 14:17:05 +0100	[thread overview]
Message-ID: <c6f13f6b-7899-4bbd-986a-9bb1649b214f@gmail.com> (raw)
In-Reply-To: <b3b8df048725c25b14860513b7950b158a6990ea.1724159966.git.ps@pks.im>

Hi Patrick

On 20/08/2024 15:02, Patrick Steinhardt wrote:
> Convert the strvec tests to use the new clar unit testing framework.
> This is a first test balloon that demonstrates how the testing infra for
> clar-based tests looks like.
> 
> The tests are part of the "t/unit-tests/bin/unit-tests" binary. When
> running that binary, it generates TAP output:

It would be interesting to see a comparison between the current 
framework and clar of the output from a failing test - the TAP output 
for passing tests is pretty much the same regardless of the framework used.

>      # ./t/unit-tests/bin/unit-tests
>      TAP version 13
>      # start of suite 1: strvec
>      ok 1 - strvec::init
> [...] 
> The binary also supports some parameters that allow us to run only a
> subset of unit tests or alter the output:
> 
>      $ ./t/unit-tests/bin/unit-tests -h
>      Usage: ./t/unit-tests/bin/unit-tests [options]
> 
>      Options:
>        -sname        Run only the suite with `name` (can go to individual test name)
>        -iname        Include the suite with `name`
>        -xname        Exclude the suite with `name`
>        -v            Increase verbosity (show suite names)

The output above seems to include the suite name - are we running the 
tests with '-v' from our Makefile?

>        -q            Only report tests that had an error

This option is incompatible with TAP output. As we force TAP output we 
should find a way to stop displaying this help.

>        -Q            Quit as soon as a test fails
>        -t            Display results in tap format

We force TAP output by adding '-t' to argv in main() so this line is not 
very helpful

>        -l            Print suite names
>        -r[filename]  Write summary file (to the optional filename)

> diff --git a/t/unit-tests/strvec.c b/t/unit-tests/strvec.c
> [..]
> +#define check_strvec(vec, ...) \
> +	do { \
> +		const char *expect[] = { __VA_ARGS__ }; \
> +		cl_assert(ARRAY_SIZE(expect) > 0); \

As there are a lot occurrences of ARRAY_SIZE(expect) it is probably 
worth adding

	size_t expect_len = ARRAY_SIZE(expect);

above.

> +		cl_assert_equal_p(expect[ARRAY_SIZE(expect) - 1], NULL); \
> +		cl_assert_equal_i((vec)->nr, ARRAY_SIZE(expect) - 1); \
> +		cl_assert((vec)->nr <= (vec)->alloc); \

The conversion here loses the values of nr and alloc which is a shame as 
they would be useful when debugging a test failure.

> +		for (size_t i = 0; i < ARRAY_SIZE(expect); i++) \
> +			cl_assert_equal_s((vec)->v[i], expect[i]); \

The original test also printed the array index of the failing check. As 
the elements of the test vectors all seem to be unique that is less of a 
worry than if we had tests with repeating elements.

> +	} while (0)
> +
> +void test_strvec__init(void)
> +{
> +	struct strvec vec = STRVEC_INIT;

If we're rewriting the tests perhaps we can take the opportunity to add 
a blank line to each one after the variable declarations in accordance 
with our coding guidelines.

It might be a good opportunity to show the set-up and tear-down 
facilities in clar as well instead of repeating the initialization in 
each test.

Best Wishes

Phillip

> +	cl_assert_equal_p(vec.v, empty_strvec);
> +	cl_assert_equal_i(vec.nr, 0);
> +	cl_assert_equal_i(vec.alloc, 0);
> +}
> +
> +void test_strvec__dynamic_init(void)
> +{
> +	struct strvec vec;
> +	strvec_init(&vec);
> +	cl_assert_equal_p(vec.v, empty_strvec);
> +	cl_assert_equal_i(vec.nr, 0);
> +	cl_assert_equal_i(vec.alloc, 0);
> +}
> +
> +void test_strvec__clear(void)
> +{
> +	struct strvec vec = STRVEC_INIT;
> +	strvec_push(&vec, "foo");
> +	strvec_clear(&vec);
> +	cl_assert_equal_p(vec.v, empty_strvec);
> +	cl_assert_equal_i(vec.nr, 0);
> +	cl_assert_equal_i(vec.alloc, 0);
> +}
> +
> +void test_strvec__push(void)
> +{
> +	struct strvec vec = STRVEC_INIT;
> +
> +	strvec_push(&vec, "foo");
> +	check_strvec(&vec, "foo", NULL);
> +
> +	strvec_push(&vec, "bar");
> +	check_strvec(&vec, "foo", "bar", NULL);
> +
> +	strvec_clear(&vec);
> +}
> +
> +void test_strvec__pushf(void)
> +{
> +	struct strvec vec = STRVEC_INIT;
> +	strvec_pushf(&vec, "foo: %d", 1);
> +	check_strvec(&vec, "foo: 1", NULL);
> +	strvec_clear(&vec);
> +}
> +
> +void test_strvec__pushl(void)
> +{
> +	struct strvec vec = STRVEC_INIT;
> +	strvec_pushl(&vec, "foo", "bar", "baz", NULL);
> +	check_strvec(&vec, "foo", "bar", "baz", NULL);
> +	strvec_clear(&vec);
> +}
> +
> +void test_strvec__pushv(void)
> +{
> +	const char *strings[] = {
> +		"foo", "bar", "baz", NULL,
> +	};
> +	struct strvec vec = STRVEC_INIT;
> +
> +	strvec_pushv(&vec, strings);
> +	check_strvec(&vec, "foo", "bar", "baz", NULL);
> +
> +	strvec_clear(&vec);
> +}
> +
> +void test_strvec__replace_at_head(void)
> +{
> +	struct strvec vec = STRVEC_INIT;
> +	strvec_pushl(&vec, "foo", "bar", "baz", NULL);
> +	strvec_replace(&vec, 0, "replaced");
> +	check_strvec(&vec, "replaced", "bar", "baz", NULL);
> +	strvec_clear(&vec);
> +}
> +
> +void test_strvec__replace_at_tail(void)
> +{
> +	struct strvec vec = STRVEC_INIT;
> +	strvec_pushl(&vec, "foo", "bar", "baz", NULL);
> +	strvec_replace(&vec, 2, "replaced");
> +	check_strvec(&vec, "foo", "bar", "replaced", NULL);
> +	strvec_clear(&vec);
> +}
> +
> +void test_strvec__replace_in_between(void)
> +{
> +	struct strvec vec = STRVEC_INIT;
> +	strvec_pushl(&vec, "foo", "bar", "baz", NULL);
> +	strvec_replace(&vec, 1, "replaced");
> +	check_strvec(&vec, "foo", "replaced", "baz", NULL);
> +	strvec_clear(&vec);
> +}
> +
> +void test_strvec__replace_with_substring(void)
> +{
> +	struct strvec vec = STRVEC_INIT;
> +	strvec_pushl(&vec, "foo", NULL);
> +	strvec_replace(&vec, 0, vec.v[0] + 1);
> +	check_strvec(&vec, "oo", NULL);
> +	strvec_clear(&vec);
> +}
> +
> +void test_strvec__remove_at_head(void)
> +{
> +	struct strvec vec = STRVEC_INIT;
> +	strvec_pushl(&vec, "foo", "bar", "baz", NULL);
> +	strvec_remove(&vec, 0);
> +	check_strvec(&vec, "bar", "baz", NULL);
> +	strvec_clear(&vec);
> +}
> +
> +void test_strvec__remove_at_tail(void)
> +{
> +	struct strvec vec = STRVEC_INIT;
> +	strvec_pushl(&vec, "foo", "bar", "baz", NULL);
> +	strvec_remove(&vec, 2);
> +	check_strvec(&vec, "foo", "bar", NULL);
> +	strvec_clear(&vec);
> +}
> +
> +void test_strvec__remove_in_between(void)
> +{
> +	struct strvec vec = STRVEC_INIT;
> +	strvec_pushl(&vec, "foo", "bar", "baz", NULL);
> +	strvec_remove(&vec, 1);
> +	check_strvec(&vec, "foo", "baz", NULL);
> +	strvec_clear(&vec);
> +}
> +
> +void test_strvec__pop_empty_array(void)
> +{
> +	struct strvec vec = STRVEC_INIT;
> +	strvec_pop(&vec);
> +	check_strvec(&vec, NULL);
> +	strvec_clear(&vec);
> +}
> +
> +void test_strvec__pop_non_empty_array(void)
> +{
> +	struct strvec vec = STRVEC_INIT;
> +	strvec_pushl(&vec, "foo", "bar", "baz", NULL);
> +	strvec_pop(&vec);
> +	check_strvec(&vec, "foo", "bar", NULL);
> +	strvec_clear(&vec);
> +}
> +
> +void test_strvec__split_empty_string(void)
> +{
> +	struct strvec vec = STRVEC_INIT;
> +	strvec_split(&vec, "");
> +	check_strvec(&vec, NULL);
> +	strvec_clear(&vec);
> +}
> +
> +void test_strvec__split_single_item(void)
> +{
> +	struct strvec vec = STRVEC_INIT;
> +	strvec_split(&vec, "foo");
> +	check_strvec(&vec, "foo", NULL);
> +	strvec_clear(&vec);
> +}
> +
> +void test_strvec__split_multiple_items(void)
> +{
> +	struct strvec vec = STRVEC_INIT;
> +	strvec_split(&vec, "foo bar baz");
> +	check_strvec(&vec, "foo", "bar", "baz", NULL);
> +	strvec_clear(&vec);
> +}
> +
> +void test_strvec__split_whitespace_only(void)
> +{
> +	struct strvec vec = STRVEC_INIT;
> +	strvec_split(&vec, " \t\n");
> +	check_strvec(&vec, NULL);
> +	strvec_clear(&vec);
> +}
> +
> +void test_strvec__split_multiple_consecutive_whitespaces(void)
> +{
> +	struct strvec vec = STRVEC_INIT;
> +	strvec_split(&vec, "foo\n\t bar");
> +	check_strvec(&vec, "foo", "bar", NULL);
> +	strvec_clear(&vec);
> +}
> +
> +void test_strvec__detach(void)
> +{
> +	struct strvec vec = STRVEC_INIT;
> +	const char **detached;
> +
> +	strvec_push(&vec, "foo");
> +
> +	detached = strvec_detach(&vec);
> +	cl_assert_equal_s(detached[0], "foo");
> +	cl_assert_equal_p(detached[1], NULL);
> +
> +	cl_assert_equal_p(vec.v, empty_strvec);
> +	cl_assert_equal_i(vec.nr, 0);
> +	cl_assert_equal_i(vec.alloc, 0);
> +
> +	free((char *) detached[0]);
> +	free(detached);
> +}
> diff --git a/t/unit-tests/t-strvec.c b/t/unit-tests/t-strvec.c
> deleted file mode 100644
> index c4bac8fc91b..00000000000
> --- a/t/unit-tests/t-strvec.c
> +++ /dev/null
> @@ -1,211 +0,0 @@
> -#include "test-lib.h"
> -#include "strbuf.h"
> -#include "strvec.h"
> -
> -#define check_strvec(vec, ...) \
> -	do { \
> -		const char *expect[] = { __VA_ARGS__ }; \
> -		if (check_uint(ARRAY_SIZE(expect), >, 0) && \
> -		    check_pointer_eq(expect[ARRAY_SIZE(expect) - 1], NULL) && \
> -		    check_uint((vec)->nr, ==, ARRAY_SIZE(expect) - 1) && \
> -		    check_uint((vec)->nr, <=, (vec)->alloc)) { \
> -			for (size_t i = 0; i < ARRAY_SIZE(expect); i++) { \
> -				if (!check_str((vec)->v[i], expect[i])) { \
> -					test_msg("      i: %"PRIuMAX, \
> -						 (uintmax_t)i); \
> -					break; \
> -				} \
> -			} \
> -		} \
> -	} while (0)
> -
> -int cmd_main(int argc, const char **argv)
> -{
> -	if_test ("static initialization") {
> -		struct strvec vec = STRVEC_INIT;
> -		check_pointer_eq(vec.v, empty_strvec);
> -		check_uint(vec.nr, ==, 0);
> -		check_uint(vec.alloc, ==, 0);
> -	}
> -
> -	if_test ("dynamic initialization") {
> -		struct strvec vec;
> -		strvec_init(&vec);
> -		check_pointer_eq(vec.v, empty_strvec);
> -		check_uint(vec.nr, ==, 0);
> -		check_uint(vec.alloc, ==, 0);
> -	}
> -
> -	if_test ("clear") {
> -		struct strvec vec = STRVEC_INIT;
> -		strvec_push(&vec, "foo");
> -		strvec_clear(&vec);
> -		check_pointer_eq(vec.v, empty_strvec);
> -		check_uint(vec.nr, ==, 0);
> -		check_uint(vec.alloc, ==, 0);
> -	}
> -
> -	if_test ("push") {
> -		struct strvec vec = STRVEC_INIT;
> -
> -		strvec_push(&vec, "foo");
> -		check_strvec(&vec, "foo", NULL);
> -
> -		strvec_push(&vec, "bar");
> -		check_strvec(&vec, "foo", "bar", NULL);
> -
> -		strvec_clear(&vec);
> -	}
> -
> -	if_test ("pushf") {
> -		struct strvec vec = STRVEC_INIT;
> -		strvec_pushf(&vec, "foo: %d", 1);
> -		check_strvec(&vec, "foo: 1", NULL);
> -		strvec_clear(&vec);
> -	}
> -
> -	if_test ("pushl") {
> -		struct strvec vec = STRVEC_INIT;
> -		strvec_pushl(&vec, "foo", "bar", "baz", NULL);
> -		check_strvec(&vec, "foo", "bar", "baz", NULL);
> -		strvec_clear(&vec);
> -	}
> -
> -	if_test ("pushv") {
> -		const char *strings[] = {
> -			"foo", "bar", "baz", NULL,
> -		};
> -		struct strvec vec = STRVEC_INIT;
> -
> -		strvec_pushv(&vec, strings);
> -		check_strvec(&vec, "foo", "bar", "baz", NULL);
> -
> -		strvec_clear(&vec);
> -	}
> -
> -	if_test ("replace at head") {
> -		struct strvec vec = STRVEC_INIT;
> -		strvec_pushl(&vec, "foo", "bar", "baz", NULL);
> -		strvec_replace(&vec, 0, "replaced");
> -		check_strvec(&vec, "replaced", "bar", "baz", NULL);
> -		strvec_clear(&vec);
> -	}
> -
> -	if_test ("replace at tail") {
> -		struct strvec vec = STRVEC_INIT;
> -		strvec_pushl(&vec, "foo", "bar", "baz", NULL);
> -		strvec_replace(&vec, 2, "replaced");
> -		check_strvec(&vec, "foo", "bar", "replaced", NULL);
> -		strvec_clear(&vec);
> -	}
> -
> -	if_test ("replace in between") {
> -		struct strvec vec = STRVEC_INIT;
> -		strvec_pushl(&vec, "foo", "bar", "baz", NULL);
> -		strvec_replace(&vec, 1, "replaced");
> -		check_strvec(&vec, "foo", "replaced", "baz", NULL);
> -		strvec_clear(&vec);
> -	}
> -
> -	if_test ("replace with substring") {
> -		struct strvec vec = STRVEC_INIT;
> -		strvec_pushl(&vec, "foo", NULL);
> -		strvec_replace(&vec, 0, vec.v[0] + 1);
> -		check_strvec(&vec, "oo", NULL);
> -		strvec_clear(&vec);
> -	}
> -
> -	if_test ("remove at head") {
> -		struct strvec vec = STRVEC_INIT;
> -		strvec_pushl(&vec, "foo", "bar", "baz", NULL);
> -		strvec_remove(&vec, 0);
> -		check_strvec(&vec, "bar", "baz", NULL);
> -		strvec_clear(&vec);
> -	}
> -
> -	if_test ("remove at tail") {
> -		struct strvec vec = STRVEC_INIT;
> -		strvec_pushl(&vec, "foo", "bar", "baz", NULL);
> -		strvec_remove(&vec, 2);
> -		check_strvec(&vec, "foo", "bar", NULL);
> -		strvec_clear(&vec);
> -	}
> -
> -	if_test ("remove in between") {
> -		struct strvec vec = STRVEC_INIT;
> -		strvec_pushl(&vec, "foo", "bar", "baz", NULL);
> -		strvec_remove(&vec, 1);
> -		check_strvec(&vec, "foo", "baz", NULL);
> -		strvec_clear(&vec);
> -	}
> -
> -	if_test ("pop with empty array") {
> -		struct strvec vec = STRVEC_INIT;
> -		strvec_pop(&vec);
> -		check_strvec(&vec, NULL);
> -		strvec_clear(&vec);
> -	}
> -
> -	if_test ("pop with non-empty array") {
> -		struct strvec vec = STRVEC_INIT;
> -		strvec_pushl(&vec, "foo", "bar", "baz", NULL);
> -		strvec_pop(&vec);
> -		check_strvec(&vec, "foo", "bar", NULL);
> -		strvec_clear(&vec);
> -	}
> -
> -	if_test ("split empty string") {
> -		struct strvec vec = STRVEC_INIT;
> -		strvec_split(&vec, "");
> -		check_strvec(&vec, NULL);
> -		strvec_clear(&vec);
> -	}
> -
> -	if_test ("split single item") {
> -		struct strvec vec = STRVEC_INIT;
> -		strvec_split(&vec, "foo");
> -		check_strvec(&vec, "foo", NULL);
> -		strvec_clear(&vec);
> -	}
> -
> -	if_test ("split multiple items") {
> -		struct strvec vec = STRVEC_INIT;
> -		strvec_split(&vec, "foo bar baz");
> -		check_strvec(&vec, "foo", "bar", "baz", NULL);
> -		strvec_clear(&vec);
> -	}
> -
> -	if_test ("split whitespace only") {
> -		struct strvec vec = STRVEC_INIT;
> -		strvec_split(&vec, " \t\n");
> -		check_strvec(&vec, NULL);
> -		strvec_clear(&vec);
> -	}
> -
> -	if_test ("split multiple consecutive whitespaces") {
> -		struct strvec vec = STRVEC_INIT;
> -		strvec_split(&vec, "foo\n\t bar");
> -		check_strvec(&vec, "foo", "bar", NULL);
> -		strvec_clear(&vec);
> -	}
> -
> -	if_test ("detach") {
> -		struct strvec vec = STRVEC_INIT;
> -		const char **detached;
> -
> -		strvec_push(&vec, "foo");
> -
> -		detached = strvec_detach(&vec);
> -		check_str(detached[0], "foo");
> -		check_pointer_eq(detached[1], NULL);
> -
> -		check_pointer_eq(vec.v, empty_strvec);
> -		check_uint(vec.nr, ==, 0);
> -		check_uint(vec.alloc, ==, 0);
> -
> -		free((char *) detached[0]);
> -		free(detached);
> -	}
> -
> -	return test_done();
> -}

  reply	other threads:[~2024-08-28 13:17 UTC|newest]

Thread overview: 172+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-31  9:04 [RFC PATCH 0/3] Introduce clar testing framework Patrick Steinhardt
2024-07-31  9:04 ` [RFC PATCH 1/3] t: import the clar unit " Patrick Steinhardt
2024-07-31 18:27   ` Josh Steadmon
2024-07-31 19:36     ` Junio C Hamano
2024-08-01  9:32       ` Patrick Steinhardt
2024-07-31 20:04     ` rsbecker
2024-08-01  9:31       ` Patrick Steinhardt
2024-08-01 12:15         ` rsbecker
2024-08-01 12:54           ` rsbecker
2024-08-01 13:37             ` Patrick Steinhardt
2024-08-01 13:47               ` rsbecker
2024-08-01 13:50                 ` Patrick Steinhardt
2024-08-01 13:53                   ` rsbecker
2024-08-01 13:55                     ` Patrick Steinhardt
2024-08-01 14:04                       ` rsbecker
2024-08-01 14:43                         ` Patrick Steinhardt
2024-08-01 16:31                           ` rsbecker
2024-08-01 17:06                           ` rsbecker
2024-08-01 17:43                           ` [RFC PATCH 1/3] t: import the clar unit testing framework (better one) rsbecker
2024-08-01 18:12                             ` René Scharfe
2024-08-01 18:33                               ` rsbecker
2024-07-31  9:04 ` [RFC PATCH 2/3] Makefile: wire up the clar unit testing framework Patrick Steinhardt
2024-07-31 16:48   ` René Scharfe
2024-08-01  9:32     ` Patrick Steinhardt
2024-07-31 17:01   ` Junio C Hamano
2024-07-31 21:39     ` Junio C Hamano
2024-08-01  9:32       ` Patrick Steinhardt
2024-07-31  9:04 ` [RFC PATCH 3/3] t/unit-tests: convert strvec tests to use clar Patrick Steinhardt
2024-07-31 15:51 ` [RFC PATCH 0/3] Introduce clar testing framework Junio C Hamano
2024-07-31 15:56   ` rsbecker
2024-07-31 16:52     ` Junio C Hamano
2024-07-31 20:25       ` rsbecker
2024-07-31 20:37         ` rsbecker
2024-08-01  9:31           ` Patrick Steinhardt
2024-08-01  9:31   ` Patrick Steinhardt
2024-07-31 18:33 ` Josh Steadmon
2024-08-01  9:31   ` Patrick Steinhardt
2024-08-06 14:14 ` [RFC PATCH v2 0/7] " Patrick Steinhardt
2024-08-06 14:14   ` [RFC PATCH v2 1/7] t: do not pass GIT_TEST_OPTS to unit tests with prove Patrick Steinhardt
2024-08-06 14:14   ` [RFC PATCH v2 2/7] t: import the clar unit testing framework Patrick Steinhardt
2024-08-06 22:18     ` Josh Steadmon
2024-08-07  5:52       ` Patrick Steinhardt
2024-08-06 14:14   ` [RFC PATCH v2 3/7] t/clar: fix whitespace errors Patrick Steinhardt
2024-08-06 14:14   ` [RFC PATCH v2 4/7] t/clar: fix compatibility with NonStop Patrick Steinhardt
2024-08-06 14:14   ` [RFC PATCH v2 5/7] Makefile: wire up the clar unit testing framework Patrick Steinhardt
2024-08-06 14:14   ` [RFC PATCH v2 6/7] t/unit-tests: convert strvec tests to use clar Patrick Steinhardt
2024-08-06 23:05     ` Josh Steadmon
2024-08-07  5:52       ` Patrick Steinhardt
2024-08-06 14:15   ` [RFC PATCH v2 7/7] t/unit-tests: convert ctype " Patrick Steinhardt
2024-08-08  5:38 ` [RFC PATCH v3 0/7] Introduce clar testing framework Patrick Steinhardt
2024-08-08  5:38   ` [RFC PATCH v3 1/7] t: do not pass GIT_TEST_OPTS to unit tests with prove Patrick Steinhardt
2024-08-08  5:38   ` [RFC PATCH v3 2/7] t: import the clar unit testing framework Patrick Steinhardt
2024-08-08  5:38   ` [RFC PATCH v3 3/7] t/clar: fix whitespace errors Patrick Steinhardt
2024-08-13 15:25     ` Junio C Hamano
2024-08-13 15:31       ` rsbecker
2024-08-13 18:43         ` Junio C Hamano
2024-08-13 19:14           ` rsbecker
2024-08-13 20:42       ` Junio C Hamano
2024-08-14  5:58         ` Patrick Steinhardt
2024-08-08  5:38   ` [RFC PATCH v3 4/7] t/clar: fix compatibility with NonStop Patrick Steinhardt
2024-08-08  5:38   ` [RFC PATCH v3 5/7] Makefile: wire up the clar unit testing framework Patrick Steinhardt
2024-08-08  5:38   ` [RFC PATCH v3 6/7] t/unit-tests: convert strvec tests to use clar Patrick Steinhardt
2024-08-08  5:38   ` [RFC PATCH v3 7/7] t/unit-tests: convert ctype " Patrick Steinhardt
2024-08-12 18:10   ` [RFC PATCH v3 0/7] Introduce clar testing framework Josh Steadmon
2024-08-12 18:13     ` rsbecker
2024-08-12 20:50     ` Junio C Hamano
2024-08-12 20:58       ` rsbecker
2024-08-12 22:13         ` Junio C Hamano
2024-08-13  7:23           ` Patrick Steinhardt
2024-08-15  9:47 ` [PATCH v4 " Patrick Steinhardt
2024-08-15  9:47   ` [PATCH v4 1/7] t: do not pass GIT_TEST_OPTS to unit tests with prove Patrick Steinhardt
2024-08-15  9:47   ` [PATCH v4 2/7] t: import the clar unit testing framework Patrick Steinhardt
2024-08-15  9:47   ` [PATCH v4 3/7] t/clar: fix whitespace errors Patrick Steinhardt
2024-08-15  9:47   ` [PATCH v4 4/7] t/clar: fix compatibility with NonStop Patrick Steinhardt
2024-08-15  9:47   ` [PATCH v4 5/7] Makefile: wire up the clar unit testing framework Patrick Steinhardt
2024-08-15  9:47   ` [PATCH v4 6/7] t/unit-tests: convert strvec tests to use clar Patrick Steinhardt
2024-08-15  9:47   ` [PATCH v4 7/7] t/unit-tests: convert ctype " Patrick Steinhardt
2024-08-15 16:21   ` [PATCH v4 0/7] Introduce clar testing framework Junio C Hamano
2024-08-16  5:10     ` Patrick Steinhardt
2024-08-16  7:04 ` [PATCH v5 0/9] " Patrick Steinhardt
2024-08-16  7:04   ` [PATCH v5 1/9] t: do not pass GIT_TEST_OPTS to unit tests with prove Patrick Steinhardt
2024-08-16  7:04   ` [PATCH v5 2/9] t: import the clar unit testing framework Patrick Steinhardt
2024-08-16 13:37     ` Phillip Wood
2024-08-23 12:16       ` Johannes Schindelin
2024-08-28 13:20         ` Phillip Wood
2024-08-19 21:21     ` Junio C Hamano
2024-08-19 21:50       ` rsbecker
2024-08-19 22:13         ` Junio C Hamano
2024-08-19 22:38           ` rsbecker
2024-08-20 12:59       ` Patrick Steinhardt
2024-08-16  7:04   ` [PATCH v5 3/9] t/clar: fix compatibility with NonStop Patrick Steinhardt
2024-08-16  7:04   ` [PATCH v5 4/9] Makefile: fix sparse dependency on GENERATED_H Patrick Steinhardt
2024-08-16  7:04   ` [PATCH v5 5/9] Makefile: make hdr-check depend on generated headers Patrick Steinhardt
2024-08-16  7:04   ` [PATCH v5 6/9] Makefile: do not use sparse on third-party sources Patrick Steinhardt
2024-08-16  7:04   ` [PATCH v5 7/9] Makefile: wire up the clar unit testing framework Patrick Steinhardt
2024-08-16  7:04   ` [PATCH v5 8/9] t/unit-tests: convert strvec tests to use clar Patrick Steinhardt
2024-08-16 13:38     ` Phillip Wood
2024-08-16 16:11       ` Junio C Hamano
2024-08-20 12:59         ` Patrick Steinhardt
2024-08-16  7:05   ` [PATCH v5 9/9] t/unit-tests: convert ctype " Patrick Steinhardt
2024-08-16 13:38     ` Phillip Wood
2024-08-20 12:59       ` Patrick Steinhardt
2024-08-18  6:39     ` Junio C Hamano
2024-08-16 13:37   ` [PATCH v5 0/9] Introduce clar testing framework Phillip Wood
2024-08-20 12:59     ` Patrick Steinhardt
2024-08-28 15:15       ` phillip.wood123
2024-08-20 14:02 ` [PATCH v6 00/13] " Patrick Steinhardt
2024-08-20 14:02   ` [PATCH v6 01/13] t: do not pass GIT_TEST_OPTS to unit tests with prove Patrick Steinhardt
2024-08-20 14:02   ` [PATCH v6 02/13] t: import the clar unit testing framework Patrick Steinhardt
2024-08-28 13:16     ` Phillip Wood
2024-09-03  7:45       ` Patrick Steinhardt
2024-08-20 14:02   ` [PATCH v6 03/13] t/clar: fix compatibility with NonStop Patrick Steinhardt
2024-08-20 14:02   ` [PATCH v6 04/13] clar: avoid compile error with mingw-w64 Patrick Steinhardt
2024-08-20 14:02   ` [PATCH v6 05/13] clar(win32): avoid compile error due to unused `fs_copy()` Patrick Steinhardt
2024-08-20 14:02   ` [PATCH v6 06/13] clar: stop including `shellapi.h` unnecessarily Patrick Steinhardt
2024-08-20 14:02   ` [PATCH v6 07/13] Makefile: fix sparse dependency on GENERATED_H Patrick Steinhardt
2024-08-20 14:02   ` [PATCH v6 08/13] Makefile: make hdr-check depend on generated headers Patrick Steinhardt
2024-08-20 14:02   ` [PATCH v6 09/13] Makefile: do not use sparse on third-party sources Patrick Steinhardt
2024-08-20 14:02   ` [PATCH v6 10/13] Makefile: wire up the clar unit testing framework Patrick Steinhardt
2024-08-20 14:02   ` [PATCH v6 11/13] t/unit-tests: convert strvec tests to use clar Patrick Steinhardt
2024-08-28 13:17     ` Phillip Wood [this message]
2024-09-03  7:45       ` Patrick Steinhardt
2024-09-03  9:48         ` phillip.wood123
2024-09-04  6:37           ` Patrick Steinhardt
2024-09-04  9:31             ` phillip.wood123
2024-08-20 14:02   ` [PATCH v6 12/13] t/unit-tests: convert ctype " Patrick Steinhardt
2024-08-28 13:18     ` Phillip Wood
2024-09-03  7:45       ` Patrick Steinhardt
2024-08-20 14:02   ` [PATCH v6 13/13] clar: add CMake support Patrick Steinhardt
2024-08-28 13:18   ` [PATCH v6 00/13] Introduce clar testing framework Phillip Wood
2024-08-28 14:03     ` Patrick Steinhardt
2024-08-28 14:58       ` phillip.wood123
2024-09-03  9:14 ` [PATCH v7 00/14] " Patrick Steinhardt
2024-09-03  9:14   ` [PATCH v7 01/14] t: do not pass GIT_TEST_OPTS to unit tests with prove Patrick Steinhardt
2024-09-03  9:14   ` [PATCH v7 02/14] t: import the clar unit testing framework Patrick Steinhardt
2024-09-03  9:47     ` Eric Sunshine
2024-09-04  6:38       ` Patrick Steinhardt
2024-09-03  9:14   ` [PATCH v7 03/14] t/clar: fix compatibility with NonStop Patrick Steinhardt
2024-09-03  9:14   ` [PATCH v7 04/14] clar: avoid compile error with mingw-w64 Patrick Steinhardt
2024-09-03  9:14   ` [PATCH v7 05/14] clar(win32): avoid compile error due to unused `fs_copy()` Patrick Steinhardt
2024-09-03  9:14   ` [PATCH v7 06/14] clar: stop including `shellapi.h` unnecessarily Patrick Steinhardt
2024-09-03  9:14   ` [PATCH v7 07/14] Makefile: fix sparse dependency on GENERATED_H Patrick Steinhardt
2024-09-03  9:14   ` [PATCH v7 08/14] Makefile: make hdr-check depend on generated headers Patrick Steinhardt
2024-09-03  9:15   ` [PATCH v7 09/14] Makefile: do not use sparse on third-party sources Patrick Steinhardt
2024-09-03  9:15   ` [PATCH v7 10/14] Makefile: wire up the clar unit testing framework Patrick Steinhardt
2024-09-03  9:15   ` [PATCH v7 11/14] t/unit-tests: implement test driver Patrick Steinhardt
2024-09-04 13:35     ` Phillip Wood
2024-09-04 14:12       ` Patrick Steinhardt
2024-09-04 14:35         ` phillip.wood123
2024-09-03  9:15   ` [PATCH v7 12/14] t/unit-tests: convert strvec tests to use clar Patrick Steinhardt
2024-09-03  9:15   ` [PATCH v7 13/14] t/unit-tests: convert ctype " Patrick Steinhardt
2024-09-03  9:15   ` [PATCH v7 14/14] clar: add CMake support Patrick Steinhardt
2024-09-04 13:35   ` [PATCH v7 00/14] Introduce clar testing framework Phillip Wood
2024-09-04 14:12     ` Patrick Steinhardt
2024-09-04 14:16 ` [PATCH v8 " Patrick Steinhardt
2024-09-04 14:16   ` [PATCH v8 01/14] t: do not pass GIT_TEST_OPTS to unit tests with prove Patrick Steinhardt
2024-09-04 14:16   ` [PATCH v8 02/14] t: import the clar unit testing framework Patrick Steinhardt
2024-09-04 14:16   ` [PATCH v8 03/14] t/clar: fix compatibility with NonStop Patrick Steinhardt
2024-09-04 14:16   ` [PATCH v8 04/14] clar: avoid compile error with mingw-w64 Patrick Steinhardt
2024-09-04 14:16   ` [PATCH v8 05/14] clar(win32): avoid compile error due to unused `fs_copy()` Patrick Steinhardt
2024-09-04 14:16   ` [PATCH v8 06/14] clar: stop including `shellapi.h` unnecessarily Patrick Steinhardt
2024-09-04 14:17   ` [PATCH v8 07/14] Makefile: fix sparse dependency on GENERATED_H Patrick Steinhardt
2024-09-04 14:17   ` [PATCH v8 08/14] Makefile: make hdr-check depend on generated headers Patrick Steinhardt
2024-09-04 14:17   ` [PATCH v8 09/14] Makefile: do not use sparse on third-party sources Patrick Steinhardt
2024-09-04 14:17   ` [PATCH v8 10/14] Makefile: wire up the clar unit testing framework Patrick Steinhardt
2024-09-09 18:17     ` Junio C Hamano
2024-09-10  6:20       ` Patrick Steinhardt
2024-09-04 14:17   ` [PATCH v8 11/14] t/unit-tests: implement test driver Patrick Steinhardt
2024-09-04 14:17   ` [PATCH v8 12/14] t/unit-tests: convert strvec tests to use clar Patrick Steinhardt
2024-09-04 14:17   ` [PATCH v8 13/14] t/unit-tests: convert ctype " Patrick Steinhardt
2024-09-04 14:17   ` [PATCH v8 14/14] clar: add CMake support Patrick Steinhardt
2024-09-04 14:32   ` [PATCH v8 00/14] Introduce clar testing framework phillip.wood123

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=c6f13f6b-7899-4bbd-986a-9bb1649b214f@gmail.com \
    --to=phillip.wood123@gmail.com \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=ethomson@edwardthomson.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=l.s.r@web.de \
    --cc=phillip.wood@dunelm.org.uk \
    --cc=ps@pks.im \
    --cc=rsbecker@nexbridge.com \
    --cc=spectral@google.com \
    --cc=steadmon@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).