diff options
author | Zijun Zhao <zijunzhao@google.com> | 2023-04-20 20:37:12 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2023-04-20 20:37:12 +0000 |
commit | 07928fd142a572e8e788dfabc5b19a1349e2a856 (patch) | |
tree | 4a83478f07dce7ac826547f5e8af7e668ceb1deb | |
parent | df11a311536503a30f26830d5b9c93039c6d5ff0 (diff) | |
parent | b6fb4c313cdc02f8db3642723868e6a48f5824fc (diff) | |
download | bionic-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.cpp | 128 |
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) { |