You've already forked linux-packaging-mono
Imported Upstream version 5.18.0.205
Former-commit-id: 7f59f7e792705db773f1caecdaa823092f4e2927
This commit is contained in:
parent
5cd5df71cc
commit
8e12397d70
134
external/llvm/unittests/ADT/BitmaskEnumTest.cpp
vendored
Normal file
134
external/llvm/unittests/ADT/BitmaskEnumTest.cpp
vendored
Normal file
@ -0,0 +1,134 @@
|
||||
//===- llvm/unittest/ADT/BitmaskEnumTest.cpp - BitmaskEnum unit tests -----===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/ADT/BitmaskEnum.h"
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
namespace {
|
||||
enum Flags {
|
||||
F0 = 0,
|
||||
F1 = 1,
|
||||
F2 = 2,
|
||||
F3 = 4,
|
||||
F4 = 8,
|
||||
LLVM_MARK_AS_BITMASK_ENUM(F4)
|
||||
};
|
||||
|
||||
TEST(BitmaskEnumTest, BitwiseOr) {
|
||||
Flags f = F1 | F2;
|
||||
EXPECT_EQ(3, f);
|
||||
|
||||
f = f | F3;
|
||||
EXPECT_EQ(7, f);
|
||||
}
|
||||
|
||||
TEST(BitmaskEnumTest, BitwiseOrEquals) {
|
||||
Flags f = F1;
|
||||
f |= F3;
|
||||
EXPECT_EQ(5, f);
|
||||
|
||||
// |= should return a reference to the LHS.
|
||||
f = F2;
|
||||
(f |= F3) = F1;
|
||||
EXPECT_EQ(F1, f);
|
||||
}
|
||||
|
||||
TEST(BitmaskEnumTest, BitwiseAnd) {
|
||||
Flags f = static_cast<Flags>(3) & F2;
|
||||
EXPECT_EQ(F2, f);
|
||||
|
||||
f = (f | F3) & (F1 | F2 | F3);
|
||||
EXPECT_EQ(6, f);
|
||||
}
|
||||
|
||||
TEST(BitmaskEnumTest, BitwiseAndEquals) {
|
||||
Flags f = F1 | F2 | F3;
|
||||
f &= F1 | F2;
|
||||
EXPECT_EQ(3, f);
|
||||
|
||||
// &= should return a reference to the LHS.
|
||||
(f &= F1) = F3;
|
||||
EXPECT_EQ(F3, f);
|
||||
}
|
||||
|
||||
TEST(BitmaskEnumTest, BitwiseXor) {
|
||||
Flags f = (F1 | F2) ^ (F2 | F3);
|
||||
EXPECT_EQ(5, f);
|
||||
|
||||
f = f ^ F1;
|
||||
EXPECT_EQ(4, f);
|
||||
}
|
||||
|
||||
TEST(BitmaskEnumTest, BitwiseXorEquals) {
|
||||
Flags f = (F1 | F2);
|
||||
f ^= (F2 | F4);
|
||||
EXPECT_EQ(9, f);
|
||||
|
||||
// ^= should return a reference to the LHS.
|
||||
(f ^= F4) = F3;
|
||||
EXPECT_EQ(F3, f);
|
||||
}
|
||||
|
||||
TEST(BitmaskEnumTest, BitwiseNot) {
|
||||
Flags f = ~F1;
|
||||
EXPECT_EQ(14, f); // Largest value for f is 15.
|
||||
EXPECT_EQ(15, ~F0);
|
||||
}
|
||||
|
||||
enum class FlagsClass {
|
||||
F0 = 0,
|
||||
F1 = 1,
|
||||
F2 = 2,
|
||||
F3 = 4,
|
||||
LLVM_MARK_AS_BITMASK_ENUM(F3)
|
||||
};
|
||||
|
||||
TEST(BitmaskEnumTest, ScopedEnum) {
|
||||
FlagsClass f = (FlagsClass::F1 & ~FlagsClass::F0) | FlagsClass::F2;
|
||||
f |= FlagsClass::F3;
|
||||
EXPECT_EQ(7, static_cast<int>(f));
|
||||
}
|
||||
|
||||
struct Container {
|
||||
enum Flags { F0 = 0, F1 = 1, F2 = 2, F3 = 4, LLVM_MARK_AS_BITMASK_ENUM(F3) };
|
||||
|
||||
static Flags getFlags() {
|
||||
Flags f = F0 | F1;
|
||||
f |= F2;
|
||||
return f;
|
||||
}
|
||||
};
|
||||
|
||||
TEST(BitmaskEnumTest, EnumInStruct) { EXPECT_EQ(3, Container::getFlags()); }
|
||||
|
||||
} // namespace
|
||||
|
||||
namespace foo {
|
||||
namespace bar {
|
||||
namespace {
|
||||
enum FlagsInNamespace {
|
||||
F0 = 0,
|
||||
F1 = 1,
|
||||
F2 = 2,
|
||||
F3 = 4,
|
||||
LLVM_MARK_AS_BITMASK_ENUM(F3)
|
||||
};
|
||||
} // namespace
|
||||
} // namespace foo
|
||||
} // namespace bar
|
||||
|
||||
namespace {
|
||||
TEST(BitmaskEnumTest, EnumInNamespace) {
|
||||
foo::bar::FlagsInNamespace f = ~foo::bar::F0 & (foo::bar::F1 | foo::bar::F2);
|
||||
f |= foo::bar::F3;
|
||||
EXPECT_EQ(7, f);
|
||||
}
|
||||
} // namespace
|
Reference in New Issue
Block a user