diff --git a/llvm/unittests/Makefile b/llvm/unittests/Makefile index d96df4f52d8b..2a13b8d536de 100644 --- a/llvm/unittests/Makefile +++ b/llvm/unittests/Makefile @@ -16,7 +16,7 @@ BUILD_ARCHIVE = 1 CPP.Flags += -I$(LLVM_SRC_ROOT)/utils/unittest/googletest/include/ CPP.Flags += -Wno-variadic-macros -PARALLEL_DIRS = ADT +PARALLEL_DIRS = ADT Support include $(LEVEL)/Makefile.common diff --git a/llvm/unittests/Support/Makefile b/llvm/unittests/Support/Makefile new file mode 100644 index 000000000000..815bdd269da5 --- /dev/null +++ b/llvm/unittests/Support/Makefile @@ -0,0 +1,15 @@ +##===- unittests/ADT/Makefile ------------------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## + +LEVEL = ../.. +TESTNAME = Support +LINK_COMPONENTS := core support + +include $(LEVEL)/Makefile.config +include $(LLVM_SRC_ROOT)/unittests/Makefile.unittest diff --git a/llvm/unittests/Support/raw_ostream.cpp b/llvm/unittests/Support/raw_ostream.cpp new file mode 100644 index 000000000000..7b86b2341aeb --- /dev/null +++ b/llvm/unittests/Support/raw_ostream.cpp @@ -0,0 +1,85 @@ +//===- llvm/unittest/Support/raw_ostream.cpp - raw_ostream unit tests -----===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "gtest/gtest.h" +#include "llvm/Support/raw_ostream.h" + +using namespace llvm; + +namespace { + +template std::string printToString(const T &Value) { + std::string res; + llvm::raw_string_ostream(res) << Value; + return res; +} + +template std::string printToStringUnbuffered(const T &Value) { + std::string res; + llvm::raw_string_ostream OS(res); + OS.SetUnbuffered(); + OS << Value; + return res; +} + +TEST(raw_ostreamTest, Types_Buffered) { + // Char + EXPECT_EQ("c", printToString('c')); + + // String + EXPECT_EQ("hello", printToString("hello")); + EXPECT_EQ("hello", printToString(std::string("hello"))); + + // Int + EXPECT_EQ("0", printToString(0)); + EXPECT_EQ("2425", printToString(2425)); + EXPECT_EQ("-2425", printToString(-2425)); + + // Long long + EXPECT_EQ("0", printToString(0LL)); + EXPECT_EQ("257257257235709", printToString(257257257235709LL)); + EXPECT_EQ("-257257257235709", printToString(-257257257235709LL)); + + // Double + EXPECT_EQ("1.100000e+00", printToString(1.1)); + + // void* + EXPECT_EQ("0x0", printToString((void*) 0)); + EXPECT_EQ("0xbeef", printToString((void*) 0xbeef)); + EXPECT_EQ("0xdeadbeef", printToString((void*) 0xdeadbeef)); +} + +TEST(raw_ostreamTest, Types_Unbuffered) { + // Char + EXPECT_EQ("c", printToStringUnbuffered('c')); + + // String + EXPECT_EQ("hello", printToStringUnbuffered("hello")); + EXPECT_EQ("hello", printToStringUnbuffered(std::string("hello"))); + + // Int + EXPECT_EQ("0", printToStringUnbuffered(0)); + EXPECT_EQ("2425", printToStringUnbuffered(2425)); + EXPECT_EQ("-2425", printToStringUnbuffered(-2425)); + + // Long long + EXPECT_EQ("0", printToStringUnbuffered(0LL)); + EXPECT_EQ("257257257235709", printToStringUnbuffered(257257257235709LL)); + EXPECT_EQ("-257257257235709", printToStringUnbuffered(-257257257235709LL)); + + // Double + EXPECT_EQ("1.100000e+00", printToStringUnbuffered(1.1)); + + // void* + EXPECT_EQ("0x0", printToStringUnbuffered((void*) 0)); + EXPECT_EQ("0xbeef", printToStringUnbuffered((void*) 0xbeef)); + EXPECT_EQ("0xdeadbeef", printToStringUnbuffered((void*) 0xdeadbeef)); +} + +}