aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZijun Zhao <zijunzhao@google.com>2023-04-20 20:37:12 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-04-20 20:37:12 +0000
commit07928fd142a572e8e788dfabc5b19a1349e2a856 (patch)
tree4a83478f07dce7ac826547f5e8af7e668ceb1deb
parentdf11a311536503a30f26830d5b9c93039c6d5ff0 (diff)
parentb6fb4c313cdc02f8db3642723868e6a48f5824fc (diff)
downloadbionic-07928fd142a572e8e788dfabc5b19a1349e2a856.tar.gz
Merge "stdio_test: improve the %b/%B tests." am: e2c25fa87f am: b6fb4c313c
Original change: https://android-review.googlesource.com/c/platform/bionic/+/2548495 Change-Id: Idbdf3bfae8ef826f7d5523456a2f672ddd482a70 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--tests/stdio_test.cpp128
1 files changed, 111 insertions, 17 deletions
diff --git a/tests/stdio_test.cpp b/tests/stdio_test.cpp
index c5ffe2423..1275b45e6 100644
--- a/tests/stdio_test.cpp
+++ b/tests/stdio_test.cpp
@@ -3001,59 +3001,153 @@ TEST(STDIO_TEST, fwrite_int_overflow) {
}
TEST(STDIO_TEST, snprintf_b) {
+#if defined(__BIONIC__)
char buf[BUFSIZ];
- EXPECT_EQ(5, snprintf(buf, sizeof(buf), "<%b>", 5));
+
+ uint8_t b = 5;
+ EXPECT_EQ(5, snprintf(buf, sizeof(buf), "<%" PRIb8 ">", b));
EXPECT_STREQ("<101>", buf);
- EXPECT_EQ(10, snprintf(buf, sizeof(buf), "<%08b>", 5));
+ EXPECT_EQ(10, snprintf(buf, sizeof(buf), "<%08" PRIb8 ">", b));
EXPECT_STREQ("<00000101>", buf);
- EXPECT_EQ(34, snprintf(buf, sizeof(buf), "<%b>", 0xaaaaaaaa));
+
+ uint16_t s = 0xaaaa;
+ EXPECT_EQ(18, snprintf(buf, sizeof(buf), "<%" PRIb16 ">", s));
+ EXPECT_STREQ("<1010101010101010>", buf);
+ EXPECT_EQ(20, snprintf(buf, sizeof(buf), "<%#" PRIb16 ">", s));
+ EXPECT_STREQ("<0b1010101010101010>", buf);
+
+ EXPECT_EQ(34, snprintf(buf, sizeof(buf), "<%" PRIb32 ">", 0xaaaaaaaa));
EXPECT_STREQ("<10101010101010101010101010101010>", buf);
- EXPECT_EQ(36, snprintf(buf, sizeof(buf), "<%#b>", 0xaaaaaaaa));
+ EXPECT_EQ(36, snprintf(buf, sizeof(buf), "<%#" PRIb32 ">", 0xaaaaaaaa));
EXPECT_STREQ("<0b10101010101010101010101010101010>", buf);
+
+ // clang doesn't like "%lb" (https://github.com/llvm/llvm-project/issues/62247)
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wformat"
+ EXPECT_EQ(66, snprintf(buf, sizeof(buf), "<%" PRIb64 ">", 0xaaaaaaaa'aaaaaaaa));
+ EXPECT_STREQ("<1010101010101010101010101010101010101010101010101010101010101010>", buf);
+ EXPECT_EQ(68, snprintf(buf, sizeof(buf), "<%#" PRIb64 ">", 0xaaaaaaaa'aaaaaaaa));
+ EXPECT_STREQ("<0b1010101010101010101010101010101010101010101010101010101010101010>", buf);
+#pragma clang diagnostic pop
+
EXPECT_EQ(3, snprintf(buf, sizeof(buf), "<%#b>", 0));
EXPECT_STREQ("<0>", buf);
+#else
+ GTEST_SKIP() << "no %b in glibc";
+#endif
}
TEST(STDIO_TEST, snprintf_B) {
+#if defined(__BIONIC__)
char buf[BUFSIZ];
- EXPECT_EQ(5, snprintf(buf, sizeof(buf), "<%B>", 5));
+
+ uint8_t b = 5;
+ EXPECT_EQ(5, snprintf(buf, sizeof(buf), "<%" PRIB8 ">", b));
EXPECT_STREQ("<101>", buf);
- EXPECT_EQ(10, snprintf(buf, sizeof(buf), "<%08B>", 5));
+ EXPECT_EQ(10, snprintf(buf, sizeof(buf), "<%08" PRIB8 ">", b));
EXPECT_STREQ("<00000101>", buf);
- EXPECT_EQ(34, snprintf(buf, sizeof(buf), "<%B>", 0xaaaaaaaa));
+
+ uint16_t s = 0xaaaa;
+ EXPECT_EQ(18, snprintf(buf, sizeof(buf), "<%" PRIB16 ">", s));
+ EXPECT_STREQ("<1010101010101010>", buf);
+ EXPECT_EQ(20, snprintf(buf, sizeof(buf), "<%#" PRIB16 ">", s));
+ EXPECT_STREQ("<0B1010101010101010>", buf);
+
+ EXPECT_EQ(34, snprintf(buf, sizeof(buf), "<%" PRIB32 ">", 0xaaaaaaaa));
EXPECT_STREQ("<10101010101010101010101010101010>", buf);
- EXPECT_EQ(36, snprintf(buf, sizeof(buf), "<%#B>", 0xaaaaaaaa));
+ EXPECT_EQ(36, snprintf(buf, sizeof(buf), "<%#" PRIB32 ">", 0xaaaaaaaa));
EXPECT_STREQ("<0B10101010101010101010101010101010>", buf);
- EXPECT_EQ(3, snprintf(buf, sizeof(buf), "<%#B>", 0));
+
+ // clang doesn't like "%lB" (https://github.com/llvm/llvm-project/issues/62247)
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wformat"
+ EXPECT_EQ(66, snprintf(buf, sizeof(buf), "<%" PRIB64 ">", 0xaaaaaaaa'aaaaaaaa));
+ EXPECT_STREQ("<1010101010101010101010101010101010101010101010101010101010101010>", buf);
+ EXPECT_EQ(68, snprintf(buf, sizeof(buf), "<%#" PRIB64 ">", 0xaaaaaaaa'aaaaaaaa));
+ EXPECT_STREQ("<0B1010101010101010101010101010101010101010101010101010101010101010>", buf);
+#pragma clang diagnostic pop
+
+ EXPECT_EQ(3, snprintf(buf, sizeof(buf), "<%#b>", 0));
EXPECT_STREQ("<0>", buf);
+#else
+ GTEST_SKIP() << "no %B in glibc";
+#endif
}
TEST(STDIO_TEST, swprintf_b) {
+#if defined(__BIONIC__)
wchar_t buf[BUFSIZ];
- EXPECT_EQ(5, swprintf(buf, sizeof(buf), L"<%b>", 5));
+
+ uint8_t b = 5;
+ EXPECT_EQ(5, swprintf(buf, sizeof(buf), L"<%" PRIb8 ">", b));
EXPECT_EQ(std::wstring(L"<101>"), buf);
- EXPECT_EQ(10, swprintf(buf, sizeof(buf), L"<%08b>", 5));
+ EXPECT_EQ(10, swprintf(buf, sizeof(buf), L"<%08" PRIb8 ">", b));
EXPECT_EQ(std::wstring(L"<00000101>"), buf);
- EXPECT_EQ(34, swprintf(buf, sizeof(buf), L"<%b>", 0xaaaaaaaa));
+
+ uint16_t s = 0xaaaa;
+ EXPECT_EQ(18, swprintf(buf, sizeof(buf), L"<%" PRIb16 ">", s));
+ EXPECT_EQ(std::wstring(L"<1010101010101010>"), buf);
+ EXPECT_EQ(20, swprintf(buf, sizeof(buf), L"<%#" PRIb16 ">", s));
+ EXPECT_EQ(std::wstring(L"<0b1010101010101010>"), buf);
+
+ EXPECT_EQ(34, swprintf(buf, sizeof(buf), L"<%" PRIb32 ">", 0xaaaaaaaa));
EXPECT_EQ(std::wstring(L"<10101010101010101010101010101010>"), buf);
- EXPECT_EQ(36, swprintf(buf, sizeof(buf), L"<%#b>", 0xaaaaaaaa));
+ EXPECT_EQ(36, swprintf(buf, sizeof(buf), L"<%#" PRIb32 ">", 0xaaaaaaaa));
EXPECT_EQ(std::wstring(L"<0b10101010101010101010101010101010>"), buf);
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wformat" // clang doesn't like "%lb"
+ EXPECT_EQ(66, swprintf(buf, sizeof(buf), L"<%" PRIb64 ">", 0xaaaaaaaa'aaaaaaaa));
+ EXPECT_EQ(std::wstring(L"<1010101010101010101010101010101010101010101010101010101010101010>"),
+ buf);
+ EXPECT_EQ(68, swprintf(buf, sizeof(buf), L"<%#" PRIb64 ">", 0xaaaaaaaa'aaaaaaaa));
+ EXPECT_EQ(std::wstring(L"<0b1010101010101010101010101010101010101010101010101010101010101010>"),
+ buf);
+#pragma clang diagnostic pop
+
EXPECT_EQ(3, swprintf(buf, sizeof(buf), L"<%#b>", 0));
EXPECT_EQ(std::wstring(L"<0>"), buf);
+#else
+ GTEST_SKIP() << "no %b in glibc";
+#endif
}
TEST(STDIO_TEST, swprintf_B) {
+#if defined(__BIONIC__)
wchar_t buf[BUFSIZ];
- EXPECT_EQ(5, swprintf(buf, sizeof(buf), L"<%B>", 5));
+
+ uint8_t b = 5;
+ EXPECT_EQ(5, swprintf(buf, sizeof(buf), L"<%" PRIB8 ">", b));
EXPECT_EQ(std::wstring(L"<101>"), buf);
- EXPECT_EQ(10, swprintf(buf, sizeof(buf), L"<%08B>", 5));
+ EXPECT_EQ(10, swprintf(buf, sizeof(buf), L"<%08" PRIB8 ">", b));
EXPECT_EQ(std::wstring(L"<00000101>"), buf);
- EXPECT_EQ(34, swprintf(buf, sizeof(buf), L"<%B>", 0xaaaaaaaa));
+
+ uint16_t s = 0xaaaa;
+ EXPECT_EQ(18, swprintf(buf, sizeof(buf), L"<%" PRIB16 ">", s));
+ EXPECT_EQ(std::wstring(L"<1010101010101010>"), buf);
+ EXPECT_EQ(20, swprintf(buf, sizeof(buf), L"<%#" PRIB16 ">", s));
+ EXPECT_EQ(std::wstring(L"<0B1010101010101010>"), buf);
+
+ EXPECT_EQ(34, swprintf(buf, sizeof(buf), L"<%" PRIB32 ">", 0xaaaaaaaa));
EXPECT_EQ(std::wstring(L"<10101010101010101010101010101010>"), buf);
- EXPECT_EQ(36, swprintf(buf, sizeof(buf), L"<%#B>", 0xaaaaaaaa));
+ EXPECT_EQ(36, swprintf(buf, sizeof(buf), L"<%#" PRIB32 ">", 0xaaaaaaaa));
EXPECT_EQ(std::wstring(L"<0B10101010101010101010101010101010>"), buf);
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wformat" // clang doesn't like "%lb"
+ EXPECT_EQ(66, swprintf(buf, sizeof(buf), L"<%" PRIB64 ">", 0xaaaaaaaa'aaaaaaaa));
+ EXPECT_EQ(std::wstring(L"<1010101010101010101010101010101010101010101010101010101010101010>"),
+ buf);
+ EXPECT_EQ(68, swprintf(buf, sizeof(buf), L"<%#" PRIB64 ">", 0xaaaaaaaa'aaaaaaaa));
+ EXPECT_EQ(std::wstring(L"<0B1010101010101010101010101010101010101010101010101010101010101010>"),
+ buf);
+#pragma clang diagnostic pop
+
EXPECT_EQ(3, swprintf(buf, sizeof(buf), L"<%#B>", 0));
EXPECT_EQ(std::wstring(L"<0>"), buf);
+#else
+ GTEST_SKIP() << "no %B in glibc";
+#endif
}
TEST(STDIO_TEST, scanf_i_decimal) {