llvm-project/clang/unittests/Analysis/FlowSensitive/SourceLocationsLatticeTest.cpp

69 lines
2.0 KiB
C++

//===- unittests/Analysis/FlowSensitive/SourceLocationsLatticeTest.cpp ----===//
//
// 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 "clang/Analysis/FlowSensitive/SourceLocationsLattice.h"
#include "clang/Analysis/FlowSensitive/DataflowLattice.h"
#include "clang/Basic/SourceLocation.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
namespace clang {
namespace dataflow {
namespace {
TEST(SourceLocationsLatticeTest, Comparison) {
const SourceLocationsLattice Bottom;
const SourceLocationsLattice NonBottom(
{SourceLocation::getFromRawEncoding(0)});
EXPECT_TRUE(Bottom == Bottom);
EXPECT_FALSE(Bottom == NonBottom);
EXPECT_FALSE(NonBottom == Bottom);
EXPECT_TRUE(NonBottom == NonBottom);
EXPECT_FALSE(Bottom != Bottom);
EXPECT_TRUE(Bottom != NonBottom);
EXPECT_TRUE(NonBottom != Bottom);
EXPECT_FALSE(NonBottom != NonBottom);
}
TEST(SourceLocationsLatticeTest, Join) {
const SourceLocationsLattice Bottom;
const SourceLocationsLattice NonBottom(
{SourceLocation::getFromRawEncoding(0)});
{
SourceLocationsLattice LHS = Bottom;
const SourceLocationsLattice RHS = Bottom;
EXPECT_EQ(LHS.join(RHS), LatticeJoinEffect::Unchanged);
EXPECT_EQ(LHS, Bottom);
}
{
SourceLocationsLattice LHS = NonBottom;
const SourceLocationsLattice RHS = Bottom;
EXPECT_EQ(LHS.join(RHS), LatticeJoinEffect::Unchanged);
EXPECT_EQ(LHS, NonBottom);
}
{
SourceLocationsLattice LHS = Bottom;
const SourceLocationsLattice RHS = NonBottom;
EXPECT_EQ(LHS.join(RHS), LatticeJoinEffect::Changed);
EXPECT_EQ(LHS, NonBottom);
}
{
SourceLocationsLattice LHS = NonBottom;
const SourceLocationsLattice RHS = NonBottom;
EXPECT_EQ(LHS.join(RHS), LatticeJoinEffect::Unchanged);
EXPECT_EQ(LHS, NonBottom);
}
}
} // namespace
} // namespace dataflow
} // namespace clang