test: Add Build() method for tests using ast::Builder
This separates out the usage of the built module from the construction of the module.
Previously, we'd happily interleave generator testing with module construction statements. Once the AST / Program is made immutable, this will no longer be possible.
Bug: tint:390
Change-Id: Ib4538228e93ca816f5bb796d024f021116609213
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/38360
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Commit-Queue: Ben Clayton <bclayton@google.com>
diff --git a/src/writer/msl/generator_impl_test.cc b/src/writer/msl/generator_impl_test.cc
index 69de899..42c1514 100644
--- a/src/writer/msl/generator_impl_test.cc
+++ b/src/writer/msl/generator_impl_test.cc
@@ -55,6 +55,8 @@
});
mod->AddFunction(func);
+ GeneratorImpl& gen = Build();
+
ASSERT_TRUE(gen.Generate()) << gen.error();
EXPECT_EQ(gen.result(), R"(#include <metal_stdlib>
@@ -66,17 +68,24 @@
}
TEST_F(MslGeneratorImplTest, InputStructName) {
+ GeneratorImpl& gen = Build();
+
ASSERT_EQ(gen.generate_name("func_main_in"), "func_main_in");
}
TEST_F(MslGeneratorImplTest, InputStructName_ConflictWithExisting) {
+ GeneratorImpl& gen = Build();
+
gen.namer_for_testing()->NameFor("func_main_out");
ASSERT_EQ(gen.generate_name("func_main_out"), "func_main_out_0");
}
TEST_F(MslGeneratorImplTest, NameConflictWith_InputStructName) {
+ auto* ident = Expr("func_main_in");
+ GeneratorImpl& gen = Build();
+
ASSERT_EQ(gen.generate_name("func_main_in"), "func_main_in");
- ASSERT_TRUE(gen.EmitIdentifier(Expr("func_main_in")));
+ ASSERT_TRUE(gen.EmitIdentifier(ident));
EXPECT_EQ(gen.result(), "func_main_in_0");
}
@@ -92,6 +101,8 @@
TEST_P(MslBuiltinConversionTest, Emit) {
auto params = GetParam();
+ GeneratorImpl& gen = Build();
+
EXPECT_EQ(gen.builtin_to_attribute(params.builtin),
std::string(params.attribute_name));
}
@@ -113,31 +124,45 @@
TEST_F(MslGeneratorImplTest, calculate_alignment_size_alias) {
auto* alias = ty.alias("a", ty.f32);
+ GeneratorImpl& gen = Build();
+
EXPECT_EQ(4u, gen.calculate_alignment_size(alias));
}
TEST_F(MslGeneratorImplTest, calculate_alignment_size_array) {
+ GeneratorImpl& gen = Build();
+
EXPECT_EQ(4u * 4u, gen.calculate_alignment_size(ty.array<f32, 4>()));
}
TEST_F(MslGeneratorImplTest, calculate_alignment_size_bool) {
+ GeneratorImpl& gen = Build();
+
EXPECT_EQ(1u, gen.calculate_alignment_size(ty.bool_));
}
TEST_F(MslGeneratorImplTest, calculate_alignment_size_f32) {
+ GeneratorImpl& gen = Build();
+
EXPECT_EQ(4u, gen.calculate_alignment_size(ty.f32));
}
TEST_F(MslGeneratorImplTest, calculate_alignment_size_i32) {
+ GeneratorImpl& gen = Build();
+
EXPECT_EQ(4u, gen.calculate_alignment_size(ty.i32));
}
TEST_F(MslGeneratorImplTest, calculate_alignment_size_matrix) {
+ GeneratorImpl& gen = Build();
+
EXPECT_EQ(4u * 3u * 2u, gen.calculate_alignment_size(ty.mat3x2<f32>()));
}
TEST_F(MslGeneratorImplTest, calculate_alignment_size_pointer) {
type::Pointer ptr(ty.bool_, ast::StorageClass::kPrivate);
+ GeneratorImpl& gen = Build();
+
EXPECT_EQ(0u, gen.calculate_alignment_size(&ptr));
}
@@ -149,6 +174,9 @@
ast::StructDecorationList{});
auto* s = ty.struct_("S", str);
+
+ GeneratorImpl& gen = Build();
+
EXPECT_EQ(132u, gen.calculate_alignment_size(s));
}
@@ -168,10 +196,15 @@
ast::StructDecorationList{});
auto* outer_s = ty.struct_("Outer", outer_str);
+
+ GeneratorImpl& gen = Build();
+
EXPECT_EQ(80u, gen.calculate_alignment_size(outer_s));
}
TEST_F(MslGeneratorImplTest, calculate_alignment_size_u32) {
+ GeneratorImpl& gen = Build();
+
EXPECT_EQ(4u, gen.calculate_alignment_size(ty.u32));
}
@@ -188,6 +221,8 @@
auto param = GetParam();
type::Vector vec(ty.bool_, param.elements);
+ GeneratorImpl& gen = Build();
+
EXPECT_EQ(param.byte_size, gen.calculate_alignment_size(&vec));
}
INSTANTIATE_TEST_SUITE_P(MslGeneratorImplTest,
@@ -201,6 +236,9 @@
auto param = GetParam();
type::Vector vec(ty.i32, param.elements);
+
+ GeneratorImpl& gen = Build();
+
EXPECT_EQ(param.byte_size, gen.calculate_alignment_size(&vec));
}
INSTANTIATE_TEST_SUITE_P(MslGeneratorImplTest,
@@ -214,6 +252,8 @@
auto param = GetParam();
type::Vector vec(ty.u32, param.elements);
+ GeneratorImpl& gen = Build();
+
EXPECT_EQ(param.byte_size, gen.calculate_alignment_size(&vec));
}
INSTANTIATE_TEST_SUITE_P(MslGeneratorImplTest,
@@ -227,6 +267,8 @@
auto param = GetParam();
type::Vector vec(ty.f32, param.elements);
+ GeneratorImpl& gen = Build();
+
EXPECT_EQ(param.byte_size, gen.calculate_alignment_size(&vec));
}
INSTANTIATE_TEST_SUITE_P(MslGeneratorImplTest,