mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-27 23:38:59 -04:00

Summary: This patch is part of a patch series to add support for FileCheck numeric expressions. This specific patch adds a new class to hold pattern matching global state. The table holding the values of FileCheck variable constitutes some sort of global state for the matching phase, yet is passed as parameters of all functions using it. This commit create a new FileCheckPatternContext class pointed at from FileCheckPattern. While it increases the line count, it separates local data from global state. Later commits build on that to add numeric expression global state to that class. Copyright: - Linaro (changes up to diff 183612 of revision D55940) - GraphCore (changes in later versions of revision D55940 and in new revision created off D55940) Reviewers: jhenderson, chandlerc, jdenny, probinson, grimar, arichardson, rnk Subscribers: hiraditya, llvm-commits, probinson, dblaikie, grimar, arichardson, tra, rnk, kristina, hfinkel, rogfer01, JonChesterfield Tags: #llvm Differential Revision: https://reviews.llvm.org/D60381 llvm-svn: 358390
53 lines
1.8 KiB
C++
53 lines
1.8 KiB
C++
//===- llvm/unittest/Support/FileCheckTest.cpp - FileCheck tests --===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/Support/FileCheck.h"
|
|
#include "gtest/gtest.h"
|
|
|
|
using namespace llvm;
|
|
namespace {
|
|
|
|
class FileCheckTest : public ::testing::Test {};
|
|
|
|
TEST_F(FileCheckTest, FileCheckContext) {
|
|
FileCheckPatternContext Cxt;
|
|
std::vector<std::string> GlobalDefines;
|
|
|
|
// Define local and global variables from command-line.
|
|
GlobalDefines.emplace_back(std::string("LocalVar=FOO"));
|
|
Cxt.defineCmdlineVariables(GlobalDefines);
|
|
|
|
// Check defined variables are present and undefined is absent.
|
|
StringRef LocalVarStr = "LocalVar";
|
|
StringRef UnknownVarStr = "UnknownVar";
|
|
llvm::Optional<StringRef> LocalVar = Cxt.getVarValue(LocalVarStr);
|
|
llvm::Optional<StringRef> UnknownVar = Cxt.getVarValue(UnknownVarStr);
|
|
EXPECT_TRUE(LocalVar);
|
|
EXPECT_EQ(*LocalVar, "FOO");
|
|
EXPECT_FALSE(UnknownVar);
|
|
|
|
// Clear local variables and check they become absent.
|
|
Cxt.clearLocalVars();
|
|
LocalVar = Cxt.getVarValue(LocalVarStr);
|
|
EXPECT_FALSE(LocalVar);
|
|
|
|
// Redefine global variables and check variables are defined again.
|
|
GlobalDefines.emplace_back(std::string("$GlobalVar=BAR"));
|
|
Cxt.defineCmdlineVariables(GlobalDefines);
|
|
StringRef GlobalVarStr = "$GlobalVar";
|
|
llvm::Optional<StringRef> GlobalVar = Cxt.getVarValue(GlobalVarStr);
|
|
EXPECT_TRUE(GlobalVar);
|
|
EXPECT_EQ(*GlobalVar, "BAR");
|
|
|
|
// Clear local variables and check global variables remain defined.
|
|
Cxt.clearLocalVars();
|
|
GlobalVar = Cxt.getVarValue(GlobalVarStr);
|
|
EXPECT_TRUE(GlobalVar);
|
|
}
|
|
} // namespace
|