1cf6f2175SMarkus Böck //===- AdaptorTest.cpp - Adaptor unit tests -------------------------------===//
2cf6f2175SMarkus Böck //
3cf6f2175SMarkus Böck // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4cf6f2175SMarkus Böck // See https://llvm.org/LICENSE.txt for license information.
5cf6f2175SMarkus Böck // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6cf6f2175SMarkus Böck //
7cf6f2175SMarkus Böck //===----------------------------------------------------------------------===//
8cf6f2175SMarkus Böck
9cf6f2175SMarkus Böck #include "../../test/lib/Dialect/Test/TestDialect.h"
10*e95e94adSJeff Niu #include "../../test/lib/Dialect/Test/TestOps.h"
118a7a7137SAlex Zinenko #include "../../test/lib/Dialect/Test/TestOpsSyntax.h"
12cf6f2175SMarkus Böck #include "gmock/gmock.h"
13cf6f2175SMarkus Böck #include "gtest/gtest.h"
14cf6f2175SMarkus Böck
15cf6f2175SMarkus Böck using namespace llvm;
16cf6f2175SMarkus Böck using namespace mlir;
17cf6f2175SMarkus Böck using namespace test;
18cf6f2175SMarkus Böck
19cf6f2175SMarkus Böck using testing::ElementsAre;
20cf6f2175SMarkus Böck
TEST(Adaptor,GenericAdaptorsOperandAccess)21cf6f2175SMarkus Böck TEST(Adaptor, GenericAdaptorsOperandAccess) {
22cf6f2175SMarkus Böck MLIRContext context;
23cf6f2175SMarkus Böck context.loadDialect<test::TestDialect>();
24cf6f2175SMarkus Böck Builder builder(&context);
25cf6f2175SMarkus Böck
26cf6f2175SMarkus Böck // Has normal and Variadic arguments.
27cf6f2175SMarkus Böck MixedNormalVariadicOperandOp::FoldAdaptor a({});
28cf6f2175SMarkus Böck {
29cf6f2175SMarkus Böck SmallVector<int> v = {0, 1, 2, 3, 4};
30cf6f2175SMarkus Böck MixedNormalVariadicOperandOp::GenericAdaptor<ArrayRef<int>> b(v);
31cf6f2175SMarkus Böck EXPECT_THAT(b.getInput1(), ElementsAre(0, 1));
32cf6f2175SMarkus Böck EXPECT_EQ(b.getInput2(), 2);
33cf6f2175SMarkus Böck EXPECT_THAT(b.getInput3(), ElementsAre(3, 4));
34cf6f2175SMarkus Böck }
35cf6f2175SMarkus Böck
36cf6f2175SMarkus Böck // Has optional arguments.
37cf6f2175SMarkus Böck OIListSimple::FoldAdaptor c({}, nullptr);
38cf6f2175SMarkus Böck {
39cf6f2175SMarkus Böck // Optional arguments return the default constructed value if not present.
40cf6f2175SMarkus Böck // Using optional instead of plain int here to differentiate absence of
41cf6f2175SMarkus Böck // value from the value 0.
42cf6f2175SMarkus Böck SmallVector<std::optional<int>> v = {0, 4};
435e118f93SMehdi Amini OIListSimple::Properties prop;
44363b6559SMehdi Amini prop.operandSegmentSizes = {1, 0, 1};
455e118f93SMehdi Amini OIListSimple::GenericAdaptor<ArrayRef<std::optional<int>>> d(v, {}, prop,
465e118f93SMehdi Amini {});
47cf6f2175SMarkus Böck EXPECT_EQ(d.getArg0(), 0);
48cf6f2175SMarkus Böck EXPECT_EQ(d.getArg1(), std::nullopt);
49cf6f2175SMarkus Böck EXPECT_EQ(d.getArg2(), 4);
50fe5370ddSTobias Gysi
51fe5370ddSTobias Gysi // Check the property comparison operator.
52fe5370ddSTobias Gysi OIListSimple::Properties equivalentProp = {1, 0, 1};
53fe5370ddSTobias Gysi OIListSimple::Properties differentProp = {0, 0, 1};
54fe5370ddSTobias Gysi EXPECT_EQ(d.getProperties(), equivalentProp);
55fe5370ddSTobias Gysi EXPECT_NE(d.getProperties(), differentProp);
56cf6f2175SMarkus Böck }
57cf6f2175SMarkus Böck
58cf6f2175SMarkus Böck // Has VariadicOfVariadic arguments.
59cf6f2175SMarkus Böck FormatVariadicOfVariadicOperand::FoldAdaptor e({});
60cf6f2175SMarkus Böck {
61cf6f2175SMarkus Böck SmallVector<int> v = {0, 1, 2, 3, 4};
625e118f93SMehdi Amini FormatVariadicOfVariadicOperand::Properties prop;
635e118f93SMehdi Amini prop.operand_segments = builder.getDenseI32ArrayAttr({3, 2, 0});
645e118f93SMehdi Amini FormatVariadicOfVariadicOperand::GenericAdaptor<ArrayRef<int>> f(v, {},
655e118f93SMehdi Amini prop, {});
66cf6f2175SMarkus Böck SmallVector<ArrayRef<int>> operand = f.getOperand();
67cf6f2175SMarkus Böck ASSERT_EQ(operand.size(), (std::size_t)3);
68cf6f2175SMarkus Böck EXPECT_THAT(operand[0], ElementsAre(0, 1, 2));
69cf6f2175SMarkus Böck EXPECT_THAT(operand[1], ElementsAre(3, 4));
70cf6f2175SMarkus Böck EXPECT_THAT(operand[2], ElementsAre());
71cf6f2175SMarkus Böck }
72cf6f2175SMarkus Böck }
73