brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · 30f6642 Raw
72 lines · cpp
1//===- TypeTest.cpp - Type API unit tests ---------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "mlir/IR/BuiltinTypes.h"10#include "mlir/IR/Dialect.h"11#include "mlir/IR/Types.h"12#include "mlir/IR/Value.h"13#include "gtest/gtest.h"14 15using namespace mlir;16 17/// Mock implementations of a Type hierarchy18struct LeafType;19 20struct MiddleType : Type::TypeBase<MiddleType, Type, TypeStorage> {21  using Base::Base;22 23  static constexpr StringLiteral name = "test.middle";24 25  static bool classof(Type ty) {26    return ty.getTypeID() == TypeID::get<LeafType>() || Base::classof(ty);27  }28};29 30struct LeafType : Type::TypeBase<LeafType, MiddleType, TypeStorage> {31  using Base::Base;32 33  static constexpr StringLiteral name = "test.leaf";34};35 36struct FakeDialect : Dialect {37  FakeDialect(MLIRContext *context)38      : Dialect(getDialectNamespace(), context, TypeID::get<FakeDialect>()) {39    addTypes<MiddleType, LeafType>();40  }41  static constexpr ::llvm::StringLiteral getDialectNamespace() {42    return ::llvm::StringLiteral("fake");43  }44};45 46TEST(Type, Casting) {47  MLIRContext ctx;48  ctx.loadDialect<FakeDialect>();49 50  Type intTy = IntegerType::get(&ctx, 8);51  Type nullTy;52  MiddleType middleTy = MiddleType::get(&ctx);53  MiddleType leafTy = LeafType::get(&ctx);54  Type leaf2Ty = LeafType::get(&ctx);55 56  EXPECT_TRUE(isa<IntegerType>(intTy));57  EXPECT_FALSE(isa<FunctionType>(intTy));58  EXPECT_FALSE(isa_and_present<IntegerType>(nullTy));59  EXPECT_TRUE(isa<MiddleType>(middleTy));60  EXPECT_FALSE(isa<LeafType>(middleTy));61  EXPECT_TRUE(isa<MiddleType>(leafTy));62  EXPECT_TRUE(isa<LeafType>(leaf2Ty));63  EXPECT_TRUE(isa<LeafType>(leafTy));64 65  EXPECT_TRUE(static_cast<bool>(dyn_cast<IntegerType>(intTy)));66  EXPECT_FALSE(static_cast<bool>(dyn_cast<FunctionType>(intTy)));67  EXPECT_FALSE(static_cast<bool>(cast_if_present<FunctionType>(nullTy)));68  EXPECT_FALSE(static_cast<bool>(dyn_cast_if_present<IntegerType>(nullTy)));69 70  EXPECT_EQ(8u, cast<IntegerType>(intTy).getWidth());71}72