mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-18 07:26:40 +00:00

The non-GTest library will be shared by unittests of Flang and Flang-RT. Promote it as a regular library for use by both projects. In the long term, we may want to convert these to regular GTest checks to avoid having multiple testing frameworks.
43 lines
1.5 KiB
C++
43 lines
1.5 KiB
C++
#include "flang/Evaluate/type.h"
|
|
#include "flang/Testing/testing.h"
|
|
#include <cstdio>
|
|
|
|
template <int KIND> void testKind() {
|
|
using Type =
|
|
Fortran::evaluate::Type<Fortran::common::TypeCategory::Logical, KIND>;
|
|
TEST(Fortran::evaluate::IsSpecificIntrinsicType<Type>);
|
|
TEST(Type::category == Fortran::common::TypeCategory::Logical);
|
|
TEST(Type::kind == KIND);
|
|
using Value = Fortran::evaluate::Scalar<Type>;
|
|
MATCH(8 * KIND, Value::bits);
|
|
TEST(!Value{}.IsTrue());
|
|
TEST(!Value{false}.IsTrue());
|
|
TEST(Value{true}.IsTrue());
|
|
TEST(Value{false}.NOT().IsTrue());
|
|
TEST(!Value{true}.NOT().IsTrue());
|
|
TEST(!Value{false}.AND(Value{false}).IsTrue());
|
|
TEST(!Value{false}.AND(Value{true}).IsTrue());
|
|
TEST(!Value{true}.AND(Value{false}).IsTrue());
|
|
TEST(Value{true}.AND(Value{true}).IsTrue());
|
|
TEST(!Value{false}.OR(Value{false}).IsTrue());
|
|
TEST(Value{false}.OR(Value{true}).IsTrue());
|
|
TEST(Value{true}.OR(Value{false}).IsTrue());
|
|
TEST(Value{true}.OR(Value{true}).IsTrue());
|
|
TEST(Value{false}.EQV(Value{false}).IsTrue());
|
|
TEST(!Value{false}.EQV(Value{true}).IsTrue());
|
|
TEST(!Value{true}.EQV(Value{false}).IsTrue());
|
|
TEST(Value{true}.EQV(Value{true}).IsTrue());
|
|
TEST(!Value{false}.NEQV(Value{false}).IsTrue());
|
|
TEST(Value{false}.NEQV(Value{true}).IsTrue());
|
|
TEST(Value{true}.NEQV(Value{false}).IsTrue());
|
|
TEST(!Value{true}.NEQV(Value{true}).IsTrue());
|
|
}
|
|
|
|
int main() {
|
|
testKind<1>();
|
|
testKind<2>();
|
|
testKind<4>();
|
|
testKind<8>();
|
|
return testing::Complete();
|
|
}
|