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