git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: phillip.wood123@gmail.com
To: "René Scharfe" <l.s.r@web.de>,
	phillip.wood@dunelm.org.uk, "Git List" <git@vger.kernel.org>
Cc: Josh Steadmon <steadmon@google.com>
Subject: Re: [PATCH 2/6] unit-tests: add TEST_RUN
Date: Mon, 8 Jul 2024 16:12:34 +0100	[thread overview]
Message-ID: <9f63d125-b1ee-4b07-b0c7-a3c98dd31f90@gmail.com> (raw)
In-Reply-To: <6c83357a-825f-49d9-8cc2-e81415e8010d@web.de>

Hi René

On 05/07/2024 19:01, René Scharfe wrote:
> Am 05.07.24 um 11:42 schrieb phillip.wood123@gmail.com:
>> On 02/07/2024 21:55, René Scharfe wrote:
>>> Am 02.07.24 um 17:13 schrieb phillip.wood123@gmail.com:
>>>
>>>> The changes in patch 6 to use TEST_RUN() mean that each test now has
>>>> more boilerplate to initialize and free the strbuf.
>>>
>>> This makes them more similar to strbuf usage in the wild.  Using
>>> the API idiomatically just makes more sense to me.
>>
>> I see what you mean. I think it only looks idiomatic if you're
>> already familiar with the api though as the test bodies call wrappers
>> rather than using the strbuf api directly. I think that reduces its
>> value as an example of idomatic usage for someone who is not familiar
>> with the strbuf api.
> 
> In early versions I used the original names by adding these just before
> main():
> 
>     #define strbuf_addch(x, y)  t_addch(x, y)
>     #define strbuf_addstr(x, y) t_addstr(x, y)
>     #define strbuf_release(x)   t_release(x)
> 
> This allowed normal looking code to be used in tests, with checks
> injected behind the scenes.  Rejected it for v1 because it offers no
> structural improvements, just optics.  It does allow to forget the
> checked versions when writing tests, though, so perhaps it's still
> worth doing.

It also obscures what the test is doing though. It's nice if unit tests 
show how to use an API but I don't think we should let that be our 
overriding concern.

>>> We could also let xstrvfmt() call vsnprintf(3) directly.  The code
>>> duplication would be a bit grating, but perhaps there's some good
>>> base function hidden in there somewhere.
>>
>> Oh, interesting - maybe something like
>>
>> char* xstrvfmt(const char *fmt, ...)
>> {
>>      va_list ap, aq;
>>
>>      va_start(ap, fmt);
>>      va_copy(aq, ap);
>>      len = vnsprintf(NULL, 0, fmt, ap);
>>      if (len < 0)
>>          BUG(...)
>>      buf = xmalloc(len + 1);
>>      if (vnsprintf(buf, len + 1, fmt, aq) != len)
>>          BUG(...)
>>      va_end(aq);
>>      va_end(ap);
>>
>>      return buf;
>> }
> 
> Yes.  Though the current version allocates 65 bytes in the first try
> and only needs to call vnsprintf(3) once if the output fits in.  No
> longer doing that might affect the performance of some callers in a
> noticeable way.

Good point

>>>> I'm not very enthusiastic about requiring the test author to wrap
>>>> TEST_RUN() in an if() statement rather than just doing that for them.
>>>> It makes it explicit but from the test author's point of view it just
>>>> feels like pointless boilerplate.
>>>
>>> Hmm.  We can add more magic, but I suspect that it might confuse
>>> developers and editors.
>>
>> To me its confusing to have to wrap TEST_RUN() in an if() statement
>> until one realizes that the test might be skipped. If we document
>> that the test body should be enclosed in braces I don't think it
>> should confuse developers or editors and will keep the tests a bit
>> cleaner.
> 
> You don't need braces in either case.  I.e. something like
> 
> 	if (TEST_RUN("foo"))
> 		foo();
> 
> works fine.  And
> 
> 	#define IF_TEST_RUN(...) if (TEST_RUN(__VA_ARGS__))
> 	IF_TEST_RUN("foo")
> 		foo();
> 
> works fine as well.

Indeed. The reason I suggested requiring braces was to help editors 
indent the code correctly and because it gives a nice visual cue to see 
what is in each test.

Best Wishes

Phillip

> The confusion that I'm afraid of is that we'd effectively invent a new
> control flow keyword here, which is unusual.  There are precedents,
> though: foreach macros like for_each_string_list_item.  We tell
> clang-format about them using its option ForEachMacros.  I see it also
> has an option IfMacros since version 13 (unused by us so far).  Hmm.
> 
> René

  parent reply	other threads:[~2024-07-08 15:12 UTC|newest]

Thread overview: 115+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-06-29 15:33 [PATCH 0/6] unit-tests: add and use TEST_RUN to simplify tests René Scharfe
2024-06-29 15:35 ` [PATCH 1/6] t0080: move expected output to a file René Scharfe
2024-07-01  3:20   ` Jeff King
2024-07-01 19:17     ` Junio C Hamano
2024-07-01 22:10       ` Jeff King
2024-07-01 23:38         ` Junio C Hamano
2024-07-02  0:57           ` Jeff King
2024-07-01 19:51     ` René Scharfe
2024-07-01 22:18       ` Jeff King
2024-06-29 15:43 ` [PATCH 2/6] unit-tests: add TEST_RUN René Scharfe
2024-07-02 15:13   ` phillip.wood123
2024-07-02 15:51     ` Junio C Hamano
2024-07-02 20:55       ` René Scharfe
2024-07-02 20:55     ` René Scharfe
2024-07-05  9:42       ` phillip.wood123
2024-07-05 18:01         ` René Scharfe
2024-07-07  7:20           ` René Scharfe
2024-07-08 15:18             ` phillip.wood123
2024-07-08 15:39               ` Junio C Hamano
2024-07-11 15:34                 ` Junio C Hamano
2024-07-13 13:27                   ` Phillip Wood
2024-07-13 15:48                     ` Junio C Hamano
2024-07-08 15:12           ` phillip.wood123 [this message]
2024-06-29 15:44 ` [PATCH 3/6] t-ctype: use TEST_RUN René Scharfe
2024-07-01 19:49   ` Josh Steadmon
2024-07-01 20:04     ` René Scharfe
2024-07-02 15:14       ` phillip.wood123
2024-07-02 20:55         ` René Scharfe
2024-06-29 15:45 ` [PATCH 4/6] t-reftable-basics: " René Scharfe
2024-06-29 15:46 ` [PATCH 5/6] t-strvec: " René Scharfe
2024-07-02 15:14   ` phillip.wood123
2024-07-02 20:55     ` René Scharfe
2024-06-29 15:47 ` [PATCH 6/6] t-strbuf: " René Scharfe
2024-07-01 19:58   ` Josh Steadmon
2024-07-01 20:18     ` René Scharfe
2024-07-02 15:14     ` phillip.wood123
2024-07-02 20:55       ` René Scharfe
2024-07-04 13:09         ` phillip.wood123
2024-07-10 13:55       ` Phillip Wood
2024-07-14 11:44         ` René Scharfe
2024-07-15 14:46         ` Ghanshyam Thakkar
2024-07-02 17:29     ` Ghanshyam Thakkar
2024-07-02 20:55       ` René Scharfe
2024-07-03  3:42         ` Ghanshyam Thakkar
2024-07-08 18:11       ` Josh Steadmon
2024-07-08 21:59         ` Ghanshyam Thakkar
2024-07-01 19:59 ` [PATCH 0/6] unit-tests: add and use TEST_RUN to simplify tests Josh Steadmon
2024-07-10 22:13 ` Junio C Hamano
2024-07-11 10:05   ` Phillip Wood
2024-07-11 15:12     ` Junio C Hamano
2024-07-14 10:35     ` René Scharfe
2024-07-21  6:12 ` [PATCH v2 0/6] unit-tests: add and use for_test " René Scharfe
2024-07-21  6:15   ` [PATCH v2 1/6] t0080: move expected output to a file René Scharfe
2024-07-23 20:54     ` Jeff King
2024-07-21  6:21   ` [PATCH v2 2/6] unit-tests: add for_test René Scharfe
2024-07-22 19:13     ` Kyle Lippincott
2024-07-22 19:36       ` Junio C Hamano
2024-07-22 20:31         ` René Scharfe
2024-07-22 20:41           ` Junio C Hamano
2024-07-22 22:47           ` Kyle Lippincott
2024-07-23 12:37             ` René Scharfe
2024-07-23  6:02           ` [PATCH v2] unit-tests: show location of checks outside of tests René Scharfe
2024-07-23 13:25             ` Phillip Wood
2024-07-22 22:41         ` [PATCH v2 2/6] unit-tests: add for_test Kyle Lippincott
2024-07-23  7:18           ` René Scharfe
2024-07-23  6:36         ` Patrick Steinhardt
2024-07-23  9:25           ` René Scharfe
2024-07-23  9:53             ` Patrick Steinhardt
2024-07-23 12:37               ` René Scharfe
2024-07-23 13:00                 ` Patrick Steinhardt
2024-07-23 13:23                 ` Phillip Wood
2024-07-23 13:58                   ` René Scharfe
2024-07-23 13:24       ` Phillip Wood
2024-07-25  9:45         ` Phillip Wood
2024-07-30 14:00           ` René Scharfe
2024-07-21  6:22   ` [PATCH v2 3/6] t-ctype: use for_test René Scharfe
2024-07-21  6:23   ` [PATCH v2 4/6] t-reftable-basics: " René Scharfe
2024-07-21  6:24   ` [PATCH v2 5/6] t-strvec: " René Scharfe
2024-07-21  6:26   ` [PATCH v2 6/6] t-strbuf: " René Scharfe
2024-07-23 13:23     ` Phillip Wood
2024-07-24 14:42 ` [PATCH v3 0/7] add and use for_test to simplify tests René Scharfe
2024-07-24 14:48   ` [PATCH v3 1/7] t0080: use here-doc test body René Scharfe
2024-07-24 14:50   ` [PATCH v3 2/7] unit-tests: show location of checks outside of tests René Scharfe
2024-07-24 14:51   ` [PATCH v3 3/7] unit-tests: add for_test René Scharfe
2024-07-24 19:24     ` Kyle Lippincott
2024-07-25  9:45       ` Phillip Wood
2024-07-25 16:02       ` Junio C Hamano
2024-07-25 21:31         ` Kyle Lippincott
2024-07-26  2:41           ` Junio C Hamano
2024-07-26 12:56             ` Patrick Steinhardt
2024-07-26 15:59               ` Junio C Hamano
2024-07-29  9:48                 ` Patrick Steinhardt
2024-07-29 18:55                   ` Junio C Hamano
2024-07-30  4:49                     ` Patrick Steinhardt
2024-07-30 14:00                       ` René Scharfe
2024-07-31  5:19                         ` Patrick Steinhardt
2024-07-31 16:48                           ` René Scharfe
2024-08-01  6:51                             ` Patrick Steinhardt
2024-07-24 14:52   ` [PATCH v3 4/7] t-ctype: use for_test René Scharfe
2024-07-24 14:54   ` [PATCH v3 5/7] t-reftable-basics: " René Scharfe
2024-07-24 14:54   ` [PATCH v3 6/7] t-strvec: " René Scharfe
2024-07-24 14:55   ` [PATCH v3 7/7] t-strbuf: " René Scharfe
2024-07-30 14:03 ` [PATCH v4 0/6] add and use if_test to simplify tests René Scharfe
2024-07-30 14:05   ` [PATCH v4 1/6] t0080: use here-doc test body René Scharfe
2024-07-31 20:52     ` Kyle Lippincott
2024-07-30 14:07   ` [PATCH v4 2/6] unit-tests: show location of checks outside of tests René Scharfe
2024-07-31 21:03     ` Kyle Lippincott
2024-08-01  7:23       ` René Scharfe
2024-07-30 14:08   ` [PATCH v4 3/6] unit-tests: add if_test René Scharfe
2024-07-31 22:04     ` Kyle Lippincott
2024-08-01  7:32       ` René Scharfe
2024-08-02  0:48         ` Kyle Lippincott
2024-07-30 14:10   ` [PATCH v4 4/6] t-ctype: use if_test René Scharfe
2024-07-30 14:10   ` [PATCH v4 5/6] t-reftable-basics: " René Scharfe
2024-07-30 14:12   ` [PATCH v4 6/6] t-strvec: " René Scharfe

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=9f63d125-b1ee-4b07-b0c7-a3c98dd31f90@gmail.com \
    --to=phillip.wood123@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=l.s.r@web.de \
    --cc=phillip.wood@dunelm.org.uk \
    --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).