From patchwork Fri May 1 12:44:58 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom de Vries X-Patchwork-Id: 134321 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 153F546A9CCA for ; Fri, 1 May 2026 12:46:43 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 153F546A9CCA Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=vHlChF5j; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=0Z+NxF4E; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=vHlChF5j; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=0Z+NxF4E X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from smtp-out2.suse.de (smtp-out2.suse.de [IPv6:2a07:de40:b251:101:10:150:64:2]) by sourceware.org (Postfix) with ESMTPS id BB2CE436F7DE for ; Fri, 1 May 2026 12:45:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org BB2CE436F7DE Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org BB2CE436F7DE Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a07:de40:b251:101:10:150:64:2 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777639524; cv=none; b=A+7HGDmQ9cimaPL1QXQckt+TuMbJnFe1yu0K8EMtpL5x7NObwRCqE3aTN/VLgaHncG2y9oz1ypky0urEkMstSSjHzxhHUWM7EhOCGRsM3i7zOKUNjwLy9QyfeXiL97nWlj32hA5sqA4xbU455NddDWG9i4akrbfkfmY09/rZrsc= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777639524; c=relaxed/simple; bh=sJG50AaGHCwdZAQwTtVr5XOyEwosfJXrHpsBUNEoTGc=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:From: To:Subject:Date:Message-ID:MIME-Version; b=YE4a3etabY8IDQBfJJv0IoOWDxTFOJeTv2937TkduRW1vryefIZ+2EQR6habNiWHdErg1baO4OhjeaK2RHE0RaF8WQTBbRgDzC0sSCvVf4xGqOO5vvsxaFKlUPcUAud+tkuhG7FDc0jzu7/E8s6auZ7z4OgXXfbx1CxwJ5L12dQ= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org BB2CE436F7DE Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 38DF25BD32 for ; Fri, 1 May 2026 12:45:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1777639506; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=P7s9d/IQ2KQB1/SA7wHx6u+aSxXao+1aNiXsnYedAFQ=; b=vHlChF5jd6HRnAeIxE40IxtSP3lrd3gx9t6b3+cr8Wwazii9XX21AZiTtipzXMRpmzX8Ig 2qJYLF+l/Rr4LbRDFBEqywqic5r4LHd71RWPX3NJbJdPON75nCUuHCTNXSDS+VTO9VsHlw N7Vue0ZgE/VVmScZ7DxWlEk1wx7dGiM= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1777639506; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=P7s9d/IQ2KQB1/SA7wHx6u+aSxXao+1aNiXsnYedAFQ=; b=0Z+NxF4EKuOM9wzZS6xqA0gDYi8BjVzLrIbdyef8hJt3unqLzTvdJVEIKG0qUxrxfI7tMR zFbtoeiDEABADbCg== Authentication-Results: smtp-out2.suse.de; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=vHlChF5j; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=0Z+NxF4E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1777639506; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=P7s9d/IQ2KQB1/SA7wHx6u+aSxXao+1aNiXsnYedAFQ=; b=vHlChF5jd6HRnAeIxE40IxtSP3lrd3gx9t6b3+cr8Wwazii9XX21AZiTtipzXMRpmzX8Ig 2qJYLF+l/Rr4LbRDFBEqywqic5r4LHd71RWPX3NJbJdPON75nCUuHCTNXSDS+VTO9VsHlw N7Vue0ZgE/VVmScZ7DxWlEk1wx7dGiM= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1777639506; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=P7s9d/IQ2KQB1/SA7wHx6u+aSxXao+1aNiXsnYedAFQ=; b=0Z+NxF4EKuOM9wzZS6xqA0gDYi8BjVzLrIbdyef8hJt3unqLzTvdJVEIKG0qUxrxfI7tMR zFbtoeiDEABADbCg== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 223A4593B1 for ; Fri, 1 May 2026 12:45:06 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id mHvgBlKg9Gn5ZwAAD6G6ig (envelope-from ) for ; Fri, 01 May 2026 12:45:06 +0000 From: Tom de Vries To: gdb-patches@sourceware.org Subject: [PATCH 04/10] [gdb] Add unit test for next_iterator Date: Fri, 1 May 2026 14:44:58 +0200 Message-ID: <20260501124504.2233495-5-tdevries@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260501124504.2233495-1-tdevries@suse.de> References: <20260501124504.2233495-1-tdevries@suse.de> MIME-Version: 1.0 X-Spamd-Result: default: False [-3.01 / 50.00]; BAYES_HAM(-3.00)[100.00%]; NEURAL_HAM_LONG(-1.00)[-1.000]; MID_CONTAINS_FROM(1.00)[]; R_MISSING_CHARSET(0.50)[]; R_DKIM_ALLOW(-0.20)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; MX_GOOD(-0.01)[]; ARC_NA(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; RCPT_COUNT_ONE(0.00)[1]; MIME_TRACE(0.00)[0:+]; FUZZY_RATELIMITED(0.00)[rspamd.com]; SPAMHAUS_XBL(0.00)[2a07:de40:b281:104:10:150:64:97:from]; FROM_HAS_DN(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[imap1.dmz-prg2.suse.org:helo,imap1.dmz-prg2.suse.org:rdns,suse.de:dkim,suse.de:mid,gnu.org:url]; TO_MATCH_ENVRCPT_ALL(0.00)[]; TO_DN_NONE(0.00)[]; RCVD_TLS_ALL(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[gdb-patches@sourceware.org]; DNSWL_BLOCKED(0.00)[2a07:de40:b281:104:10:150:64:97:from]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; DKIM_TRACE(0.00)[suse.de:+] X-Rspamd-Action: no action X-Spam-Score: -3.01 X-Spam-Level: X-Rspamd-Server: rspamd1.dmz-prg2.suse.org X-Rspamd-Queue-Id: 38DF25BD32 X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~patchwork=sourceware.org@sourceware.org I noticed that next_iterator doesn't have a selftest. Add this. --- gdb/Makefile.in | 1 + gdb/unittests/next-iterator-selftests.c | 105 ++++++++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 gdb/unittests/next-iterator-selftests.c diff --git a/gdb/Makefile.in b/gdb/Makefile.in index e38ba95eebd..8b1a40dad7e 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -476,6 +476,7 @@ SELFTESTS_SRCS = \ unittests/lookup_name_info-selftests.c \ unittests/memory-map-selftests.c \ unittests/memrange-selftests.c \ + unittests/next-iterator-selftests.c \ unittests/offset-type-selftests.c \ unittests/observable-selftests.c \ unittests/packed-selftests.c \ diff --git a/gdb/unittests/next-iterator-selftests.c b/gdb/unittests/next-iterator-selftests.c new file mode 100644 index 00000000000..8934e5bbaa0 --- /dev/null +++ b/gdb/unittests/next-iterator-selftests.c @@ -0,0 +1,105 @@ +/* Self tests for the next_iterator class. + + Copyright (C) 2026 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "gdbsupport/selftest.h" +#include "gdbsupport/next-iterator.h" +#include + +namespace selftests { +namespace next_iterator { + +struct list; +using list_iterator = ::next_iterator; +using list_range = next_range; + +/* The next_iterator allows usage with an incomplete type, provided the type + is defined later in the same file. While not essential to its functioning, + we're currently using this property in the sources, so check/demonstrate + it. */ + +static void +test_next_iterator_incomplete_type (struct list *l) +{ + list_iterator begin (l); + list_iterator end; + + unsigned cnt = 0; + list_iterator i; + for (i = begin; i != end; ++i) + cnt++; + SELF_CHECK (cnt == 3); +} + +struct list +{ + int i; + struct list *next; +}; + +static void +test_next_iterator () +{ + struct list a = { 1, nullptr }; + struct list b = { 2, &a }; + struct list c = { 3, &b }; + + /* Constructor with parameter. */ + list_iterator begin (&c); + + /* Constructor without parameter. */ + list_iterator end; + + /* Operator*. */ + SELF_CHECK (*begin == &c); + SELF_CHECK (*end == nullptr); + + /* Operator==, operator!=. */ + SELF_CHECK (begin == begin); + SELF_CHECK (end == end); + SELF_CHECK (begin != end); + + /* Operator++. */ + list_iterator i (&c); + ++i; + SELF_CHECK (*i == &b); + + /* Loop using iterators. */ + std::vector expected = {3, 2, 1}; + std::vector v; + for (i = begin; i != end; ++i) + v.push_back ((*i)->i); + SELF_CHECK (v == expected); + + /* Loop using range. */ + v.clear (); + for (auto l : list_range (begin)) + v.push_back (l->i); + SELF_CHECK (v == expected); + + test_next_iterator_incomplete_type (&c); +} + +} /* namespace next_iterator */ +} /* namespace selftests */ + +INIT_GDB_FILE (next_iterator_selftests) +{ + selftests::register_test ("next-iterator", + selftests::next_iterator::test_next_iterator); +}