14cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar//===- llvm/unittest/ADT/StringRefTest.cpp - StringRef unit tests ---------===// 24cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar// 34cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar// The LLVM Compiler Infrastructure 44cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar// 54cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar// This file is distributed under the University of Illinois Open Source 64cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar// License. See LICENSE.TXT for details. 74cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar// 84cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar//===----------------------------------------------------------------------===// 94cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar 104cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar#include "llvm/ADT/StringRef.h" 11528f0bbe19553dfadedca040df13a389daa7593dChandler Carruth#include "llvm/ADT/Hashing.h" 12c78c0c99a0fe1703ae72fc51e440aaa8e4e19e91Rafael Espindola#include "llvm/ADT/SmallVector.h" 13dbe77cfa0bcae10d91fbdbf118a97ec212afc88eDaniel Dunbar#include "llvm/Support/raw_ostream.h" 145a88dda4be791426ab4d20a6a6c9c65d66614a27Chandler Carruth#include "gtest/gtest.h" 154cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbarusing namespace llvm; 164cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar 17c883ad2dd8d4861f6c2cbc89f079152a159778c8Douglas Gregornamespace llvm { 184cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar 19e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbarstd::ostream &operator<<(std::ostream &OS, const StringRef &S) { 20b3371cdf5e6f8a9286a56fb94d70278be6f64276Chris Lattner OS << S.str(); 21e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar return OS; 22e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar} 23e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar 24e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbarstd::ostream &operator<<(std::ostream &OS, 25e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar const std::pair<StringRef, StringRef> &P) { 26e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar OS << "(" << P.first << ", " << P.second << ")"; 27e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar return OS; 28e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar} 29e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar 30c883ad2dd8d4861f6c2cbc89f079152a159778c8Douglas Gregor} 31c883ad2dd8d4861f6c2cbc89f079152a159778c8Douglas Gregor 32c883ad2dd8d4861f6c2cbc89f079152a159778c8Douglas Gregornamespace { 334cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel DunbarTEST(StringRefTest, Construction) { 34e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ("", StringRef()); 35e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ("hello", StringRef("hello")); 36e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ("hello", StringRef("hello world", 5)); 37e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ("hello", StringRef(std::string("hello"))); 384cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar} 394cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar 404cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel DunbarTEST(StringRefTest, Iteration) { 414cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar StringRef S("hello"); 424cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar const char *p = "hello"; 434cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar for (const char *it = S.begin(), *ie = S.end(); it != ie; ++it, ++p) 44e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(*it, *p); 454cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar} 464cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar 474cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel DunbarTEST(StringRefTest, StringOps) { 484cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar const char *p = "hello"; 494cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_EQ(p, StringRef(p, 0).data()); 504cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_TRUE(StringRef().empty()); 514cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_EQ((size_t) 5, StringRef("hello").size()); 524cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_EQ(-1, StringRef("aab").compare("aad")); 534cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_EQ( 0, StringRef("aab").compare("aab")); 544cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_EQ( 1, StringRef("aab").compare("aaa")); 554cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_EQ(-1, StringRef("aab").compare("aabb")); 564cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_EQ( 1, StringRef("aab").compare("aa")); 570043e35b8261af607d6cf0695b79b1d6584e67acBenjamin Kramer EXPECT_EQ( 1, StringRef("\xFF").compare("\1")); 580043e35b8261af607d6cf0695b79b1d6584e67acBenjamin Kramer 590043e35b8261af607d6cf0695b79b1d6584e67acBenjamin Kramer EXPECT_EQ(-1, StringRef("AaB").compare_lower("aAd")); 600043e35b8261af607d6cf0695b79b1d6584e67acBenjamin Kramer EXPECT_EQ( 0, StringRef("AaB").compare_lower("aab")); 610043e35b8261af607d6cf0695b79b1d6584e67acBenjamin Kramer EXPECT_EQ( 1, StringRef("AaB").compare_lower("AAA")); 620043e35b8261af607d6cf0695b79b1d6584e67acBenjamin Kramer EXPECT_EQ(-1, StringRef("AaB").compare_lower("aaBb")); 630043e35b8261af607d6cf0695b79b1d6584e67acBenjamin Kramer EXPECT_EQ( 1, StringRef("AaB").compare_lower("aA")); 640043e35b8261af607d6cf0695b79b1d6584e67acBenjamin Kramer EXPECT_EQ( 1, StringRef("\xFF").compare_lower("\1")); 65160a3bf74d1a2b048f65e2162d038ed96eddde01Jakob Stoklund Olesen 66160a3bf74d1a2b048f65e2162d038ed96eddde01Jakob Stoklund Olesen EXPECT_EQ(-1, StringRef("aab").compare_numeric("aad")); 67160a3bf74d1a2b048f65e2162d038ed96eddde01Jakob Stoklund Olesen EXPECT_EQ( 0, StringRef("aab").compare_numeric("aab")); 68160a3bf74d1a2b048f65e2162d038ed96eddde01Jakob Stoklund Olesen EXPECT_EQ( 1, StringRef("aab").compare_numeric("aaa")); 69160a3bf74d1a2b048f65e2162d038ed96eddde01Jakob Stoklund Olesen EXPECT_EQ(-1, StringRef("aab").compare_numeric("aabb")); 70160a3bf74d1a2b048f65e2162d038ed96eddde01Jakob Stoklund Olesen EXPECT_EQ( 1, StringRef("aab").compare_numeric("aa")); 71160a3bf74d1a2b048f65e2162d038ed96eddde01Jakob Stoklund Olesen EXPECT_EQ(-1, StringRef("1").compare_numeric("10")); 72160a3bf74d1a2b048f65e2162d038ed96eddde01Jakob Stoklund Olesen EXPECT_EQ( 0, StringRef("10").compare_numeric("10")); 73160a3bf74d1a2b048f65e2162d038ed96eddde01Jakob Stoklund Olesen EXPECT_EQ( 0, StringRef("10a").compare_numeric("10a")); 74160a3bf74d1a2b048f65e2162d038ed96eddde01Jakob Stoklund Olesen EXPECT_EQ( 1, StringRef("2").compare_numeric("1")); 75160a3bf74d1a2b048f65e2162d038ed96eddde01Jakob Stoklund Olesen EXPECT_EQ( 0, StringRef("llvm_v1i64_ty").compare_numeric("llvm_v1i64_ty")); 76837bccd052ea930915173fc83e733c7d8187002dBenjamin Kramer EXPECT_EQ( 1, StringRef("\xFF").compare_numeric("\1")); 777850dd0f25ccc5da6df54999a907e1277ed055d6Jakob Stoklund Olesen EXPECT_EQ( 1, StringRef("V16").compare_numeric("V1_q0")); 787850dd0f25ccc5da6df54999a907e1277ed055d6Jakob Stoklund Olesen EXPECT_EQ(-1, StringRef("V1_q0").compare_numeric("V16")); 797850dd0f25ccc5da6df54999a907e1277ed055d6Jakob Stoklund Olesen EXPECT_EQ(-1, StringRef("V8_q0").compare_numeric("V16")); 807850dd0f25ccc5da6df54999a907e1277ed055d6Jakob Stoklund Olesen EXPECT_EQ( 1, StringRef("V16").compare_numeric("V8_q0")); 817850dd0f25ccc5da6df54999a907e1277ed055d6Jakob Stoklund Olesen EXPECT_EQ(-1, StringRef("V1_q0").compare_numeric("V8_q0")); 827850dd0f25ccc5da6df54999a907e1277ed055d6Jakob Stoklund Olesen EXPECT_EQ( 1, StringRef("V8_q0").compare_numeric("V1_q0")); 834cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar} 844cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar 854cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel DunbarTEST(StringRefTest, Operators) { 86e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ("", StringRef()); 874cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_TRUE(StringRef("aab") < StringRef("aad")); 884cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_FALSE(StringRef("aab") < StringRef("aab")); 894cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_TRUE(StringRef("aab") <= StringRef("aab")); 904cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_FALSE(StringRef("aab") <= StringRef("aaa")); 914cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_TRUE(StringRef("aad") > StringRef("aab")); 924cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_FALSE(StringRef("aab") > StringRef("aab")); 934cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_TRUE(StringRef("aab") >= StringRef("aab")); 944cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_FALSE(StringRef("aaa") >= StringRef("aab")); 95e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(StringRef("aab"), StringRef("aab")); 964cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_FALSE(StringRef("aab") == StringRef("aac")); 974cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_FALSE(StringRef("aab") != StringRef("aab")); 984cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_TRUE(StringRef("aab") != StringRef("aac")); 994cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar EXPECT_EQ('a', StringRef("aab")[1]); 1004cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar} 1014cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar 102e65512809a4144c17538aac4cc59fac6d325a7e4Daniel DunbarTEST(StringRefTest, Substr) { 103f5fdf73238dfd923f33bcbbd397cff6752d9c41eDaniel Dunbar StringRef Str("hello"); 104e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ("lo", Str.substr(3)); 105e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ("", Str.substr(100)); 106e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ("hello", Str.substr(0, 100)); 107e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ("o", Str.substr(4, 10)); 108e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar} 109e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar 110e65512809a4144c17538aac4cc59fac6d325a7e4Daniel DunbarTEST(StringRefTest, Slice) { 111e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar StringRef Str("hello"); 112e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ("l", Str.slice(2, 3)); 113e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ("ell", Str.slice(1, 4)); 114e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ("llo", Str.slice(2, 100)); 115e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ("", Str.slice(2, 1)); 116e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ("", Str.slice(10, 20)); 117e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar} 118e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar 119e65512809a4144c17538aac4cc59fac6d325a7e4Daniel DunbarTEST(StringRefTest, Split) { 120e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar StringRef Str("hello"); 121e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(std::make_pair(StringRef("hello"), StringRef("")), 122e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar Str.split('X')); 123e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(std::make_pair(StringRef("h"), StringRef("llo")), 124e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar Str.split('e')); 125e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(std::make_pair(StringRef(""), StringRef("ello")), 126e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar Str.split('h')); 127e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(std::make_pair(StringRef("he"), StringRef("lo")), 128e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar Str.split('l')); 129e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(std::make_pair(StringRef("hell"), StringRef("")), 130e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar Str.split('o')); 131e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar 132e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(std::make_pair(StringRef("hello"), StringRef("")), 133e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar Str.rsplit('X')); 134e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(std::make_pair(StringRef("h"), StringRef("llo")), 135e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar Str.rsplit('e')); 136e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(std::make_pair(StringRef(""), StringRef("ello")), 137e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar Str.rsplit('h')); 138e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(std::make_pair(StringRef("hel"), StringRef("o")), 139e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar Str.rsplit('l')); 140e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(std::make_pair(StringRef("hell"), StringRef("")), 141e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar Str.rsplit('o')); 142e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar} 143d61918fc6898a89df8b0a03e068f234ded010cdfDaniel Dunbar 1445ccac247263ab62975f3b72421fc783f10ccf5f6Rafael EspindolaTEST(StringRefTest, Split2) { 145c78c0c99a0fe1703ae72fc51e440aaa8e4e19e91Rafael Espindola SmallVector<StringRef, 5> parts; 146c78c0c99a0fe1703ae72fc51e440aaa8e4e19e91Rafael Espindola SmallVector<StringRef, 5> expected; 1475ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola 1485ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola expected.push_back("ab"); expected.push_back("c"); 1495ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola StringRef(",ab,,c,").split(parts, ",", -1, false); 1505ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola EXPECT_TRUE(parts == expected); 1515ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola 1525ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola expected.clear(); parts.clear(); 1535ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola expected.push_back(""); expected.push_back("ab"); expected.push_back(""); 1545ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola expected.push_back("c"); expected.push_back(""); 1555ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola StringRef(",ab,,c,").split(parts, ",", -1, true); 1565ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola EXPECT_TRUE(parts == expected); 1575ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola 1585ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola expected.clear(); parts.clear(); 1595ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola expected.push_back(""); 1605ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola StringRef("").split(parts, ",", -1, true); 1615ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola EXPECT_TRUE(parts == expected); 1625ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola 1635ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola expected.clear(); parts.clear(); 1645ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola StringRef("").split(parts, ",", -1, false); 1655ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola EXPECT_TRUE(parts == expected); 1665ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola 1675ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola expected.clear(); parts.clear(); 1685ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola StringRef(",").split(parts, ",", -1, false); 1695ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola EXPECT_TRUE(parts == expected); 1705ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola 1715ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola expected.clear(); parts.clear(); 1725ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola expected.push_back(""); expected.push_back(""); 1735ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola StringRef(",").split(parts, ",", -1, true); 1745ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola EXPECT_TRUE(parts == expected); 1755ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola 17620fd4ec8c5cd3a3ec1f3258458a8899c4896ece2Rafael Espindola expected.clear(); parts.clear(); 17720fd4ec8c5cd3a3ec1f3258458a8899c4896ece2Rafael Espindola expected.push_back("a"); expected.push_back("b"); 17820fd4ec8c5cd3a3ec1f3258458a8899c4896ece2Rafael Espindola StringRef("a,b").split(parts, ",", -1, true); 17920fd4ec8c5cd3a3ec1f3258458a8899c4896ece2Rafael Espindola EXPECT_TRUE(parts == expected); 18020fd4ec8c5cd3a3ec1f3258458a8899c4896ece2Rafael Espindola 1815ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola // Test MaxSplit 1825ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola expected.clear(); parts.clear(); 1835ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola expected.push_back("a,,b,c"); 1845ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola StringRef("a,,b,c").split(parts, ",", 0, true); 1855ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola EXPECT_TRUE(parts == expected); 1865ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola 1875ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola expected.clear(); parts.clear(); 1885ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola expected.push_back("a,,b,c"); 1895ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola StringRef("a,,b,c").split(parts, ",", 0, false); 1905ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola EXPECT_TRUE(parts == expected); 1915ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola 1925ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola expected.clear(); parts.clear(); 1935ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola expected.push_back("a"); expected.push_back(",b,c"); 1945ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola StringRef("a,,b,c").split(parts, ",", 1, true); 1955ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola EXPECT_TRUE(parts == expected); 1965ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola 1975ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola expected.clear(); parts.clear(); 1985ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola expected.push_back("a"); expected.push_back(",b,c"); 1995ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola StringRef("a,,b,c").split(parts, ",", 1, false); 2005ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola EXPECT_TRUE(parts == expected); 2015ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola 2025ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola expected.clear(); parts.clear(); 2035ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola expected.push_back("a"); expected.push_back(""); expected.push_back("b,c"); 2045ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola StringRef("a,,b,c").split(parts, ",", 2, true); 2055ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola EXPECT_TRUE(parts == expected); 2065ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola 2075ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola expected.clear(); parts.clear(); 2085ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola expected.push_back("a"); expected.push_back("b,c"); 2095ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola StringRef("a,,b,c").split(parts, ",", 2, false); 2105ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola EXPECT_TRUE(parts == expected); 2115ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola 2125ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola expected.clear(); parts.clear(); 2135ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola expected.push_back("a"); expected.push_back(""); expected.push_back("b"); 2145ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola expected.push_back("c"); 2155ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola StringRef("a,,b,c").split(parts, ",", 3, true); 2165ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola EXPECT_TRUE(parts == expected); 2175ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola 2185ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola expected.clear(); parts.clear(); 2195ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola expected.push_back("a"); expected.push_back("b"); expected.push_back("c"); 2205ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola StringRef("a,,b,c").split(parts, ",", 3, false); 2215ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola EXPECT_TRUE(parts == expected); 2225ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola} 2235ccac247263ab62975f3b72421fc783f10ccf5f6Rafael Espindola 224b0940b46edbbe9d3f62d7f6f70330fd87f3507e1Michael J. SpencerTEST(StringRefTest, Trim) { 225b0940b46edbbe9d3f62d7f6f70330fd87f3507e1Michael J. Spencer StringRef Str0("hello"); 226b0940b46edbbe9d3f62d7f6f70330fd87f3507e1Michael J. Spencer StringRef Str1(" hello "); 227b0940b46edbbe9d3f62d7f6f70330fd87f3507e1Michael J. Spencer StringRef Str2(" hello "); 228b0940b46edbbe9d3f62d7f6f70330fd87f3507e1Michael J. Spencer 229b0940b46edbbe9d3f62d7f6f70330fd87f3507e1Michael J. Spencer EXPECT_EQ(StringRef("hello"), Str0.rtrim()); 230b0940b46edbbe9d3f62d7f6f70330fd87f3507e1Michael J. Spencer EXPECT_EQ(StringRef(" hello"), Str1.rtrim()); 231b0940b46edbbe9d3f62d7f6f70330fd87f3507e1Michael J. Spencer EXPECT_EQ(StringRef(" hello"), Str2.rtrim()); 232b0940b46edbbe9d3f62d7f6f70330fd87f3507e1Michael J. Spencer EXPECT_EQ(StringRef("hello"), Str0.ltrim()); 233b0940b46edbbe9d3f62d7f6f70330fd87f3507e1Michael J. Spencer EXPECT_EQ(StringRef("hello "), Str1.ltrim()); 234b0940b46edbbe9d3f62d7f6f70330fd87f3507e1Michael J. Spencer EXPECT_EQ(StringRef("hello "), Str2.ltrim()); 235b0940b46edbbe9d3f62d7f6f70330fd87f3507e1Michael J. Spencer EXPECT_EQ(StringRef("hello"), Str0.trim()); 236b0940b46edbbe9d3f62d7f6f70330fd87f3507e1Michael J. Spencer EXPECT_EQ(StringRef("hello"), Str1.trim()); 237b0940b46edbbe9d3f62d7f6f70330fd87f3507e1Michael J. Spencer EXPECT_EQ(StringRef("hello"), Str2.trim()); 238b0940b46edbbe9d3f62d7f6f70330fd87f3507e1Michael J. Spencer 239b0940b46edbbe9d3f62d7f6f70330fd87f3507e1Michael J. Spencer EXPECT_EQ(StringRef("ello"), Str0.trim("hhhhhhhhhhh")); 240b0940b46edbbe9d3f62d7f6f70330fd87f3507e1Michael J. Spencer 241b0940b46edbbe9d3f62d7f6f70330fd87f3507e1Michael J. Spencer EXPECT_EQ(StringRef(""), StringRef("").trim()); 242b0940b46edbbe9d3f62d7f6f70330fd87f3507e1Michael J. Spencer EXPECT_EQ(StringRef(""), StringRef(" ").trim()); 243b0940b46edbbe9d3f62d7f6f70330fd87f3507e1Michael J. Spencer EXPECT_EQ(StringRef("\0", 1), StringRef(" \0 ", 3).trim()); 244b0940b46edbbe9d3f62d7f6f70330fd87f3507e1Michael J. Spencer EXPECT_EQ(StringRef("\0\0", 2), StringRef("\0\0", 2).trim()); 245b0940b46edbbe9d3f62d7f6f70330fd87f3507e1Michael J. Spencer EXPECT_EQ(StringRef("x"), StringRef("\0\0x\0\0", 5).trim(StringRef("\0", 1))); 246b0940b46edbbe9d3f62d7f6f70330fd87f3507e1Michael J. Spencer} 247b0940b46edbbe9d3f62d7f6f70330fd87f3507e1Michael J. Spencer 248e65512809a4144c17538aac4cc59fac6d325a7e4Daniel DunbarTEST(StringRefTest, StartsWith) { 249e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar StringRef Str("hello"); 250f5fdf73238dfd923f33bcbbd397cff6752d9c41eDaniel Dunbar EXPECT_TRUE(Str.startswith("he")); 251f5fdf73238dfd923f33bcbbd397cff6752d9c41eDaniel Dunbar EXPECT_FALSE(Str.startswith("helloworld")); 252f5fdf73238dfd923f33bcbbd397cff6752d9c41eDaniel Dunbar EXPECT_FALSE(Str.startswith("hi")); 253e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar} 254dbe77cfa0bcae10d91fbdbf118a97ec212afc88eDaniel Dunbar 255d5b1f8a8426e82990dafc6e3336fefc6635c8fa4Eli FriedmanTEST(StringRefTest, EndsWith) { 256d5b1f8a8426e82990dafc6e3336fefc6635c8fa4Eli Friedman StringRef Str("hello"); 257d5b1f8a8426e82990dafc6e3336fefc6635c8fa4Eli Friedman EXPECT_TRUE(Str.endswith("lo")); 258d5b1f8a8426e82990dafc6e3336fefc6635c8fa4Eli Friedman EXPECT_FALSE(Str.endswith("helloworld")); 259d5b1f8a8426e82990dafc6e3336fefc6635c8fa4Eli Friedman EXPECT_FALSE(Str.endswith("worldhello")); 260d5b1f8a8426e82990dafc6e3336fefc6635c8fa4Eli Friedman EXPECT_FALSE(Str.endswith("so")); 261d5b1f8a8426e82990dafc6e3336fefc6635c8fa4Eli Friedman} 262d5b1f8a8426e82990dafc6e3336fefc6635c8fa4Eli Friedman 263e65512809a4144c17538aac4cc59fac6d325a7e4Daniel DunbarTEST(StringRefTest, Find) { 264e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar StringRef Str("hello"); 265e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(2U, Str.find('l')); 266e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(StringRef::npos, Str.find('z')); 267e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(StringRef::npos, Str.find("helloworld")); 268e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(0U, Str.find("hello")); 269e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(1U, Str.find("ello")); 270e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(StringRef::npos, Str.find("zz")); 27164066bd8b593082f622bbc25716938a453363d2fDaniel Dunbar EXPECT_EQ(2U, Str.find("ll", 2)); 27264066bd8b593082f622bbc25716938a453363d2fDaniel Dunbar EXPECT_EQ(StringRef::npos, Str.find("ll", 3)); 2736e6a558ebce556476d8fd659b419a2760f2ab154Benjamin Kramer EXPECT_EQ(0U, Str.find("")); 2746e6a558ebce556476d8fd659b419a2760f2ab154Benjamin Kramer StringRef LongStr("hellx xello hell ello world foo bar hello"); 2756e6a558ebce556476d8fd659b419a2760f2ab154Benjamin Kramer EXPECT_EQ(36U, LongStr.find("hello")); 2766e6a558ebce556476d8fd659b419a2760f2ab154Benjamin Kramer EXPECT_EQ(28U, LongStr.find("foo")); 2776e6a558ebce556476d8fd659b419a2760f2ab154Benjamin Kramer EXPECT_EQ(12U, LongStr.find("hell", 2)); 2786e6a558ebce556476d8fd659b419a2760f2ab154Benjamin Kramer EXPECT_EQ(0U, LongStr.find("")); 279e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar 280e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(3U, Str.rfind('l')); 281e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(StringRef::npos, Str.rfind('z')); 282e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(StringRef::npos, Str.rfind("helloworld")); 283e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(0U, Str.rfind("hello")); 284e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(1U, Str.rfind("ello")); 285e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(StringRef::npos, Str.rfind("zz")); 28664066bd8b593082f622bbc25716938a453363d2fDaniel Dunbar 28764066bd8b593082f622bbc25716938a453363d2fDaniel Dunbar EXPECT_EQ(2U, Str.find_first_of('l')); 28864066bd8b593082f622bbc25716938a453363d2fDaniel Dunbar EXPECT_EQ(1U, Str.find_first_of("el")); 28964066bd8b593082f622bbc25716938a453363d2fDaniel Dunbar EXPECT_EQ(StringRef::npos, Str.find_first_of("xyz")); 29064066bd8b593082f622bbc25716938a453363d2fDaniel Dunbar 29164066bd8b593082f622bbc25716938a453363d2fDaniel Dunbar EXPECT_EQ(1U, Str.find_first_not_of('h')); 29264066bd8b593082f622bbc25716938a453363d2fDaniel Dunbar EXPECT_EQ(4U, Str.find_first_not_of("hel")); 29364066bd8b593082f622bbc25716938a453363d2fDaniel Dunbar EXPECT_EQ(StringRef::npos, Str.find_first_not_of("hello")); 294b0940b46edbbe9d3f62d7f6f70330fd87f3507e1Michael J. Spencer 295b0940b46edbbe9d3f62d7f6f70330fd87f3507e1Michael J. Spencer EXPECT_EQ(3U, Str.find_last_not_of('o')); 296b0940b46edbbe9d3f62d7f6f70330fd87f3507e1Michael J. Spencer EXPECT_EQ(1U, Str.find_last_not_of("lo")); 297b0940b46edbbe9d3f62d7f6f70330fd87f3507e1Michael J. Spencer EXPECT_EQ(StringRef::npos, Str.find_last_not_of("helo")); 298e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar} 299e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar 300e65512809a4144c17538aac4cc59fac6d325a7e4Daniel DunbarTEST(StringRefTest, Count) { 301e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar StringRef Str("hello"); 302e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(2U, Str.count('l')); 303e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(1U, Str.count('o')); 304e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(0U, Str.count('z')); 305e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(0U, Str.count("helloworld")); 306e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(1U, Str.count("hello")); 307e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(1U, Str.count("ello")); 308e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar EXPECT_EQ(0U, Str.count("zz")); 309e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar} 310e65512809a4144c17538aac4cc59fac6d325a7e4Daniel Dunbar 3117e54d5b1562f085c898bf8fcc4ac939ec893444cDouglas GregorTEST(StringRefTest, EditDistance) { 3127e54d5b1562f085c898bf8fcc4ac939ec893444cDouglas Gregor StringRef Str("hello"); 3134760467ff2c5e9d03d469cee2f14c6e68b096d65Benjamin Kramer EXPECT_EQ(2U, Str.edit_distance("hill")); 3147e54d5b1562f085c898bf8fcc4ac939ec893444cDouglas Gregor} 3157e54d5b1562f085c898bf8fcc4ac939ec893444cDouglas Gregor 316e65512809a4144c17538aac4cc59fac6d325a7e4Daniel DunbarTEST(StringRefTest, Misc) { 317dbe77cfa0bcae10d91fbdbf118a97ec212afc88eDaniel Dunbar std::string Storage; 318dbe77cfa0bcae10d91fbdbf118a97ec212afc88eDaniel Dunbar raw_string_ostream OS(Storage); 319dbe77cfa0bcae10d91fbdbf118a97ec212afc88eDaniel Dunbar OS << StringRef("hello"); 320dbe77cfa0bcae10d91fbdbf118a97ec212afc88eDaniel Dunbar EXPECT_EQ("hello", OS.str()); 321f5fdf73238dfd923f33bcbbd397cff6752d9c41eDaniel Dunbar} 322f5fdf73238dfd923f33bcbbd397cff6752d9c41eDaniel Dunbar 323528f0bbe19553dfadedca040df13a389daa7593dChandler CarruthTEST(StringRefTest, Hashing) { 324528f0bbe19553dfadedca040df13a389daa7593dChandler Carruth EXPECT_EQ(hash_value(std::string()), hash_value(StringRef())); 325528f0bbe19553dfadedca040df13a389daa7593dChandler Carruth EXPECT_EQ(hash_value(std::string()), hash_value(StringRef(""))); 326528f0bbe19553dfadedca040df13a389daa7593dChandler Carruth std::string S = "hello world"; 327528f0bbe19553dfadedca040df13a389daa7593dChandler Carruth hash_code H = hash_value(S); 328528f0bbe19553dfadedca040df13a389daa7593dChandler Carruth EXPECT_EQ(H, hash_value(StringRef("hello world"))); 329528f0bbe19553dfadedca040df13a389daa7593dChandler Carruth EXPECT_EQ(H, hash_value(StringRef(S))); 330528f0bbe19553dfadedca040df13a389daa7593dChandler Carruth EXPECT_NE(H, hash_value(StringRef("hello worl"))); 331528f0bbe19553dfadedca040df13a389daa7593dChandler Carruth EXPECT_EQ(hash_value(std::string("hello worl")), 332528f0bbe19553dfadedca040df13a389daa7593dChandler Carruth hash_value(StringRef("hello worl"))); 333528f0bbe19553dfadedca040df13a389daa7593dChandler Carruth EXPECT_NE(H, hash_value(StringRef("hello world "))); 334528f0bbe19553dfadedca040df13a389daa7593dChandler Carruth EXPECT_EQ(hash_value(std::string("hello world ")), 335528f0bbe19553dfadedca040df13a389daa7593dChandler Carruth hash_value(StringRef("hello world "))); 336528f0bbe19553dfadedca040df13a389daa7593dChandler Carruth EXPECT_EQ(H, hash_value(StringRef("hello world\0"))); 337528f0bbe19553dfadedca040df13a389daa7593dChandler Carruth EXPECT_NE(hash_value(std::string("ello worl")), 338528f0bbe19553dfadedca040df13a389daa7593dChandler Carruth hash_value(StringRef("hello world").slice(1, -1))); 339528f0bbe19553dfadedca040df13a389daa7593dChandler Carruth} 340528f0bbe19553dfadedca040df13a389daa7593dChandler Carruth 3419130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencerstruct UnsignedPair { 3429130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer const char *Str; 3439130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer uint64_t Expected; 3449130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer} Unsigned[] = 3459130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer { {"0", 0} 3469130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer , {"255", 255} 3479130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer , {"256", 256} 3489130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer , {"65535", 65535} 3499130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer , {"65536", 65536} 350dbb4b2fb5eaa9ea99da620a7df764da0b73323d6Michael J. Spencer , {"4294967295", 4294967295ULL} 351dbb4b2fb5eaa9ea99da620a7df764da0b73323d6Michael J. Spencer , {"4294967296", 4294967296ULL} 3529130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer , {"18446744073709551615", 18446744073709551615ULL} 3539130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer , {"042", 34} 3549130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer , {"0x42", 66} 3559130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer , {"0b101010", 42} 3569130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer }; 3579130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer 3589130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencerstruct SignedPair { 3599130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer const char *Str; 3609130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer int64_t Expected; 3619130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer} Signed[] = 3629130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer { {"0", 0} 3639130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer , {"-0", 0} 3649130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer , {"127", 127} 3659130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer , {"128", 128} 3669130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer , {"-128", -128} 3679130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer , {"-129", -129} 3689130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer , {"32767", 32767} 3699130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer , {"32768", 32768} 3709130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer , {"-32768", -32768} 3719130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer , {"-32769", -32769} 372dbb4b2fb5eaa9ea99da620a7df764da0b73323d6Michael J. Spencer , {"2147483647", 2147483647LL} 373dbb4b2fb5eaa9ea99da620a7df764da0b73323d6Michael J. Spencer , {"2147483648", 2147483648LL} 3749130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer , {"-2147483648", -2147483648LL} 3759130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer , {"-2147483649", -2147483649LL} 3769130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer , {"-9223372036854775808", -(9223372036854775807LL) - 1} 3779130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer , {"042", 34} 3789130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer , {"0x42", 66} 3799130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer , {"0b101010", 42} 3809130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer , {"-042", -34} 3819130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer , {"-0x42", -66} 3829130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer , {"-0b101010", -42} 3839130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer }; 3849130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer 3859130b42a85998238b7bbe25ed2989e0605f636f0Michael J. SpencerTEST(StringRefTest, getAsInteger) { 3869130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer uint8_t U8; 3879130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer uint16_t U16; 3889130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer uint32_t U32; 3899130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer uint64_t U64; 3909130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer 3919130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer for (size_t i = 0; i < array_lengthof(Unsigned); ++i) { 3929130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer bool U8Success = StringRef(Unsigned[i].Str).getAsInteger(0, U8); 3939130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer if (static_cast<uint8_t>(Unsigned[i].Expected) == Unsigned[i].Expected) { 3949130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer ASSERT_FALSE(U8Success); 3959130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer EXPECT_EQ(U8, Unsigned[i].Expected); 3969130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer } else { 3979130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer ASSERT_TRUE(U8Success); 3989130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer } 3999130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer bool U16Success = StringRef(Unsigned[i].Str).getAsInteger(0, U16); 4009130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer if (static_cast<uint16_t>(Unsigned[i].Expected) == Unsigned[i].Expected) { 4019130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer ASSERT_FALSE(U16Success); 4029130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer EXPECT_EQ(U16, Unsigned[i].Expected); 4039130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer } else { 4049130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer ASSERT_TRUE(U16Success); 4059130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer } 4069130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer bool U32Success = StringRef(Unsigned[i].Str).getAsInteger(0, U32); 4079130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer if (static_cast<uint32_t>(Unsigned[i].Expected) == Unsigned[i].Expected) { 4089130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer ASSERT_FALSE(U32Success); 4099130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer EXPECT_EQ(U32, Unsigned[i].Expected); 4109130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer } else { 4119130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer ASSERT_TRUE(U32Success); 4129130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer } 4139130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer bool U64Success = StringRef(Unsigned[i].Str).getAsInteger(0, U64); 4149130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer if (static_cast<uint64_t>(Unsigned[i].Expected) == Unsigned[i].Expected) { 4159130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer ASSERT_FALSE(U64Success); 4169130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer EXPECT_EQ(U64, Unsigned[i].Expected); 4179130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer } else { 4189130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer ASSERT_TRUE(U64Success); 4199130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer } 4209130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer } 4219130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer 4229130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer int8_t S8; 4239130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer int16_t S16; 4249130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer int32_t S32; 4259130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer int64_t S64; 4269130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer 4279130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer for (size_t i = 0; i < array_lengthof(Signed); ++i) { 4289130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer bool S8Success = StringRef(Signed[i].Str).getAsInteger(0, S8); 4299130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer if (static_cast<int8_t>(Signed[i].Expected) == Signed[i].Expected) { 4309130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer ASSERT_FALSE(S8Success); 4319130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer EXPECT_EQ(S8, Signed[i].Expected); 4329130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer } else { 4339130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer ASSERT_TRUE(S8Success); 4349130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer } 4359130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer bool S16Success = StringRef(Signed[i].Str).getAsInteger(0, S16); 4369130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer if (static_cast<int16_t>(Signed[i].Expected) == Signed[i].Expected) { 4379130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer ASSERT_FALSE(S16Success); 4389130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer EXPECT_EQ(S16, Signed[i].Expected); 4399130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer } else { 4409130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer ASSERT_TRUE(S16Success); 4419130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer } 4429130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer bool S32Success = StringRef(Signed[i].Str).getAsInteger(0, S32); 4439130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer if (static_cast<int32_t>(Signed[i].Expected) == Signed[i].Expected) { 4449130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer ASSERT_FALSE(S32Success); 4459130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer EXPECT_EQ(S32, Signed[i].Expected); 4469130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer } else { 4479130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer ASSERT_TRUE(S32Success); 4489130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer } 4499130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer bool S64Success = StringRef(Signed[i].Str).getAsInteger(0, S64); 4509130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer if (static_cast<int64_t>(Signed[i].Expected) == Signed[i].Expected) { 4519130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer ASSERT_FALSE(S64Success); 4529130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer EXPECT_EQ(S64, Signed[i].Expected); 4539130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer } else { 4549130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer ASSERT_TRUE(S64Success); 4559130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer } 4569130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer } 4579130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer} 4589130b42a85998238b7bbe25ed2989e0605f636f0Michael J. Spencer 4597a0f86fa7822ae02d9d4f8f992d854a4bcc2a8bdNick Kledzik 4607a0f86fa7822ae02d9d4f8f992d854a4bcc2a8bdNick Kledzikstatic const char* BadStrings[] = { 4617a0f86fa7822ae02d9d4f8f992d854a4bcc2a8bdNick Kledzik "18446744073709551617" // value just over max 4627a0f86fa7822ae02d9d4f8f992d854a4bcc2a8bdNick Kledzik , "123456789012345678901" // value way too large 4637a0f86fa7822ae02d9d4f8f992d854a4bcc2a8bdNick Kledzik , "4t23v" // illegal decimal characters 4647a0f86fa7822ae02d9d4f8f992d854a4bcc2a8bdNick Kledzik , "0x123W56" // illegal hex characters 465e25de4ae04db1d773b1caaa83dc7e301b22d5143Benjamin Kramer , "0b2" // illegal bin characters 466e25de4ae04db1d773b1caaa83dc7e301b22d5143Benjamin Kramer , "08" // illegal oct characters 467e25de4ae04db1d773b1caaa83dc7e301b22d5143Benjamin Kramer , "0o8" // illegal oct characters 468e25de4ae04db1d773b1caaa83dc7e301b22d5143Benjamin Kramer , "-123" // negative unsigned value 4697a0f86fa7822ae02d9d4f8f992d854a4bcc2a8bdNick Kledzik}; 4707a0f86fa7822ae02d9d4f8f992d854a4bcc2a8bdNick Kledzik 4717a0f86fa7822ae02d9d4f8f992d854a4bcc2a8bdNick Kledzik 4727a0f86fa7822ae02d9d4f8f992d854a4bcc2a8bdNick KledzikTEST(StringRefTest, getAsUnsignedIntegerBadStrings) { 473436eaa88fda780e135405c9fc9dc9cac892eb9d8Nick Kledzik unsigned long long U64; 4747a0f86fa7822ae02d9d4f8f992d854a4bcc2a8bdNick Kledzik for (size_t i = 0; i < array_lengthof(BadStrings); ++i) { 475e25de4ae04db1d773b1caaa83dc7e301b22d5143Benjamin Kramer bool IsBadNumber = StringRef(BadStrings[i]).getAsInteger(0, U64); 4767a0f86fa7822ae02d9d4f8f992d854a4bcc2a8bdNick Kledzik ASSERT_TRUE(IsBadNumber); 4777a0f86fa7822ae02d9d4f8f992d854a4bcc2a8bdNick Kledzik } 4787a0f86fa7822ae02d9d4f8f992d854a4bcc2a8bdNick Kledzik} 4797a0f86fa7822ae02d9d4f8f992d854a4bcc2a8bdNick Kledzik 4807a0f86fa7822ae02d9d4f8f992d854a4bcc2a8bdNick Kledzik 4817a0f86fa7822ae02d9d4f8f992d854a4bcc2a8bdNick Kledzik 4824cf95d75c65f37677d306952b0d2306bc6d20b1fDaniel Dunbar} // end anonymous namespace 483