summaryrefslogtreecommitdiffstats
path: root/lldb/unittests/Symbol/PostfixExpressionTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/unittests/Symbol/PostfixExpressionTest.cpp')
-rw-r--r--lldb/unittests/Symbol/PostfixExpressionTest.cpp83
1 files changed, 56 insertions, 27 deletions
diff --git a/lldb/unittests/Symbol/PostfixExpressionTest.cpp b/lldb/unittests/Symbol/PostfixExpressionTest.cpp
index 59c818352c9..e9f78197fac 100644
--- a/lldb/unittests/Symbol/PostfixExpressionTest.cpp
+++ b/lldb/unittests/Symbol/PostfixExpressionTest.cpp
@@ -12,6 +12,7 @@
#include "lldb/Utility/StreamString.h"
#include "llvm/Support/FormatVariadic.h"
#include "llvm/Support/raw_ostream.h"
+#include "gmock/gmock.h"
#include "gtest/gtest.h"
using namespace lldb_private;
@@ -71,40 +72,68 @@ public:
}
};
-static std::string ParseAndStringify(llvm::StringRef expr) {
+static std::string ParseOneAndStringify(llvm::StringRef expr) {
llvm::BumpPtrAllocator alloc;
- return ASTPrinter::Print(Parse(expr, alloc));
+ return ASTPrinter::Print(ParseOneExpression(expr, alloc));
}
-TEST(PostfixExpression, Parse) {
- EXPECT_EQ("int(47)", ParseAndStringify("47"));
- EXPECT_EQ("$foo", ParseAndStringify("$foo"));
- EXPECT_EQ("+(int(1), int(2))", ParseAndStringify("1 2 +"));
- EXPECT_EQ("-(int(1), int(2))", ParseAndStringify("1 2 -"));
- EXPECT_EQ("@(int(1), int(2))", ParseAndStringify("1 2 @"));
- EXPECT_EQ("+(int(1), +(int(2), int(3)))", ParseAndStringify("1 2 3 + +"));
- EXPECT_EQ("+(+(int(1), int(2)), int(3))", ParseAndStringify("1 2 + 3 +"));
- EXPECT_EQ("^(int(1))", ParseAndStringify("1 ^"));
- EXPECT_EQ("^(^(int(1)))", ParseAndStringify("1 ^ ^"));
- EXPECT_EQ("^(+(int(1), ^(int(2))))", ParseAndStringify("1 2 ^ + ^"));
- EXPECT_EQ("-($foo, int(47))", ParseAndStringify("$foo 47 -"));
- EXPECT_EQ("+(int(47), int(-42))", ParseAndStringify("47 -42 +"));
-
- EXPECT_EQ("nullptr", ParseAndStringify("+"));
- EXPECT_EQ("nullptr", ParseAndStringify("^"));
- EXPECT_EQ("nullptr", ParseAndStringify("1 +"));
- EXPECT_EQ("nullptr", ParseAndStringify("1 2 ^"));
- EXPECT_EQ("nullptr", ParseAndStringify("1 2 3 +"));
- EXPECT_EQ("nullptr", ParseAndStringify("^ 1"));
- EXPECT_EQ("nullptr", ParseAndStringify("+ 1 2"));
- EXPECT_EQ("nullptr", ParseAndStringify("1 + 2"));
- EXPECT_EQ("nullptr", ParseAndStringify("1 2"));
- EXPECT_EQ("nullptr", ParseAndStringify(""));
+TEST(PostfixExpression, ParseOneExpression) {
+ EXPECT_EQ("int(47)", ParseOneAndStringify("47"));
+ EXPECT_EQ("$foo", ParseOneAndStringify("$foo"));
+ EXPECT_EQ("+(int(1), int(2))", ParseOneAndStringify("1 2 +"));
+ EXPECT_EQ("-(int(1), int(2))", ParseOneAndStringify("1 2 -"));
+ EXPECT_EQ("@(int(1), int(2))", ParseOneAndStringify("1 2 @"));
+ EXPECT_EQ("+(int(1), +(int(2), int(3)))", ParseOneAndStringify("1 2 3 + +"));
+ EXPECT_EQ("+(+(int(1), int(2)), int(3))", ParseOneAndStringify("1 2 + 3 +"));
+ EXPECT_EQ("^(int(1))", ParseOneAndStringify("1 ^"));
+ EXPECT_EQ("^(^(int(1)))", ParseOneAndStringify("1 ^ ^"));
+ EXPECT_EQ("^(+(int(1), ^(int(2))))", ParseOneAndStringify("1 2 ^ + ^"));
+ EXPECT_EQ("-($foo, int(47))", ParseOneAndStringify("$foo 47 -"));
+ EXPECT_EQ("+(int(47), int(-42))", ParseOneAndStringify("47 -42 +"));
+
+ EXPECT_EQ("nullptr", ParseOneAndStringify("+"));
+ EXPECT_EQ("nullptr", ParseOneAndStringify("^"));
+ EXPECT_EQ("nullptr", ParseOneAndStringify("1 +"));
+ EXPECT_EQ("nullptr", ParseOneAndStringify("1 2 ^"));
+ EXPECT_EQ("nullptr", ParseOneAndStringify("1 2 3 +"));
+ EXPECT_EQ("nullptr", ParseOneAndStringify("^ 1"));
+ EXPECT_EQ("nullptr", ParseOneAndStringify("+ 1 2"));
+ EXPECT_EQ("nullptr", ParseOneAndStringify("1 + 2"));
+ EXPECT_EQ("nullptr", ParseOneAndStringify("1 2"));
+ EXPECT_EQ("nullptr", ParseOneAndStringify(""));
+}
+
+static std::vector<std::pair<std::string, std::string>>
+ParseFPOAndStringify(llvm::StringRef prog) {
+ llvm::BumpPtrAllocator alloc;
+ std::vector<std::pair<llvm::StringRef, Node *>> parsed =
+ ParseFPOProgram(prog, alloc);
+ auto range = llvm::map_range(
+ parsed, [](const std::pair<llvm::StringRef, Node *> &pair) {
+ return std::make_pair(pair.first, ASTPrinter::Print(pair.second));
+ });
+ return std::vector<std::pair<std::string, std::string>>(range.begin(),
+ range.end());
+}
+
+TEST(PostfixExpression, ParseFPOProgram) {
+ EXPECT_THAT(ParseFPOAndStringify("a 1 ="),
+ testing::ElementsAre(std::make_pair("a", "int(1)")));
+ EXPECT_THAT(ParseFPOAndStringify("a 1 = b 2 3 + ="),
+ testing::ElementsAre(std::make_pair("a", "int(1)"),
+ std::make_pair("b", "+(int(2), int(3))")));
+
+ EXPECT_THAT(ParseFPOAndStringify(""), testing::IsEmpty());
+ EXPECT_THAT(ParseFPOAndStringify("="), testing::IsEmpty());
+ EXPECT_THAT(ParseFPOAndStringify("a 1"), testing::IsEmpty());
+ EXPECT_THAT(ParseFPOAndStringify("a 1 = ="), testing::IsEmpty());
+ EXPECT_THAT(ParseFPOAndStringify("a 1 + ="), testing::IsEmpty());
+ EXPECT_THAT(ParseFPOAndStringify("= a 1 ="), testing::IsEmpty());
}
static std::string ParseAndGenerateDWARF(llvm::StringRef expr) {
llvm::BumpPtrAllocator alloc;
- Node *ast = Parse(expr, alloc);
+ Node *ast = ParseOneExpression(expr, alloc);
if (!ast)
return "Parse failed.";
if (!ResolveSymbols(ast, [&](SymbolNode &symbol) -> Node * {
OpenPOWER on IntegriCloud