1 #include "testing.h"
2 #include "flang/Evaluate/type.h"
3 #include <cstdio>
4 
testKind()5 template <int KIND> void testKind() {
6   using Type =
7       Fortran::evaluate::Type<Fortran::common::TypeCategory::Logical, KIND>;
8   TEST(Fortran::evaluate::IsSpecificIntrinsicType<Type>);
9   TEST(Type::category == Fortran::common::TypeCategory::Logical);
10   TEST(Type::kind == KIND);
11   using Value = Fortran::evaluate::Scalar<Type>;
12   MATCH(8 * KIND, Value::bits);
13   TEST(!Value{}.IsTrue());
14   TEST(!Value{false}.IsTrue());
15   TEST(Value{true}.IsTrue());
16   TEST(Value{false}.NOT().IsTrue());
17   TEST(!Value{true}.NOT().IsTrue());
18   TEST(!Value{false}.AND(Value{false}).IsTrue());
19   TEST(!Value{false}.AND(Value{true}).IsTrue());
20   TEST(!Value{true}.AND(Value{false}).IsTrue());
21   TEST(Value{true}.AND(Value{true}).IsTrue());
22   TEST(!Value{false}.OR(Value{false}).IsTrue());
23   TEST(Value{false}.OR(Value{true}).IsTrue());
24   TEST(Value{true}.OR(Value{false}).IsTrue());
25   TEST(Value{true}.OR(Value{true}).IsTrue());
26   TEST(Value{false}.EQV(Value{false}).IsTrue());
27   TEST(!Value{false}.EQV(Value{true}).IsTrue());
28   TEST(!Value{true}.EQV(Value{false}).IsTrue());
29   TEST(Value{true}.EQV(Value{true}).IsTrue());
30   TEST(!Value{false}.NEQV(Value{false}).IsTrue());
31   TEST(Value{false}.NEQV(Value{true}).IsTrue());
32   TEST(Value{true}.NEQV(Value{false}).IsTrue());
33   TEST(!Value{true}.NEQV(Value{true}).IsTrue());
34 }
35 
main()36 int main() {
37   testKind<1>();
38   testKind<2>();
39   testKind<4>();
40   testKind<8>();
41   return testing::Complete();
42 }
43