[OM] Add test for nested lists in ListConcatOp evaluator. (#8452)

This is just adding a test that we can concatenate lists of lists and
return the right result in the Evaluator.
This commit is contained in:
Mike Urbach 2025-04-29 15:47:16 -06:00 committed by GitHub
parent a7dd12d59f
commit daf5c25691
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 67 additions and 0 deletions

View File

@ -1194,6 +1194,73 @@ TEST(EvaluatorTests, ListConcatField) {
.getValue());
}
TEST(EvaluatorTests, ListOfListConcat) {
StringRef mod = "om.class @ListOfListConcat() -> (result: "
" !om.list<!om.list<!om.string>>) {"
" %0 = om.constant \"foo\" : !om.string"
" %1 = om.constant \"bar\" : !om.string"
" %2 = om.constant \"baz\" : !om.string"
" %3 = om.constant \"qux\" : !om.string"
" %4 = om.list_create %0, %1 : !om.string"
" %5 = om.list_create %4 : !om.list<!om.string>"
" %6 = om.list_create %2, %3 : !om.string"
" %7 = om.list_create %6 : !om.list<!om.string>"
" %8 = om.list_concat %5, %7 : <!om.list<!om.string>>"
" om.class.fields %8 : !om.list<!om.list<!om.string>> "
"}";
DialectRegistry registry;
registry.insert<OMDialect>();
MLIRContext context(registry);
context.getOrLoadDialect<OMDialect>();
OwningOpRef<ModuleOp> owning =
parseSourceString<ModuleOp>(mod, ParserConfig(&context));
Evaluator evaluator(owning.release());
auto result =
evaluator.instantiate(StringAttr::get(&context, "ListOfListConcat"), {});
ASSERT_TRUE(succeeded(result));
auto fieldValue = llvm::cast<evaluator::ObjectValue>(result.value().get())
->getField("result")
.value();
auto finalList =
llvm::cast<evaluator::ListValue>(fieldValue.get())->getElements();
ASSERT_EQ(2U, finalList.size());
auto sublist0 =
llvm::cast<evaluator::ListValue>(finalList[0].get())->getElements();
ASSERT_EQ("foo", llvm::cast<evaluator::AttributeValue>(sublist0[0].get())
->getAs<StringAttr>()
.getValue()
.str());
ASSERT_EQ("bar", llvm::cast<evaluator::AttributeValue>(sublist0[1].get())
->getAs<StringAttr>()
.getValue()
.str());
auto sublist1 =
llvm::cast<evaluator::ListValue>(finalList[1].get())->getElements();
ASSERT_EQ("baz", llvm::cast<evaluator::AttributeValue>(sublist1[0].get())
->getAs<StringAttr>()
.getValue()
.str());
ASSERT_EQ("qux", llvm::cast<evaluator::AttributeValue>(sublist1[1].get())
->getAs<StringAttr>()
.getValue()
.str());
}
TEST(EvaluatorTests, TupleGet) {
StringRef mod = "om.class @Tuple() -> (val: !om.string) {"
" %int = om.constant 1 : i1"