tint/sem: Add tests for IsConstructable

Change-Id: Id0eb03f2f8fd1053b62d3238214fc982f02a960f
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/106223
Reviewed-by: Dan Sinclair <dsinclair@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
This commit is contained in:
Ben Clayton 2022-10-25 13:27:49 +00:00 committed by Dawn LUCI CQ
parent 95dd428c75
commit f17497cb6d
2 changed files with 43 additions and 0 deletions

View File

@ -125,5 +125,15 @@ TEST_F(ArrayTest, FriendlyNameStaticSizedNonImplicitStride) {
EXPECT_EQ(arr->FriendlyName(Symbols()), "@stride(8) array<i32, 5>");
}
TEST_F(ArrayTest, IsConstructable) {
auto* fixed_sized = create<Array>(create<U32>(), ConstantArrayCount{2u}, 4u, 8u, 32u, 16u);
auto* override_sized = create<Array>(create<U32>(), OverrideArrayCount{}, 4u, 8u, 32u, 16u);
auto* runtime_sized = create<Array>(create<U32>(), RuntimeArrayCount{}, 4u, 8u, 32u, 16u);
EXPECT_TRUE(fixed_sized->IsConstructible());
EXPECT_FALSE(override_sized->IsConstructible());
EXPECT_FALSE(runtime_sized->IsConstructible());
}
} // namespace
} // namespace tint::sem

View File

@ -124,5 +124,38 @@ TEST_F(StructTest, Location) {
EXPECT_FALSE(sem->Members()[1]->Location().has_value());
}
TEST_F(StructTest, IsConstructable) {
auto* inner = //
Structure("Inner", utils::Vector{
Member("a", ty.i32()),
Member("b", ty.u32()),
Member("c", ty.f32()),
Member("d", ty.vec3<f32>()),
Member("e", ty.mat4x2<f32>()),
});
auto* outer = Structure("Outer", utils::Vector{
Member("inner", ty.type_name("Inner")),
Member("a", ty.i32()),
});
auto* outer_runtime_sized_array =
Structure("OuterRuntimeSizedArray", utils::Vector{
Member("inner", ty.type_name("Inner")),
Member("a", ty.i32()),
Member("runtime_sized_array", ty.array<i32>()),
});
auto p = Build();
ASSERT_TRUE(p.IsValid()) << p.Diagnostics().str();
auto* sem_inner = p.Sem().Get(inner);
auto* sem_outer = p.Sem().Get(outer);
auto* sem_outer_runtime_sized_array = p.Sem().Get(outer_runtime_sized_array);
EXPECT_TRUE(sem_inner->IsConstructible());
EXPECT_TRUE(sem_outer->IsConstructible());
EXPECT_FALSE(sem_outer_runtime_sized_array->IsConstructible());
}
} // namespace
} // namespace tint::sem