1*d45c04daSWei Yi Tee //===- llvm/Testing/ADT/StringMap.h ---------------------------------------===// 2*d45c04daSWei Yi Tee // 3*d45c04daSWei Yi Tee // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*d45c04daSWei Yi Tee // See https://llvm.org/LICENSE.txt for license information. 5*d45c04daSWei Yi Tee // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*d45c04daSWei Yi Tee // 7*d45c04daSWei Yi Tee //===----------------------------------------------------------------------===// 8*d45c04daSWei Yi Tee 9*d45c04daSWei Yi Tee #ifndef LLVM_TESTING_ADT_STRINGMAP_H_ 10*d45c04daSWei Yi Tee #define LLVM_TESTING_ADT_STRINGMAP_H_ 11*d45c04daSWei Yi Tee 12*d45c04daSWei Yi Tee #include "llvm/ADT/STLExtras.h" 13*d45c04daSWei Yi Tee #include "llvm/ADT/StringMap.h" 14*d45c04daSWei Yi Tee #include "llvm/Support/FormatVariadic.h" 15*d45c04daSWei Yi Tee #include "llvm/Testing/ADT/StringMapEntry.h" 16*d45c04daSWei Yi Tee #include <ostream> 17*d45c04daSWei Yi Tee #include <sstream> 18*d45c04daSWei Yi Tee 19*d45c04daSWei Yi Tee namespace llvm { 20*d45c04daSWei Yi Tee 21*d45c04daSWei Yi Tee /// Support for printing to std::ostream, for use with e.g. producing more 22*d45c04daSWei Yi Tee /// useful error messages with Google Test. 23*d45c04daSWei Yi Tee template <typename T> 24*d45c04daSWei Yi Tee std::ostream &operator<<(std::ostream &OS, const StringMap<T> &M) { 25*d45c04daSWei Yi Tee if (M.empty()) { 26*d45c04daSWei Yi Tee return OS << "{ }"; 27*d45c04daSWei Yi Tee } 28*d45c04daSWei Yi Tee 29*d45c04daSWei Yi Tee std::vector<std::string> Lines; 30*d45c04daSWei Yi Tee for (const auto &E : M) { 31*d45c04daSWei Yi Tee std::ostringstream SS; 32*d45c04daSWei Yi Tee SS << E << ","; 33*d45c04daSWei Yi Tee Lines.push_back(SS.str()); 34*d45c04daSWei Yi Tee } 35*d45c04daSWei Yi Tee llvm::sort(Lines); 36*d45c04daSWei Yi Tee Lines.insert(Lines.begin(), "{"); 37*d45c04daSWei Yi Tee Lines.insert(Lines.end(), "}"); 38*d45c04daSWei Yi Tee 39*d45c04daSWei Yi Tee return OS << llvm::formatv("{0:$[\n]}", 40*d45c04daSWei Yi Tee make_range(Lines.begin(), Lines.end())) 41*d45c04daSWei Yi Tee .str(); 42*d45c04daSWei Yi Tee } 43*d45c04daSWei Yi Tee 44*d45c04daSWei Yi Tee } // namespace llvm 45*d45c04daSWei Yi Tee 46*d45c04daSWei Yi Tee #endif 47