llvm-project/mlir/unittests/Parser/ResourceTest.cpp

76 lines
2.4 KiB
C++

//===- ResourceTest.cpp -----------------------------------------*- C++ -*-===//
//
// This file is licensed under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#include "../../test/lib/Dialect/Test/TestAttributes.h"
#include "../../test/lib/Dialect/Test/TestDialect.h"
#include "mlir/Parser/Parser.h"
#include "gmock/gmock.h"
using namespace mlir;
namespace {
TEST(MLIRParser, ResourceKeyConflict) {
std::string moduleStr = R"mlir(
"test.use1"() {attr = #test.e1di64_elements<blob1> : tensor<3xi64> } : () -> ()
{-#
dialect_resources: {
test: {
blob1: "0x08000000010000000000000002000000000000000300000000000000"
}
}
#-}
)mlir";
std::string moduleStr2 = R"mlir(
"test.use2"() {attr = #test.e1di64_elements<blob1> : tensor<3xi64> } : () -> ()
{-#
dialect_resources: {
test: {
blob1: "0x08000000040000000000000005000000000000000600000000000000"
}
}
#-}
)mlir";
MLIRContext context;
context.loadDialect<test::TestDialect>();
// Parse both modules into the same context so that we ensure the conflicting
// resources have been loaded.
OwningOpRef<ModuleOp> module1 =
parseSourceString<ModuleOp>(moduleStr, &context);
OwningOpRef<ModuleOp> module2 =
parseSourceString<ModuleOp>(moduleStr2, &context);
ASSERT_TRUE(module1 && module2);
// Merge the two modules so that we can test printing the remapped resources.
Block *block = module1->getBody();
block->getOperations().splice(block->end(),
module2->getBody()->getOperations());
// Check that conflicting resources were remapped.
std::string outputStr;
{
llvm::raw_string_ostream os(outputStr);
module1->print(os);
}
StringRef output(outputStr);
EXPECT_TRUE(
output.contains("\"test.use1\"() {attr = #test.e1di64_elements<blob1>"));
EXPECT_TRUE(output.contains(
"blob1: \"0x08000000010000000000000002000000000000000300000000000000\""));
EXPECT_TRUE(output.contains(
"\"test.use2\"() {attr = #test.e1di64_elements<blob1_1>"));
EXPECT_TRUE(output.contains(
"blob1_1: "
"\"0x08000000040000000000000005000000000000000600000000000000\""));
}
} // namespace