File: ResourceTest.cpp

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (75 lines) | stat: -rw-r--r-- 2,440 bytes parent folder | download | duplicates (15)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
//===- 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