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