1014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar//===- llvm/unittest/ADT/SmallStringTest.cpp ------------------------------===// 2014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar// 3014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar// The LLVM Compiler Infrastructure 4014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar// 5014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar// This file is distributed under the University of Illinois Open Source 6014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar// License. See LICENSE.TXT for details. 7014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar// 8014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar//===----------------------------------------------------------------------===// 9014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar// 10014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar// SmallString unit tests. 11014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar// 12014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar//===----------------------------------------------------------------------===// 13014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar 14014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar#include "gtest/gtest.h" 15014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar#include "llvm/ADT/SmallString.h" 16014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar#include <stdarg.h> 17014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar#include <climits> 18014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar#include <cstring> 19014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar 20014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbarusing namespace llvm; 21014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar 22014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbarnamespace { 23014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar 24014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar// Test fixture class 25014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbarclass SmallStringTest : public testing::Test { 26014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbarprotected: 27014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar typedef SmallString<40> StringType; 28014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar 29014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar StringType theString; 30014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar 31014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar void assertEmpty(StringType & v) { 32014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar // Size tests 33014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar EXPECT_EQ(0u, v.size()); 34014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar EXPECT_TRUE(v.empty()); 35014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar // Iterator tests 36014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar EXPECT_TRUE(v.begin() == v.end()); 37014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar } 38014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar}; 39014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar 40014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar// New string test. 41014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel DunbarTEST_F(SmallStringTest, EmptyStringTest) { 42014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar SCOPED_TRACE("EmptyStringTest"); 43014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar assertEmpty(theString); 44014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar EXPECT_TRUE(theString.rbegin() == theString.rend()); 45014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar} 46014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar 472527188a42b3250671b69dc979102565be1f910fTalinTEST_F(SmallStringTest, AssignRepeated) { 482527188a42b3250671b69dc979102565be1f910fTalin theString.assign(3, 'a'); 492527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(3u, theString.size()); 502527188a42b3250671b69dc979102565be1f910fTalin EXPECT_STREQ("aaa", theString.c_str()); 51014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar} 52014db9ddf7782457fd761d90c4a6ba100ff24a43Daniel Dunbar 532527188a42b3250671b69dc979102565be1f910fTalinTEST_F(SmallStringTest, AssignIterPair) { 542527188a42b3250671b69dc979102565be1f910fTalin StringRef abc = "abc"; 552527188a42b3250671b69dc979102565be1f910fTalin theString.assign(abc.begin(), abc.end()); 562527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(3u, theString.size()); 572527188a42b3250671b69dc979102565be1f910fTalin EXPECT_STREQ("abc", theString.c_str()); 582527188a42b3250671b69dc979102565be1f910fTalin} 592527188a42b3250671b69dc979102565be1f910fTalin 602527188a42b3250671b69dc979102565be1f910fTalinTEST_F(SmallStringTest, AssignStringRef) { 612527188a42b3250671b69dc979102565be1f910fTalin StringRef abc = "abc"; 622527188a42b3250671b69dc979102565be1f910fTalin theString.assign(abc); 632527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(3u, theString.size()); 642527188a42b3250671b69dc979102565be1f910fTalin EXPECT_STREQ("abc", theString.c_str()); 652527188a42b3250671b69dc979102565be1f910fTalin} 662527188a42b3250671b69dc979102565be1f910fTalin 672527188a42b3250671b69dc979102565be1f910fTalinTEST_F(SmallStringTest, AssignSmallVector) { 682527188a42b3250671b69dc979102565be1f910fTalin StringRef abc = "abc"; 692527188a42b3250671b69dc979102565be1f910fTalin SmallVector<char, 10> abcVec(abc.begin(), abc.end()); 702527188a42b3250671b69dc979102565be1f910fTalin theString.assign(abcVec); 712527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(3u, theString.size()); 722527188a42b3250671b69dc979102565be1f910fTalin EXPECT_STREQ("abc", theString.c_str()); 732527188a42b3250671b69dc979102565be1f910fTalin} 742527188a42b3250671b69dc979102565be1f910fTalin 752527188a42b3250671b69dc979102565be1f910fTalinTEST_F(SmallStringTest, AppendIterPair) { 762527188a42b3250671b69dc979102565be1f910fTalin StringRef abc = "abc"; 772527188a42b3250671b69dc979102565be1f910fTalin theString.append(abc.begin(), abc.end()); 782527188a42b3250671b69dc979102565be1f910fTalin theString.append(abc.begin(), abc.end()); 792527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(6u, theString.size()); 802527188a42b3250671b69dc979102565be1f910fTalin EXPECT_STREQ("abcabc", theString.c_str()); 812527188a42b3250671b69dc979102565be1f910fTalin} 822527188a42b3250671b69dc979102565be1f910fTalin 832527188a42b3250671b69dc979102565be1f910fTalinTEST_F(SmallStringTest, AppendStringRef) { 842527188a42b3250671b69dc979102565be1f910fTalin StringRef abc = "abc"; 852527188a42b3250671b69dc979102565be1f910fTalin theString.append(abc); 862527188a42b3250671b69dc979102565be1f910fTalin theString.append(abc); 872527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(6u, theString.size()); 882527188a42b3250671b69dc979102565be1f910fTalin EXPECT_STREQ("abcabc", theString.c_str()); 892527188a42b3250671b69dc979102565be1f910fTalin} 902527188a42b3250671b69dc979102565be1f910fTalin 912527188a42b3250671b69dc979102565be1f910fTalinTEST_F(SmallStringTest, AppendSmallVector) { 922527188a42b3250671b69dc979102565be1f910fTalin StringRef abc = "abc"; 932527188a42b3250671b69dc979102565be1f910fTalin SmallVector<char, 10> abcVec(abc.begin(), abc.end()); 942527188a42b3250671b69dc979102565be1f910fTalin theString.append(abcVec); 952527188a42b3250671b69dc979102565be1f910fTalin theString.append(abcVec); 962527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(6u, theString.size()); 972527188a42b3250671b69dc979102565be1f910fTalin EXPECT_STREQ("abcabc", theString.c_str()); 982527188a42b3250671b69dc979102565be1f910fTalin} 992527188a42b3250671b69dc979102565be1f910fTalin 1002527188a42b3250671b69dc979102565be1f910fTalinTEST_F(SmallStringTest, Substr) { 1012527188a42b3250671b69dc979102565be1f910fTalin theString = "hello"; 1022527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ("lo", theString.substr(3)); 1032527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ("", theString.substr(100)); 1042527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ("hello", theString.substr(0, 100)); 1052527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ("o", theString.substr(4, 10)); 1062527188a42b3250671b69dc979102565be1f910fTalin} 1072527188a42b3250671b69dc979102565be1f910fTalin 1082527188a42b3250671b69dc979102565be1f910fTalinTEST_F(SmallStringTest, Slice) { 1092527188a42b3250671b69dc979102565be1f910fTalin theString = "hello"; 1102527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ("l", theString.slice(2, 3)); 1112527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ("ell", theString.slice(1, 4)); 1122527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ("llo", theString.slice(2, 100)); 1132527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ("", theString.slice(2, 1)); 1142527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ("", theString.slice(10, 20)); 1152527188a42b3250671b69dc979102565be1f910fTalin} 1162527188a42b3250671b69dc979102565be1f910fTalin 1172527188a42b3250671b69dc979102565be1f910fTalinTEST_F(SmallStringTest, Find) { 1182527188a42b3250671b69dc979102565be1f910fTalin theString = "hello"; 1192527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(2U, theString.find('l')); 1202527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(StringRef::npos, theString.find('z')); 1212527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(StringRef::npos, theString.find("helloworld")); 1222527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(0U, theString.find("hello")); 1232527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(1U, theString.find("ello")); 1242527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(StringRef::npos, theString.find("zz")); 1252527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(2U, theString.find("ll", 2)); 1262527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(StringRef::npos, theString.find("ll", 3)); 1272527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(0U, theString.find("")); 1282527188a42b3250671b69dc979102565be1f910fTalin 1292527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(3U, theString.rfind('l')); 1302527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(StringRef::npos, theString.rfind('z')); 1312527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(StringRef::npos, theString.rfind("helloworld")); 1322527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(0U, theString.rfind("hello")); 1332527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(1U, theString.rfind("ello")); 1342527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(StringRef::npos, theString.rfind("zz")); 1352527188a42b3250671b69dc979102565be1f910fTalin 1362527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(2U, theString.find_first_of('l')); 1372527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(1U, theString.find_first_of("el")); 1382527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(StringRef::npos, theString.find_first_of("xyz")); 1392527188a42b3250671b69dc979102565be1f910fTalin 1402527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(1U, theString.find_first_not_of('h')); 1412527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(4U, theString.find_first_not_of("hel")); 1422527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(StringRef::npos, theString.find_first_not_of("hello")); 1432527188a42b3250671b69dc979102565be1f910fTalin 1442527188a42b3250671b69dc979102565be1f910fTalin theString = "hellx xello hell ello world foo bar hello"; 1452527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(36U, theString.find("hello")); 1462527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(28U, theString.find("foo")); 1472527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(12U, theString.find("hell", 2)); 1482527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(0U, theString.find("")); 1492527188a42b3250671b69dc979102565be1f910fTalin} 1502527188a42b3250671b69dc979102565be1f910fTalin 1512527188a42b3250671b69dc979102565be1f910fTalinTEST_F(SmallStringTest, Count) { 1522527188a42b3250671b69dc979102565be1f910fTalin theString = "hello"; 1532527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(2U, theString.count('l')); 1542527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(1U, theString.count('o')); 1552527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(0U, theString.count('z')); 1562527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(0U, theString.count("helloworld")); 1572527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(1U, theString.count("hello")); 1582527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(1U, theString.count("ello")); 1592527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(0U, theString.count("zz")); 1602527188a42b3250671b69dc979102565be1f910fTalin} 1612527188a42b3250671b69dc979102565be1f910fTalin 1622527188a42b3250671b69dc979102565be1f910fTalinTEST(StringRefTest, Comparisons) { 1632527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(-1, SmallString<10>("aab").compare("aad")); 1642527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ( 0, SmallString<10>("aab").compare("aab")); 1652527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ( 1, SmallString<10>("aab").compare("aaa")); 1662527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(-1, SmallString<10>("aab").compare("aabb")); 1672527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ( 1, SmallString<10>("aab").compare("aa")); 1682527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ( 1, SmallString<10>("\xFF").compare("\1")); 1692527188a42b3250671b69dc979102565be1f910fTalin 1702527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(-1, SmallString<10>("AaB").compare_lower("aAd")); 1712527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ( 0, SmallString<10>("AaB").compare_lower("aab")); 1722527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ( 1, SmallString<10>("AaB").compare_lower("AAA")); 1732527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(-1, SmallString<10>("AaB").compare_lower("aaBb")); 1742527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ( 1, SmallString<10>("AaB").compare_lower("aA")); 1752527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ( 1, SmallString<10>("\xFF").compare_lower("\1")); 1762527188a42b3250671b69dc979102565be1f910fTalin 1772527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(-1, SmallString<10>("aab").compare_numeric("aad")); 1782527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ( 0, SmallString<10>("aab").compare_numeric("aab")); 1792527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ( 1, SmallString<10>("aab").compare_numeric("aaa")); 1802527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(-1, SmallString<10>("aab").compare_numeric("aabb")); 1812527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ( 1, SmallString<10>("aab").compare_numeric("aa")); 1822527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(-1, SmallString<10>("1").compare_numeric("10")); 1832527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ( 0, SmallString<10>("10").compare_numeric("10")); 1842527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ( 0, SmallString<10>("10a").compare_numeric("10a")); 1852527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ( 1, SmallString<10>("2").compare_numeric("1")); 1862527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ( 0, SmallString<10>("llvm_v1i64_ty").compare_numeric("llvm_v1i64_ty")); 1872527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ( 1, SmallString<10>("\xFF").compare_numeric("\1")); 1882527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ( 1, SmallString<10>("V16").compare_numeric("V1_q0")); 1892527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(-1, SmallString<10>("V1_q0").compare_numeric("V16")); 1902527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(-1, SmallString<10>("V8_q0").compare_numeric("V16")); 1912527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ( 1, SmallString<10>("V16").compare_numeric("V8_q0")); 1922527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ(-1, SmallString<10>("V1_q0").compare_numeric("V8_q0")); 1932527188a42b3250671b69dc979102565be1f910fTalin EXPECT_EQ( 1, SmallString<10>("V8_q0").compare_numeric("V1_q0")); 1942527188a42b3250671b69dc979102565be1f910fTalin} 1952527188a42b3250671b69dc979102565be1f910fTalin 1962527188a42b3250671b69dc979102565be1f910fTalin} 197