//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/Support/Format.h" #include "gtest/gtest.h" using namespace llvm; namespace { template std::string printToString(unsigned MaxN, FormatTy &&Fmt) { std::vector Dst(MaxN + 2); int N = Fmt.snprint(Dst.data(), Dst.size()); Dst.back() = 0; return N < 0 ? "" : Dst.data(); } template constexpr bool checkDecayTypeEq(const Arg &arg) { return std::is_same_v, Expected>; } TEST(Format, DecayIfCCharArray) { char Array[] = "Array"; const char ConstArray[] = "ConstArray"; char PtrBuf[] = "Ptr"; char *Ptr = PtrBuf; const char *PtrToConst = "PtrToConst"; EXPECT_EQ(" Literal", printToString(20, format("%15s", "Literal"))); EXPECT_EQ(" Array", printToString(20, format("%15s", Array))); EXPECT_EQ(" ConstArray", printToString(20, format("%15s", ConstArray))); EXPECT_EQ(" Ptr", printToString(20, format("%15s", Ptr))); EXPECT_EQ(" PtrToConst", printToString(20, format("%15s", PtrToConst))); EXPECT_TRUE(checkDecayTypeEq("Literal")); EXPECT_TRUE(checkDecayTypeEq(Array)); EXPECT_TRUE(checkDecayTypeEq(ConstArray)); EXPECT_TRUE(checkDecayTypeEq(Ptr)); EXPECT_TRUE(checkDecayTypeEq(PtrToConst)); EXPECT_TRUE(checkDecayTypeEq(PtrToConst[0])); EXPECT_TRUE( checkDecayTypeEq(static_cast("Literal"))); wchar_t WCharArray[] = L"WCharArray"; EXPECT_TRUE(checkDecayTypeEq(WCharArray)); EXPECT_TRUE(checkDecayTypeEq(WCharArray[0])); } } // namespace