//===- LocationTest.cpp - unit tests for affine map API -------------------===// // // Part of the LLVM Project, 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 "mlir/IR/Location.h" #include "mlir/IR/Builders.h" #include "gtest/gtest.h" using namespace mlir; // Check that we only walk *locations* and not non-location attributes. TEST(LocationTest, Walk) { MLIRContext ctx; Builder builder(&ctx); BoolAttr trueAttr = builder.getBoolAttr(true); Location loc1 = FileLineColLoc::get(builder.getStringAttr("foo"), 1, 2); Location loc2 = FileLineColLoc::get(builder.getStringAttr("foo"), 3, 4); Location fused = builder.getFusedLoc({loc1, loc2}, trueAttr); SmallVector visited; fused->walk([&](Location l) { visited.push_back(LocationAttr(l)); return WalkResult::advance(); }); EXPECT_EQ(llvm::ArrayRef(visited), ArrayRef({fused, loc1, loc2})); } // Check that we skip location attrs nested under a non-location attr. TEST(LocationTest, SkipNested) { MLIRContext ctx; Builder builder(&ctx); Location loc1 = FileLineColLoc::get(builder.getStringAttr("foo"), 1, 2); Location loc2 = FileLineColLoc::get(builder.getStringAttr("foo"), 3, 4); Location loc3 = FileLineColLoc::get(builder.getStringAttr("bar"), 1, 2); Location loc4 = FileLineColLoc::get(builder.getStringAttr("bar"), 3, 4); ArrayAttr arr = builder.getArrayAttr({loc3, loc4}); Location fused = builder.getFusedLoc({loc1, loc2}, arr); SmallVector visited; fused->walk([&](Location l) { visited.push_back(LocationAttr(l)); return WalkResult::advance(); }); EXPECT_EQ(llvm::ArrayRef(visited), ArrayRef({fused, loc1, loc2})); }