From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f42.google.com (mail-wr1-f42.google.com [209.85.221.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9CAB442B72B for ; Fri, 6 Feb 2026 19:11:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.42 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770405096; cv=none; b=BDrNSUYGOV3/1FAy4xUhJ4E8iV5Iow6YehwlPno35tkmL1ttafgcO4EUkLnv/RrRMpelDHAsq6v4TRdyXdX0aMEPd0c+/A8ggRtfqBYyagi9iar7cERCeEyUM1ZEpE02G/GXsWBEEogKhseORiIwlGSEvZALVo/sXNlOziXihfk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770405096; c=relaxed/simple; bh=z7ue9F1Qqm5lxVbaFHRBr7Og/p6iBJxKMMHx31abY/0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=oqjU1JlcxGwJDJCqKt1d0Hkt4azUOdZ5vCCpPvS30pWl7WS8u2Zery3USwTffnumEFykOCE3dkzDpX5MCbfSWleZ1l5zWRIGdnux4Q0Gb6k5LEGTIXNlhC26RnlJrtATlG4k/bPuKVyTYNofaH5R1acXtFYlaNiXb1obElqw1qc= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=DOIvpHT0; arc=none smtp.client-ip=209.85.221.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="DOIvpHT0" Received: by mail-wr1-f42.google.com with SMTP id ffacd0b85a97d-436317c80f7so170999f8f.1 for ; Fri, 06 Feb 2026 11:11:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770405095; x=1771009895; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=AaQfELDBXEg33kHTedBx3t3pay0BKZDF4QBl4ST1qNo=; b=DOIvpHT0BvJGksBfKpysCobEp7nZYF6TEt7sLsVqHvUpmVp38R6I++YhedWFD4ETwp X2GLKeItwx16qDW6swLB+auKq0K7ip36PdjnJPaymY5k3867tPN5A0uP32pv7CxBFetV dlGKcb4DZy8s3+Blk6mVR3ilSO45NJjH1TYWnherVe7Lgil6C21nKUW+SSRVZh07yJ2W Dn8mwBsDibRgDgafX80kw5qQlL3COTKGB1cxwHvTr6S2cxElS+fGR/0BmUvDyfOaKKKo jxVAEgZp6vZF77D8KH/8bwaZh2/XU9wPrRonKlarmvPCt5STd3SmuKPZOi5mL1q3giu6 qNQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770405095; x=1771009895; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=AaQfELDBXEg33kHTedBx3t3pay0BKZDF4QBl4ST1qNo=; b=ttBYELcLs5qcYSVttOUmIpMMPeNbwW+6QNNtp3pxtIVdZjW66WvwTYBO9duuvPV2ql r5WuC3TqUIKH3zAJ+PFGCPzIIiWjfH50C7aS6HC+wgn7PtWlCjmaqwRVo/ZUY8b0Js6y A2WEW11Q5ICDR0esqaciLE+hItniMuOno9To/MIJEDlToZThspaKTD8A2Yi005ExDyWd QcwB8I3jENxCe5mcHtXLi15XUUJEz8bq5e6r1dEGXX6k0MAF88xlP8kAdL8tKGvNNnO8 BybWV3rYUXhHu0lddt7zxKORyfg+WvdlkGMu3qIZRoHLKX2eysPMVRH31Qpfr/38uDrl 5JBw== X-Forwarded-Encrypted: i=1; AJvYcCUDFYCGXOe0w3NDWaAuyI8e3V91gWIDFQN1bSLETpN0UQhM137m0hvdir01PV8GMsm47YFn74OQ43hfenk=@vger.kernel.org X-Gm-Message-State: AOJu0Yzs8W4yoFUZfACEcXKxOcF41XsFVIAP8tirmvhN+1nKcQuUZeQc 0htdpDSp5mevGPTGuBQxlYQAXfI4AtIzQH4fJkzRaYQfOU4CCh2X3eh2 X-Gm-Gg: AZuq6aLty6/imlxtu27B0EpBZGy4TFy5IHK5nrhbSI8ynfxXPZS9V2F2KjrSBQeFSqg iFm29+ps67nLMzXrEkSOPJzdC/WZcqmsOgNeIFASiU20xsOYHShFMhMTF47e1oneMuOKGuS9V7O LbA+jtHCHKvCxAxxkAJahdKq70aCPDESw4/eNaHAmkgXYBZPs80CvkOro6AEOpDtPisX4NkijNc zRTO5yR0Ks3ZfDOsFBuqOR8/afi6xh49mK3ARXTq1mpJFPskFC4SOG1cWzlPomejCBhI5gwLLTn 3d4ZQKa8FbVtYIJ0571CNMHIRbDhm3NSBffiXgYGwh/9Lk1UkxrUJdFieCVDIu96jzPMYDPe6Q+ 0uoyajB2WK5RD1jiUAKihZ09Er0ZTyjCuNbHr6izI8l7o0nl9lJClEv9KDSXvXMv7pUxx/lgs9Y NyvTqSLNrmVB73ocncXg1fL6QTEjX2IEX6H6Rk8ie+D4AyNRbNb9AMTe2/CyH61omk2KM+4B8p X-Received: by 2002:a05:6000:200e:b0:435:db93:72e7 with SMTP id ffacd0b85a97d-43629035016mr6684586f8f.3.1770405094922; Fri, 06 Feb 2026 11:11:34 -0800 (PST) Received: from snowdrop.snailnet.com (82-69-66-36.dsl.in-addr.zen.co.uk. [82.69.66.36]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4362972fb81sm8703681f8f.20.2026.02.06.11.11.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Feb 2026 11:11:34 -0800 (PST) From: david.laight.linux@gmail.com To: Willy Tarreau , =?UTF-8?q?Thomas=20Wei=C3=9Fschuh?= , linux-kernel@vger.kernel.org, Cheng Li Cc: David Laight Subject: [PATCH v2 next 10/11] selftests/nolibc: Increase coverage of printf format tests Date: Fri, 6 Feb 2026 19:11:20 +0000 Message-Id: <20260206191121.3602-11-david.laight.linux@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260206191121.3602-1-david.laight.linux@gmail.com> References: <20260206191121.3602-1-david.laight.linux@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: David Laight Extra tests include: - %%, including ignored modifiers. - Invalid formats copied to output buffer (matches glibc). - Left aligned output "%-..." - Zero padding "%0...". - "(nil)" for NULL pointers (matches glibc). - Alternate form "%#x" (prepends 0x in non-zero). - Field precision as well as width, printf("%.0d", 0) is "". - Variable length width and precision "%*.*d". - Length qualifiers L and ll. - Conversion specifiers i and X. - More 'corner' cases. There are no explicit tests of long (l, t or z) because they would have to differ between 32bit and 64bit. Set the expected length to zero for all the non-truncating tests. (Annoying when a test is changed.) Signed-off-by: David Laight --- Changes for v2: - Formally patch 11. - Remove broken __attribute__ on expect_vfprintf(). - Add extra test for "#01x". tools/testing/selftests/nolibc/nolibc-test.c | 49 +++++++++++++++----- 1 file changed, 37 insertions(+), 12 deletions(-) diff --git a/tools/testing/selftests/nolibc/nolibc-test.c b/tools/testing/selftests/nolibc/nolibc-test.c index 9378a1f26c34..10ae6dcd71b8 100644 --- a/tools/testing/selftests/nolibc/nolibc-test.c +++ b/tools/testing/selftests/nolibc/nolibc-test.c @@ -1727,20 +1727,45 @@ static int run_printf(int min, int max) */ switch (test + __LINE__ + 1) { CASE_TEST(empty); EXPECT_VFPRINTF(0, "", ""); break; - CASE_TEST(simple); EXPECT_VFPRINTF(3, "foo", "foo"); break; - CASE_TEST(string); EXPECT_VFPRINTF(3, "foo", "%s", "foo"); break; - CASE_TEST(number); EXPECT_VFPRINTF(4, "1234", "%d", 1234); break; - CASE_TEST(negnumber); EXPECT_VFPRINTF(5, "-1234", "%d", -1234); break; - CASE_TEST(unsigned); EXPECT_VFPRINTF(5, "12345", "%u", 12345); break; - CASE_TEST(char); EXPECT_VFPRINTF(1, "c", "%c", 'c'); break; - CASE_TEST(hex); EXPECT_VFPRINTF(1, "f", "%x", 0xf); break; - CASE_TEST(pointer); EXPECT_VFPRINTF(3, "0x1", "%p", (void *) 0x1); break; - CASE_TEST(uintmax_t); EXPECT_VFPRINTF(20, "18446744073709551615", "%ju", 0xffffffffffffffffULL); break; - CASE_TEST(intmax_t); EXPECT_VFPRINTF(20, "-9223372036854775807", "%jd", 0x8000000000000001LL); break; + CASE_TEST(simple); EXPECT_VFPRINTF(0, "foo", "foo"); break; + CASE_TEST(string); EXPECT_VFPRINTF(0, "foo", "%s", "foo"); break; + CASE_TEST(number); EXPECT_VFPRINTF(0, "1234", "%d", 1234); break; + CASE_TEST(negnumber); EXPECT_VFPRINTF(0, "-1234", "%d", -1234); break; + CASE_TEST(unsigned); EXPECT_VFPRINTF(0, "12345", "%u", 12345); break; + CASE_TEST(signed_max); EXPECT_VFPRINTF(0, "2147483647", "%i", ~0u >> 1); break; + CASE_TEST(signed_min); EXPECT_VFPRINTF(0, "-2147483648", "%i", (~0u >> 1) + 1); break; + CASE_TEST(unsigned_max); EXPECT_VFPRINTF(0, "4294967295", "%u", ~0u); break; + CASE_TEST(char); EXPECT_VFPRINTF(0, "|c|d| e|", "|%c|%.0c|%4c|", 'c', 'd', 'e'); break; + CASE_TEST(hex); EXPECT_VFPRINTF(0, "|f|d|", "|%x|%X|", 0xf, 0xd); break; + CASE_TEST(pointer); EXPECT_VFPRINTF(0, "0x1", "%p", (void *) 0x1); break; + CASE_TEST(pointer_NULL); EXPECT_VFPRINTF(0, "|(nil)|(nil)|", "|%p|%.4p|", (void *)0, (void *)0); break; + CASE_TEST(string_NULL); EXPECT_VFPRINTF(0, "|(null)||(null)|", "|%s|%.5s|%.6s|", (void *)0, (void *)0, (void *)0); break; + CASE_TEST(percent); EXPECT_VFPRINTF(0, "a%d42%69%", "a%%d%d%%%d%%", 42, 69); break; + CASE_TEST(perc_qual); EXPECT_VFPRINTF(0, "a%d2", "a%-14l%d%d", 2); break; + CASE_TEST(invalid); EXPECT_VFPRINTF(0, "a%12yx3%y42%y", "a%12yx%d%y%d%y", 3, 42); break; + CASE_TEST(intmax_max); EXPECT_VFPRINTF(0, "9223372036854775807", "%lld", ~0ULL >> 1); break; + CASE_TEST(intmax_min); EXPECT_VFPRINTF(0, "-9223372036854775808", "%Li", (~0ULL >> 1) + 1); break; + CASE_TEST(uintmax_max); EXPECT_VFPRINTF(0, "18446744073709551615", "%ju", ~0ULL); break; CASE_TEST(truncation); EXPECT_VFPRINTF(25, "01234567890123456789", "%s", "0123456789012345678901234"); break; - CASE_TEST(string_width); EXPECT_VFPRINTF(10, " 1", "%10s", "1"); break; - CASE_TEST(number_width); EXPECT_VFPRINTF(10, " 1", "%10d", 1); break; + CASE_TEST(string_width); EXPECT_VFPRINTF(0, " 1", "%10s", "1"); break; + CASE_TEST(string_trunc); EXPECT_VFPRINTF(0, " 12345", "%10.5s", "1234567890"); break; + CASE_TEST(number_width); EXPECT_VFPRINTF(0, " 1", "%10d", 1); break; + CASE_TEST(number_left); EXPECT_VFPRINTF(0, "|-5 |", "|%-8d|", -5); break; + CASE_TEST(string_align); EXPECT_VFPRINTF(0, "|foo |", "|%-8s|", "foo"); break; CASE_TEST(width_trunc); EXPECT_VFPRINTF(25, " ", "%25d", 1); break; + CASE_TEST(width_tr_lft); EXPECT_VFPRINTF(25, "1 ", "%-25d", 1); break; + CASE_TEST(number_pad); EXPECT_VFPRINTF(0, "0000000005", "%010d", 5); break; + CASE_TEST(number_pad); EXPECT_VFPRINTF(0, "|0000000005|0x1234|", "|%010d|%#01x|", 5, 0x1234); break; + CASE_TEST(num_pad_neg); EXPECT_VFPRINTF(0, "-000000005", "%010d", -5); break; + CASE_TEST(num_pad_hex); EXPECT_VFPRINTF(0, "00fffffffb", "%010x", -5); break; + CASE_TEST(num_pad_trunc);EXPECT_VFPRINTF(40, " 0000000000", "%040d", 5); break; /* max 30 '0' can be added */ + CASE_TEST(number_prec); EXPECT_VFPRINTF(0, " 00005", "%10.5d", 5); break; + CASE_TEST(num_prec_neg); EXPECT_VFPRINTF(0, " -00005", "%10.5d", -5); break; + CASE_TEST(num_prec_var); EXPECT_VFPRINTF(0, " -00005", "%*.*d", 10, 5, -5); break; + CASE_TEST(num_0_prec_0); EXPECT_VFPRINTF(0, "|| |+||||", "|%.0d|% .0d|%+.0d|%.0u|%.0x|%#.0x|", 0, 0, 0, 0, 0, 0); break; + CASE_TEST(hex_alt); EXPECT_VFPRINTF(0, "|0x1|0x01| 0x02|", "|%#x|%#04x|%#5.2x|", 1, 1, 2); break; + CASE_TEST(hex_0_alt); EXPECT_VFPRINTF(0, "|0|0000| 00|", "|%#x|%#04x|%#5.2x|", 0, 0, 0); break; + CASE_TEST(dec_alt); EXPECT_VFPRINTF(0, "|1|0001| 02|", "|%#d|%#04d|%#5.2d|", 1, 1, 2); break; /* '#' is ignored */ CASE_TEST(scanf); EXPECT_ZR(1, test_scanf()); break; CASE_TEST(strerror); EXPECT_ZR(1, test_strerror()); break; CASE_TEST(printf_error); EXPECT_ZR(1, test_printf_error()); break; -- 2.39.5