15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===- TwineTest.cpp - Twine unit tests -----------------------------------===// 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The LLVM Compiler Infrastructure 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is distributed under the University of Illinois Open Source 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// License. See LICENSE.TXT for details. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===// 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "llvm/ADT/Twine.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "llvm/ADT/SmallString.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "llvm/Support/raw_ostream.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gtest/gtest.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using namespace llvm; 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string repr(const Twine &Value) { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string res; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) llvm::raw_string_ostream OS(res); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Value.printRepr(OS); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return OS.str(); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(TwineTest, Construction) { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("", Twine().str()); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("hi", Twine("hi").str()); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("hi", Twine(std::string("hi")).str()); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("hi", Twine(StringRef("hi")).str()); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("hi", Twine(StringRef(std::string("hi"))).str()); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("hi", Twine(StringRef("hithere", 2)).str()); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(TwineTest, Numbers) { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("123", Twine(123U).str()); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("123", Twine(123).str()); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("-123", Twine(-123).str()); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("123", Twine(123).str()); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("-123", Twine(-123).str()); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("7b", Twine::utohexstr(123).str()); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(TwineTest, Characters) { 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("x", Twine('x').str()); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("x", Twine(static_cast<unsigned char>('x')).str()); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("x", Twine(static_cast<signed char>('x')).str()); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(TwineTest, Concat) { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check verse repr, since we care about the actual representation not just 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the result. 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Concat with null. 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("(Twine null empty)", 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) repr(Twine("hi").concat(Twine::createNull()))); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("(Twine null empty)", 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) repr(Twine::createNull().concat(Twine("hi")))); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Concat with empty. 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("(Twine cstring:\"hi\" empty)", 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) repr(Twine("hi").concat(Twine()))); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("(Twine cstring:\"hi\" empty)", 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) repr(Twine().concat(Twine("hi")))); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Concatenation of unary ropes. 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("(Twine cstring:\"a\" cstring:\"b\")", 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) repr(Twine("a").concat(Twine("b")))); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Concatenation of other ropes. 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("(Twine rope:(Twine cstring:\"a\" cstring:\"b\") cstring:\"c\")", 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) repr(Twine("a").concat(Twine("b")).concat(Twine("c")))); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("(Twine cstring:\"a\" rope:(Twine cstring:\"b\" cstring:\"c\"))", 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) repr(Twine("a").concat(Twine("b").concat(Twine("c"))))); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(TwineTest, toNullTerminatedStringRef) { 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SmallString<8> storage; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, *Twine("hello").toNullTerminatedStringRef(storage).end()); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *Twine(StringRef("hello")).toNullTerminatedStringRef(storage).end()); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // I suppose linking in the entire code generator to add a unit test to check 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the code size of the concat operation is overkill... :) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // end anonymous namespace 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)