X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=unittests%2FSupport%2FRegexTest.cpp;h=3577d1015e915018a1b21cab5e68885fcca085fc;hb=fe532525cc4912ec0d1b4e91fa0396122dd087b3;hp=28a85a1586f953c476056bc36e9af10082d7b65c;hpb=528700863adefca8de461ce28a7d903729fb96b4;p=oota-llvm.git diff --git a/unittests/Support/RegexTest.cpp b/unittests/Support/RegexTest.cpp index 28a85a1586f..3577d1015e9 100644 --- a/unittests/Support/RegexTest.cpp +++ b/unittests/Support/RegexTest.cpp @@ -7,9 +7,9 @@ // //===----------------------------------------------------------------------===// -#include "gtest/gtest.h" #include "llvm/Support/Regex.h" #include "llvm/ADT/SmallVector.h" +#include "gtest/gtest.h" #include using namespace llvm; @@ -25,12 +25,12 @@ TEST_F(RegexTest, Basics) { EXPECT_FALSE(r1.match("9a")); SmallVector Matches; - Regex r2("[0-9]+", Regex::Sub); + Regex r2("[0-9]+"); EXPECT_TRUE(r2.match("aa216b", &Matches)); EXPECT_EQ(1u, Matches.size()); EXPECT_EQ("216", Matches[0].str()); - Regex r3("[0-9]+([a-f])?:([0-9]+)", Regex::Sub); + Regex r3("[0-9]+([a-f])?:([0-9]+)"); EXPECT_TRUE(r3.match("9a:513b", &Matches)); EXPECT_EQ(3u, Matches.size()); EXPECT_EQ("9a:513", Matches[0].str()); @@ -43,7 +43,7 @@ TEST_F(RegexTest, Basics) { EXPECT_EQ("", Matches[1].str()); EXPECT_EQ("513", Matches[2].str()); - Regex r4("a[^b]+b", Regex::Sub); + Regex r4("a[^b]+b"); std::string String="axxb"; String[2] = '\0'; EXPECT_FALSE(r4.match("abb")); @@ -51,15 +51,65 @@ TEST_F(RegexTest, Basics) { EXPECT_EQ(1u, Matches.size()); EXPECT_EQ(String, Matches[0].str()); - std::string NulPattern="X[0-9]+X([a-f])?:([0-9]+)"; String="YX99a:513b"; NulPattern[7] = '\0'; - Regex r5(NulPattern, Regex::Sub); + Regex r5(NulPattern); EXPECT_FALSE(r5.match(String)); EXPECT_FALSE(r5.match("X9")); String[3]='\0'; EXPECT_TRUE(r5.match(String)); } +TEST_F(RegexTest, Backreferences) { + Regex r1("([a-z]+)_\\1"); + SmallVector Matches; + EXPECT_TRUE(r1.match("abc_abc", &Matches)); + EXPECT_EQ(2u, Matches.size()); + EXPECT_FALSE(r1.match("abc_ab", &Matches)); + + Regex r2("a([0-9])b\\1c\\1"); + EXPECT_TRUE(r2.match("a4b4c4", &Matches)); + EXPECT_EQ(2u, Matches.size()); + EXPECT_EQ("4", Matches[1].str()); + EXPECT_FALSE(r2.match("a2b2c3")); + + Regex r3("a([0-9])([a-z])b\\1\\2"); + EXPECT_TRUE(r3.match("a6zb6z", &Matches)); + EXPECT_EQ(3u, Matches.size()); + EXPECT_EQ("6", Matches[1].str()); + EXPECT_EQ("z", Matches[2].str()); + EXPECT_FALSE(r3.match("a6zb6y")); + EXPECT_FALSE(r3.match("a6zb7z")); +} + +TEST_F(RegexTest, Substitution) { + std::string Error; + + EXPECT_EQ("aNUMber", Regex("[0-9]+").sub("NUM", "a1234ber")); + + // Standard Escapes + EXPECT_EQ("a\\ber", Regex("[0-9]+").sub("\\\\", "a1234ber", &Error)); + EXPECT_EQ(Error, ""); + EXPECT_EQ("a\nber", Regex("[0-9]+").sub("\\n", "a1234ber", &Error)); + EXPECT_EQ(Error, ""); + EXPECT_EQ("a\tber", Regex("[0-9]+").sub("\\t", "a1234ber", &Error)); + EXPECT_EQ(Error, ""); + EXPECT_EQ("ajber", Regex("[0-9]+").sub("\\j", "a1234ber", &Error)); + EXPECT_EQ(Error, ""); + + EXPECT_EQ("aber", Regex("[0-9]+").sub("\\", "a1234ber", &Error)); + EXPECT_EQ(Error, "replacement string contained trailing backslash"); + + // Backreferences + EXPECT_EQ("aa1234bber", Regex("a[0-9]+b").sub("a\\0b", "a1234ber", &Error)); + EXPECT_EQ(Error, ""); + + EXPECT_EQ("a1234ber", Regex("a([0-9]+)b").sub("a\\1b", "a1234ber", &Error)); + EXPECT_EQ(Error, ""); + + EXPECT_EQ("aber", Regex("a[0-9]+b").sub("a\\100b", "a1234ber", &Error)); + EXPECT_EQ(Error, "invalid backreference string '100'"); +} + }