git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v3 10/11] t-reftable-record: add tests for reftable_ref_record_compare_name()

From
CPChandra Pratap <chandrapratap3519@gmail.com>
Date
Jul 1, 2024, 07:26 UTC
Message-ID
<CA+J6zkSfGrfpgAMdm_zHX9C0vhpv_802O487WgbB5XXMw1Mc=g@mail.gmail.com>
In-Reply-To
<CAOLa=ZRx6LQ26U-00UUttjo7sitLZ+gWA7FX0m3p1nQGhGF7Zw@mail.gmail.com>
On Mon, 1 Jul 2024 at 00:29, Karthik Nayak <karthik.188@gmail.com> wrote:
Show 55 quoted lines
>
> Chandra Pratap <chandrapratap3519@gmail.com> writes:
>
> > reftable_ref_record_compare_name() is a function defined by
> > reftable/record.{c, h} and is used to compare the refname of two
> > ref records when sorting multiple ref records using 'qsort'.
> > In the current testing setup, this function is left unexercised.
> > Add a testing function for the same.
> >
> > Mentored-by: Patrick Steinhardt <ps@pks.im>
> > Mentored-by: Christian Couder <chriscool@tuxfamily.org>
> > Signed-off-by: Chandra Pratap <chandrapratap3519@gmail.com>
> > ---
> >  t/unit-tests/t-reftable-record.c | 23 +++++++++++++++++++++++
> >  1 file changed, 23 insertions(+)
> >
> > diff --git a/t/unit-tests/t-reftable-record.c b/t/unit-tests/t-reftable-record.c
> > index 55b8d03494..f45f2fdef2 100644
> > --- a/t/unit-tests/t-reftable-record.c
> > +++ b/t/unit-tests/t-reftable-record.c
> > @@ -95,6 +95,28 @@ static void test_reftable_ref_record_comparison(void)
> >       check(!reftable_record_cmp(&in[0], &in[1]));
> >  }
> >
> > +static void test_reftable_ref_record_compare_name(void)
> > +{
> > +     struct reftable_ref_record recs[14] = { 0 };
> > +     size_t N = ARRAY_SIZE(recs), i;
> > +
> > +     for (i = 0; i < N; i++)
> > +             recs[i].refname = xstrfmt("%02"PRIuMAX, (uintmax_t)i);
>
> This needs to be free'd too right?
>
> So we create an array of 14 records, with refnames "00", "01", "02" ...
> "13", here.
>
> > +
> > +     QSORT(recs, N, reftable_ref_record_compare_name);
> > +
>
> We then use `reftable_ref_record_compare_name` as the comparison
> function to sort them.
>
> > +     for (i = 1; i < N; i++) {
> > +             check_int(strcmp(recs[i - 1].refname, recs[i].refname), <, 0);
> > +             check_int(reftable_ref_record_compare_name(&recs[i], &recs[i]), ==, 0);
> > +     }
>
> Here we use `strcmp` to ensure that the ordering done by
> `reftable_ref_record_compare_name` is correct. This makes sense,
> although I would have expected this to be done the other way around.
> i.e. we should use `strcmp` as the function used in `QSORT` and in this
> loop we validate that `reftable_ref_record_compare_name` also produces
> the same result when comparing.

The first parameter to QSORT is an array of 'struct reftable_record' so I don't think it's possible to use strcmp() as the comparison function. We do, however, use strcmp() internally to compare the ref records.

Show 10 quoted lines
> > +
> > +     for (i = 0; i < N - 1; i++)
> > +             check_int(reftable_ref_record_compare_name(&recs[i + 1], &recs[i]), >, 0);
> > +
>
> Also, with the current setup, we use `reftable_ref_record_compare_name`
> to sort the first array and then use `reftable_ref_record_compare_name`
> to check if it is correct? This doesn't work, we need to isolate the
> data creation from the inference, if the same function can influence
> both, then we are not really testing the function.

The validity of `reftable_ref_record_compare_name()` is checked by the first loop. Since we're already sure of the order of 'recs' at this point (increasing order), this loop is supposed to test the function for ' > 0' case.

Show 6 quoted lines
> > +     for (i = 0; i < N; i++)
> > +             reftable_ref_record_release(&recs[i]);
> > +}
> > +
>
> Nit: The top three loops could possibly be combined.

The limiting as well as initial value for the array indices are all different so I'm not sure how to go about this.

Show 13 quoted lines
> >  static void test_reftable_ref_record_roundtrip(void)
> >  {
> >       struct strbuf scratch = STRBUF_INIT;
> > @@ -490,6 +512,7 @@ int cmd_main(int argc, const char *argv[])
> >       TEST(test_reftable_log_record_comparison(), "comparison operations work on log record");
> >       TEST(test_reftable_index_record_comparison(), "comparison operations work on index record");
> >       TEST(test_reftable_obj_record_comparison(), "comparison operations work on obj record");
> > +     TEST(test_reftable_ref_record_compare_name(), "reftable_ref_record_compare_name works");
> >       TEST(test_reftable_log_record_roundtrip(), "record operations work on log record");
> >       TEST(test_reftable_ref_record_roundtrip(), "record operations work on ref record");
> >       TEST(test_varint_roundtrip(), "put_var_int and get_var_int work");
> > --
> > 2.45.2.404.g9eaef5822c
Previous: Karthik NayakNext: Karthik Nayak
Message 55 of 74 in “t: port reftable/record_test.c to the unit testing framework”
  1. Chandra PratapJun 21, 2024
  2. 01/11 t: move reftable/record_test.c to the unit testing frameworkChandra Pratap, Jun 21, 2024
  3. 02/11 t-reftable-record: add reftable_record_cmp() tests for log recordsChandra Pratap, Jun 21, 2024
  4. 03/11 t-reftable-record: add comparison tests for ref recordsChandra Pratap, Jun 21, 2024
  5. 04/11 t-reftable-record: add comparison tests for index recordsChandra Pratap, Jun 21, 2024
  6. 05/11 t-reftable-record: add comparison tests for obj recordsChandra Pratap, Jun 21, 2024
  7. 06/11 t-reftable-record: add reftable_record_is_deletion() test for ref recordsChandra Pratap, Jun 21, 2024
  8. 07/11 t-reftable-record: add reftable_record_is_deletion() test for log recordsChandra Pratap, Jun 21, 2024
  9. 08/11 t-reftable-record: add reftable_record_is_deletion() test for obj recordsChandra Pratap, Jun 21, 2024
  10. 09/11 t-reftable-record: add reftable_record_is_deletion() test for index recordsChandra Pratap, Jun 21, 2024
  11. 10/11 t-reftable-record: add tests for reftable_ref_record_compare_name()Chandra Pratap, Jun 21, 2024
  12. 11/11 t-reftable-record: add tests for reftable_log_record_compare_key()Chandra Pratap, Jun 21, 2024
  13. Chandra PratapJun 21, 2024
  14. Chandra PratapJun 21, 2024
  15. 01/11 t: move reftable/record_test.c to the unit testing frameworkChandra Pratap, Jun 21, 2024
  16. Karthik NayakJun 25, 2024
  17. Chandra PratapJun 25, 2024
  18. Karthik NayakJun 26, 2024
  19. Chandra PratapJun 26, 2024
  20. Han-Wen NienhuysJun 26, 2024
  21. 02/11 t-reftable-record: add reftable_record_cmp() tests for log recordsChandra Pratap, Jun 21, 2024
  22. Karthik NayakJun 25, 2024
  23. 03/11 t-reftable-record: add comparison tests for ref recordsChandra Pratap, Jun 21, 2024
  24. 04/11 t-reftable-record: add comparison tests for index recordsChandra Pratap, Jun 21, 2024
  25. 05/11 t-reftable-record: add comparison tests for obj recordsChandra Pratap, Jun 21, 2024
  26. 06/11 t-reftable-record: add ref tests for reftable_record_is_deletion()Chandra Pratap, Jun 21, 2024
  27. Karthik NayakJun 25, 2024
  28. Eric SunshineJun 25, 2024
  29. Karthik NayakJun 26, 2024
  30. 07/11 t-reftable-record: add log tests for reftable_record_is_deletion()Chandra Pratap, Jun 21, 2024
  31. 08/11 t-reftable-record: add obj tests for reftable_record_is_deletion()Chandra Pratap, Jun 21, 2024
  32. 09/11 t-reftable-record: add index tests for reftable_record_is_deletion()Chandra Pratap, Jun 21, 2024
  33. Karthik NayakJun 25, 2024
  34. Chandra PratapJun 25, 2024
  35. Karthik NayakJun 26, 2024
  36. 10/11 t-reftable-record: add tests for reftable_ref_record_compare_name()Chandra Pratap, Jun 21, 2024
  37. Karthik NayakJun 25, 2024
  38. Chandra PratapJun 25, 2024
  39. 11/11 t-reftable-record: add tests for reftable_log_record_compare_key()Chandra Pratap, Jun 21, 2024
  40. Karthik NayakJun 25, 2024
  41. Karthik NayakJun 25, 2024
  42. [GSoC][PATCH v3 0/11] t: port reftable/record_test.c to the unit testing frameworkChandra Pratap, Jun 28, 2024
  43. 01/11 t: move reftable/record_test.c to the unit testing frameworkChandra Pratap, Jun 28, 2024
  44. Karthik NayakJun 30, 2024
  45. 02/11 t-reftable-record: add reftable_record_cmp() tests for log recordsChandra Pratap, Jun 28, 2024
  46. 03/11 t-reftable-record: add comparison tests for ref recordsChandra Pratap, Jun 28, 2024
  47. 04/11 t-reftable-record: add comparison tests for index recordsChandra Pratap, Jun 28, 2024
  48. 05/11 t-reftable-record: add comparison tests for obj recordsChandra Pratap, Jun 28, 2024
  49. 06/11 t-reftable-record: add ref tests for reftable_record_is_deletion()Chandra Pratap, Jun 28, 2024
  50. 07/11 t-reftable-record: add log tests for reftable_record_is_deletion()Chandra Pratap, Jun 28, 2024
  51. 08/11 t-reftable-record: add obj tests for reftable_record_is_deletion()Chandra Pratap, Jun 28, 2024
  52. 09/11 t-reftable-record: add index tests for reftable_record_is_deletion()Chandra Pratap, Jun 28, 2024
  53. 10/11 t-reftable-record: add tests for reftable_ref_record_compare_name()Chandra Pratap, Jun 28, 2024
  54. Karthik NayakJun 30, 2024
  55. Chandra PratapJul 1, 2024
  56. Karthik NayakJul 1, 2024
  57. Chandra PratapJul 1, 2024
  58. 11/11 t-reftable-record: add tests for reftable_log_record_compare_key()Chandra Pratap, Jun 28, 2024
  59. Karthik NayakJun 30, 2024
  60. Karthik NayakJun 30, 2024
  61. [GSoC][PATCH v4 0/11] t: port reftable/record_test.c to the unit testing framework frameworkChandra Pratap, Jul 2, 2024
  62. 01/11 t: move reftable/record_test.c to the unit testing frameworkChandra Pratap, Jul 2, 2024
  63. 02/11 t-reftable-record: add reftable_record_cmp() tests for log recordsChandra Pratap, Jul 2, 2024
  64. 03/11 t-reftable-record: add comparison tests for ref recordsChandra Pratap, Jul 2, 2024
  65. 04/11 t-reftable-record: add comparison tests for index recordsChandra Pratap, Jul 2, 2024
  66. 05/11 t-reftable-record: add comparison tests for obj recordsChandra Pratap, Jul 2, 2024
  67. 06/11 t-reftable-record: add ref tests for reftable_record_is_deletion()Chandra Pratap, Jul 2, 2024
  68. 07/11 t-reftable-record: add log tests for reftable_record_is_deletion()Chandra Pratap, Jul 2, 2024
  69. 08/11 t-reftable-record: add obj tests for reftable_record_is_deletion()Chandra Pratap, Jul 2, 2024
  70. 09/11 t-reftable-record: add index tests for reftable_record_is_deletion()Chandra Pratap, Jul 2, 2024
  71. 10/11 t-reftable-record: add tests for reftable_ref_record_compare_name()Chandra Pratap, Jul 2, 2024
  72. 11/11 t-reftable-record: add tests for reftable_log_record_compare_key()Chandra Pratap, Jul 2, 2024
  73. Karthik NayakJul 2, 2024
  74. Junio C HamanoJul 2, 2024

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.