Matthieu Longo <matthieu.lo...@arm.com> writes: > On 2025-07-31 13:39, Jan Beulich wrote: >> On 09.07.2025 14:48, Matthieu Longo wrote: >>> Those methods's implementation is relying on duck-typing at compile >>> time. >>> The structure corresponding to the node of a doubly linked list needs >>> to define attributes 'prev' and 'next' which are pointers on the type >>> of a node. >>> The structure wrapping the nodes and others metadata (first, last, size) >>> needs to define pointers 'first', and 'last' of the node's type, and >>> an integer type for 'size'. >>> >>> Mutative methods can be bundled together and be declarable once via a >>> same macro, or can be declared separately. The merge sort is bundled >>> separately. >>> There are 3 types of macros: >>> 1. for the declaration of prototypes: to use in a header file for a >>> public declaration, or as a forward declaration in the source file >>> for private declaration. >>> 2. for the declaration of the implementation: to use always in a >>> source file. >>> 3. for the invocation of the functions. >>> >>> The methods can be declared either public or private via the second >>> argument of the declaration macros. >>> >>> List of currently implemented methods: >>> - LINKED_LIST_*: >>> - APPEND: insert a node at the end of the list. >>> - PREPEND: insert a node at the beginning of the list. >>> - INSERT_BEFORE: insert a node before the given node. >>> - POP_FRONT: remove the first node of the list. >>> - POP_BACK: remove the last node of the list. >>> - REMOVE: remove the given node from the list. >>> - SWAP: swap the two given nodes in the list. >>> - LINKED_LIST_MERGE_SORT: a merge sort implementation. >>> --- >>> include/doubly-linked-list.h | 447 ++++++++++++++++++ >>> libiberty/Makefile.in | 1 + >>> libiberty/testsuite/Makefile.in | 12 +- >>> libiberty/testsuite/test-doubly-linked-list.c | 269 +++++++++++ >>> 4 files changed, 728 insertions(+), 1 deletion(-) >>> create mode 100644 include/doubly-linked-list.h >>> create mode 100644 libiberty/testsuite/test-doubly-linked-list.c >> >> This new testing is what I suspect to have added significant clutter to >> binutils 2.45 (i.e. it made it into a release this way) "make check" >> output: Everything is clean and homogeneous from >> >> PASS: test-buildargv-0. >> PASS: test-expandargv-0. >> PASS: test-buildargv-1. >> PASS: test-expandargv-1. >> >> throughout >> >> PASS: test-strtol-18. >> PASS: test-strtol-19. >> PASS: test-strtol-20. >> >> but then one gets >> >> 10 4 3 1 9 2 >> PASS: test-linked-list::append: check forward conformity >> 2 9 1 3 4 10 >> PASS: test-linked-list::append: check backward conformity >> >> 1 2 3 4 9 10 >> PASS: test-linked-list::sort: check forward conformity >> 10 9 4 3 2 1 >> PASS: test-linked-list::sort: check backward conformity >> >> 11 1 2 3 4 9 10 >> PASS: test-linked-list::prepend: check forward conformity >> 10 9 4 3 2 1 11 >> PASS: test-linked-list::prepend: check backward conformity >> >> 11 1 2 3 4 9 8 10 >> PASS: test-linked-list::insert_before: check forward conformity >> 10 8 9 4 3 2 1 11 >> PASS: test-linked-list::insert_before: check backward conformity >> >> 11 2 3 4 9 8 10 >> PASS: test-linked-list::remove: check forward conformity >> 10 8 9 4 3 2 11 >> PASS: test-linked-list::remove: check backward conformity >> >> 10 2 3 4 9 8 11 >> PASS: test-linked-list::swap first and last: check forward conformity >> 11 8 9 4 3 2 10 >> PASS: test-linked-list::swap first and last: check backward conformity >> >> 10 3 2 4 9 8 11 >> PASS: test-linked-list::swap adjacent nodes: check forward conformity >> 11 8 9 4 2 3 10 >> PASS: test-linked-list::swap adjacent nodes: check backward conformity >> >> 10 9 2 4 3 8 11 >> PASS: test-linked-list::swap non-adjacent nodes: check forward conformity >> 11 8 3 4 2 9 10 >> PASS: test-linked-list::swap non-adjacent nodes: check backward conformity >> >> 2 3 4 8 9 10 11 >> PASS: test-linked-list::sort: check forward conformity >> 11 10 9 8 4 3 2 >> PASS: test-linked-list::sort: check backward conformity >> >> 3 4 8 9 10 11 >> PASS: test-linked-list::pop_front: check forward conformity >> 11 10 9 8 4 3 >> PASS: test-linked-list::pop_front: check backward conformity >> >> 3 4 8 9 10 >> PASS: test-linked-list::pop_back: check forward conformity >> 10 9 8 4 3 >> PASS: test-linked-list::pop_back: check backward conformity >> >> All the output besides the PASS: lines made me first think something went >> wrong. And imo only the PASS: (or FAIL:) lines should appear on stdout. >> Everything else should go to log files, just like other testing does. >> >> Jan > > Hi Jan, > > Indeed those lines are making the output too verbose. > What do you think of the following patch ? > If you are happy with it, I will publish it to the GCC mailing list at > first, and then will sync libiberty from binutils with GCC's one once it > is merged. > > Matthieu > > > Author: Matthieu Longo <matthieu.lo...@arm.com> > Date: Mon Aug 4 11:04:13 2025 +0100 > > libiberty: disable logging of list content for doubly-linked list tests > > When the doubly-linked list tests were introduced, the tests were > printing the content of the list forward and backward. However, this > printing is not needed outside of debugging, and confuses people > because > the output is not only composed of PASS: lines. > > This patch disables the printing of the list content by default. If > one wants to re-enable it for debugging, he can set the macro DUMP_LIST > to 1. > > diff --git a/libiberty/testsuite/test-doubly-linked-list.c > b/libiberty/testsuite/test-doubly-linked-list.c > index 1e1fc637653..520463701e7 100644 > --- a/libiberty/testsuite/test-doubly-linked-list.c > +++ b/libiberty/testsuite/test-doubly-linked-list.c > @@ -155,19 +155,27 @@ bool check(const char *op, > bool success = true; > bool res; > > +#define DUMP_LIST 0 > + > +#if DUMP_LIST > l_print (wrapper->first); > +#endif > res = run_test (expect, wrapper, false); > printf ("%s: test-linked-list::%s: check forward conformity\n", > res ? "PASS": "FAIL", op); > success &= res; > > +#if DUMP_LIST > l_reverse_print (wrapper->last); > +#endif > res = run_test (expect, wrapper, true); > printf ("%s: test-linked-list::%s: check backward conformity\n", > res ? "PASS": "FAIL", op); > success &= res; > > +#if DUMP_LIST > printf("\n"); > +#endif
Pre-approved for GCC with: if (DUMP_LIST) in place of the #ifdef/#endifs. Thanks, Richard > > return success; > }