1 //===- llvm/unittest/Support/RegexTest.cpp - Regex tests --===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "gtest/gtest.h"
11 #include "llvm/Support/Regex.h"
12 #include "llvm/ADT/SmallVector.h"
18 class RegexTest
: public ::testing::Test
{
21 TEST_F(RegexTest
, Basics
) {
23 EXPECT_TRUE(r1
.match("916"));
24 EXPECT_TRUE(r1
.match("9"));
25 EXPECT_FALSE(r1
.match("9a"));
27 SmallVector
<StringRef
, 1> Matches
;
29 EXPECT_TRUE(r2
.match("aa216b", &Matches
));
30 EXPECT_EQ(1u, Matches
.size());
31 EXPECT_EQ("216", Matches
[0].str());
33 Regex
r3("[0-9]+([a-f])?:([0-9]+)");
34 EXPECT_TRUE(r3
.match("9a:513b", &Matches
));
35 EXPECT_EQ(3u, Matches
.size());
36 EXPECT_EQ("9a:513", Matches
[0].str());
37 EXPECT_EQ("a", Matches
[1].str());
38 EXPECT_EQ("513", Matches
[2].str());
40 EXPECT_TRUE(r3
.match("9:513b", &Matches
));
41 EXPECT_EQ(3u, Matches
.size());
42 EXPECT_EQ("9:513", Matches
[0].str());
43 EXPECT_EQ("", Matches
[1].str());
44 EXPECT_EQ("513", Matches
[2].str());
47 std::string String
="axxb";
49 EXPECT_FALSE(r4
.match("abb"));
50 EXPECT_TRUE(r4
.match(String
, &Matches
));
51 EXPECT_EQ(1u, Matches
.size());
52 EXPECT_EQ(String
, Matches
[0].str());
55 std::string NulPattern
="X[0-9]+X([a-f])?:([0-9]+)";
59 EXPECT_FALSE(r5
.match(String
));
60 EXPECT_FALSE(r5
.match("X9"));
62 EXPECT_TRUE(r5
.match(String
));
65 TEST_F(RegexTest
, Substitution
) {
68 EXPECT_EQ("aNUMber", Regex("[0-9]+").sub("NUM", "a1234ber"));
71 EXPECT_EQ("a\\ber", Regex("[0-9]+").sub("\\\\", "a1234ber", &Error
));
73 EXPECT_EQ("a\nber", Regex("[0-9]+").sub("\\n", "a1234ber", &Error
));
75 EXPECT_EQ("a\tber", Regex("[0-9]+").sub("\\t", "a1234ber", &Error
));
77 EXPECT_EQ("ajber", Regex("[0-9]+").sub("\\j", "a1234ber", &Error
));
80 EXPECT_EQ("aber", Regex("[0-9]+").sub("\\", "a1234ber", &Error
));
81 EXPECT_EQ(Error
, "replacement string contained trailing backslash");
84 EXPECT_EQ("aa1234bber", Regex("a[0-9]+b").sub("a\\0b", "a1234ber", &Error
));
87 EXPECT_EQ("a1234ber", Regex("a([0-9]+)b").sub("a\\1b", "a1234ber", &Error
));
90 EXPECT_EQ("aber", Regex("a[0-9]+b").sub("a\\100b", "a1234ber", &Error
));
91 EXPECT_EQ(Error
, "invalid backreference string '100'");