1 //===-- Unittests for StringStream ----------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "src/__support/CPP/ArrayRef.h" 10 #include "src/__support/CPP/stringstream.h" 11 #include "utils/UnitTest/Test.h" 12 13 using __llvm_libc::cpp::MutableArrayRef; 14 using __llvm_libc::cpp::StringStream; 15 16 TEST(LlvmLibcStringStreamTest, Simple) { 17 char buf[256]; 18 MutableArrayRef<char> bufref(reinterpret_cast<void *>(buf), 256); 19 20 StringStream ss1(bufref); 21 ss1 << "Hello, Stream - " << int(123) << StringStream::ENDS; 22 ASSERT_FALSE(ss1.overflow()); 23 ASSERT_STREQ(ss1.str().data(), "Hello, Stream - 123"); 24 25 StringStream ss2(bufref); 26 ss2 << 'a' << 'b' << 'c' << StringStream::ENDS; 27 ASSERT_FALSE(ss2.overflow()); 28 ASSERT_STREQ(ss2.str().data(), "abc"); 29 } 30 31 TEST(LlvmLibcStringStreamTest, Overflow) { 32 constexpr size_t BUFSIZE = 8; 33 char buf[BUFSIZE]; 34 MutableArrayRef<char> bufref(reinterpret_cast<void *>(buf), BUFSIZE); 35 36 StringStream ss1(bufref); 37 ss1 << "Hello, Stream - " << int(123) << StringStream::ENDS; 38 ASSERT_TRUE(ss1.overflow()); 39 ASSERT_EQ(ss1.str().size(), BUFSIZE); 40 41 StringStream ss2(bufref); 42 ss2 << "7777777"; 43 ASSERT_FALSE(ss2.overflow()); 44 ASSERT_EQ(ss2.str().size(), size_t(7)); 45 ss2 << "8"; 46 ASSERT_FALSE(ss2.overflow()); 47 ASSERT_EQ(ss2.str().size(), size_t(8)); 48 ss2 << StringStream::ENDS; 49 ASSERT_TRUE(ss2.overflow()); 50 ASSERT_EQ(ss2.str().size(), BUFSIZE); 51 } 52