76 lines · cpp
1//===- ResourceTest.cpp -----------------------------------------*- C++ -*-===//2//3// This file is licensed 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 "../../test/lib/Dialect/Test/TestAttributes.h"10#include "../../test/lib/Dialect/Test/TestDialect.h"11#include "mlir/Parser/Parser.h"12 13#include "gmock/gmock.h"14 15using namespace mlir;16 17namespace {18TEST(MLIRParser, ResourceKeyConflict) {19 std::string moduleStr = R"mlir(20 "test.use1"() {attr = #test.e1di64_elements<blob1> : tensor<3xi64> } : () -> ()21 22 {-#23 dialect_resources: {24 test: {25 blob1: "0x08000000010000000000000002000000000000000300000000000000"26 }27 }28 #-}29 )mlir";30 std::string moduleStr2 = R"mlir(31 "test.use2"() {attr = #test.e1di64_elements<blob1> : tensor<3xi64> } : () -> ()32 33 {-#34 dialect_resources: {35 test: {36 blob1: "0x08000000040000000000000005000000000000000600000000000000"37 }38 }39 #-}40 )mlir";41 42 MLIRContext context;43 context.loadDialect<test::TestDialect>();44 45 // Parse both modules into the same context so that we ensure the conflicting46 // resources have been loaded.47 OwningOpRef<ModuleOp> module1 =48 parseSourceString<ModuleOp>(moduleStr, &context);49 OwningOpRef<ModuleOp> module2 =50 parseSourceString<ModuleOp>(moduleStr2, &context);51 ASSERT_TRUE(module1 && module2);52 53 // Merge the two modules so that we can test printing the remapped resources.54 Block *block = module1->getBody();55 block->getOperations().splice(block->end(),56 module2->getBody()->getOperations());57 58 // Check that conflicting resources were remapped.59 std::string outputStr;60 {61 llvm::raw_string_ostream os(outputStr);62 module1->print(os);63 }64 StringRef output(outputStr);65 EXPECT_TRUE(66 output.contains("\"test.use1\"() {attr = #test.e1di64_elements<blob1>"));67 EXPECT_TRUE(output.contains(68 "blob1: \"0x08000000010000000000000002000000000000000300000000000000\""));69 EXPECT_TRUE(output.contains(70 "\"test.use2\"() {attr = #test.e1di64_elements<blob1_1>"));71 EXPECT_TRUE(output.contains(72 "blob1_1: "73 "\"0x08000000040000000000000005000000000000000600000000000000\""));74}75} // namespace76