From patchwork Fri Nov 3 15:51:37 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Marchi X-Patchwork-Id: 79025 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 643FF3858C41 for ; Fri, 3 Nov 2023 15:52:04 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from simark.ca (simark.ca [158.69.221.121]) by sourceware.org (Postfix) with ESMTPS id C947A3858D28 for ; Fri, 3 Nov 2023 15:51:42 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C947A3858D28 Authentication-Results: sourceware.org; dmarc=fail (p=none dis=none) header.from=efficios.com Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=efficios.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org C947A3858D28 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=158.69.221.121 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699026713; cv=none; b=qEKY9PgWe/bY096V1i3vc+odBubtNvZ/gtuWVJJ7ygZ70rUALvvjdICBgajkSx+cQoK6ev+WcbWZ2IHaxVObLqFuwoWMICzL0yV5TmcgGBc6YQdAMULZ3Q2LCUk0CJA5uR7h6P42S9v88mtifL9kzDMImSBUFOUSJheja0Q8wCg= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699026713; c=relaxed/simple; bh=LqMcKUvqq8afFH1wuhWhFwOgFsfwcVWz8ySRJhlD594=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=FB2CKKGZXc1TjTEMTstYIoZrp/OjfcbE8WQ58DA0/6WVmUMi3MdE+WgZFQVY2lBVOG1RY0cMGDb1EShWPI8kM41vOgqk8CzVoKbenhUqsl+6B4fonii5TAGTZVLTcf8wsf2DNVzS1WOmWM5xOQ82bMM2Sh4CH50uNzH2ehMzvNY= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from smarchi-efficios.internal.efficios.com (192-222-143-198.qc.cable.ebox.net [192.222.143.198]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPSA id 4A9B31E098; Fri, 3 Nov 2023 11:51:42 -0400 (EDT) From: Simon Marchi To: gdb-patches@sourceware.org Cc: Simon Marchi Subject: [PATCH] gdbsupport: record and print failed selftest names Date: Fri, 3 Nov 2023 11:51:37 -0400 Message-ID: <20231103155141.36997-1-simon.marchi@efficios.com> X-Mailer: git-send-email 2.42.0 MIME-Version: 1.0 X-Spam-Status: No, score=-3496.8 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_NONE, KAM_DMARC_STATUS, SPF_HELO_PASS, SPF_SOFTFAIL, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.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 Since "maint selftest" now runs quite a lot of tests (especially in an all-targets build), I thought it would be useful to print a summary at the end of what failed. So, implement that. Print the summary before the "Ran %d unit tests, %zu failed\n" line, so that that one remains the last line, and the gdb.gdb/unittest.exp doesn't need to be changed. The output looks like (if I force a failure in a test): (gdb) maint selftest ... Running selftest value_copy. Running selftest xml_escape_text. Running selftest xml_escape_text_append. Failures: aarch64-analyze-prologue Ran 4134 unit tests, 1 failed (gdb) Change-Id: If3aaabdd6f8078d0e6e50e8d08f3e558ab85277e --- gdbsupport/selftest.cc | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) base-commit: 88bfe6ac8bcbaf1eb0c1e4be02c21a5c048b7335 diff --git a/gdbsupport/selftest.cc b/gdbsupport/selftest.cc index c2e393661459..15c52421b801 100644 --- a/gdbsupport/selftest.cc +++ b/gdbsupport/selftest.cc @@ -72,8 +72,9 @@ run_verbose () void run_tests (gdb::array_view filters, bool verbose) { - int ran = 0, failed = 0; + int ran = 0; run_verbose_ = verbose; + std::vector failed; for (const auto &test : all_selftests ()) { @@ -101,15 +102,25 @@ run_tests (gdb::array_view filters, bool verbose) } catch (const gdb_exception_error &ex) { - ++failed; debug_printf ("Self test failed: %s\n", ex.what ()); + failed.push_back (test.name.c_str ()); } reset (); } - debug_printf (_("Ran %d unit tests, %d failed\n"), - ran, failed); + if (!failed.empty ()) + { + debug_printf ("\nFailures:\n"); + + for (const char *name : failed) + debug_printf (" %s\n", name); + + debug_printf ("\n"); + } + + debug_printf (_("Ran %d unit tests, %zu failed\n"), + ran, failed.size ()); } /* See selftest.h. */