brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.5 KiB · 8e0d879 Raw
195 lines · cpp
1//===- KindMappingTest.cpp ------------------------------------------------===//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 "flang/Optimizer/Dialect/Support/KindMapping.h"10#include "gtest/gtest.h"11#include <string>12 13using namespace fir;14namespace llvm {15struct fltSemantics;16} // namespace llvm17 18namespace mlir {19class MLIRContext;20} // namespace mlir21 22using Bitsize = fir::KindMapping::Bitsize;23using LLVMTypeID = fir::KindMapping::LLVMTypeID;24 25struct DefaultStringTests : public testing::Test {26public:27  void SetUp() { defaultString = new KindMapping(context); }28  void TearDown() { delete defaultString; }29 30  KindMapping *defaultString{};31  mlir::MLIRContext *context{};32};33 34struct CommandLineStringTests : public testing::Test {35public:36  void SetUp() {37    commandLineString = new KindMapping(context,38        "i10:80,l3:24,a1:8,r54:Double,c20:X86_FP80,r11:PPC_FP128,"39        "r12:FP128,r13:X86_FP80,r14:Double,r15:Float,r16:Half,r23:BFloat");40    clStringConflict =41        new KindMapping(context, "i10:80,i10:40,r54:Double,r54:X86_FP80");42  }43  void TearDown() {44    delete commandLineString;45    delete clStringConflict;46  }47 48  KindMapping *commandLineString{};49  KindMapping *clStringConflict{};50  mlir::MLIRContext *context{};51};52 53struct KindDefaultsTests : public testing::Test {54public:55  void SetUp() {56    defaultDefaultKinds = new KindMapping(context);57    overrideDefaultKinds =58        new KindMapping(context, {20, 121, 32, 133, 44, 145});59  }60  void TearDown() {61    delete defaultDefaultKinds;62    delete overrideDefaultKinds;63  }64 65  mlir::MLIRContext *context{};66  KindMapping *defaultDefaultKinds{};67  KindMapping *overrideDefaultKinds{};68};69 70TEST_F(DefaultStringTests, getIntegerBitsizeTest) {71  EXPECT_EQ(defaultString->getIntegerBitsize(10), 80u);72  EXPECT_EQ(defaultString->getIntegerBitsize(0), 0u);73}74 75TEST_F(DefaultStringTests, getCharacterBitsizeTest) {76  EXPECT_EQ(defaultString->getCharacterBitsize(10), 80u);77  EXPECT_EQ(defaultString->getCharacterBitsize(0), 0u);78}79 80TEST_F(DefaultStringTests, getLogicalBitsizeTest) {81  EXPECT_EQ(defaultString->getLogicalBitsize(10), 80u);82  // Unsigned values are expected83  std::string actual = std::to_string(defaultString->getLogicalBitsize(-10));84  std::string expect = "-80";85  EXPECT_NE(actual, expect);86}87 88TEST_F(DefaultStringTests, getRealTypeIDTest) {89  EXPECT_EQ(defaultString->getRealTypeID(2), LLVMTypeID::HalfTyID);90  EXPECT_EQ(defaultString->getRealTypeID(3), LLVMTypeID::BFloatTyID);91  EXPECT_EQ(defaultString->getRealTypeID(4), LLVMTypeID::FloatTyID);92  EXPECT_EQ(defaultString->getRealTypeID(8), LLVMTypeID::DoubleTyID);93  EXPECT_EQ(defaultString->getRealTypeID(10), LLVMTypeID::X86_FP80TyID);94  EXPECT_EQ(defaultString->getRealTypeID(16), LLVMTypeID::FP128TyID);95  // Default cases96  EXPECT_EQ(defaultString->getRealTypeID(-1), LLVMTypeID::FloatTyID);97  EXPECT_EQ(defaultString->getRealTypeID(1), LLVMTypeID::FloatTyID);98}99 100TEST_F(DefaultStringTests, getComplexTypeIDTest) {101  EXPECT_EQ(defaultString->getComplexTypeID(2), LLVMTypeID::HalfTyID);102  EXPECT_EQ(defaultString->getComplexTypeID(3), LLVMTypeID::BFloatTyID);103  EXPECT_EQ(defaultString->getComplexTypeID(4), LLVMTypeID::FloatTyID);104  EXPECT_EQ(defaultString->getComplexTypeID(8), LLVMTypeID::DoubleTyID);105  EXPECT_EQ(defaultString->getComplexTypeID(10), LLVMTypeID::X86_FP80TyID);106  EXPECT_EQ(defaultString->getComplexTypeID(16), LLVMTypeID::FP128TyID);107  // Default cases108  EXPECT_EQ(defaultString->getComplexTypeID(-1), LLVMTypeID::FloatTyID);109  EXPECT_EQ(defaultString->getComplexTypeID(1), LLVMTypeID::FloatTyID);110}111 112TEST_F(DefaultStringTests, getFloatSemanticsTest) {113  EXPECT_EQ(&defaultString->getFloatSemantics(2), &llvm::APFloat::IEEEhalf());114  EXPECT_EQ(&defaultString->getFloatSemantics(3), &llvm::APFloat::BFloat());115  EXPECT_EQ(&defaultString->getFloatSemantics(4), &llvm::APFloat::IEEEsingle());116  EXPECT_EQ(&defaultString->getFloatSemantics(8), &llvm::APFloat::IEEEdouble());117  EXPECT_EQ(&defaultString->getFloatSemantics(10),118      &llvm::APFloat::x87DoubleExtended());119  EXPECT_EQ(&defaultString->getFloatSemantics(16), &llvm::APFloat::IEEEquad());120 121  // Default cases122  EXPECT_EQ(123      &defaultString->getFloatSemantics(-1), &llvm::APFloat::IEEEsingle());124  EXPECT_EQ(&defaultString->getFloatSemantics(1), &llvm::APFloat::IEEEsingle());125}126 127TEST_F(CommandLineStringTests, getIntegerBitsizeTest) {128  // KEY is present in map.129  EXPECT_EQ(commandLineString->getIntegerBitsize(10), 80u);130  EXPECT_EQ(commandLineString->getCharacterBitsize(1), 8u);131  EXPECT_EQ(commandLineString->getLogicalBitsize(3), 24u);132  EXPECT_EQ(commandLineString->getComplexTypeID(20), LLVMTypeID::X86_FP80TyID);133  EXPECT_EQ(commandLineString->getRealTypeID(54), LLVMTypeID::DoubleTyID);134  EXPECT_EQ(commandLineString->getRealTypeID(11), LLVMTypeID::PPC_FP128TyID);135  EXPECT_EQ(&commandLineString->getFloatSemantics(11),136      &llvm::APFloat::PPCDoubleDouble());137  EXPECT_EQ(138      &commandLineString->getFloatSemantics(12), &llvm::APFloat::IEEEquad());139  EXPECT_EQ(&commandLineString->getFloatSemantics(13),140      &llvm::APFloat::x87DoubleExtended());141  EXPECT_EQ(142      &commandLineString->getFloatSemantics(14), &llvm::APFloat::IEEEdouble());143  EXPECT_EQ(144      &commandLineString->getFloatSemantics(15), &llvm::APFloat::IEEEsingle());145  EXPECT_EQ(146      &commandLineString->getFloatSemantics(16), &llvm::APFloat::IEEEhalf());147  EXPECT_EQ(148      &commandLineString->getFloatSemantics(23), &llvm::APFloat::BFloat());149 150  // Converts to default case151  EXPECT_EQ(152      &commandLineString->getFloatSemantics(20), &llvm::APFloat::IEEEsingle());153 154  // KEY is absent from map, Default values are expected.155  EXPECT_EQ(commandLineString->getIntegerBitsize(9), 72u);156  EXPECT_EQ(commandLineString->getCharacterBitsize(9), 72u);157  EXPECT_EQ(commandLineString->getLogicalBitsize(9), 72u);158  EXPECT_EQ(commandLineString->getComplexTypeID(9), LLVMTypeID::FloatTyID);159  EXPECT_EQ(commandLineString->getRealTypeID(9), LLVMTypeID::FloatTyID);160 161  // KEY repeats in map.162  EXPECT_NE(clStringConflict->getIntegerBitsize(10), 80u);163  EXPECT_NE(clStringConflict->getRealTypeID(10), LLVMTypeID::DoubleTyID);164}165 166TEST(KindMappingDeathTests, mapTest) {167  mlir::MLIRContext *context{};168  // Catch parsing errors169  ASSERT_DEATH(new KindMapping(context, "r10:Double,r20:Doubl"), "");170  ASSERT_DEATH(new KindMapping(context, "10:Double"), "");171  ASSERT_DEATH(new KindMapping(context, "rr:Double"), "");172  ASSERT_DEATH(new KindMapping(context, "rr:"), "");173  ASSERT_DEATH(new KindMapping(context, "rr:Double MoreContent"), "");174  // length of 'size' > 10175  ASSERT_DEATH(new KindMapping(context, "i11111111111:10"), "");176}177 178TEST_F(KindDefaultsTests, getIntegerBitsizeTest) {179  EXPECT_EQ(defaultDefaultKinds->defaultCharacterKind(), 1u);180  EXPECT_EQ(defaultDefaultKinds->defaultComplexKind(), 4u);181  EXPECT_EQ(defaultDefaultKinds->defaultDoubleKind(), 8u);182  EXPECT_EQ(defaultDefaultKinds->defaultIntegerKind(), 4u);183  EXPECT_EQ(defaultDefaultKinds->defaultLogicalKind(), 4u);184  EXPECT_EQ(defaultDefaultKinds->defaultRealKind(), 4u);185 186  EXPECT_EQ(overrideDefaultKinds->defaultCharacterKind(), 20u);187  EXPECT_EQ(overrideDefaultKinds->defaultComplexKind(), 121u);188  EXPECT_EQ(overrideDefaultKinds->defaultDoubleKind(), 32u);189  EXPECT_EQ(overrideDefaultKinds->defaultIntegerKind(), 133u);190  EXPECT_EQ(overrideDefaultKinds->defaultLogicalKind(), 44u);191  EXPECT_EQ(overrideDefaultKinds->defaultRealKind(), 145u);192}193 194// main() from gtest_main195