Place the namer into the context object.
This CL moves the namer into the context object and makes it a parameter
to the various generators. The old constructor is maintained until we've
updated downstream repos.
Bug: tint:273
Change-Id: I49b2519c4250be21fb73374b16e7c702b727078f
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/32580
Commit-Queue: dan sinclair <dsinclair@chromium.org>
Reviewed-by: David Neto <dneto@google.com>
diff --git a/BUILD.gn b/BUILD.gn
index ebf5362..60f3b85 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -904,6 +904,7 @@
"src/writer/spirv/operand_test.cc",
"src/writer/spirv/spv_dump.cc",
"src/writer/spirv/spv_dump.h",
+ "src/writer/spirv/test_helper.h",
]
configs += [
@@ -1049,6 +1050,7 @@
"src/writer/wgsl/generator_impl_unary_op_test.cc",
"src/writer/wgsl/generator_impl_variable_decl_statement_test.cc",
"src/writer/wgsl/generator_impl_variable_test.cc",
+ "src/writer/wgsl/test_helper.h",
]
configs += [
@@ -1101,6 +1103,7 @@
"src/writer/msl/generator_impl_unary_op_test.cc",
"src/writer/msl/generator_impl_variable_decl_statement_test.cc",
"src/writer/msl/namer_test.cc",
+ "src/writer/msl/test_helper.h",
]
configs += [
diff --git a/include/tint/tint.h b/include/tint/tint.h
index a0ec913..e09537c 100644
--- a/include/tint/tint.h
+++ b/include/tint/tint.h
@@ -22,6 +22,7 @@
#include "src/context.h"
#include "src/diagnostic/printer.h"
#include "src/inspector/inspector.h"
+#include "src/namer.h"
#include "src/reader/reader.h"
#include "src/transform/bound_array_accessors_transform.h"
#include "src/transform/manager.h"
diff --git a/samples/main.cc b/samples/main.cc
index 53d490a..c6db485 100644
--- a/samples/main.cc
+++ b/samples/main.cc
@@ -418,7 +418,7 @@
options.format = Format::kSpvAsm;
}
- tint::Context ctx;
+ tint::Context ctx(std::make_unique<tint::NoopNamer>());
std::unique_ptr<tint::reader::Reader> reader;
std::unique_ptr<tint::Source::File> source_file;
@@ -532,25 +532,29 @@
#if TINT_BUILD_SPV_WRITER
if (options.format == Format::kSpirv || options.format == Format::kSpvAsm) {
- writer = std::make_unique<tint::writer::spirv::Generator>(std::move(mod));
+ writer =
+ std::make_unique<tint::writer::spirv::Generator>(&ctx, std::move(mod));
}
#endif // TINT_BUILD_SPV_WRITER
#if TINT_BUILD_WGSL_WRITER
if (options.format == Format::kWgsl) {
- writer = std::make_unique<tint::writer::wgsl::Generator>(std::move(mod));
+ writer =
+ std::make_unique<tint::writer::wgsl::Generator>(&ctx, std::move(mod));
}
#endif // TINT_BUILD_WGSL_WRITER
#if TINT_BUILD_MSL_WRITER
if (options.format == Format::kMsl) {
- writer = std::make_unique<tint::writer::msl::Generator>(std::move(mod));
+ writer =
+ std::make_unique<tint::writer::msl::Generator>(&ctx, std::move(mod));
}
#endif // TINT_BUILD_MSL_WRITER
#if TINT_BUILD_HLSL_WRITER
if (options.format == Format::kHlsl) {
- writer = std::make_unique<tint::writer::hlsl::Generator>(std::move(mod));
+ writer =
+ std::make_unique<tint::writer::hlsl::Generator>(&ctx, std::move(mod));
}
#endif // TINT_BUILD_HLSL_WRITER
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 0e579e5..630828d 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -568,6 +568,7 @@
writer/spirv/operand_test.cc
writer/spirv/spv_dump.cc
writer/spirv/spv_dump.h
+ writer/spirv/test_helper.h
)
endif()
@@ -599,6 +600,7 @@
writer/wgsl/generator_impl_unary_op_test.cc
writer/wgsl/generator_impl_variable_decl_statement_test.cc
writer/wgsl/generator_impl_variable_test.cc
+ writer/wgsl/test_helper.h
)
endif()
@@ -633,6 +635,7 @@
writer/msl/generator_impl_unary_op_test.cc
writer/msl/generator_impl_variable_decl_statement_test.cc
writer/msl/namer_test.cc
+ writer/msl/test_helper.h
)
endif()
diff --git a/src/context.cc b/src/context.cc
index 4285eb4..97cb16c 100644
--- a/src/context.cc
+++ b/src/context.cc
@@ -16,11 +16,14 @@
#include <utility>
+#include "src/namer.h"
#include "src/type_manager.h"
namespace tint {
-Context::Context() = default;
+Context::Context() : namer_(std::make_unique<HashingNamer>()) {}
+
+Context::Context(std::unique_ptr<Namer> namer) : namer_(std::move(namer)) {}
Context::~Context() = default;
diff --git a/src/context.h b/src/context.h
index f1117f5..40c7a14 100644
--- a/src/context.h
+++ b/src/context.h
@@ -15,6 +15,9 @@
#ifndef SRC_CONTEXT_H_
#define SRC_CONTEXT_H_
+#include <memory>
+
+#include "src/namer.h"
#include "src/type_manager.h"
namespace tint {
@@ -23,8 +26,11 @@
/// the system.
class Context {
public:
- /// Constructs a context with an empty type manager.
+ /// Constructor
Context();
+ /// Constructor
+ /// @param namer the namer to set into the context
+ explicit Context(std::unique_ptr<Namer> namer);
/// Destructor
~Context();
/// Resets the state of this context.
@@ -33,8 +39,12 @@
/// @returns the Type Manager
TypeManager& type_mgr() { return type_mgr_; }
+ /// @returns the namer object
+ Namer* namer() const { return namer_.get(); }
+
private:
TypeManager type_mgr_;
+ std::unique_ptr<Namer> namer_;
};
} // namespace tint
diff --git a/src/inspector/inspector.cc b/src/inspector/inspector.cc
index 5f4936e..cb9b703 100644
--- a/src/inspector/inspector.cc
+++ b/src/inspector/inspector.cc
@@ -36,14 +36,22 @@
#include "src/ast/type/type.h"
#include "src/ast/type/vector_type.h"
#include "src/ast/uint_literal.h"
-#include "src/namer.h"
namespace tint {
namespace inspector {
-Inspector::Inspector(const ast::Module& module) : module_(module) {}
+Inspector::Inspector(const ast::Module& module)
+ : ctx_(new Context()), context_is_owned_(true), module_(module) {}
-Inspector::~Inspector() = default;
+Inspector::Inspector(Context* ctx, const ast::Module& module)
+ : ctx_(ctx), context_is_owned_(false), module_(module) {
+ assert(ctx);
+}
+
+Inspector::~Inspector() {
+ if (context_is_owned_)
+ delete ctx_;
+}
std::vector<EntryPoint> Inspector::GetEntryPoints() {
std::vector<EntryPoint> result;
@@ -55,7 +63,7 @@
EntryPoint entry_point;
entry_point.name = func->name();
- entry_point.remapped_name = namer_.NameFor(func->name());
+ entry_point.remapped_name = ctx_->namer()->NameFor(func->name());
entry_point.stage = func->pipeline_stage();
std::tie(entry_point.workgroup_size_x, entry_point.workgroup_size_y,
entry_point.workgroup_size_z) = func->workgroup_size();
@@ -82,7 +90,7 @@
// if (!func) {
// return {};
// }
- // return namer_.NameFor(entry_point);
+ // return ctx_->namer()->NameFor(entry_point);
return entry_point;
}
diff --git a/src/inspector/inspector.h b/src/inspector/inspector.h
index 01d0f73..d14c1df 100644
--- a/src/inspector/inspector.h
+++ b/src/inspector/inspector.h
@@ -23,9 +23,9 @@
#include "src/ast/module.h"
#include "src/ast/pipeline_stage.h"
+#include "src/context.h"
#include "src/inspector/entry_point.h"
#include "src/inspector/scalar.h"
-#include "src/namer.h"
namespace tint {
namespace inspector {
@@ -72,8 +72,13 @@
class Inspector {
public:
/// Constructor
+ /// DEPRECATED
/// @param module Shader module to extract information from.
explicit Inspector(const ast::Module& module);
+ /// Constructor
+ /// @param ctx the context, must be non-null
+ /// @param module Shader module to extract information from.
+ Inspector(Context* ctx, const ast::Module& module);
~Inspector();
/// @returns error messages from the Inspector
@@ -128,9 +133,10 @@
const std::string& entry_point);
private:
+ Context* ctx_ = nullptr;
+ bool context_is_owned_ = false;
const ast::Module& module_;
std::string error_;
- tint::Namer namer_;
/// @param name name of the entry point to find
/// @returns a pointer to the entry point if it exists, otherwise returns
diff --git a/src/namer.cc b/src/namer.cc
index 3bd5bac..54c17ad 100644
--- a/src/namer.cc
+++ b/src/namer.cc
@@ -24,7 +24,16 @@
Namer::~Namer() = default;
-std::string Namer::NameFor(const std::string& name) {
+bool Namer::IsMapped(const std::string& name) {
+ auto it = name_map_.find(name);
+ return it != name_map_.end();
+}
+
+HashingNamer::HashingNamer() = default;
+
+HashingNamer::~HashingNamer() = default;
+
+std::string HashingNamer::NameFor(const std::string& name) {
auto it = name_map_.find(name);
if (it != name_map_.end()) {
return it->second;
@@ -42,9 +51,13 @@
return ret_name.str();
}
-bool Namer::IsMapped(const std::string& name) {
- auto it = name_map_.find(name);
- return it != name_map_.end();
+NoopNamer::NoopNamer() = default;
+
+NoopNamer::~NoopNamer() = default;
+
+std::string NoopNamer::NameFor(const std::string& name) {
+ name_map_[name] = name;
+ return name;
}
} // namespace tint
diff --git a/src/namer.h b/src/namer.h
index 69acf00..2bd1a18 100644
--- a/src/namer.h
+++ b/src/namer.h
@@ -21,29 +21,52 @@
namespace tint {
-/// Remaps maps names to a hashed version. This keeps the provided user input
-/// from traveling through to the backend compiler.
+/// Base class for the namers.
class Namer {
public:
/// Constructor
Namer();
- ~Namer();
+ virtual ~Namer();
/// Returns a sanitized version of |name|
/// @param name the name to sanitize
/// @returns the sanitized version of |name|
- std::string NameFor(const std::string& name);
+ virtual std::string NameFor(const std::string& name) = 0;
/// Returns if the given name has been mapped already
/// @param name the name to check
/// @returns true if the name has been mapped
bool IsMapped(const std::string& name);
- private:
+ protected:
/// Map of original name to new name.
std::unordered_map<std::string, std::string> name_map_;
};
+/// A namer class which hashes the name
+class HashingNamer : public Namer {
+ public:
+ HashingNamer();
+ ~HashingNamer() override;
+
+ /// Returns a sanitized version of |name|
+ /// @param name the name to sanitize
+ /// @returns the sanitized version of |name|
+ std::string NameFor(const std::string& name) override;
+};
+
+/// A namer which just returns the provided string
+class NoopNamer : public Namer {
+ public:
+ NoopNamer();
+ ~NoopNamer() override;
+
+ /// Returns |name|
+ /// @param name the name
+ /// @returns |name|
+ std::string NameFor(const std::string& name) override;
+};
+
} // namespace tint
#endif // SRC_NAMER_H_
diff --git a/src/namer_test.cc b/src/namer_test.cc
index f6e64f7..bc3bbbd 100644
--- a/src/namer_test.cc
+++ b/src/namer_test.cc
@@ -19,26 +19,47 @@
namespace tint {
namespace {
-using NamerTest = testing::Test;
+using Namer_HashingNamer_Test = testing::Test;
-TEST_F(NamerTest, ReturnsName) {
- Namer n;
+TEST_F(Namer_HashingNamer_Test, ReturnsName) {
+ HashingNamer n;
EXPECT_EQ("tint_6d795f6e616d65", n.NameFor("my_name"));
}
-TEST_F(NamerTest, ReturnsSameValueForSameName) {
- Namer n;
+TEST_F(Namer_HashingNamer_Test, ReturnsSameValueForSameName) {
+ HashingNamer n;
EXPECT_EQ("tint_6e616d6531", n.NameFor("name1"));
EXPECT_EQ("tint_6e616d6532", n.NameFor("name2"));
EXPECT_EQ("tint_6e616d6531", n.NameFor("name1"));
}
-TEST_F(NamerTest, IsMapped) {
- Namer n;
+TEST_F(Namer_HashingNamer_Test, IsMapped) {
+ HashingNamer n;
EXPECT_FALSE(n.IsMapped("my_name"));
EXPECT_EQ("tint_6d795f6e616d65", n.NameFor("my_name"));
EXPECT_TRUE(n.IsMapped("my_name"));
}
+using Namer_NoopNamer_Test = testing::Test;
+
+TEST_F(Namer_NoopNamer_Test, ReturnsName) {
+ NoopNamer n;
+ EXPECT_EQ("my_name", n.NameFor("my_name"));
+}
+
+TEST_F(Namer_NoopNamer_Test, ReturnsSameValueForSameName) {
+ NoopNamer n;
+ EXPECT_EQ("name1", n.NameFor("name1"));
+ EXPECT_EQ("name2", n.NameFor("name2"));
+ EXPECT_EQ("name1", n.NameFor("name1"));
+}
+
+TEST_F(Namer_NoopNamer_Test, IsMapped) {
+ NoopNamer n;
+ EXPECT_FALSE(n.IsMapped("my_name"));
+ EXPECT_EQ("my_name", n.NameFor("my_name"));
+ EXPECT_TRUE(n.IsMapped("my_name"));
+}
+
} // namespace
} // namespace tint
diff --git a/src/type_determiner.h b/src/type_determiner.h
index 1384028..af279f5 100644
--- a/src/type_determiner.h
+++ b/src/type_determiner.h
@@ -44,7 +44,7 @@
class TypeDeterminer {
public:
/// Constructor
- /// @param ctx the tint context
+ /// @param ctx the tint context, must be non-null
/// @param mod the module to update with typing information
TypeDeterminer(Context* ctx, ast::Module* mod);
~TypeDeterminer();
diff --git a/src/writer/hlsl/generator.cc b/src/writer/hlsl/generator.cc
index d521533..fa76960 100644
--- a/src/writer/hlsl/generator.cc
+++ b/src/writer/hlsl/generator.cc
@@ -22,14 +22,18 @@
Generator::Generator(ast::Module module)
: Text(std::move(module)),
- impl_(std::make_unique<GeneratorImpl>(&module_)) {}
+ impl_(std::make_unique<GeneratorImpl>(ctx_, &module_)) {}
+
+Generator::Generator(Context* ctx, ast::Module module)
+ : Text(ctx, std::move(module)),
+ impl_(std::make_unique<GeneratorImpl>(ctx_, &module_)) {}
Generator::~Generator() = default;
void Generator::Reset() {
set_error("");
out_ = std::ostringstream();
- impl_ = std::make_unique<GeneratorImpl>(&module_);
+ impl_ = std::make_unique<GeneratorImpl>(ctx_, &module_);
}
bool Generator::Generate() {
diff --git a/src/writer/hlsl/generator.h b/src/writer/hlsl/generator.h
index 83f6d27..93213e6 100644
--- a/src/writer/hlsl/generator.h
+++ b/src/writer/hlsl/generator.h
@@ -30,8 +30,13 @@
class Generator : public Text {
public:
/// Constructor
+ /// DEPRECATED
/// @param module the module to convert
explicit Generator(ast::Module module);
+ /// Constructor
+ /// @param ctx the context, must be non-null
+ /// @param module the module to convert
+ Generator(Context* ctx, ast::Module module);
~Generator() override;
/// Resets the generator
diff --git a/src/writer/hlsl/generator_impl.cc b/src/writer/hlsl/generator_impl.cc
index 1ae094c..726757b 100644
--- a/src/writer/hlsl/generator_impl.cc
+++ b/src/writer/hlsl/generator_impl.cc
@@ -104,7 +104,10 @@
} // namespace
-GeneratorImpl::GeneratorImpl(ast::Module* module) : module_(module) {}
+GeneratorImpl::GeneratorImpl(Context* ctx, ast::Module* module)
+ : ctx_(ctx), module_(module) {
+ assert(ctx);
+}
GeneratorImpl::~GeneratorImpl() = default;
diff --git a/src/writer/hlsl/generator_impl.h b/src/writer/hlsl/generator_impl.h
index 1bb9a32..c51fcf2 100644
--- a/src/writer/hlsl/generator_impl.h
+++ b/src/writer/hlsl/generator_impl.h
@@ -25,6 +25,7 @@
#include "src/ast/scalar_constructor_expression.h"
#include "src/ast/type/struct_type.h"
#include "src/ast/type_constructor_expression.h"
+#include "src/context.h"
#include "src/scope_stack.h"
#include "src/writer/hlsl/namer.h"
@@ -36,8 +37,9 @@
class GeneratorImpl {
public:
/// Constructor
+ /// @param ctx the context object, must be non-null
/// @param module the module to generate
- explicit GeneratorImpl(ast::Module* module);
+ GeneratorImpl(Context* ctx, ast::Module* module);
~GeneratorImpl();
/// Increment the emitter indent level
@@ -371,6 +373,7 @@
size_t indent_ = 0;
Namer namer_;
+ Context* ctx_ = nullptr;
ast::Module* module_ = nullptr;
std::string current_ep_name_;
bool generating_entry_point_ = false;
diff --git a/src/writer/hlsl/generator_impl_alias_type_test.cc b/src/writer/hlsl/generator_impl_alias_type_test.cc
index d50db38..ae8a6e6 100644
--- a/src/writer/hlsl/generator_impl_alias_type_test.cc
+++ b/src/writer/hlsl/generator_impl_alias_type_test.cc
@@ -12,7 +12,6 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-#include "src/ast/module.h"
#include "src/ast/struct.h"
#include "src/ast/struct_member.h"
#include "src/ast/struct_member_decoration.h"
@@ -33,7 +32,7 @@
ast::type::F32Type f32;
ast::type::AliasType alias("a", &f32);
- ASSERT_TRUE(gen().EmitConstructedType(out(), &alias)) << gen().error();
+ ASSERT_TRUE(gen.EmitConstructedType(out, &alias)) << gen.error();
EXPECT_EQ(result(), R"(typedef float a;
)");
}
@@ -42,7 +41,7 @@
ast::type::F32Type f32;
ast::type::AliasType alias("float", &f32);
- ASSERT_TRUE(gen().EmitConstructedType(out(), &alias)) << gen().error();
+ ASSERT_TRUE(gen.EmitConstructedType(out, &alias)) << gen.error();
EXPECT_EQ(result(), R"(typedef float float_tint_0;
)");
}
@@ -67,9 +66,7 @@
ast::type::StructType s("A", std::move(str));
ast::type::AliasType alias("B", &s);
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(gen().EmitConstructedType(out(), &alias)) << gen().error();
+ ASSERT_TRUE(gen.EmitConstructedType(out, &alias)) << gen.error();
EXPECT_EQ(result(), R"(struct B {
float a;
int b;
diff --git a/src/writer/hlsl/generator_impl_array_accessor_test.cc b/src/writer/hlsl/generator_impl_array_accessor_test.cc
index 5b488d4..b399f7e 100644
--- a/src/writer/hlsl/generator_impl_array_accessor_test.cc
+++ b/src/writer/hlsl/generator_impl_array_accessor_test.cc
@@ -37,7 +37,7 @@
ast::ArrayAccessorExpression expr(std::move(ary), std::move(idx));
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(), "ary[5]");
}
@@ -47,7 +47,7 @@
ast::ArrayAccessorExpression expr(std::move(ary), std::move(idx));
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(), "ary[idx]");
}
diff --git a/src/writer/hlsl/generator_impl_assign_test.cc b/src/writer/hlsl/generator_impl_assign_test.cc
index c366717..8b9da6a 100644
--- a/src/writer/hlsl/generator_impl_assign_test.cc
+++ b/src/writer/hlsl/generator_impl_assign_test.cc
@@ -32,9 +32,9 @@
auto rhs = std::make_unique<ast::IdentifierExpression>("rhs");
ast::AssignmentStatement assign(std::move(lhs), std::move(rhs));
- gen().increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(gen().EmitStatement(out(), &assign)) << gen().error();
+ ASSERT_TRUE(gen.EmitStatement(out, &assign)) << gen.error();
EXPECT_EQ(result(), " lhs = rhs;\n");
}
diff --git a/src/writer/hlsl/generator_impl_binary_test.cc b/src/writer/hlsl/generator_impl_binary_test.cc
index bec7a6d..fe5b0ad 100644
--- a/src/writer/hlsl/generator_impl_binary_test.cc
+++ b/src/writer/hlsl/generator_impl_binary_test.cc
@@ -50,7 +50,7 @@
return out;
}
-using HlslBinaryTest = TestHelperBase<testing::TestWithParam<BinaryData>>;
+using HlslBinaryTest = TestParamHelper<BinaryData>;
TEST_P(HlslBinaryTest, Emit) {
auto params = GetParam();
@@ -59,7 +59,7 @@
ast::BinaryExpression expr(params.op, std::move(left), std::move(right));
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(), params.result);
}
INSTANTIATE_TEST_SUITE_P(
@@ -90,7 +90,7 @@
ast::BinaryExpression expr(ast::BinaryOp::kLogicalAnd, std::move(left),
std::move(right));
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(), "(_tint_tmp)");
EXPECT_EQ(pre_result(), R"(bool _tint_tmp = left;
if (_tint_tmp) {
@@ -113,7 +113,7 @@
std::make_unique<ast::BinaryExpression>(ast::BinaryOp::kLogicalOr,
std::move(c), std::move(d)));
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(), "(_tint_tmp_0)");
EXPECT_EQ(pre_result(), R"(bool _tint_tmp = a;
if (_tint_tmp) {
@@ -137,7 +137,7 @@
ast::BinaryExpression expr(ast::BinaryOp::kLogicalOr, std::move(left),
std::move(right));
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(), "(_tint_tmp)");
EXPECT_EQ(pre_result(), R"(bool _tint_tmp = left;
if (!_tint_tmp) {
@@ -190,7 +190,7 @@
std::move(body));
expr.set_else_statements(std::move(else_stmts));
- ASSERT_TRUE(gen().EmitStatement(out(), &expr)) << gen().error();
+ ASSERT_TRUE(gen.EmitStatement(out, &expr)) << gen.error();
EXPECT_EQ(result(), R"(bool _tint_tmp = a;
if (_tint_tmp) {
_tint_tmp = b;
@@ -223,7 +223,7 @@
std::move(a), std::move(b)),
std::move(c)));
- ASSERT_TRUE(gen().EmitStatement(out(), &expr)) << gen().error();
+ ASSERT_TRUE(gen.EmitStatement(out, &expr)) << gen.error();
EXPECT_EQ(result(), R"(bool _tint_tmp = a;
if (_tint_tmp) {
_tint_tmp = b;
@@ -251,7 +251,7 @@
std::move(b), std::move(c)),
std::move(d)));
- ASSERT_TRUE(gen().EmitStatement(out(), &expr)) << gen().error();
+ ASSERT_TRUE(gen.EmitStatement(out, &expr)) << gen.error();
EXPECT_EQ(result(), R"(bool _tint_tmp = b;
if (!_tint_tmp) {
_tint_tmp = c;
@@ -282,7 +282,7 @@
ast::VariableDeclStatement expr(std::move(var));
- ASSERT_TRUE(gen().EmitStatement(out(), &expr)) << gen().error();
+ ASSERT_TRUE(gen.EmitStatement(out, &expr)) << gen.error();
EXPECT_EQ(result(), R"(bool _tint_tmp = b;
if (_tint_tmp) {
_tint_tmp = c;
@@ -309,7 +309,7 @@
std::make_unique<ast::BinaryExpression>(
ast::BinaryOp::kLogicalOr, std::move(b), std::move(c))));
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &expr)) << gen.error();
EXPECT_EQ(pre_result(), R"(bool _tint_tmp = a;
if (_tint_tmp) {
bool _tint_tmp_0 = b;
@@ -329,7 +329,7 @@
auto func =
std::make_unique<ast::Function>("foo", ast::VariableList{}, &void_type);
- mod()->AddFunction(std::move(func));
+ mod.AddFunction(std::move(func));
ast::ExpressionList params;
params.push_back(std::make_unique<ast::BinaryExpression>(
@@ -354,7 +354,7 @@
ast::CallStatement expr(std::make_unique<ast::CallExpression>(
std::make_unique<ast::IdentifierExpression>("foo"), std::move(params)));
- ASSERT_TRUE(gen().EmitStatement(out(), &expr)) << gen().error();
+ ASSERT_TRUE(gen.EmitStatement(out, &expr)) << gen.error();
EXPECT_EQ(result(), R"(bool _tint_tmp = a;
if (_tint_tmp) {
_tint_tmp = b;
diff --git a/src/writer/hlsl/generator_impl_bitcast_test.cc b/src/writer/hlsl/generator_impl_bitcast_test.cc
index ffe34d7..e7cd737 100644
--- a/src/writer/hlsl/generator_impl_bitcast_test.cc
+++ b/src/writer/hlsl/generator_impl_bitcast_test.cc
@@ -34,7 +34,7 @@
auto id = std::make_unique<ast::IdentifierExpression>("id");
ast::BitcastExpression bitcast(&f32, std::move(id));
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &bitcast)) << gen().error();
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &bitcast)) << gen.error();
EXPECT_EQ(result(), "asfloat(id)");
}
@@ -43,7 +43,7 @@
auto id = std::make_unique<ast::IdentifierExpression>("id");
ast::BitcastExpression bitcast(&i32, std::move(id));
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &bitcast)) << gen().error();
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &bitcast)) << gen.error();
EXPECT_EQ(result(), "asint(id)");
}
@@ -52,7 +52,7 @@
auto id = std::make_unique<ast::IdentifierExpression>("id");
ast::BitcastExpression bitcast(&u32, std::move(id));
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &bitcast)) << gen().error();
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &bitcast)) << gen.error();
EXPECT_EQ(result(), "asuint(id)");
}
diff --git a/src/writer/hlsl/generator_impl_block_test.cc b/src/writer/hlsl/generator_impl_block_test.cc
index fd309e7..6d3549a 100644
--- a/src/writer/hlsl/generator_impl_block_test.cc
+++ b/src/writer/hlsl/generator_impl_block_test.cc
@@ -29,9 +29,9 @@
ast::BlockStatement b;
b.append(std::make_unique<ast::DiscardStatement>());
- gen().increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(gen().EmitStatement(out(), &b)) << gen().error();
+ ASSERT_TRUE(gen.EmitStatement(out, &b)) << gen.error();
EXPECT_EQ(result(), R"( {
discard;
}
@@ -42,9 +42,9 @@
ast::BlockStatement b;
b.append(std::make_unique<ast::DiscardStatement>());
- gen().increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(gen().EmitBlock(out(), &b)) << gen().error();
+ ASSERT_TRUE(gen.EmitBlock(out, &b)) << gen.error();
EXPECT_EQ(result(), R"({
discard;
})");
diff --git a/src/writer/hlsl/generator_impl_break_test.cc b/src/writer/hlsl/generator_impl_break_test.cc
index 7185ca9..3eb2f7f 100644
--- a/src/writer/hlsl/generator_impl_break_test.cc
+++ b/src/writer/hlsl/generator_impl_break_test.cc
@@ -29,9 +29,9 @@
TEST_F(HlslGeneratorImplTest_Break, Emit_Break) {
ast::BreakStatement b;
- gen().increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(gen().EmitStatement(out(), &b)) << gen().error();
+ ASSERT_TRUE(gen.EmitStatement(out, &b)) << gen.error();
EXPECT_EQ(result(), " break;\n");
}
diff --git a/src/writer/hlsl/generator_impl_call_test.cc b/src/writer/hlsl/generator_impl_call_test.cc
index 63070e0..58a8a1e 100644
--- a/src/writer/hlsl/generator_impl_call_test.cc
+++ b/src/writer/hlsl/generator_impl_call_test.cc
@@ -37,9 +37,9 @@
auto func = std::make_unique<ast::Function>("my_func", ast::VariableList{},
&void_type);
- mod()->AddFunction(std::move(func));
+ mod.AddFunction(std::move(func));
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &call)) << gen().error();
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &call)) << gen.error();
EXPECT_EQ(result(), "my_func()");
}
@@ -54,9 +54,9 @@
auto func = std::make_unique<ast::Function>("my_func", ast::VariableList{},
&void_type);
- mod()->AddFunction(std::move(func));
+ mod.AddFunction(std::move(func));
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &call)) << gen().error();
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &call)) << gen.error();
EXPECT_EQ(result(), "my_func(param1, param2)");
}
@@ -72,9 +72,9 @@
auto func = std::make_unique<ast::Function>("my_func", ast::VariableList{},
&void_type);
- mod()->AddFunction(std::move(func));
- gen().increment_indent();
- ASSERT_TRUE(gen().EmitStatement(out(), &call)) << gen().error();
+ mod.AddFunction(std::move(func));
+ gen.increment_indent();
+ ASSERT_TRUE(gen.EmitStatement(out, &call)) << gen.error();
EXPECT_EQ(result(), " my_func(param1, param2);\n");
}
diff --git a/src/writer/hlsl/generator_impl_case_test.cc b/src/writer/hlsl/generator_impl_case_test.cc
index c0330b9..686e16e 100644
--- a/src/writer/hlsl/generator_impl_case_test.cc
+++ b/src/writer/hlsl/generator_impl_case_test.cc
@@ -40,9 +40,9 @@
lit.push_back(std::make_unique<ast::SintLiteral>(&i32, 5));
ast::CaseStatement c(std::move(lit), std::move(body));
- gen().increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(gen().EmitCase(out(), &c)) << gen().error();
+ ASSERT_TRUE(gen.EmitCase(out, &c)) << gen.error();
EXPECT_EQ(result(), R"( case 5: {
break;
}
@@ -56,9 +56,9 @@
lit.push_back(std::make_unique<ast::SintLiteral>(&i32, 5));
ast::CaseStatement c(std::move(lit), std::make_unique<ast::BlockStatement>());
- gen().increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(gen().EmitCase(out(), &c)) << gen().error();
+ ASSERT_TRUE(gen.EmitCase(out, &c)) << gen.error();
EXPECT_EQ(result(), R"( case 5: {
break;
}
@@ -75,9 +75,9 @@
lit.push_back(std::make_unique<ast::SintLiteral>(&i32, 5));
ast::CaseStatement c(std::move(lit), std::move(body));
- gen().increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(gen().EmitCase(out(), &c)) << gen().error();
+ ASSERT_TRUE(gen.EmitCase(out, &c)) << gen.error();
EXPECT_EQ(result(), R"( case 5: {
/* fallthrough */
}
@@ -95,9 +95,9 @@
lit.push_back(std::make_unique<ast::SintLiteral>(&i32, 6));
ast::CaseStatement c(std::move(lit), std::move(body));
- gen().increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(gen().EmitCase(out(), &c)) << gen().error();
+ ASSERT_TRUE(gen.EmitCase(out, &c)) << gen.error();
EXPECT_EQ(result(), R"( case 5:
case 6: {
break;
@@ -112,9 +112,9 @@
body->append(std::make_unique<ast::BreakStatement>());
c.set_body(std::move(body));
- gen().increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(gen().EmitCase(out(), &c)) << gen().error();
+ ASSERT_TRUE(gen.EmitCase(out, &c)) << gen.error();
EXPECT_EQ(result(), R"( default: {
break;
}
diff --git a/src/writer/hlsl/generator_impl_cast_test.cc b/src/writer/hlsl/generator_impl_cast_test.cc
index b92b104..9c88e51 100644
--- a/src/writer/hlsl/generator_impl_cast_test.cc
+++ b/src/writer/hlsl/generator_impl_cast_test.cc
@@ -36,7 +36,7 @@
ast::TypeConstructorExpression cast(&f32, std::move(params));
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &cast)) << gen().error();
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &cast)) << gen.error();
EXPECT_EQ(result(), "float(id)");
}
@@ -49,7 +49,7 @@
ast::TypeConstructorExpression cast(&vec3, std::move(params));
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &cast)) << gen().error();
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &cast)) << gen.error();
EXPECT_EQ(result(), "vector<float, 3>(id)");
}
diff --git a/src/writer/hlsl/generator_impl_constructor_test.cc b/src/writer/hlsl/generator_impl_constructor_test.cc
index 4211ee8..1a953d0 100644
--- a/src/writer/hlsl/generator_impl_constructor_test.cc
+++ b/src/writer/hlsl/generator_impl_constructor_test.cc
@@ -40,7 +40,7 @@
auto lit = std::make_unique<ast::BoolLiteral>(&bool_type, false);
ast::ScalarConstructorExpression expr(std::move(lit));
- ASSERT_TRUE(gen().EmitConstructor(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(gen.EmitConstructor(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(), "false");
}
@@ -49,7 +49,7 @@
auto lit = std::make_unique<ast::SintLiteral>(&i32, -12345);
ast::ScalarConstructorExpression expr(std::move(lit));
- ASSERT_TRUE(gen().EmitConstructor(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(gen.EmitConstructor(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(), "-12345");
}
@@ -58,7 +58,7 @@
auto lit = std::make_unique<ast::UintLiteral>(&u32, 56779);
ast::ScalarConstructorExpression expr(std::move(lit));
- ASSERT_TRUE(gen().EmitConstructor(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(gen.EmitConstructor(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(), "56779u");
}
@@ -69,7 +69,7 @@
&f32, static_cast<float>((1 << 30) - 4));
ast::ScalarConstructorExpression expr(std::move(lit));
- ASSERT_TRUE(gen().EmitConstructor(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(gen.EmitConstructor(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(), "1.07374182e+09f");
}
@@ -83,7 +83,7 @@
ast::TypeConstructorExpression expr(&f32, std::move(values));
- ASSERT_TRUE(gen().EmitConstructor(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(gen.EmitConstructor(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(), "float(-1.20000004e-05f)");
}
@@ -97,7 +97,7 @@
ast::TypeConstructorExpression expr(&b, std::move(values));
- ASSERT_TRUE(gen().EmitConstructor(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(gen.EmitConstructor(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(), "bool(true)");
}
@@ -111,7 +111,7 @@
ast::TypeConstructorExpression expr(&i32, std::move(values));
- ASSERT_TRUE(gen().EmitConstructor(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(gen.EmitConstructor(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(), "int(-12345)");
}
@@ -125,7 +125,7 @@
ast::TypeConstructorExpression expr(&u32, std::move(values));
- ASSERT_TRUE(gen().EmitConstructor(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(gen.EmitConstructor(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(), "uint(12345u)");
}
@@ -146,7 +146,7 @@
ast::TypeConstructorExpression expr(&vec, std::move(values));
- ASSERT_TRUE(gen().EmitConstructor(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(gen.EmitConstructor(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(),
"vector<float, 3>(1.00000000f, 2.00000000f, 3.00000000f)");
}
@@ -158,7 +158,7 @@
ast::ExpressionList values;
ast::TypeConstructorExpression expr(&vec, std::move(values));
- ASSERT_TRUE(gen().EmitConstructor(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(gen.EmitConstructor(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(), "vector<float, 3>(0.0f)");
}
@@ -194,7 +194,7 @@
ast::TypeConstructorExpression expr(&mat, std::move(mat_values));
- ASSERT_TRUE(gen().EmitConstructor(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(gen.EmitConstructor(pre, out, &expr)) << gen.error();
// A matrix of type T with n columns and m rows can also be constructed from
// n vectors of type T with m components.
@@ -233,7 +233,7 @@
ast::TypeConstructorExpression expr(&ary, std::move(ary_values));
- ASSERT_TRUE(gen().EmitConstructor(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(gen.EmitConstructor(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(),
std::string("{") +
"vector<float, 3>(1.00000000f, 2.00000000f, 3.00000000f), " +
diff --git a/src/writer/hlsl/generator_impl_continue_test.cc b/src/writer/hlsl/generator_impl_continue_test.cc
index 170b7f7..7b548b9 100644
--- a/src/writer/hlsl/generator_impl_continue_test.cc
+++ b/src/writer/hlsl/generator_impl_continue_test.cc
@@ -29,9 +29,9 @@
TEST_F(HlslGeneratorImplTest_Continue, Emit_Continue) {
ast::ContinueStatement c;
- gen().increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(gen().EmitStatement(out(), &c)) << gen().error();
+ ASSERT_TRUE(gen.EmitStatement(out, &c)) << gen.error();
EXPECT_EQ(result(), " continue;\n");
}
diff --git a/src/writer/hlsl/generator_impl_discard_test.cc b/src/writer/hlsl/generator_impl_discard_test.cc
index 8bf84fd..422d39c 100644
--- a/src/writer/hlsl/generator_impl_discard_test.cc
+++ b/src/writer/hlsl/generator_impl_discard_test.cc
@@ -26,9 +26,9 @@
TEST_F(HlslGeneratorImplTest_Discard, Emit_Discard) {
ast::DiscardStatement stmt;
- gen().increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(gen().EmitStatement(out(), &stmt)) << gen().error();
+ ASSERT_TRUE(gen.EmitStatement(out, &stmt)) << gen.error();
EXPECT_EQ(result(), " discard;\n");
}
diff --git a/src/writer/hlsl/generator_impl_function_entry_point_data_test.cc b/src/writer/hlsl/generator_impl_function_entry_point_data_test.cc
index e089fca..9347e95 100644
--- a/src/writer/hlsl/generator_impl_function_entry_point_data_test.cc
+++ b/src/writer/hlsl/generator_impl_function_entry_point_data_test.cc
@@ -65,11 +65,11 @@
decos.push_back(std::make_unique<ast::LocationDecoration>(1, Source{}));
bar_var->set_decorations(std::move(decos));
- td().RegisterVariableForTesting(foo_var.get());
- td().RegisterVariableForTesting(bar_var.get());
+ td.RegisterVariableForTesting(foo_var.get());
+ td.RegisterVariableForTesting(bar_var.get());
- mod()->AddGlobalVariable(std::move(foo_var));
- mod()->AddGlobalVariable(std::move(bar_var));
+ mod.AddGlobalVariable(std::move(foo_var));
+ mod.AddGlobalVariable(std::move(bar_var));
ast::VariableList params;
auto func =
@@ -87,13 +87,12 @@
std::make_unique<ast::IdentifierExpression>("bar")));
func->set_body(std::move(body));
- mod()->AddFunction(std::move(func));
+ mod.AddFunction(std::move(func));
std::unordered_set<std::string> globals;
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(gen().EmitEntryPointData(out(), func_ptr, globals))
- << gen().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(gen.EmitEntryPointData(out, func_ptr, globals)) << gen.error();
EXPECT_EQ(result(), R"(struct vtx_main_in {
float foo : TEXCOORD0;
int bar : TEXCOORD1;
@@ -127,11 +126,11 @@
decos.push_back(std::make_unique<ast::LocationDecoration>(1, Source{}));
bar_var->set_decorations(std::move(decos));
- td().RegisterVariableForTesting(foo_var.get());
- td().RegisterVariableForTesting(bar_var.get());
+ td.RegisterVariableForTesting(foo_var.get());
+ td.RegisterVariableForTesting(bar_var.get());
- mod()->AddGlobalVariable(std::move(foo_var));
- mod()->AddGlobalVariable(std::move(bar_var));
+ mod.AddGlobalVariable(std::move(foo_var));
+ mod.AddGlobalVariable(std::move(bar_var));
ast::VariableList params;
auto func =
@@ -149,13 +148,12 @@
std::make_unique<ast::IdentifierExpression>("bar")));
func->set_body(std::move(body));
- mod()->AddFunction(std::move(func));
+ mod.AddFunction(std::move(func));
std::unordered_set<std::string> globals;
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(gen().EmitEntryPointData(out(), func_ptr, globals))
- << gen().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(gen.EmitEntryPointData(out, func_ptr, globals)) << gen.error();
EXPECT_EQ(result(), R"(struct vtx_main_out {
float foo : TEXCOORD0;
int bar : TEXCOORD1;
@@ -189,11 +187,11 @@
decos.push_back(std::make_unique<ast::LocationDecoration>(1, Source{}));
bar_var->set_decorations(std::move(decos));
- td().RegisterVariableForTesting(foo_var.get());
- td().RegisterVariableForTesting(bar_var.get());
+ td.RegisterVariableForTesting(foo_var.get());
+ td.RegisterVariableForTesting(bar_var.get());
- mod()->AddGlobalVariable(std::move(foo_var));
- mod()->AddGlobalVariable(std::move(bar_var));
+ mod.AddGlobalVariable(std::move(foo_var));
+ mod.AddGlobalVariable(std::move(bar_var));
ast::VariableList params;
auto func = std::make_unique<ast::Function>("main", std::move(params), &f32);
@@ -210,13 +208,12 @@
std::make_unique<ast::IdentifierExpression>("bar")));
func->set_body(std::move(body));
- mod()->AddFunction(std::move(func));
+ mod.AddFunction(std::move(func));
std::unordered_set<std::string> globals;
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(gen().EmitEntryPointData(out(), func_ptr, globals))
- << gen().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(gen.EmitEntryPointData(out, func_ptr, globals)) << gen.error();
EXPECT_EQ(result(), R"(struct main_in {
float foo : TEXCOORD0;
int bar : TEXCOORD1;
@@ -250,11 +247,11 @@
decos.push_back(std::make_unique<ast::LocationDecoration>(1, Source{}));
bar_var->set_decorations(std::move(decos));
- td().RegisterVariableForTesting(foo_var.get());
- td().RegisterVariableForTesting(bar_var.get());
+ td.RegisterVariableForTesting(foo_var.get());
+ td.RegisterVariableForTesting(bar_var.get());
- mod()->AddGlobalVariable(std::move(foo_var));
- mod()->AddGlobalVariable(std::move(bar_var));
+ mod.AddGlobalVariable(std::move(foo_var));
+ mod.AddGlobalVariable(std::move(bar_var));
ast::VariableList params;
auto func = std::make_unique<ast::Function>("main", std::move(params), &f32);
@@ -271,13 +268,12 @@
std::make_unique<ast::IdentifierExpression>("bar")));
func->set_body(std::move(body));
- mod()->AddFunction(std::move(func));
+ mod.AddFunction(std::move(func));
std::unordered_set<std::string> globals;
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(gen().EmitEntryPointData(out(), func_ptr, globals))
- << gen().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(gen.EmitEntryPointData(out, func_ptr, globals)) << gen.error();
EXPECT_EQ(result(), R"(struct main_out {
float foo : SV_Target0;
int bar : SV_Target1;
@@ -308,11 +304,11 @@
decos.push_back(std::make_unique<ast::LocationDecoration>(1, Source{}));
bar_var->set_decorations(std::move(decos));
- td().RegisterVariableForTesting(foo_var.get());
- td().RegisterVariableForTesting(bar_var.get());
+ td.RegisterVariableForTesting(foo_var.get());
+ td.RegisterVariableForTesting(bar_var.get());
- mod()->AddGlobalVariable(std::move(foo_var));
- mod()->AddGlobalVariable(std::move(bar_var));
+ mod.AddGlobalVariable(std::move(foo_var));
+ mod.AddGlobalVariable(std::move(bar_var));
ast::VariableList params;
auto func = std::make_unique<ast::Function>("main", std::move(params), &f32);
@@ -329,14 +325,13 @@
std::make_unique<ast::IdentifierExpression>("bar")));
func->set_body(std::move(body));
- mod()->AddFunction(std::move(func));
+ mod.AddFunction(std::move(func));
std::unordered_set<std::string> globals;
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_FALSE(gen().EmitEntryPointData(out(), func_ptr, globals))
- << gen().error();
- EXPECT_EQ(gen().error(), R"(invalid location variable for pipeline stage)");
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_FALSE(gen.EmitEntryPointData(out, func_ptr, globals)) << gen.error();
+ EXPECT_EQ(gen.error(), R"(invalid location variable for pipeline stage)");
}
TEST_F(HlslGeneratorImplTest_EntryPoint,
@@ -361,11 +356,11 @@
decos.push_back(std::make_unique<ast::LocationDecoration>(1, Source{}));
bar_var->set_decorations(std::move(decos));
- td().RegisterVariableForTesting(foo_var.get());
- td().RegisterVariableForTesting(bar_var.get());
+ td.RegisterVariableForTesting(foo_var.get());
+ td.RegisterVariableForTesting(bar_var.get());
- mod()->AddGlobalVariable(std::move(foo_var));
- mod()->AddGlobalVariable(std::move(bar_var));
+ mod.AddGlobalVariable(std::move(foo_var));
+ mod.AddGlobalVariable(std::move(bar_var));
ast::VariableList params;
auto func = std::make_unique<ast::Function>("main", std::move(params), &f32);
@@ -382,14 +377,13 @@
std::make_unique<ast::IdentifierExpression>("bar")));
func->set_body(std::move(body));
- mod()->AddFunction(std::move(func));
+ mod.AddFunction(std::move(func));
std::unordered_set<std::string> globals;
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_FALSE(gen().EmitEntryPointData(out(), func_ptr, globals))
- << gen().error();
- EXPECT_EQ(gen().error(), R"(invalid location variable for pipeline stage)");
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_FALSE(gen.EmitEntryPointData(out, func_ptr, globals)) << gen.error();
+ EXPECT_EQ(gen.error(), R"(invalid location variable for pipeline stage)");
}
TEST_F(HlslGeneratorImplTest_EntryPoint,
@@ -425,11 +419,11 @@
ast::Builtin::kFragDepth, Source{}));
depth_var->set_decorations(std::move(decos));
- td().RegisterVariableForTesting(coord_var.get());
- td().RegisterVariableForTesting(depth_var.get());
+ td.RegisterVariableForTesting(coord_var.get());
+ td.RegisterVariableForTesting(depth_var.get());
- mod()->AddGlobalVariable(std::move(coord_var));
- mod()->AddGlobalVariable(std::move(depth_var));
+ mod.AddGlobalVariable(std::move(coord_var));
+ mod.AddGlobalVariable(std::move(depth_var));
ast::VariableList params;
auto func =
@@ -446,13 +440,12 @@
std::make_unique<ast::IdentifierExpression>("x"))));
func->set_body(std::move(body));
- mod()->AddFunction(std::move(func));
+ mod.AddFunction(std::move(func));
std::unordered_set<std::string> globals;
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(gen().EmitEntryPointData(out(), func_ptr, globals))
- << gen().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(gen.EmitEntryPointData(out, func_ptr, globals)) << gen.error();
EXPECT_EQ(result(), R"(struct main_in {
vector<float, 4> coord : SV_Position;
};
diff --git a/src/writer/hlsl/generator_impl_function_test.cc b/src/writer/hlsl/generator_impl_function_test.cc
index 5f02e3a..3df6492 100644
--- a/src/writer/hlsl/generator_impl_function_test.cc
+++ b/src/writer/hlsl/generator_impl_function_test.cc
@@ -64,10 +64,10 @@
body->append(std::make_unique<ast::ReturnStatement>());
func->set_body(std::move(body));
- mod()->AddFunction(std::move(func));
- gen().increment_indent();
+ mod.AddFunction(std::move(func));
+ gen.increment_indent();
- ASSERT_TRUE(gen().Generate(out())) << gen().error();
+ ASSERT_TRUE(gen.Generate(out)) << gen.error();
EXPECT_EQ(result(), R"( void my_func() {
return;
}
@@ -85,10 +85,10 @@
body->append(std::make_unique<ast::ReturnStatement>());
func->set_body(std::move(body));
- mod()->AddFunction(std::move(func));
- gen().increment_indent();
+ mod.AddFunction(std::move(func));
+ gen.increment_indent();
- ASSERT_TRUE(gen().Generate(out())) << gen().error();
+ ASSERT_TRUE(gen.Generate(out)) << gen.error();
EXPECT_EQ(result(), R"( void GeometryShader_tint_0() {
return;
}
@@ -114,10 +114,10 @@
body->append(std::make_unique<ast::ReturnStatement>());
func->set_body(std::move(body));
- mod()->AddFunction(std::move(func));
- gen().increment_indent();
+ mod.AddFunction(std::move(func));
+ gen.increment_indent();
- ASSERT_TRUE(gen().Generate(out())) << gen().error();
+ ASSERT_TRUE(gen.Generate(out)) << gen.error();
EXPECT_EQ(result(), R"( void my_func(float a, int b) {
return;
}
@@ -142,11 +142,11 @@
decos.push_back(std::make_unique<ast::LocationDecoration>(1, Source{}));
bar_var->set_decorations(std::move(decos));
- td().RegisterVariableForTesting(foo_var.get());
- td().RegisterVariableForTesting(bar_var.get());
+ td.RegisterVariableForTesting(foo_var.get());
+ td.RegisterVariableForTesting(bar_var.get());
- mod()->AddGlobalVariable(std::move(foo_var));
- mod()->AddGlobalVariable(std::move(bar_var));
+ mod.AddGlobalVariable(std::move(foo_var));
+ mod.AddGlobalVariable(std::move(bar_var));
ast::VariableList params;
auto func = std::make_unique<ast::Function>("frag_main", std::move(params),
@@ -161,10 +161,10 @@
body->append(std::make_unique<ast::ReturnStatement>());
func->set_body(std::move(body));
- mod()->AddFunction(std::move(func));
+ mod.AddFunction(std::move(func));
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(gen().Generate(out())) << gen().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(gen.Generate(out)) << gen.error();
EXPECT_EQ(result(), R"(struct frag_main_in {
float foo : TEXCOORD0;
};
@@ -204,11 +204,11 @@
ast::Builtin::kFragDepth, Source{}));
depth_var->set_decorations(std::move(decos));
- td().RegisterVariableForTesting(coord_var.get());
- td().RegisterVariableForTesting(depth_var.get());
+ td.RegisterVariableForTesting(coord_var.get());
+ td.RegisterVariableForTesting(depth_var.get());
- mod()->AddGlobalVariable(std::move(coord_var));
- mod()->AddGlobalVariable(std::move(depth_var));
+ mod.AddGlobalVariable(std::move(coord_var));
+ mod.AddGlobalVariable(std::move(depth_var));
ast::VariableList params;
auto func = std::make_unique<ast::Function>("frag_main", std::move(params),
@@ -225,10 +225,10 @@
body->append(std::make_unique<ast::ReturnStatement>());
func->set_body(std::move(body));
- mod()->AddFunction(std::move(func));
+ mod.AddFunction(std::move(func));
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(gen().Generate(out())) << gen().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(gen.Generate(out)) << gen.error();
EXPECT_EQ(result(), R"(struct frag_main_in {
vector<float, 4> coord : SV_Position;
};
@@ -261,8 +261,8 @@
decos.push_back(std::make_unique<ast::SetDecoration>(1, Source{}));
coord_var->set_decorations(std::move(decos));
- td().RegisterVariableForTesting(coord_var.get());
- mod()->AddGlobalVariable(std::move(coord_var));
+ td.RegisterVariableForTesting(coord_var.get());
+ mod.AddGlobalVariable(std::move(coord_var));
ast::VariableList params;
auto func = std::make_unique<ast::Function>("frag_main", std::move(params),
@@ -281,10 +281,10 @@
body->append(std::make_unique<ast::ReturnStatement>());
func->set_body(std::move(body));
- mod()->AddFunction(std::move(func));
+ mod.AddFunction(std::move(func));
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(gen().Generate(out())) << gen().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(gen.Generate(out)) << gen.error();
EXPECT_EQ(result(), R"(cbuffer : register(b0) {
vector<float, 4> coord;
};
@@ -316,15 +316,15 @@
std::make_unique<ast::DecoratedVariable>(std::make_unique<ast::Variable>(
"uniforms", ast::StorageClass::kUniform, &s));
- mod()->AddConstructedType(&s);
+ mod.AddConstructedType(&s);
ast::VariableDecorationList decos;
decos.push_back(std::make_unique<ast::BindingDecoration>(0, Source{}));
decos.push_back(std::make_unique<ast::SetDecoration>(1, Source{}));
coord_var->set_decorations(std::move(decos));
- td().RegisterVariableForTesting(coord_var.get());
- mod()->AddGlobalVariable(std::move(coord_var));
+ td.RegisterVariableForTesting(coord_var.get());
+ mod.AddGlobalVariable(std::move(coord_var));
ast::VariableList params;
auto func = std::make_unique<ast::Function>("frag_main", std::move(params),
@@ -345,10 +345,10 @@
body->append(std::make_unique<ast::ReturnStatement>());
func->set_body(std::move(body));
- mod()->AddFunction(std::move(func));
+ mod.AddFunction(std::move(func));
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(gen().Generate(out())) << gen().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(gen.Generate(out)) << gen.error();
EXPECT_EQ(result(), R"(struct Uniforms {
vector<float, 4> coord;
};
@@ -397,8 +397,8 @@
decos.push_back(std::make_unique<ast::SetDecoration>(1, Source{}));
coord_var->set_decorations(std::move(decos));
- td().RegisterVariableForTesting(coord_var.get());
- mod()->AddGlobalVariable(std::move(coord_var));
+ td.RegisterVariableForTesting(coord_var.get());
+ mod.AddGlobalVariable(std::move(coord_var));
ast::VariableList params;
auto func = std::make_unique<ast::Function>("frag_main", std::move(params),
@@ -417,10 +417,10 @@
body->append(std::make_unique<ast::ReturnStatement>());
func->set_body(std::move(body));
- mod()->AddFunction(std::move(func));
+ mod.AddFunction(std::move(func));
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(gen().Generate(out())) << gen().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(gen.Generate(out)) << gen.error();
EXPECT_EQ(result(), R"(RWByteAddressBuffer coord : register(u0);
void frag_main() {
@@ -465,8 +465,8 @@
decos.push_back(std::make_unique<ast::SetDecoration>(1, Source{}));
coord_var->set_decorations(std::move(decos));
- td().RegisterVariableForTesting(coord_var.get());
- mod()->AddGlobalVariable(std::move(coord_var));
+ td.RegisterVariableForTesting(coord_var.get());
+ mod.AddGlobalVariable(std::move(coord_var));
ast::VariableList params;
auto func = std::make_unique<ast::Function>("frag_main", std::move(params),
@@ -485,10 +485,10 @@
body->append(std::make_unique<ast::ReturnStatement>());
func->set_body(std::move(body));
- mod()->AddFunction(std::move(func));
+ mod.AddFunction(std::move(func));
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(gen().Generate(out())) << gen().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(gen.Generate(out)) << gen.error();
EXPECT_EQ(result(), R"(ByteAddressBuffer coord : register(u0);
void frag_main() {
@@ -533,9 +533,9 @@
decos.push_back(std::make_unique<ast::SetDecoration>(1, Source{}));
coord_var->set_decorations(std::move(decos));
- td().RegisterVariableForTesting(coord_var.get());
+ td.RegisterVariableForTesting(coord_var.get());
- mod()->AddGlobalVariable(std::move(coord_var));
+ mod.AddGlobalVariable(std::move(coord_var));
ast::VariableList params;
auto func = std::make_unique<ast::Function>("frag_main", std::move(params),
@@ -555,10 +555,10 @@
body->append(std::make_unique<ast::ReturnStatement>());
func->set_body(std::move(body));
- mod()->AddFunction(std::move(func));
+ mod.AddFunction(std::move(func));
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(gen().Generate(out())) << gen().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(gen.Generate(out)) << gen.error();
EXPECT_EQ(result(), R"(RWByteAddressBuffer coord : register(u0);
void frag_main() {
@@ -592,13 +592,13 @@
decos.push_back(std::make_unique<ast::LocationDecoration>(0, Source{}));
val_var->set_decorations(std::move(decos));
- td().RegisterVariableForTesting(foo_var.get());
- td().RegisterVariableForTesting(bar_var.get());
- td().RegisterVariableForTesting(val_var.get());
+ td.RegisterVariableForTesting(foo_var.get());
+ td.RegisterVariableForTesting(bar_var.get());
+ td.RegisterVariableForTesting(val_var.get());
- mod()->AddGlobalVariable(std::move(foo_var));
- mod()->AddGlobalVariable(std::move(bar_var));
- mod()->AddGlobalVariable(std::move(val_var));
+ mod.AddGlobalVariable(std::move(foo_var));
+ mod.AddGlobalVariable(std::move(bar_var));
+ mod.AddGlobalVariable(std::move(val_var));
ast::VariableList params;
params.push_back(std::make_unique<ast::Variable>(
@@ -617,7 +617,7 @@
std::make_unique<ast::IdentifierExpression>("foo")));
sub_func->set_body(std::move(body));
- mod()->AddFunction(std::move(sub_func));
+ mod.AddFunction(std::move(sub_func));
auto func_1 =
std::make_unique<ast::Function>("ep_1", std::move(params), &void_type);
@@ -637,10 +637,10 @@
body->append(std::make_unique<ast::ReturnStatement>());
func_1->set_body(std::move(body));
- mod()->AddFunction(std::move(func_1));
+ mod.AddFunction(std::move(func_1));
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(gen().Generate(out())) << gen().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(gen.Generate(out)) << gen.error();
EXPECT_EQ(result(), R"(struct ep_1_in {
float foo : TEXCOORD0;
};
@@ -680,9 +680,9 @@
ast::Builtin::kFragDepth, Source{}));
depth_var->set_decorations(std::move(decos));
- td().RegisterVariableForTesting(depth_var.get());
+ td.RegisterVariableForTesting(depth_var.get());
- mod()->AddGlobalVariable(std::move(depth_var));
+ mod.AddGlobalVariable(std::move(depth_var));
ast::VariableList params;
params.push_back(std::make_unique<ast::Variable>(
@@ -695,7 +695,7 @@
std::make_unique<ast::IdentifierExpression>("param")));
sub_func->set_body(std::move(body));
- mod()->AddFunction(std::move(sub_func));
+ mod.AddFunction(std::move(sub_func));
auto func_1 =
std::make_unique<ast::Function>("ep_1", std::move(params), &void_type);
@@ -715,10 +715,10 @@
body->append(std::make_unique<ast::ReturnStatement>());
func_1->set_body(std::move(body));
- mod()->AddFunction(std::move(func_1));
+ mod.AddFunction(std::move(func_1));
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(gen().Generate(out())) << gen().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(gen.Generate(out)) << gen.error();
EXPECT_EQ(result(), R"(struct ep_1_out {
float depth : SV_Depth;
};
@@ -759,11 +759,11 @@
ast::Builtin::kFragDepth, Source{}));
depth_var->set_decorations(std::move(decos));
- td().RegisterVariableForTesting(coord_var.get());
- td().RegisterVariableForTesting(depth_var.get());
+ td.RegisterVariableForTesting(coord_var.get());
+ td.RegisterVariableForTesting(depth_var.get());
- mod()->AddGlobalVariable(std::move(coord_var));
- mod()->AddGlobalVariable(std::move(depth_var));
+ mod.AddGlobalVariable(std::move(coord_var));
+ mod.AddGlobalVariable(std::move(depth_var));
ast::VariableList params;
params.push_back(std::make_unique<ast::Variable>(
@@ -781,7 +781,7 @@
std::make_unique<ast::IdentifierExpression>("param")));
sub_func->set_body(std::move(body));
- mod()->AddFunction(std::move(sub_func));
+ mod.AddFunction(std::move(sub_func));
auto func_1 =
std::make_unique<ast::Function>("ep_1", std::move(params), &void_type);
@@ -801,10 +801,10 @@
body->append(std::make_unique<ast::ReturnStatement>());
func_1->set_body(std::move(body));
- mod()->AddFunction(std::move(func_1));
+ mod.AddFunction(std::move(func_1));
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(gen().Generate(out())) << gen().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(gen.Generate(out)) << gen.error();
EXPECT_EQ(result(), R"(struct ep_1_in {
vector<float, 4> coord : SV_Position;
};
@@ -842,9 +842,9 @@
decos.push_back(std::make_unique<ast::SetDecoration>(1, Source{}));
coord_var->set_decorations(std::move(decos));
- td().RegisterVariableForTesting(coord_var.get());
+ td.RegisterVariableForTesting(coord_var.get());
- mod()->AddGlobalVariable(std::move(coord_var));
+ mod.AddGlobalVariable(std::move(coord_var));
ast::VariableList params;
params.push_back(std::make_unique<ast::Variable>(
@@ -859,7 +859,7 @@
std::make_unique<ast::IdentifierExpression>("x"))));
sub_func->set_body(std::move(body));
- mod()->AddFunction(std::move(sub_func));
+ mod.AddFunction(std::move(sub_func));
auto func = std::make_unique<ast::Function>("frag_main", std::move(params),
&void_type);
@@ -881,10 +881,10 @@
body->append(std::make_unique<ast::ReturnStatement>());
func->set_body(std::move(body));
- mod()->AddFunction(std::move(func));
+ mod.AddFunction(std::move(func));
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(gen().Generate(out())) << gen().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(gen.Generate(out)) << gen.error();
EXPECT_EQ(result(), R"(cbuffer : register(b0) {
vector<float, 4> coord;
};
@@ -916,9 +916,9 @@
decos.push_back(std::make_unique<ast::SetDecoration>(1, Source{}));
coord_var->set_decorations(std::move(decos));
- td().RegisterVariableForTesting(coord_var.get());
+ td.RegisterVariableForTesting(coord_var.get());
- mod()->AddGlobalVariable(std::move(coord_var));
+ mod.AddGlobalVariable(std::move(coord_var));
ast::VariableList params;
params.push_back(std::make_unique<ast::Variable>(
@@ -933,7 +933,7 @@
std::make_unique<ast::IdentifierExpression>("x"))));
sub_func->set_body(std::move(body));
- mod()->AddFunction(std::move(sub_func));
+ mod.AddFunction(std::move(sub_func));
auto func = std::make_unique<ast::Function>("frag_main", std::move(params),
&void_type);
@@ -955,10 +955,10 @@
body->append(std::make_unique<ast::ReturnStatement>());
func->set_body(std::move(body));
- mod()->AddFunction(std::move(func));
+ mod.AddFunction(std::move(func));
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(gen().Generate(out())) << gen().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(gen.Generate(out)) << gen.error();
EXPECT_EQ(result(), R"(RWByteAddressBuffer coord : register(u0);
float sub_func(float param) {
@@ -985,8 +985,8 @@
decos.push_back(std::make_unique<ast::LocationDecoration>(1, Source{}));
bar_var->set_decorations(std::move(decos));
- td().RegisterVariableForTesting(bar_var.get());
- mod()->AddGlobalVariable(std::move(bar_var));
+ td.RegisterVariableForTesting(bar_var.get());
+ mod.AddGlobalVariable(std::move(bar_var));
ast::VariableList params;
auto func_1 =
@@ -1015,10 +1015,10 @@
body->append(std::make_unique<ast::ReturnStatement>());
func_1->set_body(std::move(body));
- mod()->AddFunction(std::move(func_1));
+ mod.AddFunction(std::move(func_1));
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(gen().Generate(out())) << gen().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(gen.Generate(out)) << gen.error();
EXPECT_EQ(result(), R"(struct ep_1_out {
float bar : SV_Target1;
};
@@ -1044,9 +1044,9 @@
func->add_decoration(std::make_unique<ast::StageDecoration>(
ast::PipelineStage::kFragment, Source{}));
- mod()->AddFunction(std::move(func));
+ mod.AddFunction(std::move(func));
- ASSERT_TRUE(gen().Generate(out())) << gen().error();
+ ASSERT_TRUE(gen.Generate(out)) << gen.error();
EXPECT_EQ(result(), R"(void GeometryShader_tint_0() {
}
@@ -1067,10 +1067,10 @@
body->append(std::make_unique<ast::ReturnStatement>());
func->set_body(std::move(body));
- mod()->AddFunction(std::move(func));
+ mod.AddFunction(std::move(func));
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(gen().Generate(out())) << gen().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(gen.Generate(out)) << gen.error();
EXPECT_EQ(result(), R"([numthreads(1, 1, 1)]
void main() {
return;
@@ -1095,10 +1095,10 @@
body->append(std::make_unique<ast::ReturnStatement>());
func->set_body(std::move(body));
- mod()->AddFunction(std::move(func));
+ mod.AddFunction(std::move(func));
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(gen().Generate(out())) << gen().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(gen.Generate(out)) << gen.error();
EXPECT_EQ(result(), R"([numthreads(2, 4, 6)]
void main() {
return;
@@ -1123,10 +1123,10 @@
body->append(std::make_unique<ast::ReturnStatement>());
func->set_body(std::move(body));
- mod()->AddFunction(std::move(func));
- gen().increment_indent();
+ mod.AddFunction(std::move(func));
+ gen.increment_indent();
- ASSERT_TRUE(gen().Generate(out())) << gen().error();
+ ASSERT_TRUE(gen.Generate(out)) << gen.error();
EXPECT_EQ(result(), R"( void my_func(float a[5]) {
return;
}
@@ -1180,9 +1180,9 @@
decos.push_back(std::make_unique<ast::SetDecoration>(0, Source{}));
data_var->set_decorations(std::move(decos));
- mod()->AddConstructedType(&s);
- td().RegisterVariableForTesting(data_var.get());
- mod()->AddGlobalVariable(std::move(data_var));
+ mod.AddConstructedType(&s);
+ td.RegisterVariableForTesting(data_var.get());
+ mod.AddGlobalVariable(std::move(data_var));
{
ast::VariableList params;
@@ -1202,7 +1202,7 @@
body->append(std::make_unique<ast::ReturnStatement>());
func->set_body(std::move(body));
- mod()->AddFunction(std::move(func));
+ mod.AddFunction(std::move(func));
}
{
@@ -1223,11 +1223,11 @@
body->append(std::make_unique<ast::ReturnStatement>());
func->set_body(std::move(body));
- mod()->AddFunction(std::move(func));
+ mod.AddFunction(std::move(func));
}
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(gen().Generate(out())) << gen().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(gen.Generate(out)) << gen.error();
EXPECT_EQ(result(), R"(struct Data {
float d;
};
diff --git a/src/writer/hlsl/generator_impl_identifier_test.cc b/src/writer/hlsl/generator_impl_identifier_test.cc
index bf38e8d..2c0bfd2 100644
--- a/src/writer/hlsl/generator_impl_identifier_test.cc
+++ b/src/writer/hlsl/generator_impl_identifier_test.cc
@@ -25,14 +25,14 @@
TEST_F(HlslGeneratorImplTest_Identifier, EmitIdentifierExpression) {
ast::IdentifierExpression i("foo");
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &i)) << gen().error();
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &i)) << gen.error();
EXPECT_EQ(result(), "foo");
}
TEST_F(HlslGeneratorImplTest_Identifier,
EmitIdentifierExpression_Single_WithCollision) {
ast::IdentifierExpression i("virtual");
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &i)) << gen().error();
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &i)) << gen.error();
EXPECT_EQ(result(), "virtual_tint_0");
}
diff --git a/src/writer/hlsl/generator_impl_if_test.cc b/src/writer/hlsl/generator_impl_if_test.cc
index aa2c07a..f531cd6 100644
--- a/src/writer/hlsl/generator_impl_if_test.cc
+++ b/src/writer/hlsl/generator_impl_if_test.cc
@@ -32,9 +32,9 @@
body->append(std::make_unique<ast::ReturnStatement>());
ast::IfStatement i(std::move(cond), std::move(body));
- gen().increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(gen().EmitStatement(out(), &i)) << gen().error();
+ ASSERT_TRUE(gen.EmitStatement(out, &i)) << gen.error();
EXPECT_EQ(result(), R"( if (cond) {
return;
}
@@ -57,9 +57,9 @@
ast::IfStatement i(std::move(cond), std::move(body));
i.set_else_statements(std::move(elses));
- gen().increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(gen().EmitStatement(out(), &i)) << gen().error();
+ ASSERT_TRUE(gen.EmitStatement(out, &i)) << gen.error();
EXPECT_EQ(result(), R"( if (cond) {
return;
} else {
@@ -84,9 +84,9 @@
ast::IfStatement i(std::move(cond), std::move(body));
i.set_else_statements(std::move(elses));
- gen().increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(gen().EmitStatement(out(), &i)) << gen().error();
+ ASSERT_TRUE(gen.EmitStatement(out, &i)) << gen.error();
EXPECT_EQ(result(), R"( if (cond) {
return;
} else {
@@ -116,9 +116,9 @@
ast::IfStatement i(std::move(cond), std::move(body));
i.set_else_statements(std::move(elses));
- gen().increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(gen().EmitStatement(out(), &i)) << gen().error();
+ ASSERT_TRUE(gen.EmitStatement(out, &i)) << gen.error();
EXPECT_EQ(result(), R"( if (cond) {
return;
} else {
diff --git a/src/writer/hlsl/generator_impl_import_test.cc b/src/writer/hlsl/generator_impl_import_test.cc
index 4cd8a61..152a64a 100644
--- a/src/writer/hlsl/generator_impl_import_test.cc
+++ b/src/writer/hlsl/generator_impl_import_test.cc
@@ -47,8 +47,7 @@
return out;
}
-using HlslImportData_SingleParamTest =
- TestHelperBase<testing::TestWithParam<HlslImportData>>;
+using HlslImportData_SingleParamTest = TestParamHelper<HlslImportData>;
TEST_P(HlslImportData_SingleParamTest, FloatScalar) {
auto param = GetParam();
@@ -61,8 +60,8 @@
auto ident = std::make_unique<ast::IdentifierExpression>(param.name);
ast::CallExpression expr(std::move(ident), std::move(params));
- ASSERT_TRUE(td().DetermineResultType(&expr)) << td().error();
- ASSERT_TRUE(gen().EmitCall(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
+ ASSERT_TRUE(gen.EmitCall(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(), std::string(param.hlsl_name) + "(1.00000000f)");
}
INSTANTIATE_TEST_SUITE_P(HlslGeneratorImplTest_Import,
@@ -93,8 +92,7 @@
HlslImportData{"tanh", "tanh"},
HlslImportData{"trunc", "trunc"}));
-using HlslImportData_SingleIntParamTest =
- TestHelperBase<testing::TestWithParam<HlslImportData>>;
+using HlslImportData_SingleIntParamTest = TestParamHelper<HlslImportData>;
TEST_P(HlslImportData_SingleIntParamTest, IntScalar) {
auto param = GetParam();
@@ -108,16 +106,15 @@
std::make_unique<ast::IdentifierExpression>(param.name),
std::move(params));
- ASSERT_TRUE(td().DetermineResultType(&expr)) << td().error();
- ASSERT_TRUE(gen().EmitCall(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
+ ASSERT_TRUE(gen.EmitCall(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(), std::string(param.hlsl_name) + "(1)");
}
INSTANTIATE_TEST_SUITE_P(HlslGeneratorImplTest_Import,
HlslImportData_SingleIntParamTest,
testing::Values(HlslImportData{"abs", "abs"}));
-using HlslImportData_DualParamTest =
- TestHelperBase<testing::TestWithParam<HlslImportData>>;
+using HlslImportData_DualParamTest = TestParamHelper<HlslImportData>;
TEST_P(HlslImportData_DualParamTest, FloatScalar) {
auto param = GetParam();
@@ -133,8 +130,8 @@
std::make_unique<ast::IdentifierExpression>(param.name),
std::move(params));
- ASSERT_TRUE(td().DetermineResultType(&expr)) << td().error();
- ASSERT_TRUE(gen().EmitCall(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
+ ASSERT_TRUE(gen.EmitCall(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(),
std::string(param.hlsl_name) + "(1.00000000f, 2.00000000f)");
}
@@ -148,8 +145,7 @@
HlslImportData{"reflect", "reflect"},
HlslImportData{"step", "step"}));
-using HlslImportData_DualParam_VectorTest =
- TestHelperBase<testing::TestWithParam<HlslImportData>>;
+using HlslImportData_DualParam_VectorTest = TestParamHelper<HlslImportData>;
TEST_P(HlslImportData_DualParam_VectorTest, FloatVector) {
auto param = GetParam();
@@ -181,8 +177,8 @@
std::make_unique<ast::IdentifierExpression>(param.name),
std::move(params));
- ASSERT_TRUE(td().DetermineResultType(&expr)) << td().error();
- ASSERT_TRUE(gen().EmitCall(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
+ ASSERT_TRUE(gen.EmitCall(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(),
std::string(param.hlsl_name) +
"(vector<float, 3>(1.00000000f, 2.00000000f, 3.00000000f), "
@@ -192,8 +188,7 @@
HlslImportData_DualParam_VectorTest,
testing::Values(HlslImportData{"cross", "cross"}));
-using HlslImportData_DualParam_Int_Test =
- TestHelperBase<testing::TestWithParam<HlslImportData>>;
+using HlslImportData_DualParam_Int_Test = TestParamHelper<HlslImportData>;
TEST_P(HlslImportData_DualParam_Int_Test, IntScalar) {
auto param = GetParam();
@@ -209,8 +204,8 @@
std::make_unique<ast::IdentifierExpression>(param.name),
std::move(params));
- ASSERT_TRUE(td().DetermineResultType(&expr)) << td().error();
- ASSERT_TRUE(gen().EmitCall(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
+ ASSERT_TRUE(gen.EmitCall(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(), std::string(param.hlsl_name) + "(1, 2)");
}
INSTANTIATE_TEST_SUITE_P(HlslGeneratorImplTest_Import,
@@ -218,8 +213,7 @@
testing::Values(HlslImportData{"max", "max"},
HlslImportData{"min", "min"}));
-using HlslImportData_TripleParamTest =
- TestHelperBase<testing::TestWithParam<HlslImportData>>;
+using HlslImportData_TripleParamTest = TestParamHelper<HlslImportData>;
TEST_P(HlslImportData_TripleParamTest, FloatScalar) {
auto param = GetParam();
@@ -237,8 +231,8 @@
std::make_unique<ast::IdentifierExpression>(param.name),
std::move(params));
- ASSERT_TRUE(td().DetermineResultType(&expr)) << td().error();
- ASSERT_TRUE(gen().EmitCall(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
+ ASSERT_TRUE(gen.EmitCall(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(), std::string(param.hlsl_name) +
"(1.00000000f, 2.00000000f, 3.00000000f)");
}
@@ -254,8 +248,7 @@
FAIL();
}
-using HlslImportData_TripleParam_Int_Test =
- TestHelperBase<testing::TestWithParam<HlslImportData>>;
+using HlslImportData_TripleParam_Int_Test = TestParamHelper<HlslImportData>;
TEST_P(HlslImportData_TripleParam_Int_Test, IntScalar) {
auto param = GetParam();
@@ -273,8 +266,8 @@
std::make_unique<ast::IdentifierExpression>(param.name),
std::move(params));
- ASSERT_TRUE(td().DetermineResultType(&expr)) << td().error();
- ASSERT_TRUE(gen().EmitCall(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
+ ASSERT_TRUE(gen.EmitCall(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(), std::string(param.hlsl_name) + "(1, 2, 3)");
}
INSTANTIATE_TEST_SUITE_P(HlslGeneratorImplTest_Import,
@@ -295,12 +288,12 @@
std::make_unique<ast::IdentifierExpression>("determinant"),
std::move(params));
- mod()->AddGlobalVariable(std::move(var));
+ mod.AddGlobalVariable(std::move(var));
// Register the global
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(td().DetermineResultType(&expr)) << td().error();
- ASSERT_TRUE(gen().EmitCall(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
+ ASSERT_TRUE(gen.EmitCall(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(), std::string("determinant(var)"));
}
diff --git a/src/writer/hlsl/generator_impl_intrinsic_test.cc b/src/writer/hlsl/generator_impl_intrinsic_test.cc
index 78db9f9..37e4eba 100644
--- a/src/writer/hlsl/generator_impl_intrinsic_test.cc
+++ b/src/writer/hlsl/generator_impl_intrinsic_test.cc
@@ -36,10 +36,10 @@
out << data.hlsl_name;
return out;
}
-using HlslIntrinsicTest = TestHelperBase<testing::TestWithParam<IntrinsicData>>;
+using HlslIntrinsicTest = TestParamHelper<IntrinsicData>;
TEST_P(HlslIntrinsicTest, Emit) {
auto param = GetParam();
- EXPECT_EQ(gen().generate_intrinsic_name(param.intrinsic), param.hlsl_name);
+ EXPECT_EQ(gen.generate_intrinsic_name(param.intrinsic), param.hlsl_name);
}
INSTANTIATE_TEST_SUITE_P(
HlslGeneratorImplTest_Intrinsic,
@@ -89,22 +89,22 @@
std::make_unique<ast::IdentifierExpression>("outer_product"),
std::move(params));
- td().RegisterVariableForTesting(a.get());
- td().RegisterVariableForTesting(b.get());
+ td.RegisterVariableForTesting(a.get());
+ td.RegisterVariableForTesting(b.get());
- mod()->AddGlobalVariable(std::move(a));
- mod()->AddGlobalVariable(std::move(b));
+ mod.AddGlobalVariable(std::move(a));
+ mod.AddGlobalVariable(std::move(b));
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(td().DetermineResultType(&call)) << td().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(td.DetermineResultType(&call)) << td.error();
- gen().increment_indent();
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &call)) << gen().error();
+ gen.increment_indent();
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &call)) << gen.error();
EXPECT_EQ(result(), " float3x2(a * b[0], a * b[1], a * b[2])");
}
TEST_F(HlslGeneratorImplTest_Intrinsic, Intrinsic_Bad_Name) {
- EXPECT_EQ(gen().generate_intrinsic_name(ast::Intrinsic::kNone), "");
+ EXPECT_EQ(gen.generate_intrinsic_name(ast::Intrinsic::kNone), "");
}
TEST_F(HlslGeneratorImplTest_Intrinsic, Intrinsic_Call) {
@@ -121,13 +121,13 @@
ast::Variable v1("param1", ast::StorageClass::kFunction, &vec);
ast::Variable v2("param2", ast::StorageClass::kFunction, &vec);
- td().RegisterVariableForTesting(&v1);
- td().RegisterVariableForTesting(&v2);
+ td.RegisterVariableForTesting(&v1);
+ td.RegisterVariableForTesting(&v2);
- ASSERT_TRUE(td().DetermineResultType(&call)) << td().error();
+ ASSERT_TRUE(td.DetermineResultType(&call)) << td.error();
- gen().increment_indent();
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &call)) << gen().error();
+ gen.increment_indent();
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &call)) << gen.error();
EXPECT_EQ(result(), " dot(param1, param2)");
}
diff --git a/src/writer/hlsl/generator_impl_loop_test.cc b/src/writer/hlsl/generator_impl_loop_test.cc
index 576b7b2..7496064 100644
--- a/src/writer/hlsl/generator_impl_loop_test.cc
+++ b/src/writer/hlsl/generator_impl_loop_test.cc
@@ -38,9 +38,9 @@
body->append(std::make_unique<ast::DiscardStatement>());
ast::LoopStatement l(std::move(body), {});
- gen().increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(gen().EmitStatement(out(), &l)) << gen().error();
+ ASSERT_TRUE(gen.EmitStatement(out, &l)) << gen.error();
EXPECT_EQ(result(), R"( for(;;) {
discard;
}
@@ -55,9 +55,9 @@
continuing->append(std::make_unique<ast::ReturnStatement>());
ast::LoopStatement l(std::move(body), std::move(continuing));
- gen().increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(gen().EmitStatement(out(), &l)) << gen().error();
+ ASSERT_TRUE(gen.EmitStatement(out, &l)) << gen.error();
EXPECT_EQ(result(), R"( {
bool tint_hlsl_is_first_1 = true;
for(;;) {
@@ -95,9 +95,9 @@
std::move(lhs), std::move(rhs)));
ast::LoopStatement outer(std::move(body), std::move(continuing));
- gen().increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(gen().EmitStatement(out(), &outer)) << gen().error();
+ ASSERT_TRUE(gen.EmitStatement(out, &outer)) << gen.error();
EXPECT_EQ(result(), R"( {
bool tint_hlsl_is_first_1 = true;
for(;;) {
@@ -165,9 +165,9 @@
std::move(lhs), std::move(rhs)));
ast::LoopStatement outer(std::move(body), std::move(continuing));
- gen().increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(gen().EmitStatement(out(), &outer)) << gen().error();
+ ASSERT_TRUE(gen.EmitStatement(out, &outer)) << gen.error();
EXPECT_EQ(result(), R"( {
bool tint_hlsl_is_first_1 = true;
float lhs;
diff --git a/src/writer/hlsl/generator_impl_member_accessor_test.cc b/src/writer/hlsl/generator_impl_member_accessor_test.cc
index 5a345c2..57112e8 100644
--- a/src/writer/hlsl/generator_impl_member_accessor_test.cc
+++ b/src/writer/hlsl/generator_impl_member_accessor_test.cc
@@ -69,12 +69,12 @@
ast::MemberAccessorExpression expr(std::move(str), std::move(mem));
- td().RegisterVariableForTesting(str_var.get());
- gen().register_global(str_var.get());
- mod()->AddGlobalVariable(std::move(str_var));
+ td.RegisterVariableForTesting(str_var.get());
+ gen.register_global(str_var.get());
+ mod.AddGlobalVariable(std::move(str_var));
- ASSERT_TRUE(td().DetermineResultType(&expr)) << td().error();
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(), "str.mem");
}
@@ -117,14 +117,14 @@
std::make_unique<ast::IdentifierExpression>("data"),
std::make_unique<ast::IdentifierExpression>("b"));
- td().RegisterVariableForTesting(coord_var.get());
- gen().register_global(coord_var.get());
- mod()->AddGlobalVariable(std::move(coord_var));
+ td.RegisterVariableForTesting(coord_var.get());
+ gen.register_global(coord_var.get());
+ mod.AddGlobalVariable(std::move(coord_var));
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(td().DetermineResultType(&expr));
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(td.DetermineResultType(&expr));
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(), "asfloat(data.Load(4))");
}
@@ -167,14 +167,14 @@
std::make_unique<ast::IdentifierExpression>("data"),
std::make_unique<ast::IdentifierExpression>("a"));
- td().RegisterVariableForTesting(coord_var.get());
- gen().register_global(coord_var.get());
- mod()->AddGlobalVariable(std::move(coord_var));
+ td.RegisterVariableForTesting(coord_var.get());
+ gen.register_global(coord_var.get());
+ mod.AddGlobalVariable(std::move(coord_var));
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(td().DetermineResultType(&expr));
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(td.DetermineResultType(&expr));
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(), "asint(data.Load(0))");
}
TEST_F(HlslGeneratorImplTest_MemberAccessor,
@@ -225,17 +225,17 @@
ast::AssignmentStatement assign(std::move(lhs), std::move(rhs));
- td().RegisterVariableForTesting(coord_var.get());
- td().RegisterVariableForTesting(b_var.get());
- gen().register_global(coord_var.get());
- gen().register_global(b_var.get());
- mod()->AddGlobalVariable(std::move(coord_var));
- mod()->AddGlobalVariable(std::move(b_var));
+ td.RegisterVariableForTesting(coord_var.get());
+ td.RegisterVariableForTesting(b_var.get());
+ gen.register_global(coord_var.get());
+ gen.register_global(b_var.get());
+ mod.AddGlobalVariable(std::move(coord_var));
+ mod.AddGlobalVariable(std::move(b_var));
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(td().DetermineResultType(&assign));
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(td.DetermineResultType(&assign));
- ASSERT_TRUE(gen().EmitStatement(out(), &assign)) << gen().error();
+ ASSERT_TRUE(gen.EmitStatement(out, &assign)) << gen.error();
EXPECT_EQ(result(), R"(matrix<float, 3, 2> _tint_tmp = b;
data.Store3(4 + 0, asuint(_tint_tmp[0]));
data.Store3(4 + 16, asuint(_tint_tmp[1]));
@@ -289,14 +289,14 @@
ast::AssignmentStatement assign(std::move(lhs), std::move(rhs));
- td().RegisterVariableForTesting(coord_var.get());
- gen().register_global(coord_var.get());
- mod()->AddGlobalVariable(std::move(coord_var));
+ td.RegisterVariableForTesting(coord_var.get());
+ gen.register_global(coord_var.get());
+ mod.AddGlobalVariable(std::move(coord_var));
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(td().DetermineResultType(&assign));
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(td.DetermineResultType(&assign));
- ASSERT_TRUE(gen().EmitStatement(out(), &assign)) << gen().error();
+ ASSERT_TRUE(gen.EmitStatement(out, &assign)) << gen.error();
EXPECT_EQ(
result(),
R"(matrix<float, 3, 2> _tint_tmp = matrix<float, 3, 2>(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
@@ -346,14 +346,14 @@
std::make_unique<ast::IdentifierExpression>("data"),
std::make_unique<ast::IdentifierExpression>("a"));
- td().RegisterVariableForTesting(coord_var.get());
- gen().register_global(coord_var.get());
- mod()->AddGlobalVariable(std::move(coord_var));
+ td.RegisterVariableForTesting(coord_var.get());
+ gen.register_global(coord_var.get());
+ mod.AddGlobalVariable(std::move(coord_var));
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(td().DetermineResultType(&expr));
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(td.DetermineResultType(&expr));
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(),
"asfloat(matrix<uint, 2, 3>(data.Load2(4 + 0), data.Load2(4 + 8), "
"data.Load2(4 + 16)))");
@@ -403,14 +403,14 @@
std::make_unique<ast::IdentifierExpression>("data"),
std::make_unique<ast::IdentifierExpression>("a"));
- td().RegisterVariableForTesting(coord_var.get());
- gen().register_global(coord_var.get());
- mod()->AddGlobalVariable(std::move(coord_var));
+ td.RegisterVariableForTesting(coord_var.get());
+ gen.register_global(coord_var.get());
+ mod.AddGlobalVariable(std::move(coord_var));
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(td().DetermineResultType(&expr));
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(td.DetermineResultType(&expr));
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &expr)) << gen.error();
EXPECT_EQ(
result(),
"asfloat(matrix<uint, 3, 2>(data.Load3(4 + 0), data.Load3(4 + 16)))");
@@ -451,14 +451,14 @@
std::make_unique<ast::IdentifierExpression>("data"),
std::make_unique<ast::IdentifierExpression>("a"));
- td().RegisterVariableForTesting(coord_var.get());
- gen().register_global(coord_var.get());
- mod()->AddGlobalVariable(std::move(coord_var));
+ td.RegisterVariableForTesting(coord_var.get());
+ gen.register_global(coord_var.get());
+ mod.AddGlobalVariable(std::move(coord_var));
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(td().DetermineResultType(&expr));
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(td.DetermineResultType(&expr));
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(),
"asfloat(matrix<uint, 3, 3>(data.Load3(0 + 0), data.Load3(0 + 16), "
"data.Load3(0 + 32)))");
@@ -510,14 +510,14 @@
std::make_unique<ast::ScalarConstructorExpression>(
std::make_unique<ast::SintLiteral>(&i32, 1)));
- td().RegisterVariableForTesting(coord_var.get());
- gen().register_global(coord_var.get());
- mod()->AddGlobalVariable(std::move(coord_var));
+ td.RegisterVariableForTesting(coord_var.get());
+ gen.register_global(coord_var.get());
+ mod.AddGlobalVariable(std::move(coord_var));
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(td().DetermineResultType(&expr));
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(td.DetermineResultType(&expr));
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(), "asfloat(data.Load((4 * 1) + (16 * 2) + 16))");
}
@@ -560,14 +560,14 @@
std::make_unique<ast::ScalarConstructorExpression>(
std::make_unique<ast::SintLiteral>(&i32, 2)));
- td().RegisterVariableForTesting(coord_var.get());
- gen().register_global(coord_var.get());
- mod()->AddGlobalVariable(std::move(coord_var));
+ td.RegisterVariableForTesting(coord_var.get());
+ gen.register_global(coord_var.get());
+ mod.AddGlobalVariable(std::move(coord_var));
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(td().DetermineResultType(&expr)) << td().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(), "asint(data.Load((4 * 2) + 0))");
}
@@ -618,14 +618,14 @@
std::make_unique<ast::ScalarConstructorExpression>(
std::make_unique<ast::SintLiteral>(&i32, 3))));
- td().RegisterVariableForTesting(coord_var.get());
- gen().register_global(coord_var.get());
- mod()->AddGlobalVariable(std::move(coord_var));
+ td.RegisterVariableForTesting(coord_var.get());
+ gen.register_global(coord_var.get());
+ mod.AddGlobalVariable(std::move(coord_var));
- ASSERT_TRUE(td().Determine()) << td().error();
- ASSERT_TRUE(td().DetermineResultType(&expr)) << td().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
+ ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(), "asint(data.Load((4 * ((2 + 4) - 3)) + 0))");
}
@@ -665,11 +665,11 @@
std::make_unique<ast::DecoratedVariable>(std::make_unique<ast::Variable>(
"data", ast::StorageClass::kStorageBuffer, &s));
- td().RegisterVariableForTesting(coord_var.get());
- gen().register_global(coord_var.get());
- mod()->AddGlobalVariable(std::move(coord_var));
+ td.RegisterVariableForTesting(coord_var.get());
+ gen.register_global(coord_var.get());
+ mod.AddGlobalVariable(std::move(coord_var));
- ASSERT_TRUE(td().Determine()) << td().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
auto lhs = std::make_unique<ast::MemberAccessorExpression>(
std::make_unique<ast::IdentifierExpression>("data"),
@@ -678,8 +678,8 @@
std::make_unique<ast::FloatLiteral>(&f32, 2.0f));
ast::AssignmentStatement assign(std::move(lhs), std::move(rhs));
- ASSERT_TRUE(td().DetermineResultType(&assign));
- ASSERT_TRUE(gen().EmitStatement(out(), &assign)) << gen().error();
+ ASSERT_TRUE(td.DetermineResultType(&assign));
+ ASSERT_TRUE(gen.EmitStatement(out, &assign)) << gen.error();
EXPECT_EQ(result(), R"(data.Store(4, asuint(2.00000000f));
)");
}
@@ -717,11 +717,11 @@
std::make_unique<ast::DecoratedVariable>(std::make_unique<ast::Variable>(
"data", ast::StorageClass::kStorageBuffer, &s));
- td().RegisterVariableForTesting(coord_var.get());
- gen().register_global(coord_var.get());
- mod()->AddGlobalVariable(std::move(coord_var));
+ td.RegisterVariableForTesting(coord_var.get());
+ gen.register_global(coord_var.get());
+ mod.AddGlobalVariable(std::move(coord_var));
- ASSERT_TRUE(td().Determine()) << td().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
auto lhs = std::make_unique<ast::ArrayAccessorExpression>(
std::make_unique<ast::MemberAccessorExpression>(
@@ -733,8 +733,8 @@
std::make_unique<ast::SintLiteral>(&i32, 2));
ast::AssignmentStatement assign(std::move(lhs), std::move(rhs));
- ASSERT_TRUE(td().DetermineResultType(&assign)) << td().error();
- ASSERT_TRUE(gen().EmitStatement(out(), &assign)) << gen().error();
+ ASSERT_TRUE(td.DetermineResultType(&assign)) << td.error();
+ ASSERT_TRUE(gen.EmitStatement(out, &assign)) << gen.error();
EXPECT_EQ(result(), R"(data.Store((4 * 2) + 0, asuint(2));
)");
}
@@ -775,11 +775,11 @@
std::make_unique<ast::DecoratedVariable>(std::make_unique<ast::Variable>(
"data", ast::StorageClass::kStorageBuffer, &s));
- td().RegisterVariableForTesting(coord_var.get());
- gen().register_global(coord_var.get());
- mod()->AddGlobalVariable(std::move(coord_var));
+ td.RegisterVariableForTesting(coord_var.get());
+ gen.register_global(coord_var.get());
+ mod.AddGlobalVariable(std::move(coord_var));
- ASSERT_TRUE(td().Determine()) << td().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
auto lhs = std::make_unique<ast::MemberAccessorExpression>(
std::make_unique<ast::IdentifierExpression>("data"),
@@ -788,8 +788,8 @@
std::make_unique<ast::SintLiteral>(&i32, 2));
ast::AssignmentStatement assign(std::move(lhs), std::move(rhs));
- ASSERT_TRUE(td().DetermineResultType(&assign));
- ASSERT_TRUE(gen().EmitStatement(out(), &assign)) << gen().error();
+ ASSERT_TRUE(td.DetermineResultType(&assign));
+ ASSERT_TRUE(gen.EmitStatement(out, &assign)) << gen.error();
EXPECT_EQ(result(), R"(data.Store(0, asuint(2));
)");
}
@@ -832,18 +832,18 @@
std::make_unique<ast::DecoratedVariable>(std::make_unique<ast::Variable>(
"data", ast::StorageClass::kStorageBuffer, &s));
- td().RegisterVariableForTesting(coord_var.get());
- gen().register_global(coord_var.get());
- mod()->AddGlobalVariable(std::move(coord_var));
+ td.RegisterVariableForTesting(coord_var.get());
+ gen.register_global(coord_var.get());
+ mod.AddGlobalVariable(std::move(coord_var));
- ASSERT_TRUE(td().Determine()) << td().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
ast::MemberAccessorExpression expr(
std::make_unique<ast::IdentifierExpression>("data"),
std::make_unique<ast::IdentifierExpression>("b"));
- ASSERT_TRUE(td().DetermineResultType(&expr));
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(td.DetermineResultType(&expr));
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(), "asfloat(data.Load3(16))");
}
@@ -885,11 +885,11 @@
std::make_unique<ast::DecoratedVariable>(std::make_unique<ast::Variable>(
"data", ast::StorageClass::kStorageBuffer, &s));
- td().RegisterVariableForTesting(coord_var.get());
- gen().register_global(coord_var.get());
- mod()->AddGlobalVariable(std::move(coord_var));
+ td.RegisterVariableForTesting(coord_var.get());
+ gen.register_global(coord_var.get());
+ mod.AddGlobalVariable(std::move(coord_var));
- ASSERT_TRUE(td().Determine()) << td().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
auto lit1 = std::make_unique<ast::FloatLiteral>(&f32, 1.f);
auto lit2 = std::make_unique<ast::FloatLiteral>(&f32, 2.f);
@@ -910,8 +910,8 @@
ast::AssignmentStatement assign(std::move(lhs), std::move(rhs));
- ASSERT_TRUE(td().DetermineResultType(&assign));
- ASSERT_TRUE(gen().EmitStatement(out(), &assign)) << gen().error();
+ ASSERT_TRUE(td.DetermineResultType(&assign));
+ ASSERT_TRUE(gen.EmitStatement(out, &assign)) << gen.error();
EXPECT_EQ(
result(),
R"(data.Store3(16, asuint(vector<float, 3>(1.00000000f, 2.00000000f, 3.00000000f)));
@@ -974,11 +974,11 @@
std::make_unique<ast::DecoratedVariable>(std::make_unique<ast::Variable>(
"data", ast::StorageClass::kStorageBuffer, &pre_struct));
- td().RegisterVariableForTesting(coord_var.get());
- gen().register_global(coord_var.get());
- mod()->AddGlobalVariable(std::move(coord_var));
+ td.RegisterVariableForTesting(coord_var.get());
+ gen.register_global(coord_var.get());
+ mod.AddGlobalVariable(std::move(coord_var));
- ASSERT_TRUE(td().Determine()) << td().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
ast::MemberAccessorExpression expr(
std::make_unique<ast::ArrayAccessorExpression>(
@@ -989,8 +989,8 @@
std::make_unique<ast::SintLiteral>(&i32, 2))),
std::make_unique<ast::IdentifierExpression>("b"));
- ASSERT_TRUE(td().DetermineResultType(&expr));
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(td.DetermineResultType(&expr));
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(), "asfloat(data.Load3(16 + (32 * 2) + 0))");
}
@@ -1050,11 +1050,11 @@
std::make_unique<ast::DecoratedVariable>(std::make_unique<ast::Variable>(
"data", ast::StorageClass::kStorageBuffer, &pre_struct));
- td().RegisterVariableForTesting(coord_var.get());
- gen().register_global(coord_var.get());
- mod()->AddGlobalVariable(std::move(coord_var));
+ td.RegisterVariableForTesting(coord_var.get());
+ gen.register_global(coord_var.get());
+ mod.AddGlobalVariable(std::move(coord_var));
- ASSERT_TRUE(td().Determine()) << td().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
ast::MemberAccessorExpression expr(
std::make_unique<ast::MemberAccessorExpression>(
@@ -1067,8 +1067,8 @@
std::make_unique<ast::IdentifierExpression>("b")),
std::make_unique<ast::IdentifierExpression>("xy"));
- ASSERT_TRUE(td().DetermineResultType(&expr));
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(td.DetermineResultType(&expr));
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(), "asfloat(data.Load3(16 + (32 * 2) + 0)).xy");
}
@@ -1129,11 +1129,11 @@
std::make_unique<ast::DecoratedVariable>(std::make_unique<ast::Variable>(
"data", ast::StorageClass::kStorageBuffer, &pre_struct));
- td().RegisterVariableForTesting(coord_var.get());
- gen().register_global(coord_var.get());
- mod()->AddGlobalVariable(std::move(coord_var));
+ td.RegisterVariableForTesting(coord_var.get());
+ gen.register_global(coord_var.get());
+ mod.AddGlobalVariable(std::move(coord_var));
- ASSERT_TRUE(td().Determine()) << td().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
ast::MemberAccessorExpression expr(
std::make_unique<ast::MemberAccessorExpression>(
@@ -1146,8 +1146,8 @@
std::make_unique<ast::IdentifierExpression>("b")),
std::make_unique<ast::IdentifierExpression>("g"));
- ASSERT_TRUE(td().DetermineResultType(&expr));
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(td.DetermineResultType(&expr));
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(), "asfloat(data.Load((4 * 1) + 16 + (32 * 2) + 0))");
}
@@ -1207,11 +1207,11 @@
std::make_unique<ast::DecoratedVariable>(std::make_unique<ast::Variable>(
"data", ast::StorageClass::kStorageBuffer, &pre_struct));
- td().RegisterVariableForTesting(coord_var.get());
- gen().register_global(coord_var.get());
- mod()->AddGlobalVariable(std::move(coord_var));
+ td.RegisterVariableForTesting(coord_var.get());
+ gen.register_global(coord_var.get());
+ mod.AddGlobalVariable(std::move(coord_var));
- ASSERT_TRUE(td().Determine()) << td().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
ast::ArrayAccessorExpression expr(
std::make_unique<ast::MemberAccessorExpression>(
@@ -1225,8 +1225,8 @@
std::make_unique<ast::ScalarConstructorExpression>(
std::make_unique<ast::SintLiteral>(&i32, 1)));
- ASSERT_TRUE(td().DetermineResultType(&expr));
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &expr)) << gen().error();
+ ASSERT_TRUE(td.DetermineResultType(&expr));
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &expr)) << gen.error();
EXPECT_EQ(result(), "asfloat(data.Load((4 * 1) + 16 + (32 * 2) + 0))");
}
@@ -1286,11 +1286,11 @@
std::make_unique<ast::DecoratedVariable>(std::make_unique<ast::Variable>(
"data", ast::StorageClass::kStorageBuffer, &pre_struct));
- td().RegisterVariableForTesting(coord_var.get());
- gen().register_global(coord_var.get());
- mod()->AddGlobalVariable(std::move(coord_var));
+ td.RegisterVariableForTesting(coord_var.get());
+ gen.register_global(coord_var.get());
+ mod.AddGlobalVariable(std::move(coord_var));
- ASSERT_TRUE(td().Determine()) << td().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
auto lhs = std::make_unique<ast::MemberAccessorExpression>(
std::make_unique<ast::ArrayAccessorExpression>(
@@ -1317,8 +1317,8 @@
ast::AssignmentStatement assign(std::move(lhs), std::move(rhs));
- ASSERT_TRUE(td().DetermineResultType(&assign));
- ASSERT_TRUE(gen().EmitStatement(out(), &assign)) << gen().error();
+ ASSERT_TRUE(td.DetermineResultType(&assign));
+ ASSERT_TRUE(gen.EmitStatement(out, &assign)) << gen.error();
EXPECT_EQ(
result(),
R"(data.Store3(16 + (32 * 2) + 0, asuint(vector<float, 3>(1.00000000f, 2.00000000f, 3.00000000f)));
@@ -1381,11 +1381,11 @@
std::make_unique<ast::DecoratedVariable>(std::make_unique<ast::Variable>(
"data", ast::StorageClass::kStorageBuffer, &pre_struct));
- td().RegisterVariableForTesting(coord_var.get());
- gen().register_global(coord_var.get());
- mod()->AddGlobalVariable(std::move(coord_var));
+ td.RegisterVariableForTesting(coord_var.get());
+ gen.register_global(coord_var.get());
+ mod.AddGlobalVariable(std::move(coord_var));
- ASSERT_TRUE(td().Determine()) << td().error();
+ ASSERT_TRUE(td.Determine()) << td.error();
auto lhs = std::make_unique<ast::MemberAccessorExpression>(
std::make_unique<ast::MemberAccessorExpression>(
@@ -1403,8 +1403,8 @@
ast::AssignmentStatement assign(std::move(lhs), std::move(rhs));
- ASSERT_TRUE(td().DetermineResultType(&assign));
- ASSERT_TRUE(gen().EmitStatement(out(), &assign)) << gen().error();
+ ASSERT_TRUE(td.DetermineResultType(&assign));
+ ASSERT_TRUE(gen.EmitStatement(out, &assign)) << gen.error();
EXPECT_EQ(result(),
R"(data.Store((4 * 1) + 16 + (32 * 2) + 0, asuint(1.00000000f));
)");
diff --git a/src/writer/hlsl/generator_impl_module_constant_test.cc b/src/writer/hlsl/generator_impl_module_constant_test.cc
index a63b7db..93dd49c 100644
--- a/src/writer/hlsl/generator_impl_module_constant_test.cc
+++ b/src/writer/hlsl/generator_impl_module_constant_test.cc
@@ -51,8 +51,7 @@
var->set_constructor(
std::make_unique<ast::TypeConstructorExpression>(&ary, std::move(exprs)));
- ASSERT_TRUE(gen().EmitProgramConstVariable(out(), var.get()))
- << gen().error();
+ ASSERT_TRUE(gen.EmitProgramConstVariable(out, var.get())) << gen.error();
EXPECT_EQ(
result(),
"static const float pos[3] = {1.00000000f, 2.00000000f, 3.00000000f};\n");
@@ -71,8 +70,7 @@
var->set_constructor(std::make_unique<ast::ScalarConstructorExpression>(
std::make_unique<ast::FloatLiteral>(&f32, 3.0f)));
- ASSERT_TRUE(gen().EmitProgramConstVariable(out(), var.get()))
- << gen().error();
+ ASSERT_TRUE(gen.EmitProgramConstVariable(out, var.get())) << gen.error();
EXPECT_EQ(result(), R"(#ifndef WGSL_SPEC_CONSTANT_23
#define WGSL_SPEC_CONSTANT_23 3.00000000f
#endif
@@ -92,8 +90,7 @@
var->set_decorations(std::move(decos));
var->set_is_const(true);
- ASSERT_TRUE(gen().EmitProgramConstVariable(out(), var.get()))
- << gen().error();
+ ASSERT_TRUE(gen.EmitProgramConstVariable(out, var.get())) << gen.error();
EXPECT_EQ(result(), R"(#ifndef WGSL_SPEC_CONSTANT_23
#error spec constant required for constant id 23
#endif
diff --git a/src/writer/hlsl/generator_impl_return_test.cc b/src/writer/hlsl/generator_impl_return_test.cc
index d3b785a..ee90420 100644
--- a/src/writer/hlsl/generator_impl_return_test.cc
+++ b/src/writer/hlsl/generator_impl_return_test.cc
@@ -29,18 +29,18 @@
TEST_F(HlslGeneratorImplTest_Return, Emit_Return) {
ast::ReturnStatement r;
- gen().increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(gen().EmitStatement(out(), &r)) << gen().error();
+ ASSERT_TRUE(gen.EmitStatement(out, &r)) << gen.error();
EXPECT_EQ(result(), " return;\n");
}
TEST_F(HlslGeneratorImplTest_Return, Emit_ReturnWithValue) {
auto expr = std::make_unique<ast::IdentifierExpression>("expr");
ast::ReturnStatement r(std::move(expr));
- gen().increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(gen().EmitStatement(out(), &r)) << gen().error();
+ ASSERT_TRUE(gen.EmitStatement(out, &r)) << gen.error();
EXPECT_EQ(result(), " return expr;\n");
}
diff --git a/src/writer/hlsl/generator_impl_switch_test.cc b/src/writer/hlsl/generator_impl_switch_test.cc
index c8e7771..3768c0d 100644
--- a/src/writer/hlsl/generator_impl_switch_test.cc
+++ b/src/writer/hlsl/generator_impl_switch_test.cc
@@ -52,9 +52,9 @@
auto cond = std::make_unique<ast::IdentifierExpression>("cond");
ast::SwitchStatement s(std::move(cond), std::move(body));
- gen().increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(gen().EmitStatement(out(), &s)) << gen().error();
+ ASSERT_TRUE(gen.EmitStatement(out, &s)) << gen.error();
EXPECT_EQ(result(), R"( switch(cond) {
case 5: {
break;
diff --git a/src/writer/hlsl/generator_impl_test.cc b/src/writer/hlsl/generator_impl_test.cc
index 26b7003..22a6613 100644
--- a/src/writer/hlsl/generator_impl_test.cc
+++ b/src/writer/hlsl/generator_impl_test.cc
@@ -31,9 +31,9 @@
ast::type::VoidType void_type;
auto func = std::make_unique<ast::Function>("my_func", ast::VariableList{},
&void_type);
- mod()->AddFunction(std::move(func));
+ mod.AddFunction(std::move(func));
- ASSERT_TRUE(gen().Generate(out())) << gen().error();
+ ASSERT_TRUE(gen.Generate(out)) << gen.error();
EXPECT_EQ(result(), R"(void my_func() {
}
@@ -41,22 +41,22 @@
}
TEST_F(HlslGeneratorImplTest, InputStructName) {
- ASSERT_EQ(gen().generate_name("func_main_in"), "func_main_in");
+ ASSERT_EQ(gen.generate_name("func_main_in"), "func_main_in");
}
TEST_F(HlslGeneratorImplTest, InputStructName_ConflictWithExisting) {
// Register the struct name as existing.
- auto* namer = gen().namer_for_testing();
+ auto* namer = gen.namer_for_testing();
namer->NameFor("func_main_out");
- ASSERT_EQ(gen().generate_name("func_main_out"), "func_main_out_0");
+ ASSERT_EQ(gen.generate_name("func_main_out"), "func_main_out_0");
}
TEST_F(HlslGeneratorImplTest, NameConflictWith_InputStructName) {
- ASSERT_EQ(gen().generate_name("func_main_in"), "func_main_in");
+ ASSERT_EQ(gen.generate_name("func_main_in"), "func_main_in");
ast::IdentifierExpression ident("func_main_in");
- ASSERT_TRUE(gen().EmitIdentifier(pre(), out(), &ident));
+ ASSERT_TRUE(gen.EmitIdentifier(pre, out, &ident));
EXPECT_EQ(result(), "func_main_in_0");
}
@@ -68,11 +68,10 @@
out << data.builtin;
return out;
}
-using HlslBuiltinConversionTest =
- TestHelperBase<testing::TestWithParam<HlslBuiltinData>>;
+using HlslBuiltinConversionTest = TestParamHelper<HlslBuiltinData>;
TEST_P(HlslBuiltinConversionTest, Emit) {
auto params = GetParam();
- EXPECT_EQ(gen().builtin_to_attribute(params.builtin),
+ EXPECT_EQ(gen.builtin_to_attribute(params.builtin),
std::string(params.attribute_name));
}
INSTANTIATE_TEST_SUITE_P(
diff --git a/src/writer/hlsl/generator_impl_type_test.cc b/src/writer/hlsl/generator_impl_type_test.cc
index 8cac130..ecab2d4 100644
--- a/src/writer/hlsl/generator_impl_type_test.cc
+++ b/src/writer/hlsl/generator_impl_type_test.cc
@@ -47,7 +47,7 @@
ast::type::F32Type f32;
ast::type::AliasType alias("alias", &f32);
- ASSERT_TRUE(gen().EmitType(out(), &alias, "")) << gen().error();
+ ASSERT_TRUE(gen.EmitType(out, &alias, "")) << gen.error();
EXPECT_EQ(result(), "alias");
}
@@ -55,7 +55,7 @@
ast::type::F32Type f32;
ast::type::AliasType alias("bool", &f32);
- ASSERT_TRUE(gen().EmitType(out(), &alias, "")) << gen().error();
+ ASSERT_TRUE(gen.EmitType(out, &alias, "")) << gen.error();
EXPECT_EQ(result(), "bool_tint_0");
}
@@ -63,7 +63,7 @@
ast::type::BoolType b;
ast::type::ArrayType a(&b, 4);
- ASSERT_TRUE(gen().EmitType(out(), &a, "ary")) << gen().error();
+ ASSERT_TRUE(gen.EmitType(out, &a, "ary")) << gen.error();
EXPECT_EQ(result(), "bool ary[4]");
}
@@ -72,7 +72,7 @@
ast::type::ArrayType a(&b, 4);
ast::type::ArrayType c(&a, 5);
- ASSERT_TRUE(gen().EmitType(out(), &c, "ary")) << gen().error();
+ ASSERT_TRUE(gen.EmitType(out, &c, "ary")) << gen.error();
EXPECT_EQ(result(), "bool ary[5][4]");
}
@@ -84,7 +84,7 @@
ast::type::ArrayType c(&a, 5);
ast::type::ArrayType d(&c);
- ASSERT_TRUE(gen().EmitType(out(), &c, "ary")) << gen().error();
+ ASSERT_TRUE(gen.EmitType(out, &c, "ary")) << gen.error();
EXPECT_EQ(result(), "bool ary[5][4][1]");
}
@@ -94,7 +94,7 @@
ast::type::ArrayType c(&a, 5);
ast::type::ArrayType d(&c, 6);
- ASSERT_TRUE(gen().EmitType(out(), &d, "ary")) << gen().error();
+ ASSERT_TRUE(gen.EmitType(out, &d, "ary")) << gen.error();
EXPECT_EQ(result(), "bool ary[6][5][4]");
}
@@ -102,7 +102,7 @@
ast::type::BoolType b;
ast::type::ArrayType a(&b, 4);
- ASSERT_TRUE(gen().EmitType(out(), &a, "bool")) << gen().error();
+ ASSERT_TRUE(gen.EmitType(out, &a, "bool")) << gen.error();
EXPECT_EQ(result(), "bool bool_tint_0[4]");
}
@@ -110,7 +110,7 @@
ast::type::BoolType b;
ast::type::ArrayType a(&b, 4);
- ASSERT_TRUE(gen().EmitType(out(), &a, "")) << gen().error();
+ ASSERT_TRUE(gen.EmitType(out, &a, "")) << gen.error();
EXPECT_EQ(result(), "bool[4]");
}
@@ -118,7 +118,7 @@
ast::type::BoolType b;
ast::type::ArrayType a(&b);
- ASSERT_TRUE(gen().EmitType(out(), &a, "ary")) << gen().error();
+ ASSERT_TRUE(gen.EmitType(out, &a, "ary")) << gen.error();
EXPECT_EQ(result(), "bool ary[]");
}
@@ -127,28 +127,28 @@
ast::type::BoolType b;
ast::type::ArrayType a(&b);
- ASSERT_TRUE(gen().EmitType(out(), &a, "double")) << gen().error();
+ ASSERT_TRUE(gen.EmitType(out, &a, "double")) << gen.error();
EXPECT_EQ(result(), "bool double_tint_0[]");
}
TEST_F(HlslGeneratorImplTest_Type, EmitType_Bool) {
ast::type::BoolType b;
- ASSERT_TRUE(gen().EmitType(out(), &b, "")) << gen().error();
+ ASSERT_TRUE(gen.EmitType(out, &b, "")) << gen.error();
EXPECT_EQ(result(), "bool");
}
TEST_F(HlslGeneratorImplTest_Type, EmitType_F32) {
ast::type::F32Type f32;
- ASSERT_TRUE(gen().EmitType(out(), &f32, "")) << gen().error();
+ ASSERT_TRUE(gen.EmitType(out, &f32, "")) << gen.error();
EXPECT_EQ(result(), "float");
}
TEST_F(HlslGeneratorImplTest_Type, EmitType_I32) {
ast::type::I32Type i32;
- ASSERT_TRUE(gen().EmitType(out(), &i32, "")) << gen().error();
+ ASSERT_TRUE(gen.EmitType(out, &i32, "")) << gen.error();
EXPECT_EQ(result(), "int");
}
@@ -156,7 +156,7 @@
ast::type::F32Type f32;
ast::type::MatrixType m(&f32, 3, 2);
- ASSERT_TRUE(gen().EmitType(out(), &m, "")) << gen().error();
+ ASSERT_TRUE(gen.EmitType(out, &m, "")) << gen.error();
EXPECT_EQ(result(), "matrix<float, 3, 2>");
}
@@ -165,7 +165,7 @@
ast::type::F32Type f32;
ast::type::PointerType p(&f32, ast::StorageClass::kWorkgroup);
- ASSERT_TRUE(gen().EmitType(out(), &p, "")) << gen().error();
+ ASSERT_TRUE(gen.EmitType(out, &p, "")) << gen.error();
EXPECT_EQ(result(), "float*");
}
@@ -188,7 +188,7 @@
ast::type::StructType s("S", std::move(str));
- ASSERT_TRUE(gen().EmitStructType(out(), &s, "S")) << gen().error();
+ ASSERT_TRUE(gen.EmitStructType(out, &s, "S")) << gen.error();
EXPECT_EQ(result(), R"(struct S {
int a;
float b;
@@ -215,7 +215,7 @@
ast::type::StructType s("S", std::move(str));
- ASSERT_TRUE(gen().EmitType(out(), &s, "")) << gen().error();
+ ASSERT_TRUE(gen.EmitType(out, &s, "")) << gen.error();
EXPECT_EQ(result(), "S");
}
@@ -246,7 +246,7 @@
ast::type::StructType s("S", std::move(str));
- ASSERT_TRUE(gen().EmitType(out(), &s, "")) << gen().error();
+ ASSERT_TRUE(gen.EmitType(out, &s, "")) << gen.error();
EXPECT_EQ(result(), R"(struct {
int8_t pad_0[4];
int a;
@@ -274,7 +274,7 @@
ast::type::StructType s("S", std::move(str));
- ASSERT_TRUE(gen().EmitStructType(out(), &s, "S")) << gen().error();
+ ASSERT_TRUE(gen.EmitStructType(out, &s, "S")) << gen.error();
EXPECT_EQ(result(), R"(struct S {
int double_tint_0;
float float_tint_0;
@@ -305,7 +305,7 @@
ast::type::StructType s("S", std::move(str));
- ASSERT_TRUE(gen().EmitStructType(out(), &s, "B")) << gen().error();
+ ASSERT_TRUE(gen.EmitStructType(out, &s, "B")) << gen.error();
EXPECT_EQ(result(), R"(struct B {
int a;
float b;
@@ -315,7 +315,7 @@
TEST_F(HlslGeneratorImplTest_Type, EmitType_U32) {
ast::type::U32Type u32;
- ASSERT_TRUE(gen().EmitType(out(), &u32, "")) << gen().error();
+ ASSERT_TRUE(gen.EmitType(out, &u32, "")) << gen.error();
EXPECT_EQ(result(), "uint");
}
@@ -323,28 +323,28 @@
ast::type::F32Type f32;
ast::type::VectorType v(&f32, 3);
- ASSERT_TRUE(gen().EmitType(out(), &v, "")) << gen().error();
+ ASSERT_TRUE(gen.EmitType(out, &v, "")) << gen.error();
EXPECT_EQ(result(), "vector<float, 3>");
}
TEST_F(HlslGeneratorImplTest_Type, EmitType_Void) {
ast::type::VoidType v;
- ASSERT_TRUE(gen().EmitType(out(), &v, "")) << gen().error();
+ ASSERT_TRUE(gen.EmitType(out, &v, "")) << gen.error();
EXPECT_EQ(result(), "void");
}
TEST_F(HlslGeneratorImplTest_Type, EmitSampler) {
ast::type::SamplerType sampler(ast::type::SamplerKind::kSampler);
- ASSERT_TRUE(gen().EmitType(out(), &sampler, "")) << gen().error();
+ ASSERT_TRUE(gen.EmitType(out, &sampler, "")) << gen.error();
EXPECT_EQ(result(), "SamplerState");
}
TEST_F(HlslGeneratorImplTest_Type, EmitSamplerComparison) {
ast::type::SamplerType sampler(ast::type::SamplerKind::kComparisonSampler);
- ASSERT_TRUE(gen().EmitType(out(), &sampler, "")) << gen().error();
+ ASSERT_TRUE(gen.EmitType(out, &sampler, "")) << gen.error();
EXPECT_EQ(result(), "SamplerComparisonState");
}
@@ -356,14 +356,13 @@
out << data.dim;
return out;
}
-using HlslDepthtexturesTest =
- TestHelperBase<testing::TestWithParam<HlslDepthTextureData>>;
+using HlslDepthtexturesTest = TestParamHelper<HlslDepthTextureData>;
TEST_P(HlslDepthtexturesTest, Emit) {
auto params = GetParam();
ast::type::DepthTextureType s(params.dim);
- ASSERT_TRUE(gen().EmitType(out(), &s, "")) << gen().error();
+ ASSERT_TRUE(gen.EmitType(out, &s, "")) << gen.error();
EXPECT_EQ(result(), params.result);
}
INSTANTIATE_TEST_SUITE_P(
@@ -385,15 +384,14 @@
out << data.dim;
return out;
}
-using HlslSampledtexturesTest =
- TestHelperBase<testing::TestWithParam<HlslTextureData>>;
+using HlslSampledtexturesTest = TestParamHelper<HlslTextureData>;
TEST_P(HlslSampledtexturesTest, Emit) {
auto params = GetParam();
ast::type::F32Type f32;
ast::type::SampledTextureType s(params.dim, &f32);
- ASSERT_TRUE(gen().EmitType(out(), &s, "")) << gen().error();
+ ASSERT_TRUE(gen.EmitType(out, &s, "")) << gen.error();
EXPECT_EQ(result(), params.result);
}
INSTANTIATE_TEST_SUITE_P(
@@ -415,7 +413,7 @@
ast::type::F32Type f32;
ast::type::MultisampledTextureType s(ast::type::TextureDimension::k2d, &f32);
- ASSERT_TRUE(gen().EmitType(out(), &s, "")) << gen().error();
+ ASSERT_TRUE(gen.EmitType(out, &s, "")) << gen.error();
EXPECT_EQ(result(), "Texture2D");
}
@@ -429,8 +427,7 @@
out << data.dim << (data.ro ? "ReadOnly" : "WriteOnly");
return out;
}
-using HlslStoragetexturesTest =
- TestHelperBase<testing::TestWithParam<HlslStorageTextureData>>;
+using HlslStoragetexturesTest = TestParamHelper<HlslStorageTextureData>;
TEST_P(HlslStoragetexturesTest, Emit) {
auto params = GetParam();
@@ -439,7 +436,7 @@
: ast::AccessControl::kWriteOnly,
ast::type::ImageFormat::kR16Float);
- ASSERT_TRUE(gen().EmitType(out(), &s, "")) << gen().error();
+ ASSERT_TRUE(gen.EmitType(out, &s, "")) << gen.error();
EXPECT_EQ(result(), params.result);
}
INSTANTIATE_TEST_SUITE_P(
diff --git a/src/writer/hlsl/generator_impl_unary_op_test.cc b/src/writer/hlsl/generator_impl_unary_op_test.cc
index b723132..751e23f 100644
--- a/src/writer/hlsl/generator_impl_unary_op_test.cc
+++ b/src/writer/hlsl/generator_impl_unary_op_test.cc
@@ -33,14 +33,14 @@
out << data.op;
return out;
}
-using HlslUnaryOpTest = TestHelperBase<testing::TestWithParam<UnaryOpData>>;
+using HlslUnaryOpTest = TestParamHelper<UnaryOpData>;
TEST_P(HlslUnaryOpTest, Emit) {
auto params = GetParam();
auto expr = std::make_unique<ast::IdentifierExpression>("expr");
ast::UnaryOpExpression op(params.op, std::move(expr));
- ASSERT_TRUE(gen().EmitExpression(pre(), out(), &op)) << gen().error();
+ ASSERT_TRUE(gen.EmitExpression(pre, out, &op)) << gen.error();
EXPECT_EQ(result(), std::string(params.name) + "(expr)");
}
INSTANTIATE_TEST_SUITE_P(HlslGeneratorImplTest_UnaryOp,
diff --git a/src/writer/hlsl/generator_impl_variable_decl_statement_test.cc b/src/writer/hlsl/generator_impl_variable_decl_statement_test.cc
index f18e466..81df764 100644
--- a/src/writer/hlsl/generator_impl_variable_decl_statement_test.cc
+++ b/src/writer/hlsl/generator_impl_variable_decl_statement_test.cc
@@ -38,9 +38,9 @@
std::make_unique<ast::Variable>("a", ast::StorageClass::kNone, &f32);
ast::VariableDeclStatement stmt(std::move(var));
- gen().increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(gen().EmitStatement(out(), &stmt)) << gen().error();
+ ASSERT_TRUE(gen.EmitStatement(out, &stmt)) << gen.error();
EXPECT_EQ(result(), " float a;\n");
}
@@ -51,9 +51,9 @@
var->set_is_const(true);
ast::VariableDeclStatement stmt(std::move(var));
- gen().increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(gen().EmitStatement(out(), &stmt)) << gen().error();
+ ASSERT_TRUE(gen.EmitStatement(out, &stmt)) << gen.error();
EXPECT_EQ(result(), " const float a;\n");
}
@@ -65,9 +65,9 @@
std::make_unique<ast::Variable>("a", ast::StorageClass::kNone, &ary);
ast::VariableDeclStatement stmt(std::move(var));
- gen().increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(gen().EmitStatement(out(), &stmt)) << gen().error();
+ ASSERT_TRUE(gen.EmitStatement(out, &stmt)) << gen.error();
EXPECT_EQ(result(), " float a[5];\n");
}
@@ -78,9 +78,9 @@
std::make_unique<ast::Variable>("a", ast::StorageClass::kFunction, &f32);
ast::VariableDeclStatement stmt(std::move(var));
- gen().increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(gen().EmitStatement(out(), &stmt)) << gen().error();
+ ASSERT_TRUE(gen.EmitStatement(out, &stmt)) << gen.error();
EXPECT_EQ(result(), " float a;\n");
}
@@ -90,9 +90,9 @@
std::make_unique<ast::Variable>("a", ast::StorageClass::kPrivate, &f32);
ast::VariableDeclStatement stmt(std::move(var));
- gen().increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(gen().EmitStatement(out(), &stmt)) << gen().error();
+ ASSERT_TRUE(gen.EmitStatement(out, &stmt)) << gen.error();
EXPECT_EQ(result(), " float a;\n");
}
@@ -106,7 +106,7 @@
var->set_constructor(std::move(ident));
ast::VariableDeclStatement stmt(std::move(var));
- ASSERT_TRUE(gen().EmitStatement(out(), &stmt)) << gen().error();
+ ASSERT_TRUE(gen.EmitStatement(out, &stmt)) << gen.error();
EXPECT_EQ(result(), R"(float a = initializer;
)");
}
@@ -125,7 +125,7 @@
var->set_constructor(std::move(zero_vec));
ast::VariableDeclStatement stmt(std::move(var));
- ASSERT_TRUE(gen().EmitStatement(out(), &stmt)) << gen().error();
+ ASSERT_TRUE(gen.EmitStatement(out, &stmt)) << gen.error();
EXPECT_EQ(result(), R"(vector<float, 3> a = vector<float, 3>(0.0f);
)");
}
@@ -144,7 +144,7 @@
var->set_constructor(std::move(zero_mat));
ast::VariableDeclStatement stmt(std::move(var));
- ASSERT_TRUE(gen().EmitStatement(out(), &stmt)) << gen().error();
+ ASSERT_TRUE(gen.EmitStatement(out, &stmt)) << gen.error();
EXPECT_EQ(
result(),
R"(matrix<float, 3, 2> a = matrix<float, 3, 2>(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
diff --git a/src/writer/hlsl/test_helper.h b/src/writer/hlsl/test_helper.h
index 93dcca2..d83cee1 100644
--- a/src/writer/hlsl/test_helper.h
+++ b/src/writer/hlsl/test_helper.h
@@ -32,40 +32,34 @@
template <typename T>
class TestHelperBase : public T {
public:
- TestHelperBase() : td_(&ctx_, &mod_), impl_(&mod_) {}
+ TestHelperBase() : td(&ctx, &mod), gen(&ctx, &mod) {}
~TestHelperBase() = default;
- /// @returns the generator implementation
- GeneratorImpl& gen() { return impl_; }
-
- /// @returns the module
- ast::Module* mod() { return &mod_; }
-
- /// @returns the type determiner
- TypeDeterminer& td() { return td_; }
-
- /// @returns the output stream
- std::ostream& out() { return out_; }
-
- /// @returns the pre stream
- std::ostream& pre() { return pre_; }
-
/// @returns the result string
- std::string result() const { return out_.str(); }
+ std::string result() const { return out.str(); }
/// @returns the pre result string
- std::string pre_result() const { return pre_.str(); }
+ std::string pre_result() const { return pre.str(); }
- private:
- Context ctx_;
- ast::Module mod_;
- TypeDeterminer td_;
- GeneratorImpl impl_;
- std::ostringstream out_;
- std::ostringstream pre_;
+ /// The context
+ Context ctx;
+ /// The module
+ ast::Module mod;
+ /// The type determiner
+ TypeDeterminer td;
+ /// The generator
+ GeneratorImpl gen;
+
+ /// The output stream
+ std::ostringstream out;
+ /// The pre-output stream
+ std::ostringstream pre;
};
using TestHelper = TestHelperBase<testing::Test>;
+template <typename T>
+using TestParamHelper = TestHelperBase<testing::TestWithParam<T>>;
+
} // namespace hlsl
} // namespace writer
} // namespace tint
diff --git a/src/writer/msl/generator.cc b/src/writer/msl/generator.cc
index 46fa073..418735e 100644
--- a/src/writer/msl/generator.cc
+++ b/src/writer/msl/generator.cc
@@ -22,13 +22,17 @@
Generator::Generator(ast::Module module)
: Text(std::move(module)),
- impl_(std::make_unique<GeneratorImpl>(&module_)) {}
+ impl_(std::make_unique<GeneratorImpl>(ctx_, &module_)) {}
+
+Generator::Generator(Context* ctx, ast::Module module)
+ : Text(ctx, std::move(module)),
+ impl_(std::make_unique<GeneratorImpl>(ctx_, &module_)) {}
Generator::~Generator() = default;
void Generator::Reset() {
set_error("");
- impl_ = std::make_unique<GeneratorImpl>(&module_);
+ impl_ = std::make_unique<GeneratorImpl>(ctx_, &module_);
}
bool Generator::Generate() {
diff --git a/src/writer/msl/generator.h b/src/writer/msl/generator.h
index d0a9de2..19bf085 100644
--- a/src/writer/msl/generator.h
+++ b/src/writer/msl/generator.h
@@ -29,8 +29,13 @@
class Generator : public Text {
public:
/// Constructor
+ /// DEPRECATED
/// @param module the module to convert
explicit Generator(ast::Module module);
+ /// Constructor
+ /// @param ctx the context object, must be non-null
+ /// @param module the module to convert
+ Generator(Context* ctx, ast::Module module);
~Generator() override;
/// Resets the generator
diff --git a/src/writer/msl/generator_impl.cc b/src/writer/msl/generator_impl.cc
index cd78aff..e07b6a6 100644
--- a/src/writer/msl/generator_impl.cc
+++ b/src/writer/msl/generator_impl.cc
@@ -92,7 +92,8 @@
} // namespace
-GeneratorImpl::GeneratorImpl(ast::Module* module) : module_(module) {}
+GeneratorImpl::GeneratorImpl(Context* ctx, ast::Module* module)
+ : TextGenerator(ctx), module_(module) {}
GeneratorImpl::~GeneratorImpl() = default;
diff --git a/src/writer/msl/generator_impl.h b/src/writer/msl/generator_impl.h
index 5fabad8..0c866af 100644
--- a/src/writer/msl/generator_impl.h
+++ b/src/writer/msl/generator_impl.h
@@ -37,8 +37,9 @@
class GeneratorImpl : public TextGenerator {
public:
/// Constructor
+ /// @param ctx the context, must be non-null
/// @param module the module to generate
- explicit GeneratorImpl(ast::Module* module);
+ GeneratorImpl(Context* ctx, ast::Module* module);
~GeneratorImpl();
/// @returns true on successful generation; false otherwise
@@ -245,7 +246,7 @@
/// @returns the string name of the builtin or blank on error
std::string builtin_to_attribute(ast::Builtin builtin) const;
- /// @returns the namer for testing
+ /// @returns the namer for testing purposes
Namer* namer_for_testing() { return &namer_; }
private:
diff --git a/src/writer/msl/generator_impl_alias_type_test.cc b/src/writer/msl/generator_impl_alias_type_test.cc
index 0525e0a..25aa4d3 100644
--- a/src/writer/msl/generator_impl_alias_type_test.cc
+++ b/src/writer/msl/generator_impl_alias_type_test.cc
@@ -22,22 +22,21 @@
#include "src/ast/type/i32_type.h"
#include "src/ast/type/struct_type.h"
#include "src/writer/msl/generator_impl.h"
+#include "src/writer/msl/test_helper.h"
namespace tint {
namespace writer {
namespace msl {
namespace {
-using MslGeneratorImplTest = testing::Test;
+using MslGeneratorImplTest = TestHelper;
TEST_F(MslGeneratorImplTest, EmitConstructedType_F32) {
ast::type::F32Type f32;
ast::type::AliasType alias("a", &f32);
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitConstructedType(&alias)) << g.error();
- EXPECT_EQ(g.result(), R"(typedef float a;
+ ASSERT_TRUE(gen.EmitConstructedType(&alias)) << gen.error();
+ EXPECT_EQ(gen.result(), R"(typedef float a;
)");
}
@@ -45,10 +44,8 @@
ast::type::F32Type f32;
ast::type::AliasType alias("float", &f32);
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitConstructedType(&alias)) << g.error();
- EXPECT_EQ(g.result(), R"(typedef float float_tint_0;
+ ASSERT_TRUE(gen.EmitConstructedType(&alias)) << gen.error();
+ EXPECT_EQ(gen.result(), R"(typedef float float_tint_0;
)");
}
@@ -71,10 +68,8 @@
ast::type::StructType s("a", std::move(str));
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitConstructedType(&s)) << g.error();
- EXPECT_EQ(g.result(), R"(struct a {
+ ASSERT_TRUE(gen.EmitConstructedType(&s)) << gen.error();
+ EXPECT_EQ(gen.result(), R"(struct a {
float a;
int b;
};
@@ -101,10 +96,8 @@
ast::type::StructType s("b", std::move(str));
ast::type::AliasType alias("a", &s);
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitConstructedType(&alias)) << g.error();
- EXPECT_EQ(g.result(), R"(typedef b a;
+ ASSERT_TRUE(gen.EmitConstructedType(&alias)) << gen.error();
+ EXPECT_EQ(gen.result(), R"(typedef b a;
)");
}
diff --git a/src/writer/msl/generator_impl_array_accessor_test.cc b/src/writer/msl/generator_impl_array_accessor_test.cc
index bdcfa83..88ef333 100644
--- a/src/writer/msl/generator_impl_array_accessor_test.cc
+++ b/src/writer/msl/generator_impl_array_accessor_test.cc
@@ -22,13 +22,14 @@
#include "src/ast/sint_literal.h"
#include "src/ast/type/i32_type.h"
#include "src/writer/msl/generator_impl.h"
+#include "src/writer/msl/test_helper.h"
namespace tint {
namespace writer {
namespace msl {
namespace {
-using MslGeneratorImplTest = testing::Test;
+using MslGeneratorImplTest = TestHelper;
TEST_F(MslGeneratorImplTest, EmitExpression_ArrayAccessor) {
ast::type::I32Type i32;
@@ -38,10 +39,8 @@
ast::ArrayAccessorExpression expr(std::move(ary), std::move(idx));
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitExpression(&expr)) << g.error();
- EXPECT_EQ(g.result(), "ary[5]");
+ ASSERT_TRUE(gen.EmitExpression(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), "ary[5]");
}
TEST_F(MslGeneratorImplTest, EmitArrayAccessor) {
@@ -50,10 +49,8 @@
ast::ArrayAccessorExpression expr(std::move(ary), std::move(idx));
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitArrayAccessor(&expr)) << g.error();
- EXPECT_EQ(g.result(), "ary[idx]");
+ ASSERT_TRUE(gen.EmitArrayAccessor(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), "ary[idx]");
}
} // namespace
diff --git a/src/writer/msl/generator_impl_assign_test.cc b/src/writer/msl/generator_impl_assign_test.cc
index db1426b..33c8844 100644
--- a/src/writer/msl/generator_impl_assign_test.cc
+++ b/src/writer/msl/generator_impl_assign_test.cc
@@ -20,25 +20,24 @@
#include "src/ast/identifier_expression.h"
#include "src/ast/module.h"
#include "src/writer/msl/generator_impl.h"
+#include "src/writer/msl/test_helper.h"
namespace tint {
namespace writer {
namespace msl {
namespace {
-using MslGeneratorImplTest = testing::Test;
+using MslGeneratorImplTest = TestHelper;
TEST_F(MslGeneratorImplTest, Emit_Assign) {
auto lhs = std::make_unique<ast::IdentifierExpression>("lhs");
auto rhs = std::make_unique<ast::IdentifierExpression>("rhs");
ast::AssignmentStatement assign(std::move(lhs), std::move(rhs));
- ast::Module m;
- GeneratorImpl g(&m);
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&assign)) << g.error();
- EXPECT_EQ(g.result(), " lhs = rhs;\n");
+ ASSERT_TRUE(gen.EmitStatement(&assign)) << gen.error();
+ EXPECT_EQ(gen.result(), " lhs = rhs;\n");
}
} // namespace
diff --git a/src/writer/msl/generator_impl_binary_test.cc b/src/writer/msl/generator_impl_binary_test.cc
index fb9329f..bd39002 100644
--- a/src/writer/msl/generator_impl_binary_test.cc
+++ b/src/writer/msl/generator_impl_binary_test.cc
@@ -19,6 +19,7 @@
#include "src/ast/identifier_expression.h"
#include "src/ast/module.h"
#include "src/writer/msl/generator_impl.h"
+#include "src/writer/msl/test_helper.h"
namespace tint {
namespace writer {
@@ -33,7 +34,7 @@
out << data.op;
return out;
}
-using MslBinaryTest = testing::TestWithParam<BinaryData>;
+using MslBinaryTest = TestParamHelper<BinaryData>;
TEST_P(MslBinaryTest, Emit) {
auto params = GetParam();
@@ -42,10 +43,8 @@
ast::BinaryExpression expr(params.op, std::move(left), std::move(right));
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitExpression(&expr)) << g.error();
- EXPECT_EQ(g.result(), params.result);
+ ASSERT_TRUE(gen.EmitExpression(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), params.result);
}
INSTANTIATE_TEST_SUITE_P(
MslGeneratorImplTest,
diff --git a/src/writer/msl/generator_impl_bitcast_test.cc b/src/writer/msl/generator_impl_bitcast_test.cc
index 94474d7..b51dc4d 100644
--- a/src/writer/msl/generator_impl_bitcast_test.cc
+++ b/src/writer/msl/generator_impl_bitcast_test.cc
@@ -20,23 +20,22 @@
#include "src/ast/module.h"
#include "src/ast/type/f32_type.h"
#include "src/writer/msl/generator_impl.h"
+#include "src/writer/msl/test_helper.h"
namespace tint {
namespace writer {
namespace msl {
namespace {
-using MslGeneratorImplTest = testing::Test;
+using MslGeneratorImplTest = TestHelper;
TEST_F(MslGeneratorImplTest, EmitExpression_Bitcast) {
ast::type::F32Type f32;
auto id = std::make_unique<ast::IdentifierExpression>("id");
ast::BitcastExpression bitcast(&f32, std::move(id));
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitExpression(&bitcast)) << g.error();
- EXPECT_EQ(g.result(), "as_type<float>(id)");
+ ASSERT_TRUE(gen.EmitExpression(&bitcast)) << gen.error();
+ EXPECT_EQ(gen.result(), "as_type<float>(id)");
}
} // namespace
diff --git a/src/writer/msl/generator_impl_block_test.cc b/src/writer/msl/generator_impl_block_test.cc
index f901c4b..8bc146a 100644
--- a/src/writer/msl/generator_impl_block_test.cc
+++ b/src/writer/msl/generator_impl_block_test.cc
@@ -18,24 +18,23 @@
#include "src/ast/block_statement.h"
#include "src/ast/discard_statement.h"
#include "src/writer/msl/generator_impl.h"
+#include "src/writer/msl/test_helper.h"
namespace tint {
namespace writer {
namespace msl {
namespace {
-using MslGeneratorImplTest = testing::Test;
+using MslGeneratorImplTest = TestHelper;
TEST_F(MslGeneratorImplTest, Emit_Block) {
ast::BlockStatement b;
b.append(std::make_unique<ast::DiscardStatement>());
- ast::Module m;
- GeneratorImpl g(&m);
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&b)) << g.error();
- EXPECT_EQ(g.result(), R"( {
+ ASSERT_TRUE(gen.EmitStatement(&b)) << gen.error();
+ EXPECT_EQ(gen.result(), R"( {
discard_fragment();
}
)");
@@ -45,12 +44,10 @@
ast::BlockStatement b;
b.append(std::make_unique<ast::DiscardStatement>());
- ast::Module m;
- GeneratorImpl g(&m);
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitBlock(&b)) << g.error();
- EXPECT_EQ(g.result(), R"({
+ ASSERT_TRUE(gen.EmitBlock(&b)) << gen.error();
+ EXPECT_EQ(gen.result(), R"({
discard_fragment();
})");
}
diff --git a/src/writer/msl/generator_impl_break_test.cc b/src/writer/msl/generator_impl_break_test.cc
index 941faa8..daf276c 100644
--- a/src/writer/msl/generator_impl_break_test.cc
+++ b/src/writer/msl/generator_impl_break_test.cc
@@ -19,23 +19,22 @@
#include "src/ast/break_statement.h"
#include "src/ast/module.h"
#include "src/writer/msl/generator_impl.h"
+#include "src/writer/msl/test_helper.h"
namespace tint {
namespace writer {
namespace msl {
namespace {
-using MslGeneratorImplTest = testing::Test;
+using MslGeneratorImplTest = TestHelper;
TEST_F(MslGeneratorImplTest, Emit_Break) {
ast::BreakStatement b;
- ast::Module m;
- GeneratorImpl g(&m);
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&b)) << g.error();
- EXPECT_EQ(g.result(), " break;\n");
+ ASSERT_TRUE(gen.EmitStatement(&b)) << gen.error();
+ EXPECT_EQ(gen.result(), " break;\n");
}
} // namespace
diff --git a/src/writer/msl/generator_impl_call_test.cc b/src/writer/msl/generator_impl_call_test.cc
index ef6bb6b..5254542 100644
--- a/src/writer/msl/generator_impl_call_test.cc
+++ b/src/writer/msl/generator_impl_call_test.cc
@@ -22,13 +22,14 @@
#include "src/ast/module.h"
#include "src/ast/type/void_type.h"
#include "src/writer/msl/generator_impl.h"
+#include "src/writer/msl/test_helper.h"
namespace tint {
namespace writer {
namespace msl {
namespace {
-using MslGeneratorImplTest = testing::Test;
+using MslGeneratorImplTest = TestHelper;
TEST_F(MslGeneratorImplTest, EmitExpression_Call_WithoutParams) {
ast::type::VoidType void_type;
@@ -38,13 +39,10 @@
auto func = std::make_unique<ast::Function>("my_func", ast::VariableList{},
&void_type);
+ mod.AddFunction(std::move(func));
- ast::Module m;
- m.AddFunction(std::move(func));
-
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitExpression(&call)) << g.error();
- EXPECT_EQ(g.result(), "my_func()");
+ ASSERT_TRUE(gen.EmitExpression(&call)) << gen.error();
+ EXPECT_EQ(gen.result(), "my_func()");
}
TEST_F(MslGeneratorImplTest, EmitExpression_Call_WithParams) {
@@ -58,13 +56,10 @@
auto func = std::make_unique<ast::Function>("my_func", ast::VariableList{},
&void_type);
+ mod.AddFunction(std::move(func));
- ast::Module m;
- m.AddFunction(std::move(func));
-
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitExpression(&call)) << g.error();
- EXPECT_EQ(g.result(), "my_func(param1, param2)");
+ ASSERT_TRUE(gen.EmitExpression(&call)) << gen.error();
+ EXPECT_EQ(gen.result(), "my_func(param1, param2)");
}
TEST_F(MslGeneratorImplTest, EmitStatement_Call) {
@@ -79,14 +74,11 @@
auto func = std::make_unique<ast::Function>("my_func", ast::VariableList{},
&void_type);
+ mod.AddFunction(std::move(func));
- ast::Module m;
- m.AddFunction(std::move(func));
-
- GeneratorImpl g(&m);
- g.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&call)) << g.error();
- EXPECT_EQ(g.result(), " my_func(param1, param2);\n");
+ gen.increment_indent();
+ ASSERT_TRUE(gen.EmitStatement(&call)) << gen.error();
+ EXPECT_EQ(gen.result(), " my_func(param1, param2);\n");
}
} // namespace
diff --git a/src/writer/msl/generator_impl_case_test.cc b/src/writer/msl/generator_impl_case_test.cc
index cd43294..a35e897 100644
--- a/src/writer/msl/generator_impl_case_test.cc
+++ b/src/writer/msl/generator_impl_case_test.cc
@@ -23,13 +23,14 @@
#include "src/ast/sint_literal.h"
#include "src/ast/type/i32_type.h"
#include "src/writer/msl/generator_impl.h"
+#include "src/writer/msl/test_helper.h"
namespace tint {
namespace writer {
namespace msl {
namespace {
-using MslGeneratorImplTest = testing::Test;
+using MslGeneratorImplTest = TestHelper;
TEST_F(MslGeneratorImplTest, Emit_Case) {
ast::type::I32Type i32;
@@ -41,12 +42,10 @@
lit.push_back(std::make_unique<ast::SintLiteral>(&i32, 5));
ast::CaseStatement c(std::move(lit), std::move(body));
- ast::Module m;
- GeneratorImpl g(&m);
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitCase(&c)) << g.error();
- EXPECT_EQ(g.result(), R"( case 5: {
+ ASSERT_TRUE(gen.EmitCase(&c)) << gen.error();
+ EXPECT_EQ(gen.result(), R"( case 5: {
break;
}
)");
@@ -59,12 +58,10 @@
lit.push_back(std::make_unique<ast::SintLiteral>(&i32, 5));
ast::CaseStatement c(std::move(lit), std::make_unique<ast::BlockStatement>());
- ast::Module m;
- GeneratorImpl g(&m);
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitCase(&c)) << g.error();
- EXPECT_EQ(g.result(), R"( case 5: {
+ ASSERT_TRUE(gen.EmitCase(&c)) << gen.error();
+ EXPECT_EQ(gen.result(), R"( case 5: {
break;
}
)");
@@ -80,12 +77,10 @@
lit.push_back(std::make_unique<ast::SintLiteral>(&i32, 5));
ast::CaseStatement c(std::move(lit), std::move(body));
- ast::Module m;
- GeneratorImpl g(&m);
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitCase(&c)) << g.error();
- EXPECT_EQ(g.result(), R"( case 5: {
+ ASSERT_TRUE(gen.EmitCase(&c)) << gen.error();
+ EXPECT_EQ(gen.result(), R"( case 5: {
/* fallthrough */
}
)");
@@ -102,12 +97,10 @@
lit.push_back(std::make_unique<ast::SintLiteral>(&i32, 6));
ast::CaseStatement c(std::move(lit), std::move(body));
- ast::Module m;
- GeneratorImpl g(&m);
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitCase(&c)) << g.error();
- EXPECT_EQ(g.result(), R"( case 5:
+ ASSERT_TRUE(gen.EmitCase(&c)) << gen.error();
+ EXPECT_EQ(gen.result(), R"( case 5:
case 6: {
break;
}
@@ -121,12 +114,10 @@
body->append(std::make_unique<ast::BreakStatement>());
c.set_body(std::move(body));
- ast::Module m;
- GeneratorImpl g(&m);
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitCase(&c)) << g.error();
- EXPECT_EQ(g.result(), R"( default: {
+ ASSERT_TRUE(gen.EmitCase(&c)) << gen.error();
+ EXPECT_EQ(gen.result(), R"( default: {
break;
}
)");
diff --git a/src/writer/msl/generator_impl_cast_test.cc b/src/writer/msl/generator_impl_cast_test.cc
index aea7840..cc24552 100644
--- a/src/writer/msl/generator_impl_cast_test.cc
+++ b/src/writer/msl/generator_impl_cast_test.cc
@@ -21,13 +21,14 @@
#include "src/ast/type/vector_type.h"
#include "src/ast/type_constructor_expression.h"
#include "src/writer/msl/generator_impl.h"
+#include "src/writer/msl/test_helper.h"
namespace tint {
namespace writer {
namespace msl {
namespace {
-using MslGeneratorImplTest = testing::Test;
+using MslGeneratorImplTest = TestHelper;
TEST_F(MslGeneratorImplTest, EmitExpression_Cast_Scalar) {
ast::type::F32Type f32;
@@ -37,10 +38,8 @@
ast::TypeConstructorExpression cast(&f32, std::move(params));
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitExpression(&cast)) << g.error();
- EXPECT_EQ(g.result(), "float(id)");
+ ASSERT_TRUE(gen.EmitExpression(&cast)) << gen.error();
+ EXPECT_EQ(gen.result(), "float(id)");
}
TEST_F(MslGeneratorImplTest, EmitExpression_Cast_Vector) {
@@ -52,10 +51,8 @@
ast::TypeConstructorExpression cast(&vec3, std::move(params));
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitExpression(&cast)) << g.error();
- EXPECT_EQ(g.result(), "float3(id)");
+ ASSERT_TRUE(gen.EmitExpression(&cast)) << gen.error();
+ EXPECT_EQ(gen.result(), "float3(id)");
}
} // namespace
diff --git a/src/writer/msl/generator_impl_constructor_test.cc b/src/writer/msl/generator_impl_constructor_test.cc
index 38132e1..705cd52 100644
--- a/src/writer/msl/generator_impl_constructor_test.cc
+++ b/src/writer/msl/generator_impl_constructor_test.cc
@@ -28,23 +28,22 @@
#include "src/ast/type_constructor_expression.h"
#include "src/ast/uint_literal.h"
#include "src/writer/msl/generator_impl.h"
+#include "src/writer/msl/test_helper.h"
namespace tint {
namespace writer {
namespace msl {
namespace {
-using MslGeneratorImplTest = testing::Test;
+using MslGeneratorImplTest = TestHelper;
TEST_F(MslGeneratorImplTest, EmitConstructor_Bool) {
ast::type::BoolType bool_type;
auto lit = std::make_unique<ast::BoolLiteral>(&bool_type, false);
ast::ScalarConstructorExpression expr(std::move(lit));
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitConstructor(&expr)) << g.error();
- EXPECT_EQ(g.result(), "false");
+ ASSERT_TRUE(gen.EmitConstructor(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), "false");
}
TEST_F(MslGeneratorImplTest, EmitConstructor_Int) {
@@ -52,10 +51,8 @@
auto lit = std::make_unique<ast::SintLiteral>(&i32, -12345);
ast::ScalarConstructorExpression expr(std::move(lit));
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitConstructor(&expr)) << g.error();
- EXPECT_EQ(g.result(), "-12345");
+ ASSERT_TRUE(gen.EmitConstructor(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), "-12345");
}
TEST_F(MslGeneratorImplTest, EmitConstructor_UInt) {
@@ -63,10 +60,8 @@
auto lit = std::make_unique<ast::UintLiteral>(&u32, 56779);
ast::ScalarConstructorExpression expr(std::move(lit));
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitConstructor(&expr)) << g.error();
- EXPECT_EQ(g.result(), "56779u");
+ ASSERT_TRUE(gen.EmitConstructor(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), "56779u");
}
TEST_F(MslGeneratorImplTest, EmitConstructor_Float) {
@@ -76,10 +71,8 @@
&f32, static_cast<float>((1 << 30) - 4));
ast::ScalarConstructorExpression expr(std::move(lit));
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitConstructor(&expr)) << g.error();
- EXPECT_EQ(g.result(), "1.07374182e+09f");
+ ASSERT_TRUE(gen.EmitConstructor(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), "1.07374182e+09f");
}
TEST_F(MslGeneratorImplTest, EmitConstructor_Type_Float) {
@@ -92,10 +85,8 @@
ast::TypeConstructorExpression expr(&f32, std::move(values));
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitConstructor(&expr)) << g.error();
- EXPECT_EQ(g.result(), "float(-1.20000004e-05f)");
+ ASSERT_TRUE(gen.EmitConstructor(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), "float(-1.20000004e-05f)");
}
TEST_F(MslGeneratorImplTest, EmitConstructor_Type_Bool) {
@@ -108,10 +99,8 @@
ast::TypeConstructorExpression expr(&b, std::move(values));
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitConstructor(&expr)) << g.error();
- EXPECT_EQ(g.result(), "bool(true)");
+ ASSERT_TRUE(gen.EmitConstructor(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), "bool(true)");
}
TEST_F(MslGeneratorImplTest, EmitConstructor_Type_Int) {
@@ -124,10 +113,8 @@
ast::TypeConstructorExpression expr(&i32, std::move(values));
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitConstructor(&expr)) << g.error();
- EXPECT_EQ(g.result(), "int(-12345)");
+ ASSERT_TRUE(gen.EmitConstructor(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), "int(-12345)");
}
TEST_F(MslGeneratorImplTest, EmitConstructor_Type_Uint) {
@@ -140,10 +127,8 @@
ast::TypeConstructorExpression expr(&u32, std::move(values));
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitConstructor(&expr)) << g.error();
- EXPECT_EQ(g.result(), "uint(12345u)");
+ ASSERT_TRUE(gen.EmitConstructor(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), "uint(12345u)");
}
TEST_F(MslGeneratorImplTest, EmitConstructor_Type_Vec) {
@@ -163,10 +148,8 @@
ast::TypeConstructorExpression expr(&vec, std::move(values));
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitConstructor(&expr)) << g.error();
- EXPECT_EQ(g.result(), "float3(1.00000000f, 2.00000000f, 3.00000000f)");
+ ASSERT_TRUE(gen.EmitConstructor(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), "float3(1.00000000f, 2.00000000f, 3.00000000f)");
}
TEST_F(MslGeneratorImplTest, EmitConstructor_Type_Vec_Empty) {
@@ -176,10 +159,8 @@
ast::ExpressionList values;
ast::TypeConstructorExpression expr(&vec, std::move(values));
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitConstructor(&expr)) << g.error();
- EXPECT_EQ(g.result(), "float3(0.0f)");
+ ASSERT_TRUE(gen.EmitConstructor(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), "float3(0.0f)");
}
TEST_F(MslGeneratorImplTest, EmitConstructor_Type_Mat) {
@@ -213,15 +194,12 @@
}
ast::TypeConstructorExpression expr(&mat, std::move(mat_values));
-
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitConstructor(&expr)) << g.error();
+ ASSERT_TRUE(gen.EmitConstructor(&expr)) << gen.error();
// A matrix of type T with n columns and m rows can also be constructed from
// n vectors of type T with m components.
EXPECT_EQ(
- g.result(),
+ gen.result(),
std::string("float2x3(float3(1.00000000f, 2.00000000f, 3.00000000f), ") +
"float3(3.00000000f, 4.00000000f, 5.00000000f))");
}
@@ -254,14 +232,12 @@
}
ast::TypeConstructorExpression expr(&ary, std::move(ary_values));
-
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitConstructor(&expr)) << g.error();
- EXPECT_EQ(g.result(), std::string("{") +
- "float3(1.00000000f, 2.00000000f, 3.00000000f), " +
- "float3(4.00000000f, 5.00000000f, 6.00000000f), " +
- "float3(7.00000000f, 8.00000000f, 9.00000000f)}");
+ ASSERT_TRUE(gen.EmitConstructor(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(),
+ std::string("{") +
+ "float3(1.00000000f, 2.00000000f, 3.00000000f), " +
+ "float3(4.00000000f, 5.00000000f, 6.00000000f), " +
+ "float3(7.00000000f, 8.00000000f, 9.00000000f)}");
}
// TODO(dsinclair): Add struct constructor test.
diff --git a/src/writer/msl/generator_impl_continue_test.cc b/src/writer/msl/generator_impl_continue_test.cc
index 389329a..95220bc 100644
--- a/src/writer/msl/generator_impl_continue_test.cc
+++ b/src/writer/msl/generator_impl_continue_test.cc
@@ -19,23 +19,22 @@
#include "src/ast/continue_statement.h"
#include "src/ast/module.h"
#include "src/writer/msl/generator_impl.h"
+#include "src/writer/msl/test_helper.h"
namespace tint {
namespace writer {
namespace msl {
namespace {
-using MslGeneratorImplTest = testing::Test;
+using MslGeneratorImplTest = TestHelper;
TEST_F(MslGeneratorImplTest, Emit_Continue) {
ast::ContinueStatement c;
- ast::Module m;
- GeneratorImpl g(&m);
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&c)) << g.error();
- EXPECT_EQ(g.result(), " continue;\n");
+ ASSERT_TRUE(gen.EmitStatement(&c)) << gen.error();
+ EXPECT_EQ(gen.result(), " continue;\n");
}
} // namespace
diff --git a/src/writer/msl/generator_impl_discard_test.cc b/src/writer/msl/generator_impl_discard_test.cc
index 5d3ab30..182dc10 100644
--- a/src/writer/msl/generator_impl_discard_test.cc
+++ b/src/writer/msl/generator_impl_discard_test.cc
@@ -16,23 +16,22 @@
#include "src/ast/discard_statement.h"
#include "src/ast/module.h"
#include "src/writer/msl/generator_impl.h"
+#include "src/writer/msl/test_helper.h"
namespace tint {
namespace writer {
namespace msl {
namespace {
-using MslGeneratorImplTest = testing::Test;
+using MslGeneratorImplTest = TestHelper;
TEST_F(MslGeneratorImplTest, Emit_Discard) {
ast::DiscardStatement stmt;
- ast::Module m;
- GeneratorImpl g(&m);
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&stmt)) << g.error();
- EXPECT_EQ(g.result(), " discard_fragment();\n");
+ ASSERT_TRUE(gen.EmitStatement(&stmt)) << gen.error();
+ EXPECT_EQ(gen.result(), " discard_fragment();\n");
}
} // namespace
diff --git a/src/writer/msl/generator_impl_function_entry_point_data_test.cc b/src/writer/msl/generator_impl_function_entry_point_data_test.cc
index 778da93..910e57c 100644
--- a/src/writer/msl/generator_impl_function_entry_point_data_test.cc
+++ b/src/writer/msl/generator_impl_function_entry_point_data_test.cc
@@ -31,13 +31,14 @@
#include "src/context.h"
#include "src/type_determiner.h"
#include "src/writer/msl/generator_impl.h"
+#include "src/writer/msl/test_helper.h"
namespace tint {
namespace writer {
namespace msl {
namespace {
-using MslGeneratorImplTest = testing::Test;
+using MslGeneratorImplTest = TestHelper;
TEST_F(MslGeneratorImplTest, Emit_Function_EntryPointData_Vertex_Input) {
// [[location 0]] var<in> foo : f32;
@@ -63,9 +64,6 @@
decos.push_back(std::make_unique<ast::LocationDecoration>(1, Source{}));
bar_var->set_decorations(std::move(decos));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(foo_var.get());
td.RegisterVariableForTesting(bar_var.get());
@@ -92,9 +90,8 @@
ASSERT_TRUE(td.Determine()) << td.error();
- GeneratorImpl g(&mod);
- ASSERT_TRUE(g.EmitEntryPointData(func_ptr)) << g.error();
- EXPECT_EQ(g.result(), R"(struct vtx_main_in {
+ ASSERT_TRUE(gen.EmitEntryPointData(func_ptr)) << gen.error();
+ EXPECT_EQ(gen.result(), R"(struct vtx_main_in {
float foo [[attribute(0)]];
int bar [[attribute(1)]];
};
@@ -126,9 +123,6 @@
decos.push_back(std::make_unique<ast::LocationDecoration>(1, Source{}));
bar_var->set_decorations(std::move(decos));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(foo_var.get());
td.RegisterVariableForTesting(bar_var.get());
@@ -155,9 +149,8 @@
ASSERT_TRUE(td.Determine()) << td.error();
- GeneratorImpl g(&mod);
- ASSERT_TRUE(g.EmitEntryPointData(func_ptr)) << g.error();
- EXPECT_EQ(g.result(), R"(struct vtx_main_out {
+ ASSERT_TRUE(gen.EmitEntryPointData(func_ptr)) << gen.error();
+ EXPECT_EQ(gen.result(), R"(struct vtx_main_out {
float foo [[user(locn0)]];
int bar [[user(locn1)]];
};
@@ -189,9 +182,6 @@
decos.push_back(std::make_unique<ast::LocationDecoration>(1, Source{}));
bar_var->set_decorations(std::move(decos));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(foo_var.get());
td.RegisterVariableForTesting(bar_var.get());
@@ -217,9 +207,8 @@
ASSERT_TRUE(td.Determine()) << td.error();
- GeneratorImpl g(&mod);
- ASSERT_TRUE(g.EmitEntryPointData(func_ptr)) << g.error();
- EXPECT_EQ(g.result(), R"(struct main_in {
+ ASSERT_TRUE(gen.EmitEntryPointData(func_ptr)) << gen.error();
+ EXPECT_EQ(gen.result(), R"(struct main_in {
float foo [[user(locn0)]];
int bar [[user(locn1)]];
};
@@ -251,9 +240,6 @@
decos.push_back(std::make_unique<ast::LocationDecoration>(1, Source{}));
bar_var->set_decorations(std::move(decos));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(foo_var.get());
td.RegisterVariableForTesting(bar_var.get());
@@ -279,9 +265,8 @@
ASSERT_TRUE(td.Determine()) << td.error();
- GeneratorImpl g(&mod);
- ASSERT_TRUE(g.EmitEntryPointData(func_ptr)) << g.error();
- EXPECT_EQ(g.result(), R"(struct main_out {
+ ASSERT_TRUE(gen.EmitEntryPointData(func_ptr)) << gen.error();
+ EXPECT_EQ(gen.result(), R"(struct main_out {
float foo [[color(0)]];
int bar [[color(1)]];
};
@@ -310,9 +295,6 @@
decos.push_back(std::make_unique<ast::LocationDecoration>(1, Source{}));
bar_var->set_decorations(std::move(decos));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(foo_var.get());
td.RegisterVariableForTesting(bar_var.get());
@@ -338,9 +320,8 @@
ASSERT_TRUE(td.Determine()) << td.error();
- GeneratorImpl g(&mod);
- ASSERT_FALSE(g.EmitEntryPointData(func_ptr)) << g.error();
- EXPECT_EQ(g.error(), R"(invalid location variable for pipeline stage)");
+ ASSERT_FALSE(gen.EmitEntryPointData(func_ptr)) << gen.error();
+ EXPECT_EQ(gen.error(), R"(invalid location variable for pipeline stage)");
}
TEST_F(MslGeneratorImplTest, Emit_Function_EntryPointData_Compute_Output) {
@@ -364,9 +345,6 @@
decos.push_back(std::make_unique<ast::LocationDecoration>(1, Source{}));
bar_var->set_decorations(std::move(decos));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(foo_var.get());
td.RegisterVariableForTesting(bar_var.get());
@@ -392,9 +370,8 @@
ASSERT_TRUE(td.Determine()) << td.error();
- GeneratorImpl g(&mod);
- ASSERT_FALSE(g.EmitEntryPointData(func_ptr)) << g.error();
- EXPECT_EQ(g.error(), R"(invalid location variable for pipeline stage)");
+ ASSERT_FALSE(gen.EmitEntryPointData(func_ptr)) << gen.error();
+ EXPECT_EQ(gen.error(), R"(invalid location variable for pipeline stage)");
}
TEST_F(MslGeneratorImplTest, Emit_Function_EntryPointData_Builtins) {
@@ -428,9 +405,6 @@
ast::Builtin::kFragDepth, Source{}));
depth_var->set_decorations(std::move(decos));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(coord_var.get());
td.RegisterVariableForTesting(depth_var.get());
@@ -456,9 +430,8 @@
ASSERT_TRUE(td.Determine()) << td.error();
- GeneratorImpl g(&mod);
- ASSERT_TRUE(g.EmitEntryPointData(func_ptr)) << g.error();
- EXPECT_EQ(g.result(), R"(struct main_out {
+ ASSERT_TRUE(gen.EmitEntryPointData(func_ptr)) << gen.error();
+ EXPECT_EQ(gen.result(), R"(struct main_out {
float depth [[depth(any)]];
};
diff --git a/src/writer/msl/generator_impl_function_test.cc b/src/writer/msl/generator_impl_function_test.cc
index a5d871b..08d61d6 100644
--- a/src/writer/msl/generator_impl_function_test.cc
+++ b/src/writer/msl/generator_impl_function_test.cc
@@ -48,13 +48,14 @@
#include "src/context.h"
#include "src/type_determiner.h"
#include "src/writer/msl/generator_impl.h"
+#include "src/writer/msl/test_helper.h"
namespace tint {
namespace writer {
namespace msl {
namespace {
-using MslGeneratorImplTest = testing::Test;
+using MslGeneratorImplTest = TestHelper;
TEST_F(MslGeneratorImplTest, Emit_Function) {
ast::type::VoidType void_type;
@@ -66,14 +67,11 @@
body->append(std::make_unique<ast::ReturnStatement>());
func->set_body(std::move(body));
- ast::Module m;
- m.AddFunction(std::move(func));
+ mod.AddFunction(std::move(func));
+ gen.increment_indent();
- GeneratorImpl g(&m);
- g.increment_indent();
-
- ASSERT_TRUE(g.Generate()) << g.error();
- EXPECT_EQ(g.result(), R"(#include <metal_stdlib>
+ ASSERT_TRUE(gen.Generate()) << gen.error();
+ EXPECT_EQ(gen.result(), R"(#include <metal_stdlib>
void my_func() {
return;
@@ -92,14 +90,11 @@
body->append(std::make_unique<ast::ReturnStatement>());
func->set_body(std::move(body));
- ast::Module m;
- m.AddFunction(std::move(func));
+ mod.AddFunction(std::move(func));
+ gen.increment_indent();
- GeneratorImpl g(&m);
- g.increment_indent();
-
- ASSERT_TRUE(g.Generate()) << g.error();
- EXPECT_EQ(g.result(), R"(#include <metal_stdlib>
+ ASSERT_TRUE(gen.Generate()) << gen.error();
+ EXPECT_EQ(gen.result(), R"(#include <metal_stdlib>
void main_tint_0() {
return;
@@ -126,14 +121,11 @@
body->append(std::make_unique<ast::ReturnStatement>());
func->set_body(std::move(body));
- ast::Module m;
- m.AddFunction(std::move(func));
+ mod.AddFunction(std::move(func));
+ gen.increment_indent();
- GeneratorImpl g(&m);
- g.increment_indent();
-
- ASSERT_TRUE(g.Generate()) << g.error();
- EXPECT_EQ(g.result(), R"(#include <metal_stdlib>
+ ASSERT_TRUE(gen.Generate()) << gen.error();
+ EXPECT_EQ(gen.result(), R"(#include <metal_stdlib>
void my_func(float a, int b) {
return;
@@ -158,9 +150,6 @@
decos.push_back(std::make_unique<ast::LocationDecoration>(1, Source{}));
bar_var->set_decorations(std::move(decos));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(foo_var.get());
td.RegisterVariableForTesting(bar_var.get());
@@ -184,9 +173,8 @@
ASSERT_TRUE(td.Determine()) << td.error();
- GeneratorImpl g(&mod);
- ASSERT_TRUE(g.Generate()) << g.error();
- EXPECT_EQ(g.result(), R"(#include <metal_stdlib>
+ ASSERT_TRUE(gen.Generate()) << gen.error();
+ EXPECT_EQ(gen.result(), R"(#include <metal_stdlib>
struct frag_main_in {
float foo [[user(locn0)]];
@@ -227,9 +215,6 @@
ast::Builtin::kFragDepth, Source{}));
depth_var->set_decorations(std::move(decos));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(coord_var.get());
td.RegisterVariableForTesting(depth_var.get());
@@ -255,9 +240,8 @@
ASSERT_TRUE(td.Determine()) << td.error();
- GeneratorImpl g(&mod);
- ASSERT_TRUE(g.Generate()) << g.error();
- EXPECT_EQ(g.result(), R"(#include <metal_stdlib>
+ ASSERT_TRUE(gen.Generate()) << gen.error();
+ EXPECT_EQ(gen.result(), R"(#include <metal_stdlib>
struct frag_main_out {
float depth [[depth(any)]];
@@ -286,9 +270,6 @@
decos.push_back(std::make_unique<ast::SetDecoration>(1, Source{}));
coord_var->set_decorations(std::move(decos));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(coord_var.get());
mod.AddGlobalVariable(std::move(coord_var));
@@ -314,9 +295,8 @@
ASSERT_TRUE(td.Determine()) << td.error();
- GeneratorImpl g(&mod);
- ASSERT_TRUE(g.Generate()) << g.error();
- EXPECT_EQ(g.result(), R"(#include <metal_stdlib>
+ ASSERT_TRUE(gen.Generate()) << gen.error();
+ EXPECT_EQ(gen.result(), R"(#include <metal_stdlib>
fragment void frag_main(constant float4& coord [[buffer(0)]]) {
float v = coord.x;
@@ -331,7 +311,6 @@
ast::type::VoidType void_type;
ast::type::F32Type f32;
ast::type::I32Type i32;
- ast::Module mod;
ast::StructMemberList members;
ast::StructMemberDecorationList a_deco;
@@ -363,8 +342,6 @@
decos.push_back(std::make_unique<ast::SetDecoration>(1, Source{}));
coord_var->set_decorations(std::move(decos));
- Context ctx;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(coord_var.get());
mod.AddGlobalVariable(std::move(coord_var));
@@ -389,10 +366,8 @@
mod.AddFunction(std::move(func));
ASSERT_TRUE(td.Determine()) << td.error();
-
- GeneratorImpl g(&mod);
- ASSERT_TRUE(g.Generate()) << g.error();
- EXPECT_EQ(g.result(), R"(#include <metal_stdlib>
+ ASSERT_TRUE(gen.Generate()) << gen.error();
+ EXPECT_EQ(gen.result(), R"(#include <metal_stdlib>
struct Data {
int a;
@@ -412,7 +387,6 @@
ast::type::VoidType void_type;
ast::type::F32Type f32;
ast::type::I32Type i32;
- ast::Module mod;
ast::StructMemberList members;
ast::StructMemberDecorationList a_deco;
@@ -444,8 +418,6 @@
decos.push_back(std::make_unique<ast::SetDecoration>(1, Source{}));
coord_var->set_decorations(std::move(decos));
- Context ctx;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(coord_var.get());
mod.AddGlobalVariable(std::move(coord_var));
@@ -471,9 +443,8 @@
ASSERT_TRUE(td.Determine()) << td.error();
- GeneratorImpl g(&mod);
- ASSERT_TRUE(g.Generate()) << g.error();
- EXPECT_EQ(g.result(), R"(#include <metal_stdlib>
+ ASSERT_TRUE(gen.Generate()) << gen.error();
+ EXPECT_EQ(gen.result(), R"(#include <metal_stdlib>
struct Data {
int a;
@@ -511,9 +482,6 @@
decos.push_back(std::make_unique<ast::LocationDecoration>(0, Source{}));
val_var->set_decorations(std::move(decos));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(foo_var.get());
td.RegisterVariableForTesting(bar_var.get());
td.RegisterVariableForTesting(val_var.get());
@@ -563,9 +531,8 @@
ASSERT_TRUE(td.Determine()) << td.error();
- GeneratorImpl g(&mod);
- ASSERT_TRUE(g.Generate()) << g.error();
- EXPECT_EQ(g.result(), R"(#include <metal_stdlib>
+ ASSERT_TRUE(gen.Generate()) << gen.error();
+ EXPECT_EQ(gen.result(), R"(#include <metal_stdlib>
struct ep_1_in {
float foo [[user(locn0)]];
@@ -606,9 +573,6 @@
ast::Builtin::kFragDepth, Source{}));
depth_var->set_decorations(std::move(decos));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(depth_var.get());
mod.AddGlobalVariable(std::move(depth_var));
@@ -648,9 +612,8 @@
ASSERT_TRUE(td.Determine()) << td.error();
- GeneratorImpl g(&mod);
- ASSERT_TRUE(g.Generate()) << g.error();
- EXPECT_EQ(g.result(), R"(#include <metal_stdlib>
+ ASSERT_TRUE(gen.Generate()) << gen.error();
+ EXPECT_EQ(gen.result(), R"(#include <metal_stdlib>
struct ep_1_out {
float depth [[depth(any)]];
@@ -692,9 +655,6 @@
ast::Builtin::kFragDepth, Source{}));
depth_var->set_decorations(std::move(decos));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(coord_var.get());
td.RegisterVariableForTesting(depth_var.get());
@@ -740,10 +700,8 @@
mod.AddFunction(std::move(func_1));
ASSERT_TRUE(td.Determine()) << td.error();
-
- GeneratorImpl g(&mod);
- ASSERT_TRUE(g.Generate()) << g.error();
- EXPECT_EQ(g.result(), R"(#include <metal_stdlib>
+ ASSERT_TRUE(gen.Generate()) << gen.error();
+ EXPECT_EQ(gen.result(), R"(#include <metal_stdlib>
struct ep_1_out {
float depth [[depth(any)]];
@@ -778,9 +736,6 @@
decos.push_back(std::make_unique<ast::SetDecoration>(1, Source{}));
coord_var->set_decorations(std::move(decos));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(coord_var.get());
mod.AddGlobalVariable(std::move(coord_var));
@@ -823,10 +778,8 @@
mod.AddFunction(std::move(func));
ASSERT_TRUE(td.Determine()) << td.error();
-
- GeneratorImpl g(&mod);
- ASSERT_TRUE(g.Generate()) << g.error();
- EXPECT_EQ(g.result(), R"(#include <metal_stdlib>
+ ASSERT_TRUE(gen.Generate()) << gen.error();
+ EXPECT_EQ(gen.result(), R"(#include <metal_stdlib>
float sub_func(constant float4& coord, float param) {
return coord.x;
@@ -845,7 +798,6 @@
ast::type::VoidType void_type;
ast::type::F32Type f32;
ast::type::I32Type i32;
- ast::Module mod;
ast::StructMemberList members;
ast::StructMemberDecorationList a_deco;
@@ -877,10 +829,7 @@
decos.push_back(std::make_unique<ast::SetDecoration>(1, Source{}));
coord_var->set_decorations(std::move(decos));
- Context ctx;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(coord_var.get());
-
mod.AddGlobalVariable(std::move(coord_var));
ast::VariableList params;
@@ -922,9 +871,8 @@
ASSERT_TRUE(td.Determine()) << td.error();
- GeneratorImpl g(&mod);
- ASSERT_TRUE(g.Generate()) << g.error();
- EXPECT_EQ(g.result(), R"(#include <metal_stdlib>
+ ASSERT_TRUE(gen.Generate()) << gen.error();
+ EXPECT_EQ(gen.result(), R"(#include <metal_stdlib>
struct Data {
int a;
@@ -948,7 +896,6 @@
ast::type::VoidType void_type;
ast::type::F32Type f32;
ast::type::I32Type i32;
- ast::Module mod;
ast::StructMemberList members;
ast::StructMemberDecorationList a_deco;
@@ -980,10 +927,7 @@
decos.push_back(std::make_unique<ast::SetDecoration>(1, Source{}));
coord_var->set_decorations(std::move(decos));
- Context ctx;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(coord_var.get());
-
mod.AddGlobalVariable(std::move(coord_var));
ast::VariableList params;
@@ -1025,9 +969,8 @@
ASSERT_TRUE(td.Determine()) << td.error();
- GeneratorImpl g(&mod);
- ASSERT_TRUE(g.Generate()) << g.error();
- EXPECT_EQ(g.result(), R"(#include <metal_stdlib>
+ ASSERT_TRUE(gen.Generate()) << gen.error();
+ EXPECT_EQ(gen.result(), R"(#include <metal_stdlib>
struct Data {
int a;
@@ -1058,9 +1001,6 @@
decos.push_back(std::make_unique<ast::LocationDecoration>(1, Source{}));
bar_var->set_decorations(std::move(decos));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(bar_var.get());
mod.AddGlobalVariable(std::move(bar_var));
@@ -1094,10 +1034,8 @@
mod.AddFunction(std::move(func_1));
ASSERT_TRUE(td.Determine()) << td.error();
-
- GeneratorImpl g(&mod);
- ASSERT_TRUE(g.Generate()) << g.error();
- EXPECT_EQ(g.result(), R"(#include <metal_stdlib>
+ ASSERT_TRUE(gen.Generate()) << gen.error();
+ EXPECT_EQ(gen.result(), R"(#include <metal_stdlib>
struct ep_1_out {
float bar [[color(1)]];
@@ -1124,12 +1062,10 @@
func->add_decoration(std::make_unique<ast::StageDecoration>(
ast::PipelineStage::kCompute, Source{}));
- ast::Module m;
- m.AddFunction(std::move(func));
+ mod.AddFunction(std::move(func));
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.Generate()) << g.error();
- EXPECT_EQ(g.result(), R"(#include <metal_stdlib>
+ ASSERT_TRUE(gen.Generate()) << gen.error();
+ EXPECT_EQ(gen.result(), R"(#include <metal_stdlib>
kernel void main_tint_0() {
}
@@ -1153,14 +1089,12 @@
body->append(std::make_unique<ast::ReturnStatement>());
func->set_body(std::move(body));
- ast::Module m;
- m.AddFunction(std::move(func));
+ mod.AddFunction(std::move(func));
- GeneratorImpl g(&m);
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.Generate()) << g.error();
- EXPECT_EQ(g.result(), R"(#include <metal_stdlib>
+ ASSERT_TRUE(gen.Generate()) << gen.error();
+ EXPECT_EQ(gen.result(), R"(#include <metal_stdlib>
void my_func(float a[5]) {
return;
@@ -1215,10 +1149,6 @@
decos.push_back(std::make_unique<ast::SetDecoration>(0, Source{}));
data_var->set_decorations(std::move(decos));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
mod.AddConstructedType(&s);
td.RegisterVariableForTesting(data_var.get());
@@ -1268,9 +1198,8 @@
ASSERT_TRUE(td.Determine()) << td.error();
- GeneratorImpl g(&mod);
- ASSERT_TRUE(g.Generate()) << g.error();
- EXPECT_EQ(g.result(), R"(#include <metal_stdlib>
+ ASSERT_TRUE(gen.Generate()) << gen.error();
+ EXPECT_EQ(gen.result(), R"(#include <metal_stdlib>
struct Data {
float d;
diff --git a/src/writer/msl/generator_impl_identifier_test.cc b/src/writer/msl/generator_impl_identifier_test.cc
index 2e07db5..d5be38b 100644
--- a/src/writer/msl/generator_impl_identifier_test.cc
+++ b/src/writer/msl/generator_impl_identifier_test.cc
@@ -16,30 +16,27 @@
#include "src/ast/identifier_expression.h"
#include "src/ast/module.h"
#include "src/writer/msl/generator_impl.h"
+#include "src/writer/msl/test_helper.h"
namespace tint {
namespace writer {
namespace msl {
namespace {
-using MslGeneratorImplTest = testing::Test;
+using MslGeneratorImplTest = TestHelper;
TEST_F(MslGeneratorImplTest, EmitIdentifierExpression) {
ast::IdentifierExpression i("foo");
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitExpression(&i)) << g.error();
- EXPECT_EQ(g.result(), "foo");
+ ASSERT_TRUE(gen.EmitExpression(&i)) << gen.error();
+ EXPECT_EQ(gen.result(), "foo");
}
TEST_F(MslGeneratorImplTest, EmitIdentifierExpression_Single_WithCollision) {
ast::IdentifierExpression i("virtual");
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitExpression(&i)) << g.error();
- EXPECT_EQ(g.result(), "virtual_tint_0");
+ ASSERT_TRUE(gen.EmitExpression(&i)) << gen.error();
+ EXPECT_EQ(gen.result(), "virtual_tint_0");
}
} // namespace
diff --git a/src/writer/msl/generator_impl_if_test.cc b/src/writer/msl/generator_impl_if_test.cc
index 8686b14..04dfc7e 100644
--- a/src/writer/msl/generator_impl_if_test.cc
+++ b/src/writer/msl/generator_impl_if_test.cc
@@ -19,13 +19,14 @@
#include "src/ast/module.h"
#include "src/ast/return_statement.h"
#include "src/writer/msl/generator_impl.h"
+#include "src/writer/msl/test_helper.h"
namespace tint {
namespace writer {
namespace msl {
namespace {
-using MslGeneratorImplTest = testing::Test;
+using MslGeneratorImplTest = TestHelper;
TEST_F(MslGeneratorImplTest, Emit_If) {
auto cond = std::make_unique<ast::IdentifierExpression>("cond");
@@ -34,12 +35,10 @@
ast::IfStatement i(std::move(cond), std::move(body));
- ast::Module m;
- GeneratorImpl g(&m);
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&i)) << g.error();
- EXPECT_EQ(g.result(), R"( if (cond) {
+ ASSERT_TRUE(gen.EmitStatement(&i)) << gen.error();
+ EXPECT_EQ(gen.result(), R"( if (cond) {
return;
}
)");
@@ -61,12 +60,10 @@
ast::IfStatement i(std::move(cond), std::move(body));
i.set_else_statements(std::move(elses));
- ast::Module m;
- GeneratorImpl g(&m);
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&i)) << g.error();
- EXPECT_EQ(g.result(), R"( if (cond) {
+ ASSERT_TRUE(gen.EmitStatement(&i)) << gen.error();
+ EXPECT_EQ(gen.result(), R"( if (cond) {
return;
} else if (else_cond) {
return;
@@ -88,12 +85,10 @@
ast::IfStatement i(std::move(cond), std::move(body));
i.set_else_statements(std::move(elses));
- ast::Module m;
- GeneratorImpl g(&m);
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&i)) << g.error();
- EXPECT_EQ(g.result(), R"( if (cond) {
+ ASSERT_TRUE(gen.EmitStatement(&i)) << gen.error();
+ EXPECT_EQ(gen.result(), R"( if (cond) {
return;
} else {
return;
@@ -122,12 +117,10 @@
ast::IfStatement i(std::move(cond), std::move(body));
i.set_else_statements(std::move(elses));
- ast::Module m;
- GeneratorImpl g(&m);
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&i)) << g.error();
- EXPECT_EQ(g.result(), R"( if (cond) {
+ ASSERT_TRUE(gen.EmitStatement(&i)) << gen.error();
+ EXPECT_EQ(gen.result(), R"( if (cond) {
return;
} else if (else_cond) {
return;
diff --git a/src/writer/msl/generator_impl_import_test.cc b/src/writer/msl/generator_impl_import_test.cc
index 1e56fc8..8ecb356 100644
--- a/src/writer/msl/generator_impl_import_test.cc
+++ b/src/writer/msl/generator_impl_import_test.cc
@@ -31,13 +31,14 @@
#include "src/context.h"
#include "src/type_determiner.h"
#include "src/writer/msl/generator_impl.h"
+#include "src/writer/msl/test_helper.h"
namespace tint {
namespace writer {
namespace msl {
namespace {
-using MslGeneratorImplTest = testing::Test;
+using MslGeneratorImplTest = TestHelper;
struct MslImportData {
const char* name;
@@ -47,7 +48,7 @@
out << data.name;
return out;
}
-using MslImportData_SingleParamTest = testing::TestWithParam<MslImportData>;
+using MslImportData_SingleParamTest = TestParamHelper<MslImportData>;
TEST_P(MslImportData_SingleParamTest, FloatScalar) {
auto param = GetParam();
@@ -62,15 +63,10 @@
ast::CallExpression call(std::move(ident), std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
// The call type determination will set the intrinsic data for the ident
ASSERT_TRUE(td.DetermineResultType(&call)) << td.error();
- GeneratorImpl g(&mod);
- ASSERT_EQ(g.generate_builtin_name(ident_ptr),
+ ASSERT_EQ(gen.generate_builtin_name(ident_ptr),
std::string("metal::") + param.msl_name);
}
INSTANTIATE_TEST_SUITE_P(MslGeneratorImplTest,
@@ -109,18 +105,13 @@
ast::CallExpression expr(std::make_unique<ast::IdentifierExpression>("abs"),
std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- GeneratorImpl g(&mod);
- ASSERT_TRUE(g.EmitCall(&expr)) << g.error();
- EXPECT_EQ(g.result(), R"(metal::abs(1))");
+ ASSERT_TRUE(gen.EmitCall(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), R"(metal::abs(1))");
}
-using MslImportData_DualParamTest = testing::TestWithParam<MslImportData>;
+using MslImportData_DualParamTest = TestParamHelper<MslImportData>;
TEST_P(MslImportData_DualParamTest, FloatScalar) {
auto param = GetParam();
@@ -136,16 +127,10 @@
std::make_unique<ast::IdentifierExpression>(param.name),
std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
-
- GeneratorImpl g(&mod);
- ASSERT_TRUE(g.EmitCall(&expr)) << g.error();
- EXPECT_EQ(g.result(), std::string("metal::") + param.msl_name +
- "(1.00000000f, 2.00000000f)");
+ ASSERT_TRUE(gen.EmitCall(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), std::string("metal::") + param.msl_name +
+ "(1.00000000f, 2.00000000f)");
}
INSTANTIATE_TEST_SUITE_P(MslGeneratorImplTest,
MslImportData_DualParamTest,
@@ -157,8 +142,7 @@
MslImportData{"reflect", "reflect"},
MslImportData{"step", "step"}));
-using MslImportData_DualParam_VectorTest =
- testing::TestWithParam<MslImportData>;
+using MslImportData_DualParam_VectorTest = TestParamHelper<MslImportData>;
TEST_P(MslImportData_DualParam_VectorTest, FloatVector) {
auto param = GetParam();
@@ -190,23 +174,17 @@
std::make_unique<ast::IdentifierExpression>(param.name),
std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
-
- GeneratorImpl g(&mod);
- ASSERT_TRUE(g.EmitCall(&expr)) << g.error();
- EXPECT_EQ(g.result(), std::string("metal::") + param.msl_name +
- "(float3(1.00000000f, 2.00000000f, 3.00000000f), "
- "float3(4.00000000f, 5.00000000f, 6.00000000f))");
+ ASSERT_TRUE(gen.EmitCall(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), std::string("metal::") + param.msl_name +
+ "(float3(1.00000000f, 2.00000000f, 3.00000000f), "
+ "float3(4.00000000f, 5.00000000f, 6.00000000f))");
}
INSTANTIATE_TEST_SUITE_P(MslGeneratorImplTest,
MslImportData_DualParam_VectorTest,
testing::Values(MslImportData{"cross", "cross"}));
-using MslImportData_DualParam_Int_Test = testing::TestWithParam<MslImportData>;
+using MslImportData_DualParam_Int_Test = TestParamHelper<MslImportData>;
TEST_P(MslImportData_DualParam_Int_Test, IntScalar) {
auto param = GetParam();
@@ -222,22 +200,16 @@
std::make_unique<ast::IdentifierExpression>(param.name),
std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
-
- GeneratorImpl g(&mod);
- ASSERT_TRUE(g.EmitCall(&expr)) << g.error();
- EXPECT_EQ(g.result(), std::string("metal::") + param.msl_name + "(1, 2)");
+ ASSERT_TRUE(gen.EmitCall(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), std::string("metal::") + param.msl_name + "(1, 2)");
}
INSTANTIATE_TEST_SUITE_P(MslGeneratorImplTest,
MslImportData_DualParam_Int_Test,
testing::Values(MslImportData{"max", "max"},
MslImportData{"min", "min"}));
-using MslImportData_TripleParamTest = testing::TestWithParam<MslImportData>;
+using MslImportData_TripleParamTest = TestParamHelper<MslImportData>;
TEST_P(MslImportData_TripleParamTest, FloatScalar) {
auto param = GetParam();
@@ -255,16 +227,10 @@
std::make_unique<ast::IdentifierExpression>(param.name),
std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
-
- GeneratorImpl g(&mod);
- ASSERT_TRUE(g.EmitCall(&expr)) << g.error();
- EXPECT_EQ(g.result(), std::string("metal::") + param.msl_name +
- "(1.00000000f, 2.00000000f, 3.00000000f)");
+ ASSERT_TRUE(gen.EmitCall(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), std::string("metal::") + param.msl_name +
+ "(1.00000000f, 2.00000000f, 3.00000000f)");
}
INSTANTIATE_TEST_SUITE_P(
MslGeneratorImplTest,
@@ -275,8 +241,7 @@
MslImportData{"clamp", "clamp"},
MslImportData{"smoothStep", "smoothstep"}));
-using MslImportData_TripleParam_Int_Test =
- testing::TestWithParam<MslImportData>;
+using MslImportData_TripleParam_Int_Test = TestParamHelper<MslImportData>;
TEST_P(MslImportData_TripleParam_Int_Test, IntScalar) {
auto param = GetParam();
@@ -294,15 +259,10 @@
std::make_unique<ast::IdentifierExpression>(param.name),
std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
-
- GeneratorImpl g(&mod);
- ASSERT_TRUE(g.EmitCall(&expr)) << g.error();
- EXPECT_EQ(g.result(), std::string("metal::") + param.msl_name + "(1, 2, 3)");
+ ASSERT_TRUE(gen.EmitCall(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(),
+ std::string("metal::") + param.msl_name + "(1, 2, 3)");
}
INSTANTIATE_TEST_SUITE_P(MslGeneratorImplTest,
MslImportData_TripleParam_Int_Test,
@@ -323,18 +283,13 @@
std::make_unique<ast::IdentifierExpression>("determinant"),
std::move(params));
- Context ctx;
- ast::Module mod;
mod.AddGlobalVariable(std::move(var));
- TypeDeterminer td(&ctx, &mod);
// Register the global
ASSERT_TRUE(td.Determine()) << td.error();
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
-
- GeneratorImpl g(&mod);
- ASSERT_TRUE(g.EmitCall(&expr)) << g.error();
- EXPECT_EQ(g.result(), std::string("metal::determinant(var)"));
+ ASSERT_TRUE(gen.EmitCall(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), std::string("metal::determinant(var)"));
}
} // namespace
diff --git a/src/writer/msl/generator_impl_intrinsic_test.cc b/src/writer/msl/generator_impl_intrinsic_test.cc
index 4f02220..eb9121d 100644
--- a/src/writer/msl/generator_impl_intrinsic_test.cc
+++ b/src/writer/msl/generator_impl_intrinsic_test.cc
@@ -21,13 +21,14 @@
#include "src/context.h"
#include "src/type_determiner.h"
#include "src/writer/msl/generator_impl.h"
+#include "src/writer/msl/test_helper.h"
namespace tint {
namespace writer {
namespace msl {
namespace {
-using MslGeneratorImplTest = testing::Test;
+using MslGeneratorImplTest = TestHelper;
struct IntrinsicData {
ast::Intrinsic intrinsic;
@@ -37,13 +38,10 @@
out << data.msl_name;
return out;
}
-using MslIntrinsicTest = testing::TestWithParam<IntrinsicData>;
+using MslIntrinsicTest = TestParamHelper<IntrinsicData>;
TEST_P(MslIntrinsicTest, Emit) {
auto param = GetParam();
-
- ast::Module m;
- GeneratorImpl g(&m);
- EXPECT_EQ(g.generate_intrinsic_name(param.intrinsic), param.msl_name);
+ EXPECT_EQ(gen.generate_intrinsic_name(param.intrinsic), param.msl_name);
}
INSTANTIATE_TEST_SUITE_P(
MslGeneratorImplTest,
@@ -86,29 +84,22 @@
std::make_unique<ast::IdentifierExpression>("outer_product"),
std::move(params));
- Context ctx;
- ast::Module m;
- TypeDeterminer td(&ctx, &m);
td.RegisterVariableForTesting(a.get());
td.RegisterVariableForTesting(b.get());
- m.AddGlobalVariable(std::move(a));
- m.AddGlobalVariable(std::move(b));
+ mod.AddGlobalVariable(std::move(a));
+ mod.AddGlobalVariable(std::move(b));
ASSERT_TRUE(td.Determine()) << td.error();
ASSERT_TRUE(td.DetermineResultType(&call)) << td.error();
- GeneratorImpl g(&m);
-
- g.increment_indent();
- ASSERT_TRUE(g.EmitExpression(&call)) << g.error();
- EXPECT_EQ(g.result(), " float3x2(a * b[0], a * b[1], a * b[2])");
+ gen.increment_indent();
+ ASSERT_TRUE(gen.EmitExpression(&call)) << gen.error();
+ EXPECT_EQ(gen.result(), " float3x2(a * b[0], a * b[1], a * b[2])");
}
TEST_F(MslGeneratorImplTest, Intrinsic_Bad_Name) {
- ast::Module m;
- GeneratorImpl g(&m);
- EXPECT_EQ(g.generate_intrinsic_name(ast::Intrinsic::kNone), "");
+ EXPECT_EQ(gen.generate_intrinsic_name(ast::Intrinsic::kNone), "");
}
TEST_F(MslGeneratorImplTest, Intrinsic_Call) {
@@ -122,10 +113,6 @@
ast::CallExpression call(std::make_unique<ast::IdentifierExpression>("dot"),
std::move(params));
- Context ctx;
- ast::Module m;
- TypeDeterminer td(&ctx, &m);
-
ast::Variable v1("param1", ast::StorageClass::kFunction, &vec);
ast::Variable v2("param2", ast::StorageClass::kFunction, &vec);
@@ -134,10 +121,9 @@
ASSERT_TRUE(td.DetermineResultType(&call)) << td.error();
- GeneratorImpl g(&m);
- g.increment_indent();
- ASSERT_TRUE(g.EmitExpression(&call)) << g.error();
- EXPECT_EQ(g.result(), " dot(param1, param2)");
+ gen.increment_indent();
+ ASSERT_TRUE(gen.EmitExpression(&call)) << gen.error();
+ EXPECT_EQ(gen.result(), " dot(param1, param2)");
}
} // namespace
diff --git a/src/writer/msl/generator_impl_loop_test.cc b/src/writer/msl/generator_impl_loop_test.cc
index c11efdc..c105ccd 100644
--- a/src/writer/msl/generator_impl_loop_test.cc
+++ b/src/writer/msl/generator_impl_loop_test.cc
@@ -26,13 +26,14 @@
#include "src/ast/variable.h"
#include "src/ast/variable_decl_statement.h"
#include "src/writer/msl/generator_impl.h"
+#include "src/writer/msl/test_helper.h"
namespace tint {
namespace writer {
namespace msl {
namespace {
-using MslGeneratorImplTest = testing::Test;
+using MslGeneratorImplTest = TestHelper;
TEST_F(MslGeneratorImplTest, Emit_Loop) {
auto body = std::make_unique<ast::BlockStatement>();
@@ -40,12 +41,10 @@
ast::LoopStatement l(std::move(body), {});
- ast::Module m;
- GeneratorImpl g(&m);
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&l)) << g.error();
- EXPECT_EQ(g.result(), R"( for(;;) {
+ ASSERT_TRUE(gen.EmitStatement(&l)) << gen.error();
+ EXPECT_EQ(gen.result(), R"( for(;;) {
discard_fragment();
}
)");
@@ -60,12 +59,10 @@
ast::LoopStatement l(std::move(body), std::move(continuing));
- ast::Module m;
- GeneratorImpl g(&m);
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&l)) << g.error();
- EXPECT_EQ(g.result(), R"( {
+ ASSERT_TRUE(gen.EmitStatement(&l)) << gen.error();
+ EXPECT_EQ(gen.result(), R"( {
bool tint_msl_is_first_1 = true;
for(;;) {
if (!tint_msl_is_first_1) {
@@ -103,12 +100,10 @@
ast::LoopStatement outer(std::move(body), std::move(continuing));
- ast::Module m;
- GeneratorImpl g(&m);
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&outer)) << g.error();
- EXPECT_EQ(g.result(), R"( {
+ ASSERT_TRUE(gen.EmitStatement(&outer)) << gen.error();
+ EXPECT_EQ(gen.result(), R"( {
bool tint_msl_is_first_1 = true;
for(;;) {
if (!tint_msl_is_first_1) {
@@ -174,14 +169,12 @@
continuing->append(std::make_unique<ast::AssignmentStatement>(
std::move(lhs), std::move(rhs)));
- ast::Module m;
- GeneratorImpl g(&m);
- g.increment_indent();
+ gen.increment_indent();
ast::LoopStatement outer(std::move(body), std::move(continuing));
- ASSERT_TRUE(g.EmitStatement(&outer)) << g.error();
- EXPECT_EQ(g.result(), R"( {
+ ASSERT_TRUE(gen.EmitStatement(&outer)) << gen.error();
+ EXPECT_EQ(gen.result(), R"( {
bool tint_msl_is_first_1 = true;
float lhs;
float other;
diff --git a/src/writer/msl/generator_impl_member_accessor_test.cc b/src/writer/msl/generator_impl_member_accessor_test.cc
index 9567511..ef81eea 100644
--- a/src/writer/msl/generator_impl_member_accessor_test.cc
+++ b/src/writer/msl/generator_impl_member_accessor_test.cc
@@ -19,13 +19,14 @@
#include "src/ast/member_accessor_expression.h"
#include "src/ast/module.h"
#include "src/writer/msl/generator_impl.h"
+#include "src/writer/msl/test_helper.h"
namespace tint {
namespace writer {
namespace msl {
namespace {
-using MslGeneratorImplTest = testing::Test;
+using MslGeneratorImplTest = TestHelper;
TEST_F(MslGeneratorImplTest, EmitExpression_MemberAccessor) {
auto str = std::make_unique<ast::IdentifierExpression>("str");
@@ -33,10 +34,8 @@
ast::MemberAccessorExpression expr(std::move(str), std::move(mem));
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitExpression(&expr)) << g.error();
- EXPECT_EQ(g.result(), "str.mem");
+ ASSERT_TRUE(gen.EmitExpression(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), "str.mem");
}
} // namespace
diff --git a/src/writer/msl/generator_impl_module_constant_test.cc b/src/writer/msl/generator_impl_module_constant_test.cc
index 757ed56..cb4b309 100644
--- a/src/writer/msl/generator_impl_module_constant_test.cc
+++ b/src/writer/msl/generator_impl_module_constant_test.cc
@@ -26,13 +26,14 @@
#include "src/ast/type_constructor_expression.h"
#include "src/ast/variable.h"
#include "src/writer/msl/generator_impl.h"
+#include "src/writer/msl/test_helper.h"
namespace tint {
namespace writer {
namespace msl {
namespace {
-using MslGeneratorImplTest = testing::Test;
+using MslGeneratorImplTest = TestHelper;
TEST_F(MslGeneratorImplTest, Emit_ModuleConstant) {
ast::type::F32Type f32;
@@ -52,11 +53,9 @@
var->set_constructor(
std::make_unique<ast::TypeConstructorExpression>(&ary, std::move(exprs)));
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitProgramConstVariable(var.get())) << g.error();
+ ASSERT_TRUE(gen.EmitProgramConstVariable(var.get())) << gen.error();
EXPECT_EQ(
- g.result(),
+ gen.result(),
"constant float pos[3] = {1.00000000f, 2.00000000f, 3.00000000f};\n");
}
@@ -73,10 +72,8 @@
var->set_constructor(std::make_unique<ast::ScalarConstructorExpression>(
std::make_unique<ast::FloatLiteral>(&f32, 3.0f)));
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitProgramConstVariable(var.get())) << g.error();
- EXPECT_EQ(g.result(), "constant float pos [[function_constant(23)]];\n");
+ ASSERT_TRUE(gen.EmitProgramConstVariable(var.get())) << gen.error();
+ EXPECT_EQ(gen.result(), "constant float pos [[function_constant(23)]];\n");
}
} // namespace
diff --git a/src/writer/msl/generator_impl_return_test.cc b/src/writer/msl/generator_impl_return_test.cc
index 3d68fa2..0318614 100644
--- a/src/writer/msl/generator_impl_return_test.cc
+++ b/src/writer/msl/generator_impl_return_test.cc
@@ -20,35 +20,32 @@
#include "src/ast/module.h"
#include "src/ast/return_statement.h"
#include "src/writer/msl/generator_impl.h"
+#include "src/writer/msl/test_helper.h"
namespace tint {
namespace writer {
namespace msl {
namespace {
-using MslGeneratorImplTest = testing::Test;
+using MslGeneratorImplTest = TestHelper;
TEST_F(MslGeneratorImplTest, Emit_Return) {
ast::ReturnStatement r;
- ast::Module m;
- GeneratorImpl g(&m);
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&r)) << g.error();
- EXPECT_EQ(g.result(), " return;\n");
+ ASSERT_TRUE(gen.EmitStatement(&r)) << gen.error();
+ EXPECT_EQ(gen.result(), " return;\n");
}
TEST_F(MslGeneratorImplTest, Emit_ReturnWithValue) {
auto expr = std::make_unique<ast::IdentifierExpression>("expr");
ast::ReturnStatement r(std::move(expr));
- ast::Module m;
- GeneratorImpl g(&m);
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&r)) << g.error();
- EXPECT_EQ(g.result(), " return expr;\n");
+ ASSERT_TRUE(gen.EmitStatement(&r)) << gen.error();
+ EXPECT_EQ(gen.result(), " return expr;\n");
}
} // namespace
diff --git a/src/writer/msl/generator_impl_switch_test.cc b/src/writer/msl/generator_impl_switch_test.cc
index 60b0482..13c99e2 100644
--- a/src/writer/msl/generator_impl_switch_test.cc
+++ b/src/writer/msl/generator_impl_switch_test.cc
@@ -23,13 +23,14 @@
#include "src/ast/switch_statement.h"
#include "src/ast/type/i32_type.h"
#include "src/writer/msl/generator_impl.h"
+#include "src/writer/msl/test_helper.h"
namespace tint {
namespace writer {
namespace msl {
namespace {
-using MslGeneratorImplTest = testing::Test;
+using MslGeneratorImplTest = TestHelper;
TEST_F(MslGeneratorImplTest, Emit_Switch) {
auto def = std::make_unique<ast::CaseStatement>();
@@ -54,12 +55,10 @@
auto cond = std::make_unique<ast::IdentifierExpression>("cond");
ast::SwitchStatement s(std::move(cond), std::move(body));
- ast::Module m;
- GeneratorImpl g(&m);
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&s)) << g.error();
- EXPECT_EQ(g.result(), R"( switch(cond) {
+ ASSERT_TRUE(gen.EmitStatement(&s)) << gen.error();
+ EXPECT_EQ(gen.result(), R"( switch(cond) {
case 5: {
break;
}
diff --git a/src/writer/msl/generator_impl_test.cc b/src/writer/msl/generator_impl_test.cc
index c820cc9..13f6292 100644
--- a/src/writer/msl/generator_impl_test.cc
+++ b/src/writer/msl/generator_impl_test.cc
@@ -38,28 +38,26 @@
#include "src/ast/type/vector_type.h"
#include "src/ast/type/void_type.h"
#include "src/writer/msl/namer.h"
+#include "src/writer/msl/test_helper.h"
namespace tint {
namespace writer {
namespace msl {
namespace {
-using MslGeneratorImplTest = testing::Test;
+using MslGeneratorImplTest = TestHelper;
TEST_F(MslGeneratorImplTest, Generate) {
ast::type::VoidType void_type;
- ast::Module m;
auto func = std::make_unique<ast::Function>("my_func", ast::VariableList{},
&void_type);
func->add_decoration(std::make_unique<ast::StageDecoration>(
ast::PipelineStage::kCompute, Source{}));
- m.AddFunction(std::move(func));
+ mod.AddFunction(std::move(func));
- GeneratorImpl g(&m);
-
- ASSERT_TRUE(g.Generate()) << g.error();
- EXPECT_EQ(g.result(), R"(#include <metal_stdlib>
+ ASSERT_TRUE(gen.Generate()) << gen.error();
+ EXPECT_EQ(gen.result(), R"(#include <metal_stdlib>
kernel void my_func() {
}
@@ -68,30 +66,20 @@
}
TEST_F(MslGeneratorImplTest, InputStructName) {
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_EQ(g.generate_name("func_main_in"), "func_main_in");
+ ASSERT_EQ(gen.generate_name("func_main_in"), "func_main_in");
}
TEST_F(MslGeneratorImplTest, InputStructName_ConflictWithExisting) {
- ast::Module m;
- GeneratorImpl g(&m);
-
- // Register the struct name as existing.
- auto* namer = g.namer_for_testing();
- namer->NameFor("func_main_out");
-
- ASSERT_EQ(g.generate_name("func_main_out"), "func_main_out_0");
+ 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) {
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_EQ(g.generate_name("func_main_in"), "func_main_in");
+ ASSERT_EQ(gen.generate_name("func_main_in"), "func_main_in");
ast::IdentifierExpression ident("func_main_in");
- ASSERT_TRUE(g.EmitIdentifier(&ident));
- EXPECT_EQ(g.result(), "func_main_in_0");
+ ASSERT_TRUE(gen.EmitIdentifier(&ident));
+ EXPECT_EQ(gen.result(), "func_main_in_0");
}
struct MslBuiltinData {
@@ -102,13 +90,11 @@
out << data.builtin;
return out;
}
-using MslBuiltinConversionTest = testing::TestWithParam<MslBuiltinData>;
+using MslBuiltinConversionTest = TestParamHelper<MslBuiltinData>;
TEST_P(MslBuiltinConversionTest, Emit) {
auto params = GetParam();
- ast::Module m;
- GeneratorImpl g(&m);
- EXPECT_EQ(g.builtin_to_attribute(params.builtin),
+ EXPECT_EQ(gen.builtin_to_attribute(params.builtin),
std::string(params.attribute_name));
}
INSTANTIATE_TEST_SUITE_P(
@@ -130,54 +116,40 @@
TEST_F(MslGeneratorImplTest, calculate_alignment_size_alias) {
ast::type::F32Type f32;
ast::type::AliasType alias("a", &f32);
- ast::Module m;
- GeneratorImpl g(&m);
- EXPECT_EQ(4u, g.calculate_alignment_size(&alias));
+ EXPECT_EQ(4u, gen.calculate_alignment_size(&alias));
}
TEST_F(MslGeneratorImplTest, calculate_alignment_size_array) {
ast::type::F32Type f32;
ast::type::ArrayType ary(&f32, 4);
- ast::Module m;
- GeneratorImpl g(&m);
- EXPECT_EQ(4u * 4u, g.calculate_alignment_size(&ary));
+ EXPECT_EQ(4u * 4u, gen.calculate_alignment_size(&ary));
}
TEST_F(MslGeneratorImplTest, calculate_alignment_size_bool) {
ast::type::BoolType bool_type;
- ast::Module m;
- GeneratorImpl g(&m);
- EXPECT_EQ(1u, g.calculate_alignment_size(&bool_type));
+ EXPECT_EQ(1u, gen.calculate_alignment_size(&bool_type));
}
TEST_F(MslGeneratorImplTest, calculate_alignment_size_f32) {
ast::type::F32Type f32;
- ast::Module m;
- GeneratorImpl g(&m);
- EXPECT_EQ(4u, g.calculate_alignment_size(&f32));
+ EXPECT_EQ(4u, gen.calculate_alignment_size(&f32));
}
TEST_F(MslGeneratorImplTest, calculate_alignment_size_i32) {
ast::type::I32Type i32;
- ast::Module m;
- GeneratorImpl g(&m);
- EXPECT_EQ(4u, g.calculate_alignment_size(&i32));
+ EXPECT_EQ(4u, gen.calculate_alignment_size(&i32));
}
TEST_F(MslGeneratorImplTest, calculate_alignment_size_matrix) {
ast::type::F32Type f32;
ast::type::MatrixType mat(&f32, 3, 2);
- ast::Module m;
- GeneratorImpl g(&m);
- EXPECT_EQ(4u * 3u * 2u, g.calculate_alignment_size(&mat));
+ EXPECT_EQ(4u * 3u * 2u, gen.calculate_alignment_size(&mat));
}
TEST_F(MslGeneratorImplTest, calculate_alignment_size_pointer) {
ast::type::BoolType bool_type;
ast::type::PointerType ptr(&bool_type, ast::StorageClass::kPrivate);
- ast::Module m;
- GeneratorImpl g(&m);
- EXPECT_EQ(0u, g.calculate_alignment_size(&ptr));
+ EXPECT_EQ(0u, gen.calculate_alignment_size(&ptr));
}
TEST_F(MslGeneratorImplTest, calculate_alignment_size_struct) {
@@ -207,9 +179,7 @@
ast::type::StructType s("S", std::move(str));
- ast::Module m;
- GeneratorImpl g(&m);
- EXPECT_EQ(132u, g.calculate_alignment_size(&s));
+ EXPECT_EQ(132u, gen.calculate_alignment_size(&s));
}
TEST_F(MslGeneratorImplTest, calculate_alignment_size_struct_of_struct) {
@@ -260,16 +230,12 @@
ast::type::StructType outer_s("Outer", std::move(outer_str));
- ast::Module m;
- GeneratorImpl g(&m);
- EXPECT_EQ(80u, g.calculate_alignment_size(&outer_s));
+ EXPECT_EQ(80u, gen.calculate_alignment_size(&outer_s));
}
TEST_F(MslGeneratorImplTest, calculate_alignment_size_u32) {
ast::type::U32Type u32;
- ast::Module m;
- GeneratorImpl g(&m);
- EXPECT_EQ(4u, g.calculate_alignment_size(&u32));
+ EXPECT_EQ(4u, gen.calculate_alignment_size(&u32));
}
struct MslVectorSizeData {
@@ -280,15 +246,13 @@
out << data.elements;
return out;
}
-using MslVectorSizeBoolTest = testing::TestWithParam<MslVectorSizeData>;
+using MslVectorSizeBoolTest = TestParamHelper<MslVectorSizeData>;
TEST_P(MslVectorSizeBoolTest, calculate) {
auto param = GetParam();
ast::type::BoolType bool_type;
ast::type::VectorType vec(&bool_type, param.elements);
- ast::Module m;
- GeneratorImpl g(&m);
- EXPECT_EQ(param.byte_size, g.calculate_alignment_size(&vec));
+ EXPECT_EQ(param.byte_size, gen.calculate_alignment_size(&vec));
}
INSTANTIATE_TEST_SUITE_P(MslGeneratorImplTest,
MslVectorSizeBoolTest,
@@ -296,15 +260,13 @@
MslVectorSizeData{3u, 4u},
MslVectorSizeData{4u, 4u}));
-using MslVectorSizeI32Test = testing::TestWithParam<MslVectorSizeData>;
+using MslVectorSizeI32Test = TestParamHelper<MslVectorSizeData>;
TEST_P(MslVectorSizeI32Test, calculate) {
auto param = GetParam();
ast::type::I32Type i32;
ast::type::VectorType vec(&i32, param.elements);
- ast::Module m;
- GeneratorImpl g(&m);
- EXPECT_EQ(param.byte_size, g.calculate_alignment_size(&vec));
+ EXPECT_EQ(param.byte_size, gen.calculate_alignment_size(&vec));
}
INSTANTIATE_TEST_SUITE_P(MslGeneratorImplTest,
MslVectorSizeI32Test,
@@ -312,15 +274,13 @@
MslVectorSizeData{3u, 16u},
MslVectorSizeData{4u, 16u}));
-using MslVectorSizeU32Test = testing::TestWithParam<MslVectorSizeData>;
+using MslVectorSizeU32Test = TestParamHelper<MslVectorSizeData>;
TEST_P(MslVectorSizeU32Test, calculate) {
auto param = GetParam();
ast::type::U32Type u32;
ast::type::VectorType vec(&u32, param.elements);
- ast::Module m;
- GeneratorImpl g(&m);
- EXPECT_EQ(param.byte_size, g.calculate_alignment_size(&vec));
+ EXPECT_EQ(param.byte_size, gen.calculate_alignment_size(&vec));
}
INSTANTIATE_TEST_SUITE_P(MslGeneratorImplTest,
MslVectorSizeU32Test,
@@ -328,15 +288,13 @@
MslVectorSizeData{3u, 16u},
MslVectorSizeData{4u, 16u}));
-using MslVectorSizeF32Test = testing::TestWithParam<MslVectorSizeData>;
+using MslVectorSizeF32Test = TestParamHelper<MslVectorSizeData>;
TEST_P(MslVectorSizeF32Test, calculate) {
auto param = GetParam();
ast::type::F32Type f32;
ast::type::VectorType vec(&f32, param.elements);
- ast::Module m;
- GeneratorImpl g(&m);
- EXPECT_EQ(param.byte_size, g.calculate_alignment_size(&vec));
+ EXPECT_EQ(param.byte_size, gen.calculate_alignment_size(&vec));
}
INSTANTIATE_TEST_SUITE_P(MslGeneratorImplTest,
MslVectorSizeF32Test,
diff --git a/src/writer/msl/generator_impl_type_test.cc b/src/writer/msl/generator_impl_type_test.cc
index 235378b..110a941 100644
--- a/src/writer/msl/generator_impl_type_test.cc
+++ b/src/writer/msl/generator_impl_type_test.cc
@@ -38,42 +38,37 @@
#include "src/context.h"
#include "src/type_determiner.h"
#include "src/writer/msl/generator_impl.h"
+#include "src/writer/msl/test_helper.h"
namespace tint {
namespace writer {
namespace msl {
namespace {
-using MslGeneratorImplTest = testing::Test;
+using MslGeneratorImplTest = TestHelper;
TEST_F(MslGeneratorImplTest, EmitType_Alias) {
ast::type::F32Type f32;
ast::type::AliasType alias("alias", &f32);
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitType(&alias, "")) << g.error();
- EXPECT_EQ(g.result(), "alias");
+ ASSERT_TRUE(gen.EmitType(&alias, "")) << gen.error();
+ EXPECT_EQ(gen.result(), "alias");
}
TEST_F(MslGeneratorImplTest, EmitType_Alias_NameCollision) {
ast::type::F32Type f32;
ast::type::AliasType alias("bool", &f32);
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitType(&alias, "")) << g.error();
- EXPECT_EQ(g.result(), "bool_tint_0");
+ ASSERT_TRUE(gen.EmitType(&alias, "")) << gen.error();
+ EXPECT_EQ(gen.result(), "bool_tint_0");
}
TEST_F(MslGeneratorImplTest, EmitType_Array) {
ast::type::BoolType b;
ast::type::ArrayType a(&b, 4);
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitType(&a, "ary")) << g.error();
- EXPECT_EQ(g.result(), "bool ary[4]");
+ ASSERT_TRUE(gen.EmitType(&a, "ary")) << gen.error();
+ EXPECT_EQ(gen.result(), "bool ary[4]");
}
TEST_F(MslGeneratorImplTest, EmitType_ArrayOfArray) {
@@ -81,10 +76,8 @@
ast::type::ArrayType a(&b, 4);
ast::type::ArrayType c(&a, 5);
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitType(&c, "ary")) << g.error();
- EXPECT_EQ(g.result(), "bool ary[5][4]");
+ ASSERT_TRUE(gen.EmitType(&c, "ary")) << gen.error();
+ EXPECT_EQ(gen.result(), "bool ary[5][4]");
}
// TODO(dsinclair): Is this possible? What order should it output in?
@@ -94,10 +87,8 @@
ast::type::ArrayType c(&a, 5);
ast::type::ArrayType d(&c);
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitType(&c, "ary")) << g.error();
- EXPECT_EQ(g.result(), "bool ary[5][4][1]");
+ ASSERT_TRUE(gen.EmitType(&c, "ary")) << gen.error();
+ EXPECT_EQ(gen.result(), "bool ary[5][4][1]");
}
TEST_F(MslGeneratorImplTest, EmitType_ArrayOfArrayOfArray) {
@@ -106,87 +97,69 @@
ast::type::ArrayType c(&a, 5);
ast::type::ArrayType d(&c, 6);
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitType(&d, "ary")) << g.error();
- EXPECT_EQ(g.result(), "bool ary[6][5][4]");
+ ASSERT_TRUE(gen.EmitType(&d, "ary")) << gen.error();
+ EXPECT_EQ(gen.result(), "bool ary[6][5][4]");
}
TEST_F(MslGeneratorImplTest, EmitType_Array_NameCollision) {
ast::type::BoolType b;
ast::type::ArrayType a(&b, 4);
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitType(&a, "bool")) << g.error();
- EXPECT_EQ(g.result(), "bool bool_tint_0[4]");
+ ASSERT_TRUE(gen.EmitType(&a, "bool")) << gen.error();
+ EXPECT_EQ(gen.result(), "bool bool_tint_0[4]");
}
TEST_F(MslGeneratorImplTest, EmitType_Array_WithoutName) {
ast::type::BoolType b;
ast::type::ArrayType a(&b, 4);
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitType(&a, "")) << g.error();
- EXPECT_EQ(g.result(), "bool[4]");
+ ASSERT_TRUE(gen.EmitType(&a, "")) << gen.error();
+ EXPECT_EQ(gen.result(), "bool[4]");
}
TEST_F(MslGeneratorImplTest, EmitType_RuntimeArray) {
ast::type::BoolType b;
ast::type::ArrayType a(&b);
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitType(&a, "ary")) << g.error();
- EXPECT_EQ(g.result(), "bool ary[1]");
+ ASSERT_TRUE(gen.EmitType(&a, "ary")) << gen.error();
+ EXPECT_EQ(gen.result(), "bool ary[1]");
}
TEST_F(MslGeneratorImplTest, EmitType_RuntimeArray_NameCollision) {
ast::type::BoolType b;
ast::type::ArrayType a(&b);
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitType(&a, "discard_fragment")) << g.error();
- EXPECT_EQ(g.result(), "bool discard_fragment_tint_0[1]");
+ ASSERT_TRUE(gen.EmitType(&a, "discard_fragment")) << gen.error();
+ EXPECT_EQ(gen.result(), "bool discard_fragment_tint_0[1]");
}
TEST_F(MslGeneratorImplTest, EmitType_Bool) {
ast::type::BoolType b;
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitType(&b, "")) << g.error();
- EXPECT_EQ(g.result(), "bool");
+ ASSERT_TRUE(gen.EmitType(&b, "")) << gen.error();
+ EXPECT_EQ(gen.result(), "bool");
}
TEST_F(MslGeneratorImplTest, EmitType_F32) {
ast::type::F32Type f32;
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitType(&f32, "")) << g.error();
- EXPECT_EQ(g.result(), "float");
+ ASSERT_TRUE(gen.EmitType(&f32, "")) << gen.error();
+ EXPECT_EQ(gen.result(), "float");
}
TEST_F(MslGeneratorImplTest, EmitType_I32) {
ast::type::I32Type i32;
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitType(&i32, "")) << g.error();
- EXPECT_EQ(g.result(), "int");
+ ASSERT_TRUE(gen.EmitType(&i32, "")) << gen.error();
+ EXPECT_EQ(gen.result(), "int");
}
TEST_F(MslGeneratorImplTest, EmitType_Matrix) {
ast::type::F32Type f32;
ast::type::MatrixType m(&f32, 3, 2);
- ast::Module mod;
- GeneratorImpl g(&mod);
- ASSERT_TRUE(g.EmitType(&m, "")) << g.error();
- EXPECT_EQ(g.result(), "float2x3");
+ ASSERT_TRUE(gen.EmitType(&m, "")) << gen.error();
+ EXPECT_EQ(gen.result(), "float2x3");
}
// TODO(dsinclair): How to annotate as workgroup?
@@ -194,10 +167,8 @@
ast::type::F32Type f32;
ast::type::PointerType p(&f32, ast::StorageClass::kWorkgroup);
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitType(&p, "")) << g.error();
- EXPECT_EQ(g.result(), "float*");
+ ASSERT_TRUE(gen.EmitType(&p, "")) << gen.error();
+ EXPECT_EQ(gen.result(), "float*");
}
TEST_F(MslGeneratorImplTest, EmitType_Struct) {
@@ -219,10 +190,8 @@
ast::type::StructType s("S", std::move(str));
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitType(&s, "")) << g.error();
- EXPECT_EQ(g.result(), "S");
+ ASSERT_TRUE(gen.EmitType(&s, "")) << gen.error();
+ EXPECT_EQ(gen.result(), "S");
}
TEST_F(MslGeneratorImplTest, EmitType_StructDecl) {
@@ -244,10 +213,8 @@
ast::type::StructType s("S", std::move(str));
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitStructType(&s)) << g.error();
- EXPECT_EQ(g.result(), R"(struct S {
+ ASSERT_TRUE(gen.EmitStructType(&s)) << gen.error();
+ EXPECT_EQ(gen.result(), R"(struct S {
int a;
float b;
};
@@ -281,10 +248,8 @@
ast::type::StructType s("S", std::move(str));
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitStructType(&s)) << g.error();
- EXPECT_EQ(g.result(), R"(struct S {
+ ASSERT_TRUE(gen.EmitStructType(&s)) << gen.error();
+ EXPECT_EQ(gen.result(), R"(struct S {
int8_t pad_0[4];
int a;
int8_t pad_1[24];
@@ -312,10 +277,8 @@
ast::type::StructType s("S", std::move(str));
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitStructType(&s)) << g.error();
- EXPECT_EQ(g.result(), R"(struct S {
+ ASSERT_TRUE(gen.EmitStructType(&s)) << gen.error();
+ EXPECT_EQ(gen.result(), R"(struct S {
int main_tint_0;
float float_tint_0;
};
@@ -344,10 +307,8 @@
ast::type::StructType s("S", std::move(str));
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitType(&s, "")) << g.error();
- EXPECT_EQ(g.result(), R"(struct {
+ ASSERT_TRUE(gen.EmitType(&s, "")) << gen.error();
+ EXPECT_EQ(gen.result(), R"(struct {
int a;
float b;
})");
@@ -356,47 +317,37 @@
TEST_F(MslGeneratorImplTest, EmitType_U32) {
ast::type::U32Type u32;
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitType(&u32, "")) << g.error();
- EXPECT_EQ(g.result(), "uint");
+ ASSERT_TRUE(gen.EmitType(&u32, "")) << gen.error();
+ EXPECT_EQ(gen.result(), "uint");
}
TEST_F(MslGeneratorImplTest, EmitType_Vector) {
ast::type::F32Type f32;
ast::type::VectorType v(&f32, 3);
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitType(&v, "")) << g.error();
- EXPECT_EQ(g.result(), "float3");
+ ASSERT_TRUE(gen.EmitType(&v, "")) << gen.error();
+ EXPECT_EQ(gen.result(), "float3");
}
TEST_F(MslGeneratorImplTest, EmitType_Void) {
ast::type::VoidType v;
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitType(&v, "")) << g.error();
- EXPECT_EQ(g.result(), "void");
+ ASSERT_TRUE(gen.EmitType(&v, "")) << gen.error();
+ EXPECT_EQ(gen.result(), "void");
}
TEST_F(MslGeneratorImplTest, EmitType_Sampler) {
ast::type::SamplerType sampler(ast::type::SamplerKind::kSampler);
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitType(&sampler, "")) << g.error();
- EXPECT_EQ(g.result(), "sampler");
+ ASSERT_TRUE(gen.EmitType(&sampler, "")) << gen.error();
+ EXPECT_EQ(gen.result(), "sampler");
}
TEST_F(MslGeneratorImplTest, EmitType_SamplerComparison) {
ast::type::SamplerType sampler(ast::type::SamplerKind::kComparisonSampler);
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitType(&sampler, "")) << g.error();
- EXPECT_EQ(g.result(), "sampler");
+ ASSERT_TRUE(gen.EmitType(&sampler, "")) << gen.error();
+ EXPECT_EQ(gen.result(), "sampler");
}
struct MslDepthTextureData {
@@ -407,16 +358,14 @@
out << data.dim;
return out;
}
-using MslDepthTexturesTest = testing::TestWithParam<MslDepthTextureData>;
+using MslDepthTexturesTest = TestParamHelper<MslDepthTextureData>;
TEST_P(MslDepthTexturesTest, Emit) {
auto params = GetParam();
ast::type::DepthTextureType s(params.dim);
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitType(&s, "")) << g.error();
- EXPECT_EQ(g.result(), params.result);
+ ASSERT_TRUE(gen.EmitType(&s, "")) << gen.error();
+ EXPECT_EQ(gen.result(), params.result);
}
INSTANTIATE_TEST_SUITE_P(
MslGeneratorImplTest,
@@ -439,17 +388,15 @@
out << data.dim;
return out;
}
-using MslSampledtexturesTest = testing::TestWithParam<MslTextureData>;
+using MslSampledtexturesTest = TestParamHelper<MslTextureData>;
TEST_P(MslSampledtexturesTest, Emit) {
auto params = GetParam();
ast::type::F32Type f32;
ast::type::SampledTextureType s(params.dim, &f32);
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitType(&s, "")) << g.error();
- EXPECT_EQ(g.result(), params.result);
+ ASSERT_TRUE(gen.EmitType(&s, "")) << gen.error();
+ EXPECT_EQ(gen.result(), params.result);
}
INSTANTIATE_TEST_SUITE_P(
MslGeneratorImplTest,
@@ -474,10 +421,8 @@
ast::type::U32Type u32;
ast::type::MultisampledTextureType s(ast::type::TextureDimension::k2d, &u32);
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitType(&s, "")) << g.error();
- EXPECT_EQ(g.result(), "texture2d_ms<uint, access::sample>");
+ ASSERT_TRUE(gen.EmitType(&s, "")) << gen.error();
+ EXPECT_EQ(gen.result(), "texture2d_ms<uint, access::sample>");
}
struct MslStorageTextureData {
@@ -489,7 +434,7 @@
out << data.dim << (data.ro ? "ReadOnly" : "WriteOnly");
return out;
}
-using MslStorageTexturesTest = testing::TestWithParam<MslStorageTextureData>;
+using MslStorageTexturesTest = TestParamHelper<MslStorageTextureData>;
TEST_P(MslStorageTexturesTest, Emit) {
auto params = GetParam();
@@ -498,13 +443,9 @@
: ast::AccessControl::kWriteOnly,
ast::type::ImageFormat::kR16Float);
- Context ctx;
- ast::Module m;
- TypeDeterminer td(&ctx, &m);
- GeneratorImpl g(&m);
ASSERT_TRUE(td.DetermineStorageTextureSubtype(&s)) << td.error();
- ASSERT_TRUE(g.EmitType(&s, "")) << g.error();
- EXPECT_EQ(g.result(), params.result);
+ ASSERT_TRUE(gen.EmitType(&s, "")) << gen.error();
+ EXPECT_EQ(gen.result(), params.result);
}
INSTANTIATE_TEST_SUITE_P(
MslGeneratorImplTest,
diff --git a/src/writer/msl/generator_impl_unary_op_test.cc b/src/writer/msl/generator_impl_unary_op_test.cc
index 46e9f26..485f7c8 100644
--- a/src/writer/msl/generator_impl_unary_op_test.cc
+++ b/src/writer/msl/generator_impl_unary_op_test.cc
@@ -20,6 +20,7 @@
#include "src/ast/module.h"
#include "src/ast/unary_op_expression.h"
#include "src/writer/msl/generator_impl.h"
+#include "src/writer/msl/test_helper.h"
namespace tint {
namespace writer {
@@ -34,17 +35,15 @@
out << data.op;
return out;
}
-using MslUnaryOpTest = testing::TestWithParam<UnaryOpData>;
+using MslUnaryOpTest = TestParamHelper<UnaryOpData>;
TEST_P(MslUnaryOpTest, Emit) {
auto params = GetParam();
auto expr = std::make_unique<ast::IdentifierExpression>("expr");
ast::UnaryOpExpression op(params.op, std::move(expr));
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitExpression(&op)) << g.error();
- EXPECT_EQ(g.result(), std::string(params.name) + "(expr)");
+ ASSERT_TRUE(gen.EmitExpression(&op)) << gen.error();
+ EXPECT_EQ(gen.result(), std::string(params.name) + "(expr)");
}
INSTANTIATE_TEST_SUITE_P(MslGeneratorImplTest,
MslUnaryOpTest,
diff --git a/src/writer/msl/generator_impl_variable_decl_statement_test.cc b/src/writer/msl/generator_impl_variable_decl_statement_test.cc
index 66785f1..8592083 100644
--- a/src/writer/msl/generator_impl_variable_decl_statement_test.cc
+++ b/src/writer/msl/generator_impl_variable_decl_statement_test.cc
@@ -31,13 +31,14 @@
#include "src/ast/variable.h"
#include "src/ast/variable_decl_statement.h"
#include "src/writer/msl/generator_impl.h"
+#include "src/writer/msl/test_helper.h"
namespace tint {
namespace writer {
namespace msl {
namespace {
-using MslGeneratorImplTest = testing::Test;
+using MslGeneratorImplTest = TestHelper;
TEST_F(MslGeneratorImplTest, Emit_VariableDeclStatement) {
ast::type::F32Type f32;
@@ -46,12 +47,10 @@
ast::VariableDeclStatement stmt(std::move(var));
- ast::Module m;
- GeneratorImpl g(&m);
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&stmt)) << g.error();
- EXPECT_EQ(g.result(), " float a = 0.0f;\n");
+ ASSERT_TRUE(gen.EmitStatement(&stmt)) << gen.error();
+ EXPECT_EQ(gen.result(), " float a = 0.0f;\n");
}
TEST_F(MslGeneratorImplTest, Emit_VariableDeclStatement_Const) {
@@ -62,12 +61,10 @@
ast::VariableDeclStatement stmt(std::move(var));
- ast::Module m;
- GeneratorImpl g(&m);
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&stmt)) << g.error();
- EXPECT_EQ(g.result(), " const float a = 0.0f;\n");
+ ASSERT_TRUE(gen.EmitStatement(&stmt)) << gen.error();
+ EXPECT_EQ(gen.result(), " const float a = 0.0f;\n");
}
TEST_F(MslGeneratorImplTest, Emit_VariableDeclStatement_Array) {
@@ -79,12 +76,10 @@
ast::VariableDeclStatement stmt(std::move(var));
- ast::Module m;
- GeneratorImpl g(&m);
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&stmt)) << g.error();
- EXPECT_EQ(g.result(), " float a[5] = {0.0f};\n");
+ ASSERT_TRUE(gen.EmitStatement(&stmt)) << gen.error();
+ EXPECT_EQ(gen.result(), " float a[5] = {0.0f};\n");
}
TEST_F(MslGeneratorImplTest, Emit_VariableDeclStatement_Struct) {
@@ -109,12 +104,10 @@
ast::VariableDeclStatement stmt(std::move(var));
- ast::Module m;
- GeneratorImpl g(&m);
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&stmt)) << g.error();
- EXPECT_EQ(g.result(), R"( S a = {};
+ ASSERT_TRUE(gen.EmitStatement(&stmt)) << gen.error();
+ EXPECT_EQ(gen.result(), R"( S a = {};
)");
}
@@ -127,12 +120,10 @@
ast::VariableDeclStatement stmt(std::move(var));
- ast::Module m;
- GeneratorImpl g(&m);
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&stmt)) << g.error();
- EXPECT_EQ(g.result(), " float2 a = 0.0f;\n");
+ ASSERT_TRUE(gen.EmitStatement(&stmt)) << gen.error();
+ EXPECT_EQ(gen.result(), " float2 a = 0.0f;\n");
}
TEST_F(MslGeneratorImplTest, Emit_VariableDeclStatement_Matrix) {
@@ -143,12 +134,10 @@
ast::VariableDeclStatement stmt(std::move(var));
- ast::Module m;
- GeneratorImpl g(&m);
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&stmt)) << g.error();
- EXPECT_EQ(g.result(), " float3x2 a = 0.0f;\n");
+ ASSERT_TRUE(gen.EmitStatement(&stmt)) << gen.error();
+ EXPECT_EQ(gen.result(), " float3x2 a = 0.0f;\n");
}
TEST_F(MslGeneratorImplTest, Emit_VariableDeclStatement_Private) {
@@ -158,12 +147,10 @@
ast::VariableDeclStatement stmt(std::move(var));
- ast::Module m;
- GeneratorImpl g(&m);
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&stmt)) << g.error();
- EXPECT_EQ(g.result(), " float a = 0.0f;\n");
+ ASSERT_TRUE(gen.EmitStatement(&stmt)) << gen.error();
+ EXPECT_EQ(gen.result(), " float a = 0.0f;\n");
}
TEST_F(MslGeneratorImplTest, Emit_VariableDeclStatement_Initializer_Private) {
@@ -176,10 +163,8 @@
ast::VariableDeclStatement stmt(std::move(var));
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitStatement(&stmt)) << g.error();
- EXPECT_EQ(g.result(), R"(float a = initializer;
+ ASSERT_TRUE(gen.EmitStatement(&stmt)) << gen.error();
+ EXPECT_EQ(gen.result(), R"(float a = initializer;
)");
}
@@ -197,10 +182,8 @@
ast::VariableDeclStatement stmt(std::move(var));
- ast::Module m;
- GeneratorImpl g(&m);
- ASSERT_TRUE(g.EmitStatement(&stmt)) << g.error();
- EXPECT_EQ(g.result(), R"(float3 a = float3(0.0f);
+ ASSERT_TRUE(gen.EmitStatement(&stmt)) << gen.error();
+ EXPECT_EQ(gen.result(), R"(float3 a = float3(0.0f);
)");
}
diff --git a/src/writer/msl/test_helper.h b/src/writer/msl/test_helper.h
new file mode 100644
index 0000000..b8dda92
--- /dev/null
+++ b/src/writer/msl/test_helper.h
@@ -0,0 +1,53 @@
+// Copyright 2020 The Tint Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef SRC_WRITER_MSL_TEST_HELPER_H_
+#define SRC_WRITER_MSL_TEST_HELPER_H_
+
+#include "gtest/gtest.h"
+#include "src/ast/module.h"
+#include "src/context.h"
+#include "src/type_determiner.h"
+#include "src/writer/wgsl/generator_impl.h"
+
+namespace tint {
+namespace writer {
+namespace msl {
+
+/// Helper class for testing
+template <typename T>
+class TestHelperBase : public T {
+ public:
+ TestHelperBase() : td(&ctx, &mod), gen(&ctx, &mod) {}
+ ~TestHelperBase() = default;
+
+ /// The context
+ Context ctx;
+ /// The module
+ ast::Module mod;
+ /// The type determiner
+ TypeDeterminer td;
+ /// The generator
+ GeneratorImpl gen;
+};
+using TestHelper = TestHelperBase<testing::Test>;
+
+template <typename T>
+using TestParamHelper = TestHelperBase<testing::TestWithParam<T>>;
+
+} // namespace msl
+} // namespace writer
+} // namespace tint
+
+#endif // SRC_WRITER_MSL_TEST_HELPER_H_
diff --git a/src/writer/spirv/binary_writer_test.cc b/src/writer/spirv/binary_writer_test.cc
index d589654..68bb796 100644
--- a/src/writer/spirv/binary_writer_test.cc
+++ b/src/writer/spirv/binary_writer_test.cc
@@ -19,17 +19,16 @@
#include "gtest/gtest.h"
#include "spirv/unified1/spirv.hpp11"
#include "src/writer/spirv/builder.h"
+#include "src/writer/spirv/test_helper.h"
namespace tint {
namespace writer {
namespace spirv {
namespace {
-using BinaryWriterTest = testing::Test;
+using BinaryWriterTest = TestHelper;
TEST_F(BinaryWriterTest, Preamble) {
- ast::Module mod;
- Builder b(&mod);
BinaryWriter bw;
bw.WriteHeader(5);
@@ -43,8 +42,6 @@
}
TEST_F(BinaryWriterTest, Float) {
- ast::Module mod;
- Builder b(&mod);
b.push_annot(spv::Op::OpKill, {Operand::Float(2.4f)});
BinaryWriter bw;
bw.WriteBuilder(&b);
@@ -57,8 +54,6 @@
}
TEST_F(BinaryWriterTest, Int) {
- ast::Module mod;
- Builder b(&mod);
b.push_annot(spv::Op::OpKill, {Operand::Int(2)});
BinaryWriter bw;
bw.WriteBuilder(&b);
@@ -69,8 +64,6 @@
}
TEST_F(BinaryWriterTest, String) {
- ast::Module mod;
- Builder b(&mod);
b.push_annot(spv::Op::OpKill, {Operand::String("my_string")});
BinaryWriter bw;
bw.WriteBuilder(&b);
@@ -94,8 +87,6 @@
}
TEST_F(BinaryWriterTest, String_Multiple4Length) {
- ast::Module mod;
- Builder b(&mod);
b.push_annot(spv::Op::OpKill, {Operand::String("mystring")});
BinaryWriter bw;
bw.WriteBuilder(&b);
diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc
index 946272355..845aa23 100644
--- a/src/writer/spirv/builder.cc
+++ b/src/writer/spirv/builder.cc
@@ -270,7 +270,10 @@
Builder::AccessorInfo::~AccessorInfo() {}
-Builder::Builder(ast::Module* mod) : mod_(mod), scope_stack_({}) {}
+Builder::Builder(Context* ctx, ast::Module* mod)
+ : ctx_(ctx), mod_(mod), scope_stack_({}) {
+ assert(ctx_);
+}
Builder::~Builder() = default;
@@ -424,7 +427,7 @@
// the inspector and land the same change in MSL / HLSL to all roll into Dawn
// at the same time.
// OperandList operands = {Operand::Int(stage), Operand::Int(id),
- // Operand::String(namer_.NameFor(func->name()))};
+ // Operand::String(ctx_.namer()->NameFor(func->name()))};
OperandList operands = {Operand::Int(stage), Operand::Int(id),
Operand::String(func->name())};
@@ -508,8 +511,9 @@
auto func_op = result_op();
auto func_id = func_op.to_i();
- push_debug(spv::Op::OpName, {Operand::Int(func_id),
- Operand::String(namer_.NameFor(func->name()))});
+ push_debug(spv::Op::OpName,
+ {Operand::Int(func_id),
+ Operand::String(ctx_->namer()->NameFor(func->name()))});
auto ret_id = GenerateTypeIfNeeded(func->return_type());
if (ret_id == 0) {
@@ -535,7 +539,7 @@
push_debug(spv::Op::OpName,
{Operand::Int(param_id),
- Operand::String(namer_.NameFor(param->name()))});
+ Operand::String(ctx_->namer()->NameFor(param->name()))});
params.push_back(Instruction{spv::Op::OpFunctionParameter,
{Operand::Int(param_type_id), param_op}});
@@ -624,8 +628,9 @@
return false;
}
- push_debug(spv::Op::OpName, {Operand::Int(var_id),
- Operand::String(namer_.NameFor(var->name()))});
+ push_debug(spv::Op::OpName,
+ {Operand::Int(var_id),
+ Operand::String(ctx_->namer()->NameFor(var->name()))});
// TODO(dsinclair) We could detect if the constructor is fully const and emit
// an initializer value for the variable instead of doing the OpLoad.
@@ -673,8 +678,9 @@
error_ = "missing constructor for constant";
return false;
}
- push_debug(spv::Op::OpName, {Operand::Int(init_id),
- Operand::String(namer_.NameFor(var->name()))});
+ push_debug(spv::Op::OpName,
+ {Operand::Int(init_id),
+ Operand::String(ctx_->namer()->NameFor(var->name()))});
scope_stack_.set_global(var->name(), init_id);
spirv_id_to_variable_[init_id] = var;
@@ -694,8 +700,9 @@
return false;
}
- push_debug(spv::Op::OpName, {Operand::Int(var_id),
- Operand::String(namer_.NameFor(var->name()))});
+ push_debug(spv::Op::OpName,
+ {Operand::Int(var_id),
+ Operand::String(ctx_->namer()->NameFor(var->name()))});
auto* type = var->type()->UnwrapAll();
@@ -2474,7 +2481,7 @@
if (!struct_type->name().empty()) {
push_debug(spv::Op::OpName,
{Operand::Int(struct_id),
- Operand::String(namer_.NameFor(struct_type->name()))});
+ Operand::String(ctx_->namer()->NameFor(struct_type->name()))});
}
OperandList ops;
@@ -2517,7 +2524,7 @@
ast::StructMember* member) {
push_debug(spv::Op::OpMemberName,
{Operand::Int(struct_id), Operand::Int(idx),
- Operand::String(namer_.NameFor(member->name()))});
+ Operand::String(ctx_->namer()->NameFor(member->name()))});
bool has_layout = false;
for (const auto& deco : member->decorations()) {
diff --git a/src/writer/spirv/builder.h b/src/writer/spirv/builder.h
index c639050..dd0d20d 100644
--- a/src/writer/spirv/builder.h
+++ b/src/writer/spirv/builder.h
@@ -29,7 +29,7 @@
#include "src/ast/type/access_control_type.h"
#include "src/ast/type/storage_texture_type.h"
#include "src/ast/type_constructor_expression.h"
-#include "src/namer.h"
+#include "src/context.h"
#include "src/scope_stack.h"
#include "src/writer/spirv/function.h"
#include "src/writer/spirv/instruction.h"
@@ -61,8 +61,9 @@
};
/// Constructor
+ /// @param ctx the context, must be non-null
/// @param mod the module to generate from
- explicit Builder(ast::Module* mod);
+ Builder(Context* ctx, ast::Module* mod);
~Builder();
/// Generates the SPIR-V instructions for the given module
@@ -469,9 +470,9 @@
return func_name_to_id_[name];
}
+ Context* ctx_ = nullptr;
ast::Module* mod_;
std::string error_;
- Namer namer_;
uint32_t next_id_ = 1;
uint32_t current_label_id_ = 0;
InstructionList capabilities_;
diff --git a/src/writer/spirv/builder_accessor_expression_test.cc b/src/writer/spirv/builder_accessor_expression_test.cc
index e1cf72d..4f2dde6 100644
--- a/src/writer/spirv/builder_accessor_expression_test.cc
+++ b/src/writer/spirv/builder_accessor_expression_test.cc
@@ -37,13 +37,14 @@
#include "src/type_determiner.h"
#include "src/writer/spirv/builder.h"
#include "src/writer/spirv/spv_dump.h"
+#include "src/writer/spirv/test_helper.h"
namespace tint {
namespace writer {
namespace spirv {
namespace {
-using BuilderTest = testing::Test;
+using BuilderTest = TestHelper;
TEST_F(BuilderTest, ArrayAccessor) {
ast::type::I32Type i32;
@@ -61,13 +62,9 @@
ast::ArrayAccessorExpression expr(std::move(ary), std::move(idx_expr));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(&var);
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateFunctionVariable(&var)) << b.error();
@@ -106,14 +103,10 @@
ast::ArrayAccessorExpression expr(std::move(ary), std::move(idx_expr));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(&var);
td.RegisterVariableForTesting(&idx);
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateFunctionVariable(&var)) << b.error();
ASSERT_TRUE(b.GenerateFunctionVariable(&idx)) << b.error();
@@ -159,13 +152,9 @@
std::make_unique<ast::ScalarConstructorExpression>(
std::make_unique<ast::SintLiteral>(&i32, 2))));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(&var);
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateFunctionVariable(&var)) << b.error();
@@ -208,13 +197,9 @@
std::make_unique<ast::ScalarConstructorExpression>(
std::make_unique<ast::SintLiteral>(&i32, 2)));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(&var);
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateFunctionVariable(&var)) << b.error();
@@ -258,13 +243,9 @@
std::make_unique<ast::SintLiteral>(&i32, 2))),
std::make_unique<ast::IdentifierExpression>("xy"));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(&var);
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateFunctionVariable(&var)) << b.error();
EXPECT_EQ(b.GenerateAccessorExpression(&expr), 15u);
@@ -317,13 +298,9 @@
std::make_unique<ast::IdentifierExpression>("ident"),
std::make_unique<ast::IdentifierExpression>("b"));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(&var);
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateFunctionVariable(&var)) << b.error();
@@ -382,13 +359,9 @@
std::make_unique<ast::IdentifierExpression>("inner")),
std::make_unique<ast::IdentifierExpression>("a"));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(&var);
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateFunctionVariable(&var)) << b.error();
@@ -451,13 +424,9 @@
std::make_unique<ast::IdentifierExpression>("inner")),
std::make_unique<ast::IdentifierExpression>("a"));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(&var);
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateFunctionVariable(&var)) << b.error();
@@ -523,13 +492,9 @@
ast::AssignmentStatement expr(std::move(lhs), std::move(rhs));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(&var);
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateFunctionVariable(&var)) << b.error();
@@ -597,14 +562,10 @@
ast::AssignmentStatement expr(std::move(lhs), std::move(rhs));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(&var);
td.RegisterVariableForTesting(&store);
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateFunctionVariable(&var)) << b.error();
ASSERT_TRUE(b.GenerateFunctionVariable(&store)) << b.error();
@@ -644,13 +605,9 @@
std::make_unique<ast::IdentifierExpression>("ident"),
std::make_unique<ast::IdentifierExpression>("y"));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(&var);
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateFunctionVariable(&var)) << b.error();
@@ -684,13 +641,9 @@
std::make_unique<ast::IdentifierExpression>("ident"),
std::make_unique<ast::IdentifierExpression>("yx"));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(&var);
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateFunctionVariable(&var)) << b.error();
@@ -725,13 +678,9 @@
std::make_unique<ast::IdentifierExpression>("yxz")),
std::make_unique<ast::IdentifierExpression>("xz"));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(&var);
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateFunctionVariable(&var)) << b.error();
@@ -767,13 +716,9 @@
std::make_unique<ast::IdentifierExpression>("yxz")),
std::make_unique<ast::IdentifierExpression>("x"));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(&var);
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateFunctionVariable(&var)) << b.error();
@@ -810,13 +755,9 @@
std::make_unique<ast::ScalarConstructorExpression>(
std::make_unique<ast::SintLiteral>(&i32, 1)));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(&var);
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateFunctionVariable(&var)) << b.error();
@@ -895,13 +836,9 @@
std::make_unique<ast::IdentifierExpression>("baz")),
std::make_unique<ast::IdentifierExpression>("yx"));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(&var);
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateFunctionVariable(&var)) << b.error();
@@ -982,14 +919,10 @@
std::make_unique<ast::ScalarConstructorExpression>(
std::make_unique<ast::UintLiteral>(&u32, 1)));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(&var);
ASSERT_TRUE(td.DetermineResultType(var.constructor())) << td.error();
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateFunctionVariable(&var)) << b.error();
EXPECT_EQ(b.GenerateAccessorExpression(&expr), 18u) << b.error();
diff --git a/src/writer/spirv/builder_assign_test.cc b/src/writer/spirv/builder_assign_test.cc
index e7e04e4..cf0b0c4 100644
--- a/src/writer/spirv/builder_assign_test.cc
+++ b/src/writer/spirv/builder_assign_test.cc
@@ -33,13 +33,14 @@
#include "src/type_determiner.h"
#include "src/writer/spirv/builder.h"
#include "src/writer/spirv/spv_dump.h"
+#include "src/writer/spirv/test_helper.h"
namespace tint {
namespace writer {
namespace spirv {
namespace {
-using BuilderTest = testing::Test;
+using BuilderTest = TestHelper;
TEST_F(BuilderTest, Assign_Var) {
ast::type::F32Type f32;
@@ -52,14 +53,10 @@
ast::AssignmentStatement assign(std::move(ident), std::move(val));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(&v);
ASSERT_TRUE(td.DetermineResultType(&assign)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_TRUE(b.GenerateGlobalVariable(&v)) << b.error();
ASSERT_FALSE(b.has_error()) << b.error();
@@ -91,14 +88,10 @@
ast::AssignmentStatement assign(std::move(ident), std::move(val));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(&v);
ASSERT_TRUE(td.DetermineResultType(&assign)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_TRUE(b.GenerateGlobalVariable(&v)) << b.error();
ASSERT_FALSE(b.has_error()) << b.error();
@@ -142,13 +135,9 @@
ast::AssignmentStatement assign(
std::make_unique<ast::IdentifierExpression>("var"), std::move(init));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(&v);
ASSERT_TRUE(td.DetermineResultType(&assign)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_TRUE(b.GenerateGlobalVariable(&v)) << b.error();
ASSERT_FALSE(b.has_error()) << b.error();
@@ -195,13 +184,9 @@
ast::AssignmentStatement assign(
std::make_unique<ast::IdentifierExpression>("var"), std::move(init));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(&v);
ASSERT_TRUE(td.DetermineResultType(&assign)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_TRUE(b.GenerateGlobalVariable(&v)) << b.error();
ASSERT_FALSE(b.has_error()) << b.error();
@@ -254,14 +239,10 @@
ast::AssignmentStatement assign(std::move(ident), std::move(val));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(&v);
ASSERT_TRUE(td.DetermineResultType(&assign)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_TRUE(b.GenerateGlobalVariable(&v)) << b.error();
ASSERT_FALSE(b.has_error()) << b.error();
@@ -306,14 +287,10 @@
ast::AssignmentStatement assign(std::move(ident), std::move(val));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(&v);
ASSERT_TRUE(td.DetermineResultType(&assign)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_TRUE(b.GenerateGlobalVariable(&v)) << b.error();
ASSERT_FALSE(b.has_error()) << b.error();
@@ -351,14 +328,10 @@
ast::AssignmentStatement assign(std::move(ident), std::move(val));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(&v);
ASSERT_TRUE(td.DetermineResultType(&assign)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_TRUE(b.GenerateGlobalVariable(&v)) << b.error();
ASSERT_FALSE(b.has_error()) << b.error();
@@ -401,14 +374,10 @@
ast::AssignmentStatement assign(std::move(ident), std::move(val));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(&v);
ASSERT_TRUE(td.DetermineResultType(&assign)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_TRUE(b.GenerateGlobalVariable(&v)) << b.error();
ASSERT_FALSE(b.has_error()) << b.error();
diff --git a/src/writer/spirv/builder_binary_expression_test.cc b/src/writer/spirv/builder_binary_expression_test.cc
index 6fa9f12..d7e3bbf 100644
--- a/src/writer/spirv/builder_binary_expression_test.cc
+++ b/src/writer/spirv/builder_binary_expression_test.cc
@@ -33,13 +33,14 @@
#include "src/type_determiner.h"
#include "src/writer/spirv/builder.h"
#include "src/writer/spirv/spv_dump.h"
+#include "src/writer/spirv/test_helper.h"
namespace tint {
namespace writer {
namespace spirv {
namespace {
-using BuilderTest = testing::Test;
+using BuilderTest = TestHelper;
struct BinaryData {
ast::BinaryOp op;
@@ -50,7 +51,7 @@
return out;
}
-using BinaryArithSignedIntegerTest = testing::TestWithParam<BinaryData>;
+using BinaryArithSignedIntegerTest = TestParamHelper<BinaryData>;
TEST_P(BinaryArithSignedIntegerTest, Scalar) {
auto param = GetParam();
@@ -63,12 +64,8 @@
ast::BinaryExpression expr(param.op, std::move(lhs), std::move(rhs));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateBinaryExpression(&expr), 4u) << b.error();
@@ -104,15 +101,10 @@
auto rhs =
std::make_unique<ast::TypeConstructorExpression>(&vec3, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
ast::BinaryExpression expr(param.op, std::move(lhs), std::move(rhs));
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateBinaryExpression(&expr), 5u) << b.error();
@@ -136,13 +128,9 @@
ast::BinaryExpression expr(param.op, std::move(lhs), std::move(rhs));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(&var);
EXPECT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_TRUE(b.GenerateFunctionVariable(&var)) << b.error();
EXPECT_EQ(b.GenerateBinaryExpression(&expr), 7u) << b.error();
@@ -177,7 +165,7 @@
BinaryData{ast::BinaryOp::kSubtract, "OpISub"},
BinaryData{ast::BinaryOp::kXor, "OpBitwiseXor"}));
-using BinaryArithUnsignedIntegerTest = testing::TestWithParam<BinaryData>;
+using BinaryArithUnsignedIntegerTest = TestParamHelper<BinaryData>;
TEST_P(BinaryArithUnsignedIntegerTest, Scalar) {
auto param = GetParam();
@@ -190,12 +178,8 @@
ast::BinaryExpression expr(param.op, std::move(lhs), std::move(rhs));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateBinaryExpression(&expr), 4u) << b.error();
@@ -231,15 +215,10 @@
auto rhs =
std::make_unique<ast::TypeConstructorExpression>(&vec3, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
ast::BinaryExpression expr(param.op, std::move(lhs), std::move(rhs));
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateBinaryExpression(&expr), 5u) << b.error();
@@ -266,7 +245,7 @@
BinaryData{ast::BinaryOp::kSubtract, "OpISub"},
BinaryData{ast::BinaryOp::kXor, "OpBitwiseXor"}));
-using BinaryArithFloatTest = testing::TestWithParam<BinaryData>;
+using BinaryArithFloatTest = TestParamHelper<BinaryData>;
TEST_P(BinaryArithFloatTest, Scalar) {
auto param = GetParam();
@@ -279,12 +258,7 @@
ast::BinaryExpression expr(param.op, std::move(lhs), std::move(rhs));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
-
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateBinaryExpression(&expr), 4u) << b.error();
@@ -321,15 +295,10 @@
auto rhs =
std::make_unique<ast::TypeConstructorExpression>(&vec3, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
ast::BinaryExpression expr(param.op, std::move(lhs), std::move(rhs));
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateBinaryExpression(&expr), 5u) << b.error();
@@ -350,7 +319,7 @@
BinaryData{ast::BinaryOp::kMultiply, "OpFMul"},
BinaryData{ast::BinaryOp::kSubtract, "OpFSub"}));
-using BinaryCompareUnsignedIntegerTest = testing::TestWithParam<BinaryData>;
+using BinaryCompareUnsignedIntegerTest = TestParamHelper<BinaryData>;
TEST_P(BinaryCompareUnsignedIntegerTest, Scalar) {
auto param = GetParam();
@@ -363,12 +332,8 @@
ast::BinaryExpression expr(param.op, std::move(lhs), std::move(rhs));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateBinaryExpression(&expr), 4u) << b.error();
@@ -406,15 +371,10 @@
auto rhs =
std::make_unique<ast::TypeConstructorExpression>(&vec3, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
ast::BinaryExpression expr(param.op, std::move(lhs), std::move(rhs));
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateBinaryExpression(&expr), 5u) << b.error();
@@ -439,7 +399,7 @@
BinaryData{ast::BinaryOp::kLessThanEqual, "OpULessThanEqual"},
BinaryData{ast::BinaryOp::kNotEqual, "OpINotEqual"}));
-using BinaryCompareSignedIntegerTest = testing::TestWithParam<BinaryData>;
+using BinaryCompareSignedIntegerTest = TestParamHelper<BinaryData>;
TEST_P(BinaryCompareSignedIntegerTest, Scalar) {
auto param = GetParam();
@@ -452,12 +412,8 @@
ast::BinaryExpression expr(param.op, std::move(lhs), std::move(rhs));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateBinaryExpression(&expr), 4u) << b.error();
@@ -495,15 +451,10 @@
auto rhs =
std::make_unique<ast::TypeConstructorExpression>(&vec3, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
ast::BinaryExpression expr(param.op, std::move(lhs), std::move(rhs));
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateBinaryExpression(&expr), 5u) << b.error();
@@ -528,7 +479,7 @@
BinaryData{ast::BinaryOp::kLessThanEqual, "OpSLessThanEqual"},
BinaryData{ast::BinaryOp::kNotEqual, "OpINotEqual"}));
-using BinaryCompareFloatTest = testing::TestWithParam<BinaryData>;
+using BinaryCompareFloatTest = TestParamHelper<BinaryData>;
TEST_P(BinaryCompareFloatTest, Scalar) {
auto param = GetParam();
@@ -541,12 +492,8 @@
ast::BinaryExpression expr(param.op, std::move(lhs), std::move(rhs));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateBinaryExpression(&expr), 4u) << b.error();
@@ -584,15 +531,10 @@
auto rhs =
std::make_unique<ast::TypeConstructorExpression>(&vec3, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
ast::BinaryExpression expr(param.op, std::move(lhs), std::move(rhs));
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateBinaryExpression(&expr), 5u) << b.error();
@@ -634,16 +576,11 @@
auto rhs = std::make_unique<ast::ScalarConstructorExpression>(
std::make_unique<ast::FloatLiteral>(&f32, 1.f));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
ast::BinaryExpression expr(ast::BinaryOp::kMultiply, std::move(lhs),
std::move(rhs));
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateBinaryExpression(&expr), 5u) << b.error();
@@ -673,16 +610,11 @@
auto rhs =
std::make_unique<ast::TypeConstructorExpression>(&vec3, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
ast::BinaryExpression expr(ast::BinaryOp::kMultiply, std::move(lhs),
std::move(rhs));
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateBinaryExpression(&expr), 5u) << b.error();
@@ -705,9 +637,6 @@
auto rhs = std::make_unique<ast::ScalarConstructorExpression>(
std::make_unique<ast::FloatLiteral>(&f32, 1.f));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(var.get());
ast::BinaryExpression expr(ast::BinaryOp::kMultiply, std::move(lhs),
@@ -715,7 +644,6 @@
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error();
@@ -743,9 +671,6 @@
std::make_unique<ast::FloatLiteral>(&f32, 1.f));
auto rhs = std::make_unique<ast::IdentifierExpression>("mat");
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(var.get());
ast::BinaryExpression expr(ast::BinaryOp::kMultiply, std::move(lhs),
@@ -753,7 +678,6 @@
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error();
@@ -790,9 +714,6 @@
auto rhs =
std::make_unique<ast::TypeConstructorExpression>(&vec3, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(var.get());
ast::BinaryExpression expr(ast::BinaryOp::kMultiply, std::move(lhs),
@@ -800,7 +721,6 @@
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error();
@@ -839,9 +759,6 @@
auto rhs = std::make_unique<ast::IdentifierExpression>("mat");
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(var.get());
ast::BinaryExpression expr(ast::BinaryOp::kMultiply, std::move(lhs),
@@ -849,7 +766,6 @@
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error();
@@ -878,9 +794,6 @@
auto lhs = std::make_unique<ast::IdentifierExpression>("mat");
auto rhs = std::make_unique<ast::IdentifierExpression>("mat");
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(var.get());
ast::BinaryExpression expr(ast::BinaryOp::kMultiply, std::move(lhs),
@@ -888,7 +801,6 @@
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error();
@@ -923,16 +835,11 @@
std::make_unique<ast::ScalarConstructorExpression>(
std::make_unique<ast::SintLiteral>(&i32, 4)));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
ast::BinaryExpression expr(ast::BinaryOp::kLogicalAnd, std::move(lhs),
std::move(rhs));
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
b.GenerateLabel(b.next_id());
@@ -972,9 +879,6 @@
auto lhs = std::make_unique<ast::IdentifierExpression>("a");
auto rhs = std::make_unique<ast::IdentifierExpression>("b");
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(a_var.get());
td.RegisterVariableForTesting(b_var.get());
@@ -983,7 +887,6 @@
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
b.GenerateLabel(b.next_id());
@@ -1028,16 +931,11 @@
std::make_unique<ast::ScalarConstructorExpression>(
std::make_unique<ast::SintLiteral>(&i32, 4)));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
ast::BinaryExpression expr(ast::BinaryOp::kLogicalOr, std::move(lhs),
std::move(rhs));
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
b.GenerateLabel(b.next_id());
@@ -1077,9 +975,6 @@
auto lhs = std::make_unique<ast::IdentifierExpression>("a");
auto rhs = std::make_unique<ast::IdentifierExpression>("b");
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(a_var.get());
td.RegisterVariableForTesting(b_var.get());
@@ -1088,7 +983,6 @@
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
b.GenerateLabel(b.next_id());
diff --git a/src/writer/spirv/builder_bitcast_expression_test.cc b/src/writer/spirv/builder_bitcast_expression_test.cc
index 04b6665..bf40037 100644
--- a/src/writer/spirv/builder_bitcast_expression_test.cc
+++ b/src/writer/spirv/builder_bitcast_expression_test.cc
@@ -23,13 +23,14 @@
#include "src/type_determiner.h"
#include "src/writer/spirv/builder.h"
#include "src/writer/spirv/spv_dump.h"
+#include "src/writer/spirv/test_helper.h"
namespace tint {
namespace writer {
namespace spirv {
namespace {
-using BuilderTest = testing::Test;
+using BuilderTest = TestHelper;
TEST_F(BuilderTest, Bitcast) {
ast::type::U32Type u32;
@@ -39,12 +40,8 @@
&u32, std::make_unique<ast::ScalarConstructorExpression>(
std::make_unique<ast::FloatLiteral>(&f32, 2.4)));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&bitcast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateBitcastExpression(&bitcast), 1u);
@@ -64,12 +61,8 @@
&f32, std::make_unique<ast::ScalarConstructorExpression>(
std::make_unique<ast::FloatLiteral>(&f32, 2.4)));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&bitcast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateBitcastExpression(&bitcast), 1u);
diff --git a/src/writer/spirv/builder_block_test.cc b/src/writer/spirv/builder_block_test.cc
index b13ca1d..586357d 100644
--- a/src/writer/spirv/builder_block_test.cc
+++ b/src/writer/spirv/builder_block_test.cc
@@ -26,13 +26,14 @@
#include "src/type_determiner.h"
#include "src/writer/spirv/builder.h"
#include "src/writer/spirv/spv_dump.h"
+#include "src/writer/spirv/test_helper.h"
namespace tint {
namespace writer {
namespace spirv {
namespace {
-using BuilderTest = testing::Test;
+using BuilderTest = TestHelper;
TEST_F(BuilderTest, Block) {
ast::type::F32Type f32;
@@ -64,12 +65,8 @@
std::make_unique<ast::ScalarConstructorExpression>(
std::make_unique<ast::FloatLiteral>(&f32, 3.0f))));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&outer)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_FALSE(b.has_error()) << b.error();
diff --git a/src/writer/spirv/builder_call_test.cc b/src/writer/spirv/builder_call_test.cc
index 6a58806..34b0207 100644
--- a/src/writer/spirv/builder_call_test.cc
+++ b/src/writer/spirv/builder_call_test.cc
@@ -30,13 +30,14 @@
#include "src/type_determiner.h"
#include "src/writer/spirv/builder.h"
#include "src/writer/spirv/spv_dump.h"
+#include "src/writer/spirv/test_helper.h"
namespace tint {
namespace writer {
namespace spirv {
namespace {
-using BuilderTest = testing::Test;
+using BuilderTest = TestHelper;
TEST_F(BuilderTest, Expression_Call) {
ast::type::F32Type f32;
@@ -69,14 +70,10 @@
std::make_unique<ast::IdentifierExpression>("a_func"),
std::move(call_params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineFunction(&func)) << td.error();
ASSERT_TRUE(td.DetermineFunction(&a_func)) << td.error();
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
ASSERT_TRUE(b.GenerateFunction(&a_func)) << b.error();
ASSERT_TRUE(b.GenerateFunction(&func)) << b.error();
@@ -137,14 +134,10 @@
std::make_unique<ast::IdentifierExpression>("a_func"),
std::move(call_params)));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineFunction(&func)) << td.error();
ASSERT_TRUE(td.DetermineFunction(&a_func)) << td.error();
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
ASSERT_TRUE(b.GenerateFunction(&a_func)) << b.error();
ASSERT_TRUE(b.GenerateFunction(&func)) << b.error();
diff --git a/src/writer/spirv/builder_constructor_expression_test.cc b/src/writer/spirv/builder_constructor_expression_test.cc
index cc3f99b..1655428 100644
--- a/src/writer/spirv/builder_constructor_expression_test.cc
+++ b/src/writer/spirv/builder_constructor_expression_test.cc
@@ -41,21 +41,20 @@
#include "src/type_determiner.h"
#include "src/writer/spirv/builder.h"
#include "src/writer/spirv/spv_dump.h"
+#include "src/writer/spirv/test_helper.h"
namespace tint {
namespace writer {
namespace spirv {
namespace {
-using BuilderTest = testing::Test;
+using BuilderTest = TestHelper;
TEST_F(BuilderTest, Constructor_Const) {
ast::type::F32Type f32;
auto fl = std::make_unique<ast::FloatLiteral>(&f32, 42.2f);
ast::ScalarConstructorExpression c(std::move(fl));
- ast::Module mod;
- Builder b(&mod);
EXPECT_EQ(b.GenerateConstructorExpression(nullptr, &c, true), 2u);
ASSERT_FALSE(b.has_error()) << b.error();
@@ -78,12 +77,8 @@
ast::TypeConstructorExpression t(&vec, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
EXPECT_TRUE(td.DetermineResultType(&t)) << td.error();
- Builder b(&mod);
EXPECT_EQ(b.GenerateConstructorExpression(nullptr, &t, true), 5u);
ASSERT_FALSE(b.has_error()) << b.error();
@@ -115,12 +110,8 @@
ast::TypeConstructorExpression t(&vec, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
EXPECT_TRUE(td.DetermineResultType(&t)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&t), 7u);
@@ -153,12 +144,8 @@
ast::TypeConstructorExpression cast(&alias, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&cast), 1u);
@@ -185,13 +172,9 @@
ast::TypeConstructorExpression t(&vec, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(var.get());
EXPECT_TRUE(td.DetermineResultType(&t)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateFunctionVariable(var.get())) << b.error();
@@ -227,12 +210,8 @@
ast::TypeConstructorExpression t(&vec, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
EXPECT_TRUE(td.DetermineResultType(&t)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&t), 7u);
@@ -268,12 +247,8 @@
ast::TypeConstructorExpression t(&vec, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
EXPECT_TRUE(td.DetermineResultType(&t)) << td.error();
- Builder b(&mod);
EXPECT_EQ(b.GenerateConstructorExpression(nullptr, &t, true), 0u);
EXPECT_TRUE(b.has_error());
EXPECT_EQ(b.error(), R"(constructor must be a constant expression)");
@@ -288,12 +263,8 @@
ast::TypeConstructorExpression t(&bool_type, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&t)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&t), 1u);
@@ -316,12 +287,8 @@
ast::TypeConstructorExpression cast(&i32, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&cast), 1u);
@@ -342,12 +309,8 @@
ast::TypeConstructorExpression cast(&u32, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&cast), 1u);
@@ -368,12 +331,8 @@
ast::TypeConstructorExpression cast(&f32, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&cast), 1u);
@@ -397,12 +356,8 @@
ast::TypeConstructorExpression cast(&vec, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&cast), 4u);
@@ -427,12 +382,8 @@
ast::TypeConstructorExpression cast(&vec, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&cast), 4u);
@@ -462,12 +413,8 @@
ast::TypeConstructorExpression cast(&vec3, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&cast), 8u);
@@ -503,12 +450,8 @@
ast::TypeConstructorExpression cast(&vec3, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&cast), 8u);
@@ -541,12 +484,8 @@
ast::TypeConstructorExpression cast(&vec, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&cast), 4u);
@@ -578,12 +517,8 @@
ast::TypeConstructorExpression cast(&vec4, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&cast), 8u);
@@ -621,12 +556,8 @@
ast::TypeConstructorExpression cast(&vec4, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&cast), 8u);
@@ -664,12 +595,8 @@
ast::TypeConstructorExpression cast(&vec4, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&cast), 8u);
@@ -711,12 +638,8 @@
ast::TypeConstructorExpression cast(&vec4, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&cast), 10u);
@@ -756,12 +679,8 @@
ast::TypeConstructorExpression cast(&vec4, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&cast), 9u);
@@ -800,12 +719,8 @@
ast::TypeConstructorExpression cast(&vec4, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&cast), 9u);
@@ -842,12 +757,8 @@
ast::TypeConstructorExpression cast(&vec3, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateConstructorExpression(nullptr, &cast, true), 11u);
@@ -884,12 +795,8 @@
ast::TypeConstructorExpression cast(&vec3, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateConstructorExpression(nullptr, &cast, true), 11u);
@@ -928,12 +835,8 @@
ast::TypeConstructorExpression cast(&vec4, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateConstructorExpression(nullptr, &cast, true), 11u);
@@ -972,12 +875,8 @@
ast::TypeConstructorExpression cast(&vec4, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateConstructorExpression(nullptr, &cast, true), 11u);
@@ -1016,12 +915,8 @@
ast::TypeConstructorExpression cast(&vec4, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateConstructorExpression(nullptr, &cast, true), 11u);
@@ -1064,12 +959,8 @@
ast::TypeConstructorExpression cast(&vec4, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateConstructorExpression(nullptr, &cast, true), 13u);
@@ -1110,12 +1001,8 @@
ast::TypeConstructorExpression cast(&vec4, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateConstructorExpression(nullptr, &cast, true), 13u);
@@ -1156,12 +1043,8 @@
ast::TypeConstructorExpression cast(&vec4, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateConstructorExpression(nullptr, &cast, true), 13u);
@@ -1206,12 +1089,8 @@
ast::TypeConstructorExpression cast(&mat, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&cast), 6u);
@@ -1257,12 +1136,8 @@
ast::TypeConstructorExpression cast(&mat, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&cast), 6u);
@@ -1316,12 +1191,8 @@
ast::TypeConstructorExpression cast(&mat, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&cast), 6u);
@@ -1363,12 +1234,8 @@
ast::TypeConstructorExpression cast(&mat, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&cast), 6u);
@@ -1420,12 +1287,8 @@
ast::TypeConstructorExpression cast(&mat, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&cast), 6u);
@@ -1487,12 +1350,8 @@
ast::TypeConstructorExpression cast(&mat, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&cast), 6u);
@@ -1538,12 +1397,8 @@
ast::TypeConstructorExpression cast(&mat, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&cast), 6u);
@@ -1601,12 +1456,8 @@
ast::TypeConstructorExpression cast(&mat, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&cast), 6u);
@@ -1676,12 +1527,8 @@
ast::TypeConstructorExpression cast(&mat, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&cast), 6u);
@@ -1712,12 +1559,8 @@
ast::TypeConstructorExpression cast(&ary, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&cast), 6u);
@@ -1759,12 +1602,8 @@
ast::TypeConstructorExpression cast(&ary, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&cast), 8u);
@@ -1809,12 +1648,8 @@
ast::TypeConstructorExpression t(&s_type, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
EXPECT_TRUE(td.DetermineResultType(&t)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&t), 6u);
@@ -1835,12 +1670,8 @@
ast::ExpressionList vals;
ast::TypeConstructorExpression t(&f32, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
EXPECT_TRUE(td.DetermineResultType(&t)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&t), 2u);
@@ -1857,12 +1688,8 @@
ast::ExpressionList vals;
ast::TypeConstructorExpression t(&i32, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
EXPECT_TRUE(td.DetermineResultType(&t)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&t), 2u);
@@ -1879,12 +1706,8 @@
ast::ExpressionList vals;
ast::TypeConstructorExpression t(&u32, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
EXPECT_TRUE(td.DetermineResultType(&t)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&t), 2u);
@@ -1901,12 +1724,8 @@
ast::ExpressionList vals;
ast::TypeConstructorExpression t(&bool_type, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
EXPECT_TRUE(td.DetermineResultType(&t)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&t), 2u);
@@ -1924,12 +1743,8 @@
ast::ExpressionList vals;
ast::TypeConstructorExpression t(&vec, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
EXPECT_TRUE(td.DetermineResultType(&t)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&t), 3u);
@@ -1948,12 +1763,8 @@
ast::ExpressionList vals;
ast::TypeConstructorExpression t(&mat, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
EXPECT_TRUE(td.DetermineResultType(&t)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&t), 4u);
@@ -1973,12 +1784,8 @@
ast::ExpressionList vals;
ast::TypeConstructorExpression t(&ary, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
EXPECT_TRUE(td.DetermineResultType(&t)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&t), 5u);
@@ -2006,12 +1813,8 @@
ast::ExpressionList vals;
ast::TypeConstructorExpression t(&s_type, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
EXPECT_TRUE(td.DetermineResultType(&t)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&t), 3u);
@@ -2033,12 +1836,8 @@
ast::TypeConstructorExpression cast(&i32, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&cast), 1u);
@@ -2061,12 +1860,8 @@
ast::TypeConstructorExpression cast(&u32, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&cast), 1u);
@@ -2089,12 +1884,8 @@
ast::TypeConstructorExpression cast(&i32, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&cast), 1u);
@@ -2117,12 +1908,8 @@
ast::TypeConstructorExpression cast(&u32, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&cast), 1u);
@@ -2145,12 +1932,8 @@
ast::TypeConstructorExpression cast(&f32, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&cast), 1u);
@@ -2173,12 +1956,8 @@
ast::TypeConstructorExpression cast(&f32, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateExpression(&cast), 1u);
@@ -2205,13 +1984,9 @@
ast::TypeConstructorExpression cast(&ivec3, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(var.get());
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error();
EXPECT_EQ(b.GenerateExpression(&cast), 6u) << b.error();
@@ -2244,13 +2019,9 @@
ast::TypeConstructorExpression cast(&ivec3, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(var.get());
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error();
EXPECT_EQ(b.GenerateExpression(&cast), 6u) << b.error();
@@ -2283,13 +2054,9 @@
ast::TypeConstructorExpression cast(&uvec3, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(var.get());
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error();
EXPECT_EQ(b.GenerateExpression(&cast), 6u) << b.error();
@@ -2322,13 +2089,9 @@
ast::TypeConstructorExpression cast(&uvec3, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(var.get());
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error();
EXPECT_EQ(b.GenerateExpression(&cast), 6u) << b.error();
@@ -2361,13 +2124,9 @@
ast::TypeConstructorExpression cast(&fvec3, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(var.get());
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error();
EXPECT_EQ(b.GenerateExpression(&cast), 6u) << b.error();
@@ -2400,13 +2159,9 @@
ast::TypeConstructorExpression cast(&fvec3, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(var.get());
ASSERT_TRUE(td.DetermineResultType(&cast)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error();
EXPECT_EQ(b.GenerateExpression(&cast), 6u) << b.error();
@@ -2439,12 +2194,8 @@
std::make_unique<ast::FloatLiteral>(&f32, 3.f)));
ast::TypeConstructorExpression t(&vec, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&t)) << td.error();
- Builder b(&mod);
EXPECT_TRUE(b.is_constructor_const(&t, true));
EXPECT_FALSE(b.has_error());
}
@@ -2460,10 +2211,6 @@
params.push_back(std::make_unique<ast::IdentifierExpression>("c"));
ast::TypeConstructorExpression t(&vec, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
ast::Variable var_a("a", ast::StorageClass::kPrivate, &f32);
ast::Variable var_b("b", ast::StorageClass::kPrivate, &f32);
ast::Variable var_c("c", ast::StorageClass::kPrivate, &f32);
@@ -2473,7 +2220,6 @@
ASSERT_TRUE(td.DetermineResultType(&t)) << td.error();
- Builder b(&mod);
EXPECT_FALSE(b.is_constructor_const(&t, true));
EXPECT_TRUE(b.has_error());
EXPECT_EQ(b.error(), "constructor must be a constant expression");
@@ -2510,12 +2256,8 @@
ary_params.push_back(std::move(second));
ast::TypeConstructorExpression t(&ary, std::move(ary_params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&t)) << td.error();
- Builder b(&mod);
EXPECT_TRUE(b.is_constructor_const(&t, true));
EXPECT_FALSE(b.has_error());
}
@@ -2541,12 +2283,8 @@
ast::TypeConstructorExpression t(&vec, std::move(vec_params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&t)) << td.error();
- Builder b(&mod);
EXPECT_FALSE(b.is_constructor_const(&t, true));
EXPECT_FALSE(b.has_error());
}
@@ -2572,12 +2310,8 @@
ast::TypeConstructorExpression t(&vec, std::move(vec_params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&t)) << td.error();
- Builder b(&mod);
EXPECT_FALSE(b.is_constructor_const(&t, true));
EXPECT_FALSE(b.has_error());
}
@@ -2596,12 +2330,8 @@
std::make_unique<ast::FloatLiteral>(&f32, 3.f)));
ast::TypeConstructorExpression t(&vec, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&t)) << td.error();
- Builder b(&mod);
EXPECT_TRUE(b.is_constructor_const(&t, false));
EXPECT_FALSE(b.has_error());
}
@@ -2617,10 +2347,6 @@
params.push_back(std::make_unique<ast::IdentifierExpression>("c"));
ast::TypeConstructorExpression t(&vec, std::move(params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
ast::Variable var_a("a", ast::StorageClass::kPrivate, &f32);
ast::Variable var_b("b", ast::StorageClass::kPrivate, &f32);
ast::Variable var_c("c", ast::StorageClass::kPrivate, &f32);
@@ -2630,7 +2356,6 @@
ASSERT_TRUE(td.DetermineResultType(&t)) << td.error();
- Builder b(&mod);
EXPECT_FALSE(b.is_constructor_const(&t, false));
EXPECT_FALSE(b.has_error());
}
@@ -2666,12 +2391,8 @@
ary_params.push_back(std::move(second));
ast::TypeConstructorExpression t(&ary, std::move(ary_params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&t)) << td.error();
- Builder b(&mod);
EXPECT_TRUE(b.is_constructor_const(&t, false));
EXPECT_FALSE(b.has_error());
}
@@ -2697,12 +2418,8 @@
ast::TypeConstructorExpression t(&vec, std::move(vec_params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&t)) << td.error();
- Builder b(&mod);
EXPECT_FALSE(b.is_constructor_const(&t, false));
EXPECT_FALSE(b.has_error());
}
@@ -2728,12 +2445,8 @@
ast::TypeConstructorExpression t(&vec, std::move(vec_params));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&t)) << td.error();
- Builder b(&mod);
EXPECT_FALSE(b.is_constructor_const(&t, false));
EXPECT_FALSE(b.has_error());
}
@@ -2751,12 +2464,8 @@
ast::TypeConstructorExpression t(&vec, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&t)) << td.error();
- Builder b(&mod);
EXPECT_FALSE(b.is_constructor_const(&t, false));
EXPECT_FALSE(b.has_error());
}
@@ -2791,12 +2500,8 @@
ast::TypeConstructorExpression t(&s_type, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&t)) << td.error();
- Builder b(&mod);
EXPECT_TRUE(b.is_constructor_const(&t, false));
EXPECT_FALSE(b.has_error());
}
@@ -2830,10 +2535,6 @@
ast::TypeConstructorExpression t(&s_type, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
ast::Variable var_a("a", ast::StorageClass::kPrivate, &f32);
ast::Variable var_b("b", ast::StorageClass::kPrivate, &f32);
td.RegisterVariableForTesting(&var_a);
@@ -2841,7 +2542,6 @@
ASSERT_TRUE(td.DetermineResultType(&t)) << td.error();
- Builder b(&mod);
EXPECT_FALSE(b.is_constructor_const(&t, false));
EXPECT_FALSE(b.has_error());
}
diff --git a/src/writer/spirv/builder_discard_test.cc b/src/writer/spirv/builder_discard_test.cc
index 596a24c..9a22335 100644
--- a/src/writer/spirv/builder_discard_test.cc
+++ b/src/writer/spirv/builder_discard_test.cc
@@ -18,19 +18,18 @@
#include "src/type_determiner.h"
#include "src/writer/spirv/builder.h"
#include "src/writer/spirv/spv_dump.h"
+#include "src/writer/spirv/test_helper.h"
namespace tint {
namespace writer {
namespace spirv {
namespace {
-using BuilderTest = testing::Test;
+using BuilderTest = TestHelper;
TEST_F(BuilderTest, Discard) {
ast::DiscardStatement expr;
- ast::Module mod;
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateStatement(&expr), 1u) << b.error();
EXPECT_EQ(DumpInstructions(b.functions()[0].instructions()), R"(OpKill
diff --git a/src/writer/spirv/builder_format_conversion_test.cc b/src/writer/spirv/builder_format_conversion_test.cc
index 8e5b17a..4de15f4 100644
--- a/src/writer/spirv/builder_format_conversion_test.cc
+++ b/src/writer/spirv/builder_format_conversion_test.cc
@@ -15,6 +15,7 @@
#include "gtest/gtest.h"
#include "src/writer/spirv/builder.h"
#include "src/writer/spirv/spv_dump.h"
+#include "src/writer/spirv/test_helper.h"
namespace tint {
namespace writer {
@@ -30,14 +31,11 @@
out << data.ast_format;
return out;
}
-using ImageFormatConversionTest = testing::TestWithParam<TestData>;
+using ImageFormatConversionTest = TestParamHelper<TestData>;
TEST_P(ImageFormatConversionTest, ImageFormatConversion) {
auto param = GetParam();
- ast::Module mod;
- Builder b(&mod);
-
EXPECT_EQ(b.convert_image_format_to_spv(param.ast_format), param.spv_format);
if (param.extended_format) {
diff --git a/src/writer/spirv/builder_function_decoration_test.cc b/src/writer/spirv/builder_function_decoration_test.cc
index 1554bc2..b549526 100644
--- a/src/writer/spirv/builder_function_decoration_test.cc
+++ b/src/writer/spirv/builder_function_decoration_test.cc
@@ -30,13 +30,14 @@
#include "src/type_determiner.h"
#include "src/writer/spirv/builder.h"
#include "src/writer/spirv/spv_dump.h"
+#include "src/writer/spirv/test_helper.h"
namespace tint {
namespace writer {
namespace spirv {
namespace {
-using BuilderTest = testing::Test;
+using BuilderTest = TestHelper;
TEST_F(BuilderTest, FunctionDecoration_Stage) {
ast::type::VoidType void_type;
@@ -45,8 +46,6 @@
func.add_decoration(std::make_unique<ast::StageDecoration>(
ast::PipelineStage::kVertex, Source{}));
- ast::Module mod;
- Builder b(&mod);
ASSERT_TRUE(b.GenerateFunction(&func)) << b.error();
EXPECT_EQ(DumpInstructions(b.entry_points()),
R"(OpEntryPoint Vertex %3 "main"
@@ -61,7 +60,7 @@
out << data.stage;
return out;
}
-using FunctionDecoration_StageTest = testing::TestWithParam<FunctionStageData>;
+using FunctionDecoration_StageTest = TestParamHelper<FunctionStageData>;
TEST_P(FunctionDecoration_StageTest, Emit) {
auto params = GetParam();
@@ -71,8 +70,6 @@
func.add_decoration(
std::make_unique<ast::StageDecoration>(params.stage, Source{}));
- ast::Module mod;
- Builder b(&mod);
ASSERT_TRUE(b.GenerateFunction(&func)) << b.error();
auto preamble = b.entry_points();
@@ -106,8 +103,6 @@
auto v_wg = std::make_unique<ast::Variable>(
"my_wg", ast::StorageClass::kWorkgroup, &f32);
- ast::Module mod;
- Builder b(&mod);
EXPECT_TRUE(b.GenerateGlobalVariable(v_in.get())) << b.error();
EXPECT_TRUE(b.GenerateGlobalVariable(v_out.get())) << b.error();
EXPECT_TRUE(b.GenerateGlobalVariable(v_wg.get())) << b.error();
@@ -166,17 +161,12 @@
auto v_wg = std::make_unique<ast::Variable>(
"my_wg", ast::StorageClass::kWorkgroup, &f32);
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(v_in.get());
td.RegisterVariableForTesting(v_out.get());
td.RegisterVariableForTesting(v_wg.get());
ASSERT_TRUE(td.DetermineFunction(&func)) << td.error();
- Builder b(&mod);
-
EXPECT_TRUE(b.GenerateGlobalVariable(v_in.get())) << b.error();
EXPECT_TRUE(b.GenerateGlobalVariable(v_out.get())) << b.error();
EXPECT_TRUE(b.GenerateGlobalVariable(v_wg.get())) << b.error();
@@ -214,8 +204,6 @@
func.add_decoration(std::make_unique<ast::StageDecoration>(
ast::PipelineStage::kFragment, Source{}));
- ast::Module mod;
- Builder b(&mod);
ASSERT_TRUE(b.GenerateExecutionModes(&func, 3)) << b.error();
EXPECT_EQ(DumpInstructions(b.execution_modes()),
R"(OpExecutionMode %3 OriginUpperLeft
@@ -229,8 +217,6 @@
func.add_decoration(std::make_unique<ast::StageDecoration>(
ast::PipelineStage::kCompute, Source{}));
- ast::Module mod;
- Builder b(&mod);
ASSERT_TRUE(b.GenerateExecutionModes(&func, 3)) << b.error();
EXPECT_EQ(DumpInstructions(b.execution_modes()),
R"(OpExecutionMode %3 LocalSize 1 1 1
@@ -246,8 +232,6 @@
func.add_decoration(std::make_unique<ast::StageDecoration>(
ast::PipelineStage::kCompute, Source{}));
- ast::Module mod;
- Builder b(&mod);
ASSERT_TRUE(b.GenerateExecutionModes(&func, 3)) << b.error();
EXPECT_EQ(DumpInstructions(b.execution_modes()),
R"(OpExecutionMode %3 LocalSize 2 4 6
@@ -265,8 +249,6 @@
func2.add_decoration(std::make_unique<ast::StageDecoration>(
ast::PipelineStage::kFragment, Source{}));
- ast::Module mod;
- Builder b(&mod);
ASSERT_TRUE(b.GenerateFunction(&func1)) << b.error();
ASSERT_TRUE(b.GenerateFunction(&func2)) << b.error();
EXPECT_EQ(DumpBuilder(b),
diff --git a/src/writer/spirv/builder_function_test.cc b/src/writer/spirv/builder_function_test.cc
index 5677d76..98380d5 100644
--- a/src/writer/spirv/builder_function_test.cc
+++ b/src/writer/spirv/builder_function_test.cc
@@ -37,22 +37,20 @@
#include "src/type_determiner.h"
#include "src/writer/spirv/builder.h"
#include "src/writer/spirv/spv_dump.h"
+#include "src/writer/spirv/test_helper.h"
namespace tint {
namespace writer {
namespace spirv {
namespace {
-using BuilderTest = testing::Test;
+using BuilderTest = TestHelper;
TEST_F(BuilderTest, Function_Empty) {
ast::type::VoidType void_type;
ast::Function func("a_func", {}, &void_type);
- ast::Module mod;
- Builder b(&mod);
ASSERT_TRUE(b.GenerateFunction(&func));
-
EXPECT_EQ(DumpInstructions(b.debug()), R"(OpName %3 "tint_615f66756e63"
)");
EXPECT_EQ(DumpInstructions(b.types()), R"(%2 = OpTypeVoid
@@ -87,14 +85,10 @@
std::make_unique<ast::IdentifierExpression>("a")));
func.set_body(std::move(body));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(func.params()[0].get());
td.RegisterVariableForTesting(func.params()[1].get());
EXPECT_TRUE(td.DetermineFunction(&func));
- Builder b(&mod);
ASSERT_TRUE(b.GenerateFunction(&func));
EXPECT_EQ(DumpBuilder(b), R"(OpName %4 "tint_615f66756e63"
OpName %5 "tint_61"
@@ -120,8 +114,6 @@
ast::Function func("a_func", {}, &void_type);
func.set_body(std::move(body));
- ast::Module mod;
- Builder b(&mod);
ASSERT_TRUE(b.GenerateFunction(&func));
EXPECT_EQ(DumpBuilder(b), R"(OpName %3 "tint_615f66756e63"
%2 = OpTypeVoid
@@ -137,8 +129,6 @@
ast::type::VoidType void_type;
ast::Function func("a_func", {}, &void_type);
- ast::Module mod;
- Builder b(&mod);
ASSERT_TRUE(b.GenerateFunction(&func));
EXPECT_EQ(DumpInstructions(b.types()), R"(%2 = OpTypeVoid
%1 = OpTypeFunction %2
@@ -150,8 +140,6 @@
ast::Function func1("a_func", {}, &void_type);
ast::Function func2("b_func", {}, &void_type);
- ast::Module mod;
- Builder b(&mod);
ASSERT_TRUE(b.GenerateFunction(&func1));
ASSERT_TRUE(b.GenerateFunction(&func2));
EXPECT_EQ(DumpInstructions(b.types()), R"(%2 = OpTypeVoid
@@ -204,10 +192,6 @@
decos.push_back(std::make_unique<ast::SetDecoration>(0, Source{}));
data_var->set_decorations(std::move(decos));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
mod.AddConstructedType(&s);
td.RegisterVariableForTesting(data_var.get());
@@ -257,7 +241,6 @@
ASSERT_TRUE(td.Determine()) << td.error();
- Builder b(&mod);
ASSERT_TRUE(b.Build());
EXPECT_EQ(DumpBuilder(b), R"(OpCapability Shader
OpMemoryModel Logical GLSL450
diff --git a/src/writer/spirv/builder_function_variable_test.cc b/src/writer/spirv/builder_function_variable_test.cc
index 985a776..b03429d 100644
--- a/src/writer/spirv/builder_function_variable_test.cc
+++ b/src/writer/spirv/builder_function_variable_test.cc
@@ -37,20 +37,19 @@
#include "src/type_determiner.h"
#include "src/writer/spirv/builder.h"
#include "src/writer/spirv/spv_dump.h"
+#include "src/writer/spirv/test_helper.h"
namespace tint {
namespace writer {
namespace spirv {
namespace {
-using BuilderTest = testing::Test;
+using BuilderTest = TestHelper;
TEST_F(BuilderTest, FunctionVar_NoStorageClass) {
ast::type::F32Type f32;
ast::Variable v("var", ast::StorageClass::kNone, &f32);
- ast::Module mod;
- Builder b(&mod);
b.push_function(Function{});
EXPECT_TRUE(b.GenerateFunctionVariable(&v)) << b.error();
EXPECT_EQ(DumpInstructions(b.debug()), R"(OpName %1 "tint_766172"
@@ -81,9 +80,6 @@
auto init =
std::make_unique<ast::TypeConstructorExpression>(&vec, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
EXPECT_TRUE(td.DetermineResultType(init.get())) << td.error();
ast::Variable v("var", ast::StorageClass::kOutput, &f32);
@@ -91,7 +87,6 @@
td.RegisterVariableForTesting(&v);
- Builder b(&mod);
b.push_function(Function{});
EXPECT_TRUE(b.GenerateFunctionVariable(&v)) << b.error();
ASSERT_FALSE(b.has_error()) << b.error();
@@ -132,16 +127,12 @@
auto init =
std::make_unique<ast::TypeConstructorExpression>(&vec, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
EXPECT_TRUE(td.DetermineResultType(init.get())) << td.error();
ast::Variable v("var", ast::StorageClass::kFunction, &vec);
v.set_constructor(std::move(init));
td.RegisterVariableForTesting(&v);
- Builder b(&mod);
b.push_function(Function{});
EXPECT_TRUE(b.GenerateFunctionVariable(&v)) << b.error();
ASSERT_FALSE(b.has_error()) << b.error();
@@ -189,9 +180,6 @@
auto init =
std::make_unique<ast::TypeConstructorExpression>(&vec, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
EXPECT_TRUE(td.DetermineResultType(init.get())) << td.error();
ast::Variable v("var", ast::StorageClass::kOutput, &f32);
@@ -200,7 +188,6 @@
td.RegisterVariableForTesting(&v);
- Builder b(&mod);
EXPECT_TRUE(b.GenerateFunctionVariable(&v)) << b.error();
ASSERT_FALSE(b.has_error()) << b.error();
diff --git a/src/writer/spirv/builder_global_variable_test.cc b/src/writer/spirv/builder_global_variable_test.cc
index 9618580..288deed 100644
--- a/src/writer/spirv/builder_global_variable_test.cc
+++ b/src/writer/spirv/builder_global_variable_test.cc
@@ -42,20 +42,19 @@
#include "src/type_determiner.h"
#include "src/writer/spirv/builder.h"
#include "src/writer/spirv/spv_dump.h"
+#include "src/writer/spirv/test_helper.h"
namespace tint {
namespace writer {
namespace spirv {
namespace {
-using BuilderTest = testing::Test;
+using BuilderTest = TestHelper;
TEST_F(BuilderTest, GlobalVar_NoStorageClass) {
ast::type::F32Type f32;
ast::Variable v("var", ast::StorageClass::kNone, &f32);
- ast::Module mod;
- Builder b(&mod);
EXPECT_TRUE(b.GenerateGlobalVariable(&v)) << b.error();
EXPECT_EQ(DumpInstructions(b.debug()), R"(OpName %1 "tint_766172"
)");
@@ -70,8 +69,6 @@
ast::type::F32Type f32;
ast::Variable v("var", ast::StorageClass::kOutput, &f32);
- ast::Module mod;
- Builder b(&mod);
EXPECT_TRUE(b.GenerateGlobalVariable(&v)) << b.error();
EXPECT_EQ(DumpInstructions(b.debug()), R"(OpName %1 "tint_766172"
)");
@@ -86,8 +83,6 @@
ast::type::F32Type f32;
ast::Variable v("var", ast::StorageClass::kInput, &f32);
- ast::Module mod;
- Builder b(&mod);
EXPECT_TRUE(b.GenerateGlobalVariable(&v)) << b.error();
EXPECT_EQ(DumpInstructions(b.debug()), R"(OpName %1 "tint_766172"
)");
@@ -112,16 +107,12 @@
auto init =
std::make_unique<ast::TypeConstructorExpression>(&vec, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
EXPECT_TRUE(td.DetermineResultType(init.get())) << td.error();
ast::Variable v("var", ast::StorageClass::kOutput, &f32);
v.set_constructor(std::move(init));
td.RegisterVariableForTesting(&v);
- Builder b(&mod);
EXPECT_TRUE(b.GenerateGlobalVariable(&v)) << b.error();
ASSERT_FALSE(b.has_error()) << b.error();
@@ -152,9 +143,6 @@
auto init =
std::make_unique<ast::TypeConstructorExpression>(&vec, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
EXPECT_TRUE(td.DetermineResultType(init.get())) << td.error();
ast::Variable v("var", ast::StorageClass::kOutput, &f32);
@@ -162,7 +150,6 @@
v.set_is_const(true);
td.RegisterVariableForTesting(&v);
- Builder b(&mod);
EXPECT_TRUE(b.GenerateGlobalVariable(&v)) << b.error();
ASSERT_FALSE(b.has_error()) << b.error();
@@ -190,9 +177,6 @@
auto init =
std::make_unique<ast::TypeConstructorExpression>(&vec3, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
EXPECT_TRUE(td.DetermineResultType(init.get())) << td.error();
ast::Variable v("var", ast::StorageClass::kOutput, &f32);
@@ -200,7 +184,6 @@
v.set_is_const(true);
td.RegisterVariableForTesting(&v);
- Builder b(&mod);
EXPECT_TRUE(b.GenerateGlobalVariable(&v)) << b.error();
ASSERT_FALSE(b.has_error()) << b.error();
@@ -233,9 +216,6 @@
auto init =
std::make_unique<ast::TypeConstructorExpression>(&vec3, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
EXPECT_TRUE(td.DetermineResultType(init.get())) << td.error();
ast::Variable v("var", ast::StorageClass::kOutput, &f32);
@@ -243,7 +223,6 @@
v.set_is_const(true);
td.RegisterVariableForTesting(&v);
- Builder b(&mod);
EXPECT_TRUE(b.GenerateGlobalVariable(&v)) << b.error();
ASSERT_FALSE(b.has_error()) << b.error();
@@ -273,8 +252,6 @@
ast::DecoratedVariable dv(std::move(v));
dv.set_decorations(std::move(decos));
- ast::Module mod;
- Builder b(&mod);
EXPECT_TRUE(b.GenerateGlobalVariable(&dv)) << b.error();
EXPECT_EQ(DumpInstructions(b.debug()), R"(OpName %1 "tint_766172"
)");
@@ -298,8 +275,6 @@
ast::DecoratedVariable dv(std::move(v));
dv.set_decorations(std::move(decos));
- ast::Module mod;
- Builder b(&mod);
EXPECT_TRUE(b.GenerateGlobalVariable(&dv)) << b.error();
EXPECT_EQ(DumpInstructions(b.debug()), R"(OpName %1 "tint_766172"
)");
@@ -324,8 +299,6 @@
ast::DecoratedVariable dv(std::move(v));
dv.set_decorations(std::move(decos));
- ast::Module mod;
- Builder b(&mod);
EXPECT_TRUE(b.GenerateGlobalVariable(&dv)) << b.error();
EXPECT_EQ(DumpInstructions(b.debug()), R"(OpName %1 "tint_766172"
)");
@@ -350,8 +323,6 @@
v.set_constructor(std::make_unique<ast::ScalarConstructorExpression>(
std::make_unique<ast::BoolLiteral>(&bool_type, true)));
- ast::Module mod;
- Builder b(&mod);
EXPECT_TRUE(b.GenerateGlobalVariable(&v)) << b.error();
EXPECT_EQ(DumpInstructions(b.debug()), R"(OpName %3 "tint_766172"
)");
@@ -374,8 +345,6 @@
"var", ast::StorageClass::kNone, &bool_type));
v.set_decorations(std::move(decos));
- ast::Module mod;
- Builder b(&mod);
EXPECT_TRUE(b.GenerateGlobalVariable(&v)) << b.error();
EXPECT_EQ(DumpInstructions(b.debug()), R"(OpName %1 "tint_766172"
)");
@@ -400,8 +369,6 @@
v.set_constructor(std::make_unique<ast::ScalarConstructorExpression>(
std::make_unique<ast::FloatLiteral>(&f32, 2.0)));
- ast::Module mod;
- Builder b(&mod);
EXPECT_TRUE(b.GenerateGlobalVariable(&v)) << b.error();
EXPECT_EQ(DumpInstructions(b.debug()), R"(OpName %3 "tint_766172"
)");
@@ -424,8 +391,6 @@
std::make_unique<ast::Variable>("var", ast::StorageClass::kNone, &f32));
v.set_decorations(std::move(decos));
- ast::Module mod;
- Builder b(&mod);
EXPECT_TRUE(b.GenerateGlobalVariable(&v)) << b.error();
EXPECT_EQ(DumpInstructions(b.debug()), R"(OpName %1 "tint_766172"
)");
@@ -448,8 +413,6 @@
std::make_unique<ast::Variable>("var", ast::StorageClass::kNone, &i32));
v.set_decorations(std::move(decos));
- ast::Module mod;
- Builder b(&mod);
EXPECT_TRUE(b.GenerateGlobalVariable(&v)) << b.error();
EXPECT_EQ(DumpInstructions(b.debug()), R"(OpName %1 "tint_766172"
)");
@@ -472,8 +435,6 @@
std::make_unique<ast::Variable>("var", ast::StorageClass::kNone, &u32));
v.set_decorations(std::move(decos));
- ast::Module mod;
- Builder b(&mod);
EXPECT_TRUE(b.GenerateGlobalVariable(&v)) << b.error();
EXPECT_EQ(DumpInstructions(b.debug()), R"(OpName %1 "tint_766172"
)");
@@ -494,12 +455,9 @@
out << data.builtin;
return out;
}
-using BuiltinDataTest = testing::TestWithParam<BuiltinData>;
+using BuiltinDataTest = TestParamHelper<BuiltinData>;
TEST_P(BuiltinDataTest, Convert) {
auto params = GetParam();
-
- ast::Module mod;
- Builder b(&mod);
EXPECT_EQ(b.ConvertBuiltin(params.builtin), params.result);
}
INSTANTIATE_TEST_SUITE_P(
@@ -544,8 +502,6 @@
ast::Variable var("b", ast::StorageClass::kStorageBuffer, &ac);
- ast::Module mod;
- Builder b(&mod);
EXPECT_TRUE(b.GenerateGlobalVariable(&var)) << b.error();
EXPECT_EQ(DumpInstructions(b.annots()), R"(OpMemberDecorate %3 0 NonWritable
@@ -584,8 +540,6 @@
ast::Variable var("b", ast::StorageClass::kStorageBuffer, &ac);
- ast::Module mod;
- Builder b(&mod);
EXPECT_TRUE(b.GenerateGlobalVariable(&var)) << b.error();
EXPECT_EQ(DumpInstructions(b.annots()), R"(OpMemberDecorate %3 0 NonWritable
@@ -622,8 +576,6 @@
ast::Variable var("b", ast::StorageClass::kStorageBuffer, &B);
- ast::Module mod;
- Builder b(&mod);
EXPECT_TRUE(b.GenerateGlobalVariable(&var)) << b.error();
EXPECT_EQ(DumpInstructions(b.annots()), R"(OpMemberDecorate %3 0 NonWritable
@@ -661,8 +613,6 @@
ast::Variable var_b("b", ast::StorageClass::kStorageBuffer, &read);
ast::Variable var_c("c", ast::StorageClass::kStorageBuffer, &rw);
- ast::Module mod;
- Builder b(&mod);
EXPECT_TRUE(b.GenerateGlobalVariable(&var_b)) << b.error();
EXPECT_TRUE(b.GenerateGlobalVariable(&var_c)) << b.error();
diff --git a/src/writer/spirv/builder_ident_expression_test.cc b/src/writer/spirv/builder_ident_expression_test.cc
index b110319..ee2939b 100644
--- a/src/writer/spirv/builder_ident_expression_test.cc
+++ b/src/writer/spirv/builder_ident_expression_test.cc
@@ -29,13 +29,14 @@
#include "src/type_determiner.h"
#include "src/writer/spirv/builder.h"
#include "src/writer/spirv/spv_dump.h"
+#include "src/writer/spirv/test_helper.h"
namespace tint {
namespace writer {
namespace spirv {
namespace {
-using BuilderTest = testing::Test;
+using BuilderTest = TestHelper;
TEST_F(BuilderTest, IdentifierExpression_GlobalConst) {
ast::type::F32Type f32;
@@ -52,9 +53,6 @@
auto init =
std::make_unique<ast::TypeConstructorExpression>(&vec, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
EXPECT_TRUE(td.DetermineResultType(init.get())) << td.error();
ast::Variable v("var", ast::StorageClass::kOutput, &f32);
@@ -63,7 +61,6 @@
td.RegisterVariableForTesting(&v);
- Builder b(&mod);
EXPECT_TRUE(b.GenerateGlobalVariable(&v)) << b.error();
ASSERT_FALSE(b.has_error()) << b.error();
@@ -84,12 +81,8 @@
ast::type::F32Type f32;
ast::Variable v("var", ast::StorageClass::kOutput, &f32);
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(&v);
- Builder b(&mod);
b.push_function(Function{});
EXPECT_TRUE(b.GenerateGlobalVariable(&v)) << b.error();
EXPECT_EQ(DumpInstructions(b.debug()), R"(OpName %1 "tint_766172"
@@ -120,9 +113,6 @@
auto init =
std::make_unique<ast::TypeConstructorExpression>(&vec, std::move(vals));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
EXPECT_TRUE(td.DetermineResultType(init.get())) << td.error();
ast::Variable v("var", ast::StorageClass::kOutput, &f32);
@@ -130,7 +120,6 @@
v.set_is_const(true);
td.RegisterVariableForTesting(&v);
- Builder b(&mod);
EXPECT_TRUE(b.GenerateFunctionVariable(&v)) << b.error();
ASSERT_FALSE(b.has_error()) << b.error();
@@ -150,12 +139,8 @@
ast::type::F32Type f32;
ast::Variable v("var", ast::StorageClass::kNone, &f32);
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(&v);
- Builder b(&mod);
b.push_function(Function{});
EXPECT_TRUE(b.GenerateFunctionVariable(&v)) << b.error();
EXPECT_EQ(DumpInstructions(b.debug()), R"(OpName %1 "tint_766172"
@@ -178,10 +163,6 @@
TEST_F(BuilderTest, IdentifierExpression_Load) {
ast::type::I32Type i32;
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
ast::Variable var("var", ast::StorageClass::kPrivate, &i32);
td.RegisterVariableForTesting(&var);
@@ -194,7 +175,6 @@
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateGlobalVariable(&var)) << b.error();
@@ -214,10 +194,6 @@
TEST_F(BuilderTest, IdentifierExpression_NoLoadConst) {
ast::type::I32Type i32;
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
ast::Variable var("var", ast::StorageClass::kNone, &i32);
var.set_constructor(std::make_unique<ast::ScalarConstructorExpression>(
std::make_unique<ast::SintLiteral>(&i32, 2)));
@@ -233,7 +209,6 @@
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateGlobalVariable(&var)) << b.error();
diff --git a/src/writer/spirv/builder_if_test.cc b/src/writer/spirv/builder_if_test.cc
index 908ac58..4432237 100644
--- a/src/writer/spirv/builder_if_test.cc
+++ b/src/writer/spirv/builder_if_test.cc
@@ -32,13 +32,14 @@
#include "src/type_determiner.h"
#include "src/writer/spirv/builder.h"
#include "src/writer/spirv/spv_dump.h"
+#include "src/writer/spirv/test_helper.h"
namespace tint {
namespace writer {
namespace spirv {
namespace {
-using BuilderTest = testing::Test;
+using BuilderTest = TestHelper;
TEST_F(BuilderTest, If_Empty) {
ast::type::BoolType bool_type;
@@ -51,12 +52,8 @@
ast::IfStatement expr(std::move(cond),
std::make_unique<ast::BlockStatement>());
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_TRUE(b.GenerateIfStatement(&expr)) << b.error();
@@ -93,13 +90,9 @@
ast::IfStatement expr(std::move(cond), std::move(body));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(var.get());
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error();
@@ -156,14 +149,10 @@
ast::IfStatement expr(std::move(cond), std::move(body));
expr.set_else_statements(std::move(else_stmts));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(var.get());
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error();
@@ -227,14 +216,10 @@
ast::IfStatement expr(std::move(cond), std::move(body));
expr.set_else_statements(std::move(else_stmts));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(var.get());
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error();
@@ -322,14 +307,10 @@
ast::IfStatement expr(std::move(cond), std::move(body));
expr.set_else_statements(std::move(else_stmts));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(var.get());
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error();
@@ -397,13 +378,8 @@
ast::LoopStatement expr(std::move(loop_body),
std::make_unique<ast::BlockStatement>());
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_TRUE(b.GenerateLoopStatement(&expr)) << b.error();
@@ -456,13 +432,8 @@
ast::LoopStatement expr(std::move(loop_body),
std::make_unique<ast::BlockStatement>());
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_TRUE(b.GenerateLoopStatement(&expr)) << b.error();
@@ -511,13 +482,8 @@
ast::LoopStatement expr(std::move(loop_body),
std::make_unique<ast::BlockStatement>());
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_TRUE(b.GenerateLoopStatement(&expr)) << b.error();
@@ -570,13 +536,8 @@
ast::LoopStatement expr(std::move(loop_body),
std::make_unique<ast::BlockStatement>());
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_TRUE(b.GenerateLoopStatement(&expr)) << b.error();
@@ -616,13 +577,8 @@
ast::IfStatement expr(std::move(cond), std::move(if_body));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_TRUE(b.GenerateIfStatement(&expr)) << b.error();
@@ -653,13 +609,8 @@
ast::IfStatement expr(std::move(cond), std::move(if_body));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_TRUE(b.GenerateIfStatement(&expr)) << b.error();
diff --git a/src/writer/spirv/builder_intrinsic_test.cc b/src/writer/spirv/builder_intrinsic_test.cc
index ee67ebd..04767d7 100644
--- a/src/writer/spirv/builder_intrinsic_test.cc
+++ b/src/writer/spirv/builder_intrinsic_test.cc
@@ -45,6 +45,7 @@
#include "src/type_determiner.h"
#include "src/writer/spirv/builder.h"
#include "src/writer/spirv/spv_dump.h"
+#include "src/writer/spirv/test_helper.h"
namespace tint {
namespace writer {
@@ -66,7 +67,7 @@
Context ctx;
ast::Module mod;
TypeDeterminer td{&ctx, &mod};
- spirv::Builder b{&mod};
+ spirv::Builder b{&ctx, &mod};
};
template <typename T>
diff --git a/src/writer/spirv/builder_literal_test.cc b/src/writer/spirv/builder_literal_test.cc
index 294c6b6..de94c5f 100644
--- a/src/writer/spirv/builder_literal_test.cc
+++ b/src/writer/spirv/builder_literal_test.cc
@@ -25,19 +25,18 @@
#include "src/ast/uint_literal.h"
#include "src/writer/spirv/builder.h"
#include "src/writer/spirv/spv_dump.h"
+#include "src/writer/spirv/test_helper.h"
namespace tint {
namespace writer {
namespace spirv {
-using BuilderTest = testing::Test;
+using BuilderTest = TestHelper;
TEST_F(BuilderTest, Literal_Bool_True) {
ast::type::BoolType bool_type;
ast::BoolLiteral b_true(&bool_type, true);
- ast::Module mod;
- Builder b(&mod);
auto id = b.GenerateLiteralIfNeeded(nullptr, &b_true);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(2u, id);
@@ -51,8 +50,6 @@
ast::type::BoolType bool_type;
ast::BoolLiteral b_false(&bool_type, false);
- ast::Module mod;
- Builder b(&mod);
auto id = b.GenerateLiteralIfNeeded(nullptr, &b_false);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(2u, id);
@@ -67,8 +64,6 @@
ast::BoolLiteral b_true(&bool_type, true);
ast::BoolLiteral b_false(&bool_type, false);
- ast::Module mod;
- Builder b(&mod);
ASSERT_NE(b.GenerateLiteralIfNeeded(nullptr, &b_true), 0u);
ASSERT_FALSE(b.has_error()) << b.error();
ASSERT_NE(b.GenerateLiteralIfNeeded(nullptr, &b_false), 0u);
@@ -86,8 +81,6 @@
ast::type::I32Type i32;
ast::SintLiteral i(&i32, -23);
- ast::Module mod;
- Builder b(&mod);
auto id = b.GenerateLiteralIfNeeded(nullptr, &i);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(2u, id);
@@ -102,8 +95,6 @@
ast::SintLiteral i1(&i32, -23);
ast::SintLiteral i2(&i32, -23);
- ast::Module mod;
- Builder b(&mod);
ASSERT_NE(b.GenerateLiteralIfNeeded(nullptr, &i1), 0u);
ASSERT_NE(b.GenerateLiteralIfNeeded(nullptr, &i2), 0u);
ASSERT_FALSE(b.has_error()) << b.error();
@@ -117,8 +108,6 @@
ast::type::U32Type u32;
ast::UintLiteral i(&u32, 23);
- ast::Module mod;
- Builder b(&mod);
auto id = b.GenerateLiteralIfNeeded(nullptr, &i);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(2u, id);
@@ -133,8 +122,6 @@
ast::UintLiteral i1(&u32, 23);
ast::UintLiteral i2(&u32, 23);
- ast::Module mod;
- Builder b(&mod);
ASSERT_NE(b.GenerateLiteralIfNeeded(nullptr, &i1), 0u);
ASSERT_NE(b.GenerateLiteralIfNeeded(nullptr, &i2), 0u);
ASSERT_FALSE(b.has_error()) << b.error();
@@ -148,8 +135,6 @@
ast::type::F32Type f32;
ast::FloatLiteral i(&f32, 23.245f);
- ast::Module mod;
- Builder b(&mod);
auto id = b.GenerateLiteralIfNeeded(nullptr, &i);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(2u, id);
@@ -164,8 +149,6 @@
ast::FloatLiteral i1(&f32, 23.245f);
ast::FloatLiteral i2(&f32, 23.245f);
- ast::Module mod;
- Builder b(&mod);
ASSERT_NE(b.GenerateLiteralIfNeeded(nullptr, &i1), 0u);
ASSERT_NE(b.GenerateLiteralIfNeeded(nullptr, &i2), 0u);
ASSERT_FALSE(b.has_error()) << b.error();
diff --git a/src/writer/spirv/builder_loop_test.cc b/src/writer/spirv/builder_loop_test.cc
index 8518eb2..d420e88 100644
--- a/src/writer/spirv/builder_loop_test.cc
+++ b/src/writer/spirv/builder_loop_test.cc
@@ -27,13 +27,14 @@
#include "src/type_determiner.h"
#include "src/writer/spirv/builder.h"
#include "src/writer/spirv/spv_dump.h"
+#include "src/writer/spirv/test_helper.h"
namespace tint {
namespace writer {
namespace spirv {
namespace {
-using BuilderTest = testing::Test;
+using BuilderTest = TestHelper;
TEST_F(BuilderTest, Loop_Empty) {
// loop {
@@ -41,12 +42,7 @@
ast::LoopStatement expr;
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
-
- Builder b(&mod);
b.push_function(Function{});
EXPECT_TRUE(b.GenerateLoopStatement(&expr)) << b.error();
@@ -81,13 +77,9 @@
ast::LoopStatement expr(std::move(body),
std::make_unique<ast::BlockStatement>());
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(var.get());
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error();
@@ -137,13 +129,9 @@
std::make_unique<ast::SintLiteral>(&i32, 3))));
ast::LoopStatement expr(std::move(body), std::move(continuing));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(var.get());
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error();
@@ -180,12 +168,8 @@
ast::LoopStatement expr(std::move(body),
std::make_unique<ast::BlockStatement>());
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_TRUE(b.GenerateLoopStatement(&expr)) << b.error();
@@ -212,12 +196,8 @@
ast::LoopStatement expr(std::move(body),
std::make_unique<ast::BlockStatement>());
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_TRUE(b.GenerateLoopStatement(&expr)) << b.error();
diff --git a/src/writer/spirv/builder_return_test.cc b/src/writer/spirv/builder_return_test.cc
index 3099ad1..91fe8fb 100644
--- a/src/writer/spirv/builder_return_test.cc
+++ b/src/writer/spirv/builder_return_test.cc
@@ -26,19 +26,18 @@
#include "src/type_determiner.h"
#include "src/writer/spirv/builder.h"
#include "src/writer/spirv/spv_dump.h"
+#include "src/writer/spirv/test_helper.h"
namespace tint {
namespace writer {
namespace spirv {
namespace {
-using BuilderTest = testing::Test;
+using BuilderTest = TestHelper;
TEST_F(BuilderTest, Return) {
ast::ReturnStatement ret;
- ast::Module mod;
- Builder b(&mod);
b.push_function(Function{});
EXPECT_TRUE(b.GenerateReturnStatement(&ret));
ASSERT_FALSE(b.has_error()) << b.error();
@@ -64,12 +63,8 @@
ast::ReturnStatement ret(std::move(val));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
EXPECT_TRUE(td.DetermineResultType(&ret)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_TRUE(b.GenerateReturnStatement(&ret));
ASSERT_FALSE(b.has_error()) << b.error();
@@ -93,13 +88,9 @@
ast::ReturnStatement ret(
std::make_unique<ast::IdentifierExpression>("param"));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(&var);
EXPECT_TRUE(td.DetermineResultType(&ret)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_TRUE(b.GenerateFunctionVariable(&var)) << b.error();
EXPECT_TRUE(b.GenerateReturnStatement(&ret)) << b.error();
diff --git a/src/writer/spirv/builder_switch_test.cc b/src/writer/spirv/builder_switch_test.cc
index 7d30580..e7dfaaf 100644
--- a/src/writer/spirv/builder_switch_test.cc
+++ b/src/writer/spirv/builder_switch_test.cc
@@ -31,13 +31,14 @@
#include "src/type_determiner.h"
#include "src/writer/spirv/builder.h"
#include "src/writer/spirv/spv_dump.h"
+#include "src/writer/spirv/test_helper.h"
namespace tint {
namespace writer {
namespace spirv {
namespace {
-using BuilderTest = testing::Test;
+using BuilderTest = TestHelper;
TEST_F(BuilderTest, Switch_Empty) {
ast::type::I32Type i32;
@@ -49,12 +50,8 @@
ast::SwitchStatement expr(std::move(cond), ast::CaseStatementList{});
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_TRUE(b.GenerateSwitchStatement(&expr)) << b.error();
@@ -112,16 +109,12 @@
ast::SwitchStatement expr(std::make_unique<ast::IdentifierExpression>("a"),
std::move(cases));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(v.get());
td.RegisterVariableForTesting(a.get());
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
ast::Function func("a_func", {}, &i32);
- Builder b(&mod);
ASSERT_TRUE(b.GenerateGlobalVariable(v.get())) << b.error();
ASSERT_TRUE(b.GenerateGlobalVariable(a.get())) << b.error();
ASSERT_TRUE(b.GenerateFunction(&func)) << b.error();
@@ -183,16 +176,12 @@
ast::SwitchStatement expr(std::make_unique<ast::IdentifierExpression>("a"),
std::move(cases));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(v.get());
td.RegisterVariableForTesting(a.get());
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
ast::Function func("a_func", {}, &i32);
- Builder b(&mod);
ASSERT_TRUE(b.GenerateGlobalVariable(v.get())) << b.error();
ASSERT_TRUE(b.GenerateGlobalVariable(a.get())) << b.error();
ASSERT_TRUE(b.GenerateFunction(&func)) << b.error();
@@ -275,16 +264,12 @@
ast::SwitchStatement expr(std::make_unique<ast::IdentifierExpression>("a"),
std::move(cases));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(v.get());
td.RegisterVariableForTesting(a.get());
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
ast::Function func("a_func", {}, &i32);
- Builder b(&mod);
ASSERT_TRUE(b.GenerateGlobalVariable(v.get())) << b.error();
ASSERT_TRUE(b.GenerateGlobalVariable(a.get())) << b.error();
ASSERT_TRUE(b.GenerateFunction(&func)) << b.error();
@@ -376,16 +361,12 @@
ast::SwitchStatement expr(std::make_unique<ast::IdentifierExpression>("a"),
std::move(cases));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(v.get());
td.RegisterVariableForTesting(a.get());
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
ast::Function func("a_func", {}, &i32);
- Builder b(&mod);
ASSERT_TRUE(b.GenerateGlobalVariable(v.get())) << b.error();
ASSERT_TRUE(b.GenerateGlobalVariable(a.get())) << b.error();
ASSERT_TRUE(b.GenerateFunction(&func)) << b.error();
@@ -454,16 +435,12 @@
ast::SwitchStatement expr(std::make_unique<ast::IdentifierExpression>("a"),
std::move(cases));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(v.get());
td.RegisterVariableForTesting(a.get());
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
ast::Function func("a_func", {}, &i32);
- Builder b(&mod);
ASSERT_TRUE(b.GenerateGlobalVariable(v.get())) << b.error();
ASSERT_TRUE(b.GenerateGlobalVariable(a.get())) << b.error();
ASSERT_TRUE(b.GenerateFunction(&func)) << b.error();
@@ -513,16 +490,12 @@
ast::SwitchStatement expr(std::make_unique<ast::IdentifierExpression>("a"),
std::move(cases));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(v.get());
td.RegisterVariableForTesting(a.get());
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
ast::Function func("a_func", {}, &i32);
- Builder b(&mod);
ASSERT_TRUE(b.GenerateGlobalVariable(v.get())) << b.error();
ASSERT_TRUE(b.GenerateGlobalVariable(a.get())) << b.error();
ASSERT_TRUE(b.GenerateFunction(&func)) << b.error();
diff --git a/src/writer/spirv/builder_test.cc b/src/writer/spirv/builder_test.cc
index 4df6910..0d4a92e 100644
--- a/src/writer/spirv/builder_test.cc
+++ b/src/writer/spirv/builder_test.cc
@@ -21,17 +21,16 @@
#include "spirv/unified1/spirv.hpp11"
#include "src/ast/module.h"
#include "src/writer/spirv/spv_dump.h"
+#include "src/writer/spirv/test_helper.h"
namespace tint {
namespace writer {
namespace spirv {
namespace {
-using BuilderTest = testing::Test;
+using BuilderTest = TestHelper;
TEST_F(BuilderTest, InsertsPreamble) {
- ast::Module m;
- Builder b(&m);
ASSERT_TRUE(b.Build());
EXPECT_EQ(DumpBuilder(b), R"(OpCapability Shader
OpMemoryModel Logical GLSL450
@@ -39,9 +38,6 @@
}
TEST_F(BuilderTest, TracksIdBounds) {
- ast::Module mod;
- Builder b(&mod);
-
for (size_t i = 0; i < 5; i++) {
EXPECT_EQ(b.next_id(), i + 1);
}
diff --git a/src/writer/spirv/builder_type_test.cc b/src/writer/spirv/builder_type_test.cc
index 2759e16..e1e8362 100644
--- a/src/writer/spirv/builder_type_test.cc
+++ b/src/writer/spirv/builder_type_test.cc
@@ -42,20 +42,19 @@
#include "src/type_determiner.h"
#include "src/writer/spirv/builder.h"
#include "src/writer/spirv/spv_dump.h"
+#include "src/writer/spirv/test_helper.h"
namespace tint {
namespace writer {
namespace spirv {
namespace {
-using BuilderTest_Type = testing::Test;
+using BuilderTest_Type = TestHelper;
TEST_F(BuilderTest_Type, GenerateAlias) {
ast::type::F32Type f32;
ast::type::AliasType alias_type("my_type", &f32);
- ast::Module mod;
- Builder b(&mod);
auto id = b.GenerateTypeIfNeeded(&alias_type);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(id, 1u);
@@ -70,8 +69,6 @@
ast::type::F32Type f32;
ast::type::AliasType alias_type("my_type", &f32);
- ast::Module mod;
- Builder b(&mod);
EXPECT_EQ(b.GenerateTypeIfNeeded(&alias_type), 1u);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(b.GenerateTypeIfNeeded(&i32), 2u);
@@ -86,8 +83,6 @@
ast::type::I32Type i32;
ast::type::ArrayType ary(&i32);
- ast::Module mod;
- Builder b(&mod);
auto id = b.GenerateTypeIfNeeded(&ary);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(1u, id);
@@ -101,8 +96,6 @@
ast::type::I32Type i32;
ast::type::ArrayType ary(&i32);
- ast::Module mod;
- Builder b(&mod);
EXPECT_EQ(b.GenerateTypeIfNeeded(&ary), 1u);
EXPECT_EQ(b.GenerateTypeIfNeeded(&ary), 1u);
ASSERT_FALSE(b.has_error()) << b.error();
@@ -116,8 +109,6 @@
ast::type::I32Type i32;
ast::type::ArrayType ary(&i32, 4);
- ast::Module mod;
- Builder b(&mod);
auto id = b.GenerateTypeIfNeeded(&ary);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(1u, id);
@@ -138,8 +129,6 @@
ast::type::ArrayType ary(&i32, 4);
ary.set_decorations(std::move(decos));
- ast::Module mod;
- Builder b(&mod);
auto id = b.GenerateTypeIfNeeded(&ary);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(1u, id);
@@ -158,8 +147,6 @@
ast::type::I32Type i32;
ast::type::ArrayType ary(&i32, 4);
- ast::Module mod;
- Builder b(&mod);
EXPECT_EQ(b.GenerateTypeIfNeeded(&ary), 1u);
EXPECT_EQ(b.GenerateTypeIfNeeded(&ary), 1u);
ASSERT_FALSE(b.has_error()) << b.error();
@@ -174,8 +161,6 @@
TEST_F(BuilderTest_Type, GenerateBool) {
ast::type::BoolType bool_type;
- ast::Module mod;
- Builder b(&mod);
auto id = b.GenerateTypeIfNeeded(&bool_type);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(id, 1u);
@@ -189,8 +174,6 @@
ast::type::I32Type i32;
ast::type::BoolType bool_type;
- ast::Module mod;
- Builder b(&mod);
EXPECT_EQ(b.GenerateTypeIfNeeded(&bool_type), 1u);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(b.GenerateTypeIfNeeded(&i32), 2u);
@@ -202,8 +185,6 @@
TEST_F(BuilderTest_Type, GenerateF32) {
ast::type::F32Type f32;
- ast::Module mod;
- Builder b(&mod);
auto id = b.GenerateTypeIfNeeded(&f32);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(id, 1u);
@@ -217,8 +198,6 @@
ast::type::I32Type i32;
ast::type::F32Type f32;
- ast::Module mod;
- Builder b(&mod);
EXPECT_EQ(b.GenerateTypeIfNeeded(&f32), 1u);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(b.GenerateTypeIfNeeded(&i32), 2u);
@@ -230,8 +209,6 @@
TEST_F(BuilderTest_Type, GenerateI32) {
ast::type::I32Type i32;
- ast::Module mod;
- Builder b(&mod);
auto id = b.GenerateTypeIfNeeded(&i32);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(id, 1u);
@@ -245,8 +222,6 @@
ast::type::I32Type i32;
ast::type::F32Type f32;
- ast::Module mod;
- Builder b(&mod);
EXPECT_EQ(b.GenerateTypeIfNeeded(&i32), 1u);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(b.GenerateTypeIfNeeded(&f32), 2u);
@@ -259,8 +234,6 @@
ast::type::F32Type f32;
ast::type::MatrixType mat_type(&f32, 3, 2);
- ast::Module mod;
- Builder b(&mod);
auto id = b.GenerateTypeIfNeeded(&mat_type);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(id, 1u);
@@ -276,8 +249,6 @@
ast::type::I32Type i32;
ast::type::MatrixType mat_type(&i32, 3, 4);
- ast::Module mod;
- Builder b(&mod);
EXPECT_EQ(b.GenerateTypeIfNeeded(&mat_type), 1u);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(b.GenerateTypeIfNeeded(&i32), 3u);
@@ -290,8 +261,6 @@
ast::type::I32Type i32;
ast::type::PointerType ptr(&i32, ast::StorageClass::kOutput);
- ast::Module mod;
- Builder b(&mod);
auto id = b.GenerateTypeIfNeeded(&ptr);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(1u, id);
@@ -305,8 +274,6 @@
ast::type::I32Type i32;
ast::type::PointerType ptr(&i32, ast::StorageClass::kOutput);
- ast::Module mod;
- Builder b(&mod);
EXPECT_EQ(b.GenerateTypeIfNeeded(&ptr), 1u);
EXPECT_EQ(b.GenerateTypeIfNeeded(&ptr), 1u);
}
@@ -315,8 +282,6 @@
auto s = std::make_unique<ast::Struct>();
ast::type::StructType s_type("S", std::move(s));
- ast::Module mod;
- Builder b(&mod);
auto id = b.GenerateTypeIfNeeded(&s_type);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(id, 1u);
@@ -339,8 +304,6 @@
auto s = std::make_unique<ast::Struct>(std::move(members));
ast::type::StructType s_type("my_struct", std::move(s));
- ast::Module mod;
- Builder b(&mod);
auto id = b.GenerateTypeIfNeeded(&s_type);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(id, 1u);
@@ -369,8 +332,6 @@
std::move(members));
ast::type::StructType s_type("my_struct", std::move(s));
- ast::Module mod;
- Builder b(&mod);
auto id = b.GenerateTypeIfNeeded(&s_type);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(id, 1u);
@@ -404,8 +365,6 @@
auto s = std::make_unique<ast::Struct>(std::move(members));
ast::type::StructType s_type("S", std::move(s));
- ast::Module mod;
- Builder b(&mod);
auto id = b.GenerateTypeIfNeeded(&s_type);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(id, 1u);
@@ -443,8 +402,6 @@
auto s = std::make_unique<ast::Struct>(std::move(members));
ast::type::StructType s_type("S", std::move(s));
- ast::Module mod;
- Builder b(&mod);
auto id = b.GenerateTypeIfNeeded(&s_type);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(id, 1u);
@@ -494,8 +451,6 @@
auto s = std::make_unique<ast::Struct>(std::move(members));
ast::type::StructType s_type("S", std::move(s));
- ast::Module mod;
- Builder b(&mod);
auto id = b.GenerateTypeIfNeeded(&s_type);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(id, 1u);
@@ -563,8 +518,6 @@
auto s = std::make_unique<ast::Struct>(std::move(members));
ast::type::StructType s_type("S", std::move(s));
- ast::Module mod;
- Builder b(&mod);
auto id = b.GenerateTypeIfNeeded(&s_type);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(id, 1u);
@@ -598,8 +551,6 @@
TEST_F(BuilderTest_Type, GenerateU32) {
ast::type::U32Type u32;
- ast::Module mod;
- Builder b(&mod);
auto id = b.GenerateTypeIfNeeded(&u32);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(id, 1u);
@@ -613,8 +564,6 @@
ast::type::U32Type u32;
ast::type::F32Type f32;
- ast::Module mod;
- Builder b(&mod);
EXPECT_EQ(b.GenerateTypeIfNeeded(&u32), 1u);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(b.GenerateTypeIfNeeded(&f32), 2u);
@@ -627,8 +576,6 @@
ast::type::F32Type f32;
ast::type::VectorType vec_type(&f32, 3);
- ast::Module mod;
- Builder b(&mod);
auto id = b.GenerateTypeIfNeeded(&vec_type);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(id, 1u);
@@ -643,8 +590,6 @@
ast::type::I32Type i32;
ast::type::VectorType vec_type(&i32, 3);
- ast::Module mod;
- Builder b(&mod);
EXPECT_EQ(b.GenerateTypeIfNeeded(&vec_type), 1u);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(b.GenerateTypeIfNeeded(&i32), 2u);
@@ -656,8 +601,6 @@
TEST_F(BuilderTest_Type, GenerateVoid) {
ast::type::VoidType void_type;
- ast::Module mod;
- Builder b(&mod);
auto id = b.GenerateTypeIfNeeded(&void_type);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(id, 1u);
@@ -671,8 +614,6 @@
ast::type::I32Type i32;
ast::type::VoidType void_type;
- ast::Module mod;
- Builder b(&mod);
EXPECT_EQ(b.GenerateTypeIfNeeded(&void_type), 1u);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(b.GenerateTypeIfNeeded(&i32), 2u);
@@ -689,12 +630,10 @@
out << data.ast_class;
return out;
}
-using PtrDataTest = testing::TestWithParam<PtrData>;
+using PtrDataTest = TestParamHelper<PtrData>;
TEST_P(PtrDataTest, ConvertStorageClass) {
auto params = GetParam();
- ast::Module mod;
- Builder b(&mod);
EXPECT_EQ(b.ConvertStorageClass(params.ast_class), params.result);
}
INSTANTIATE_TEST_SUITE_P(
@@ -717,9 +656,6 @@
TEST_F(BuilderTest_Type, DepthTexture_Generate_2d) {
ast::type::DepthTextureType two_d(ast::type::TextureDimension::k2d);
- ast::Module mod;
- Builder b(&mod);
-
auto id_two_d = b.GenerateTypeIfNeeded(&two_d);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(1u, id_two_d);
@@ -733,9 +669,6 @@
ast::type::DepthTextureType two_d_array(
ast::type::TextureDimension::k2dArray);
- ast::Module mod;
- Builder b(&mod);
-
auto id_two_d_array = b.GenerateTypeIfNeeded(&two_d_array);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(1u, id_two_d_array);
@@ -748,9 +681,6 @@
TEST_F(BuilderTest_Type, DepthTexture_Generate_Cube) {
ast::type::DepthTextureType cube(ast::type::TextureDimension::kCube);
- ast::Module mod;
- Builder b(&mod);
-
auto id_cube = b.GenerateTypeIfNeeded(&cube);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(1u, id_cube);
@@ -764,9 +694,6 @@
ast::type::DepthTextureType cube_array(
ast::type::TextureDimension::kCubeArray);
- ast::Module mod;
- Builder b(&mod);
-
auto id_cube_array = b.GenerateTypeIfNeeded(&cube_array);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(1u, id_cube_array);
@@ -780,9 +707,6 @@
ast::type::I32Type i32;
ast::type::MultisampledTextureType ms(ast::type::TextureDimension::k2d, &i32);
- ast::Module mod;
- Builder b(&mod);
-
EXPECT_EQ(1u, b.GenerateTypeIfNeeded(&ms));
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(DumpInstructions(b.types()), R"(%2 = OpTypeInt 32 1
@@ -794,9 +718,6 @@
ast::type::U32Type u32;
ast::type::MultisampledTextureType ms(ast::type::TextureDimension::k2d, &u32);
- ast::Module mod;
- Builder b(&mod);
-
EXPECT_EQ(b.GenerateTypeIfNeeded(&ms), 1u);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(DumpInstructions(b.types()),
@@ -809,9 +730,6 @@
ast::type::F32Type f32;
ast::type::MultisampledTextureType ms(ast::type::TextureDimension::k2d, &f32);
- ast::Module mod;
- Builder b(&mod);
-
EXPECT_EQ(b.GenerateTypeIfNeeded(&ms), 1u);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(DumpInstructions(b.types()),
@@ -824,9 +742,6 @@
ast::type::I32Type i32;
ast::type::SampledTextureType s(ast::type::TextureDimension::k1d, &i32);
- ast::Module mod;
- Builder b(&mod);
-
EXPECT_EQ(b.GenerateTypeIfNeeded(&s), 1u);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(DumpInstructions(b.types()),
@@ -839,9 +754,6 @@
ast::type::U32Type u32;
ast::type::SampledTextureType s(ast::type::TextureDimension::k1d, &u32);
- ast::Module mod;
- Builder b(&mod);
-
EXPECT_EQ(b.GenerateTypeIfNeeded(&s), 1u);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(DumpInstructions(b.types()),
@@ -854,9 +766,6 @@
ast::type::F32Type f32;
ast::type::SampledTextureType s(ast::type::TextureDimension::k1d, &f32);
- ast::Module mod;
- Builder b(&mod);
-
EXPECT_EQ(b.GenerateTypeIfNeeded(&s), 1u);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(DumpInstructions(b.types()),
@@ -869,9 +778,6 @@
ast::type::F32Type f32;
ast::type::SampledTextureType s(ast::type::TextureDimension::k1dArray, &f32);
- ast::Module mod;
- Builder b(&mod);
-
EXPECT_EQ(b.GenerateTypeIfNeeded(&s), 1u);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(DumpInstructions(b.types()),
@@ -884,9 +790,6 @@
ast::type::F32Type f32;
ast::type::SampledTextureType s(ast::type::TextureDimension::k2d, &f32);
- ast::Module mod;
- Builder b(&mod);
-
EXPECT_EQ(b.GenerateTypeIfNeeded(&s), 1u);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(DumpInstructions(b.types()),
@@ -899,9 +802,6 @@
ast::type::F32Type f32;
ast::type::SampledTextureType s(ast::type::TextureDimension::k2dArray, &f32);
- ast::Module mod;
- Builder b(&mod);
-
EXPECT_EQ(b.GenerateTypeIfNeeded(&s), 1u);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(DumpInstructions(b.types()),
@@ -914,9 +814,6 @@
ast::type::F32Type f32;
ast::type::SampledTextureType s(ast::type::TextureDimension::k3d, &f32);
- ast::Module mod;
- Builder b(&mod);
-
EXPECT_EQ(b.GenerateTypeIfNeeded(&s), 1u);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(DumpInstructions(b.types()),
@@ -929,9 +826,6 @@
ast::type::F32Type f32;
ast::type::SampledTextureType s(ast::type::TextureDimension::kCube, &f32);
- ast::Module mod;
- Builder b(&mod);
-
EXPECT_EQ(b.GenerateTypeIfNeeded(&s), 1u);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(DumpInstructions(b.types()),
@@ -945,9 +839,6 @@
ast::type::SampledTextureType s(ast::type::TextureDimension::kCubeArray,
&f32);
- ast::Module mod;
- Builder b(&mod);
-
EXPECT_EQ(b.GenerateTypeIfNeeded(&s), 1u);
ASSERT_FALSE(b.has_error()) << b.error();
EXPECT_EQ(DumpInstructions(b.types()),
@@ -957,11 +848,6 @@
}
TEST_F(BuilderTest_Type, StorageTexture_GenerateReadonly_1d_R16Float) {
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
- Builder b(&mod);
-
ast::type::StorageTextureType s(ast::type::TextureDimension::k1d,
ast::AccessControl::kReadOnly,
ast::type::ImageFormat::kR16Float);
@@ -975,11 +861,6 @@
}
TEST_F(BuilderTest_Type, StorageTexture_GenerateReadonly_1d_R8SNorm) {
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
- Builder b(&mod);
-
ast::type::StorageTextureType s(ast::type::TextureDimension::k1d,
ast::AccessControl::kReadOnly,
ast::type::ImageFormat::kR8Snorm);
@@ -993,11 +874,6 @@
}
TEST_F(BuilderTest_Type, StorageTexture_GenerateReadonly_1d_R8UNorm) {
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
- Builder b(&mod);
-
ast::type::StorageTextureType s(ast::type::TextureDimension::k1d,
ast::AccessControl::kReadOnly,
ast::type::ImageFormat::kR8Unorm);
@@ -1011,11 +887,6 @@
}
TEST_F(BuilderTest_Type, StorageTexture_GenerateReadonly_1d_array) {
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
- Builder b(&mod);
-
ast::type::StorageTextureType s(ast::type::TextureDimension::k1dArray,
ast::AccessControl::kReadOnly,
ast::type::ImageFormat::kR16Float);
@@ -1029,11 +900,6 @@
}
TEST_F(BuilderTest_Type, StorageTexture_GenerateReadonly_2d) {
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
- Builder b(&mod);
-
ast::type::StorageTextureType s(ast::type::TextureDimension::k2d,
ast::AccessControl::kReadOnly,
ast::type::ImageFormat::kR16Float);
@@ -1047,11 +913,6 @@
}
TEST_F(BuilderTest_Type, StorageTexture_GenerateReadonly_2dArray) {
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
- Builder b(&mod);
-
ast::type::StorageTextureType s(ast::type::TextureDimension::k2dArray,
ast::AccessControl::kReadOnly,
ast::type::ImageFormat::kR16Float);
@@ -1065,11 +926,6 @@
}
TEST_F(BuilderTest_Type, StorageTexture_GenerateReadonly_3d) {
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
- Builder b(&mod);
-
ast::type::StorageTextureType s(ast::type::TextureDimension::k3d,
ast::AccessControl::kReadOnly,
ast::type::ImageFormat::kR16Float);
@@ -1083,11 +939,6 @@
}
TEST_F(BuilderTest_Type, StorageTexture_GenerateWriteonly_1d) {
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
- Builder b(&mod);
-
ast::type::StorageTextureType s(ast::type::TextureDimension::k1d,
ast::AccessControl::kWriteOnly,
ast::type::ImageFormat::kR16Float);
@@ -1101,11 +952,6 @@
}
TEST_F(BuilderTest_Type, StorageTexture_GenerateWriteonly_1dArray) {
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
- Builder b(&mod);
-
ast::type::StorageTextureType s(ast::type::TextureDimension::k1dArray,
ast::AccessControl::kWriteOnly,
ast::type::ImageFormat::kR16Float);
@@ -1119,11 +965,6 @@
}
TEST_F(BuilderTest_Type, StorageTexture_GenerateWriteonly_2d) {
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
- Builder b(&mod);
-
ast::type::StorageTextureType s(ast::type::TextureDimension::k2d,
ast::AccessControl::kWriteOnly,
ast::type::ImageFormat::kR16Float);
@@ -1137,11 +978,6 @@
}
TEST_F(BuilderTest_Type, StorageTexture_GenerateWriteonly_2dArray) {
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
- Builder b(&mod);
-
ast::type::StorageTextureType s(ast::type::TextureDimension::k2dArray,
ast::AccessControl::kWriteOnly,
ast::type::ImageFormat::kR16Float);
@@ -1155,11 +991,6 @@
}
TEST_F(BuilderTest_Type, StorageTexture_GenerateWriteonly_3d) {
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
- Builder b(&mod);
-
ast::type::StorageTextureType s(ast::type::TextureDimension::k3d,
ast::AccessControl::kWriteOnly,
ast::type::ImageFormat::kR16Float);
@@ -1173,9 +1004,6 @@
}
TEST_F(BuilderTest_Type, Sampler) {
- ast::Module mod;
- Builder b(&mod);
-
ast::type::SamplerType sampler(ast::type::SamplerKind::kSampler);
EXPECT_EQ(b.GenerateTypeIfNeeded(&sampler), 1u);
ASSERT_FALSE(b.has_error()) << b.error();
@@ -1183,9 +1011,6 @@
}
TEST_F(BuilderTest_Type, ComparisonSampler) {
- ast::Module mod;
- Builder b(&mod);
-
ast::type::SamplerType sampler(ast::type::SamplerKind::kComparisonSampler);
EXPECT_EQ(b.GenerateTypeIfNeeded(&sampler), 1u);
ASSERT_FALSE(b.has_error()) << b.error();
@@ -1193,9 +1018,6 @@
}
TEST_F(BuilderTest_Type, Dedup_Sampler_And_ComparisonSampler) {
- ast::Module mod;
- Builder b(&mod);
-
ast::type::SamplerType comp_sampler(
ast::type::SamplerKind::kComparisonSampler);
EXPECT_EQ(b.GenerateTypeIfNeeded(&comp_sampler), 1u);
diff --git a/src/writer/spirv/builder_unary_op_expression_test.cc b/src/writer/spirv/builder_unary_op_expression_test.cc
index db07ff6..29f597c 100644
--- a/src/writer/spirv/builder_unary_op_expression_test.cc
+++ b/src/writer/spirv/builder_unary_op_expression_test.cc
@@ -29,13 +29,14 @@
#include "src/type_determiner.h"
#include "src/writer/spirv/builder.h"
#include "src/writer/spirv/spv_dump.h"
+#include "src/writer/spirv/test_helper.h"
namespace tint {
namespace writer {
namespace spirv {
namespace {
-using BuilderTest = testing::Test;
+using BuilderTest = TestHelper;
TEST_F(BuilderTest, UnaryOp_Negation_Integer) {
ast::type::I32Type i32;
@@ -45,13 +46,8 @@
std::make_unique<ast::ScalarConstructorExpression>(
std::make_unique<ast::SintLiteral>(&i32, 1)));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateUnaryOpExpression(&expr), 1u) << b.error();
EXPECT_EQ(DumpInstructions(b.types()), R"(%2 = OpTypeInt 32 1
@@ -70,13 +66,8 @@
std::make_unique<ast::ScalarConstructorExpression>(
std::make_unique<ast::FloatLiteral>(&f32, 1)));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateUnaryOpExpression(&expr), 1u) << b.error();
EXPECT_EQ(DumpInstructions(b.types()), R"(%2 = OpTypeFloat 32
@@ -95,13 +86,8 @@
std::make_unique<ast::ScalarConstructorExpression>(
std::make_unique<ast::BoolLiteral>(&bool_type, false)));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_EQ(b.GenerateUnaryOpExpression(&expr), 1u) << b.error();
EXPECT_EQ(DumpInstructions(b.types()), R"(%2 = OpTypeBool
@@ -122,13 +108,9 @@
ast::UnaryOp::kNegation,
std::make_unique<ast::IdentifierExpression>("param"));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
td.RegisterVariableForTesting(&var);
EXPECT_TRUE(td.DetermineResultType(&expr)) << td.error();
- Builder b(&mod);
b.push_function(Function{});
EXPECT_TRUE(b.GenerateFunctionVariable(&var)) << b.error();
EXPECT_EQ(b.GenerateUnaryOpExpression(&expr), 6u) << b.error();
diff --git a/src/writer/spirv/generator.cc b/src/writer/spirv/generator.cc
index c28cb13..495ddd0 100644
--- a/src/writer/spirv/generator.cc
+++ b/src/writer/spirv/generator.cc
@@ -22,13 +22,18 @@
Generator::Generator(ast::Module module)
: writer::Writer(std::move(module)),
- builder_(std::make_unique<Builder>(&module_)),
+ builder_(std::make_unique<Builder>(ctx_, &module_)),
+ writer_(std::make_unique<BinaryWriter>()) {}
+
+Generator::Generator(Context* ctx, ast::Module module)
+ : writer::Writer(ctx, std::move(module)),
+ builder_(std::make_unique<Builder>(ctx, &module_)),
writer_(std::make_unique<BinaryWriter>()) {}
Generator::~Generator() = default;
void Generator::Reset() {
- builder_ = std::make_unique<Builder>(&module_);
+ builder_ = std::make_unique<Builder>(ctx_, &module_);
writer_ = std::make_unique<BinaryWriter>();
}
diff --git a/src/writer/spirv/generator.h b/src/writer/spirv/generator.h
index f5968b2..9687969 100644
--- a/src/writer/spirv/generator.h
+++ b/src/writer/spirv/generator.h
@@ -32,8 +32,13 @@
class Generator : public writer::Writer {
public:
/// Constructor
+ /// DEPRECATED
/// @param module the module to convert
explicit Generator(ast::Module module);
+ /// Constructor
+ /// @param ctx the context, must be non-null
+ /// @param module the module to convert
+ Generator(Context* ctx, ast::Module module);
~Generator() override;
/// Resets the generator
diff --git a/src/writer/spirv/test_helper.h b/src/writer/spirv/test_helper.h
new file mode 100644
index 0000000..a7ff015
--- /dev/null
+++ b/src/writer/spirv/test_helper.h
@@ -0,0 +1,53 @@
+// Copyright 2020 The Tint Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef SRC_WRITER_SPIRV_TEST_HELPER_H_
+#define SRC_WRITER_SPIRV_TEST_HELPER_H_
+
+#include "gtest/gtest.h"
+#include "src/ast/module.h"
+#include "src/context.h"
+#include "src/type_determiner.h"
+#include "src/writer/wgsl/generator_impl.h"
+
+namespace tint {
+namespace writer {
+namespace spirv {
+
+/// Helper class for testing
+template <typename T>
+class TestHelperBase : public T {
+ public:
+ TestHelperBase() : td(&ctx, &mod), b(&ctx, &mod) {}
+ ~TestHelperBase() = default;
+
+ /// The context
+ Context ctx;
+ /// The module
+ ast::Module mod;
+ /// The type determiner
+ TypeDeterminer td;
+ /// The generator
+ Builder b;
+};
+using TestHelper = TestHelperBase<testing::Test>;
+
+template <typename T>
+using TestParamHelper = TestHelperBase<testing::TestWithParam<T>>;
+
+} // namespace spirv
+} // namespace writer
+} // namespace tint
+
+#endif // SRC_WRITER_SPIRV_TEST_HELPER_H_
diff --git a/src/writer/text.cc b/src/writer/text.cc
index 319f32e..52929cc 100644
--- a/src/writer/text.cc
+++ b/src/writer/text.cc
@@ -21,6 +21,8 @@
Text::Text(ast::Module module) : Writer(std::move(module)) {}
+Text::Text(Context* ctx, ast::Module module) : Writer(ctx, std::move(module)) {}
+
Text::~Text() = default;
} // namespace writer
diff --git a/src/writer/text.h b/src/writer/text.h
index 7e4fffc..5f7bb1c 100644
--- a/src/writer/text.h
+++ b/src/writer/text.h
@@ -26,8 +26,13 @@
class Text : public Writer {
public:
/// Constructor
+ /// DEPRECATED
/// @param module the module to convert
explicit Text(ast::Module module);
+ /// Constructor
+ /// @param ctx the context object, must be non-null
+ /// @param module the module to convert
+ Text(Context* ctx, ast::Module module);
~Text() override;
/// @returns the result data
diff --git a/src/writer/text_generator.cc b/src/writer/text_generator.cc
index 2c94fdb..52f60e8 100644
--- a/src/writer/text_generator.cc
+++ b/src/writer/text_generator.cc
@@ -14,12 +14,16 @@
#include "src/writer/text_generator.h"
+#include <assert.h>
+
#include <utility>
namespace tint {
namespace writer {
-TextGenerator::TextGenerator() = default;
+TextGenerator::TextGenerator(Context* ctx) : ctx_(ctx) {
+ assert(ctx_);
+}
TextGenerator::~TextGenerator() = default;
diff --git a/src/writer/text_generator.h b/src/writer/text_generator.h
index 46da1bc..d38d3ed 100644
--- a/src/writer/text_generator.h
+++ b/src/writer/text_generator.h
@@ -18,6 +18,8 @@
#include <sstream>
#include <string>
+#include "src/context.h"
+
namespace tint {
namespace writer {
@@ -25,7 +27,8 @@
class TextGenerator {
public:
/// Constructor
- TextGenerator();
+ /// @param ctx the context object, must be non-null
+ explicit TextGenerator(Context* ctx);
~TextGenerator();
/// Increment the emitter indent level
@@ -49,6 +52,8 @@
std::string error() const { return error_; }
protected:
+ /// The context
+ Context* ctx_ = nullptr;
/// The text output stream
std::ostringstream out_;
/// Error generated by the generator
diff --git a/src/writer/wgsl/generator.cc b/src/writer/wgsl/generator.cc
index 3f01dc9..93816ed 100644
--- a/src/writer/wgsl/generator.cc
+++ b/src/writer/wgsl/generator.cc
@@ -21,13 +21,17 @@
namespace wgsl {
Generator::Generator(ast::Module module)
- : Text(std::move(module)), impl_(std::make_unique<GeneratorImpl>()) {}
+ : Text(std::move(module)), impl_(std::make_unique<GeneratorImpl>(ctx_)) {}
+
+Generator::Generator(Context* ctx, ast::Module module)
+ : Text(ctx, std::move(module)),
+ impl_(std::make_unique<GeneratorImpl>(ctx_)) {}
Generator::~Generator() = default;
void Generator::Reset() {
set_error("");
- impl_ = std::make_unique<GeneratorImpl>();
+ impl_ = std::make_unique<GeneratorImpl>(ctx_);
}
bool Generator::Generate() {
diff --git a/src/writer/wgsl/generator.h b/src/writer/wgsl/generator.h
index 2d3a234..685f7cf 100644
--- a/src/writer/wgsl/generator.h
+++ b/src/writer/wgsl/generator.h
@@ -29,8 +29,13 @@
class Generator : public Text {
public:
/// Constructor
+ /// DEPRECATED
/// @param module the module to convert
explicit Generator(ast::Module module);
+ /// Constructor
+ /// @param ctx the context, must be non-null
+ /// @param module the module to convert
+ Generator(Context* ctx, ast::Module module);
~Generator() override;
/// Resets the generator
diff --git a/src/writer/wgsl/generator_impl.cc b/src/writer/wgsl/generator_impl.cc
index 8266900..ddf0717 100644
--- a/src/writer/wgsl/generator_impl.cc
+++ b/src/writer/wgsl/generator_impl.cc
@@ -72,7 +72,7 @@
namespace writer {
namespace wgsl {
-GeneratorImpl::GeneratorImpl() = default;
+GeneratorImpl::GeneratorImpl(Context* ctx) : TextGenerator(ctx) {}
GeneratorImpl::~GeneratorImpl() = default;
diff --git a/src/writer/wgsl/generator_impl.h b/src/writer/wgsl/generator_impl.h
index 081ac4d..bd2451b 100644
--- a/src/writer/wgsl/generator_impl.h
+++ b/src/writer/wgsl/generator_impl.h
@@ -38,7 +38,8 @@
class GeneratorImpl : public TextGenerator {
public:
/// Constructor
- GeneratorImpl();
+ /// @param ctx the context, must be non-null
+ explicit GeneratorImpl(Context* ctx);
~GeneratorImpl();
/// Generates the result data
diff --git a/src/writer/wgsl/generator_impl_alias_type_test.cc b/src/writer/wgsl/generator_impl_alias_type_test.cc
index 0c5e507..346783b 100644
--- a/src/writer/wgsl/generator_impl_alias_type_test.cc
+++ b/src/writer/wgsl/generator_impl_alias_type_test.cc
@@ -21,21 +21,21 @@
#include "src/ast/type/i32_type.h"
#include "src/ast/type/struct_type.h"
#include "src/writer/wgsl/generator_impl.h"
+#include "src/writer/wgsl/test_helper.h"
namespace tint {
namespace writer {
namespace wgsl {
namespace {
-using WgslGeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = TestHelper;
TEST_F(WgslGeneratorImplTest, EmitAliasType_F32) {
ast::type::F32Type f32;
ast::type::AliasType alias("a", &f32);
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitConstructedType(&alias)) << g.error();
- EXPECT_EQ(g.result(), R"(type a = f32;
+ ASSERT_TRUE(gen.EmitConstructedType(&alias)) << gen.error();
+ EXPECT_EQ(gen.result(), R"(type a = f32;
)");
}
@@ -59,10 +59,9 @@
ast::type::StructType s("A", std::move(str));
ast::type::AliasType alias("B", &s);
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitConstructedType(&s)) << g.error();
- ASSERT_TRUE(g.EmitConstructedType(&alias)) << g.error();
- EXPECT_EQ(g.result(), R"(struct A {
+ ASSERT_TRUE(gen.EmitConstructedType(&s)) << gen.error();
+ ASSERT_TRUE(gen.EmitConstructedType(&alias)) << gen.error();
+ EXPECT_EQ(gen.result(), R"(struct A {
a : f32;
[[offset(4)]]
b : i32;
@@ -91,9 +90,8 @@
ast::type::StructType s("A", std::move(str));
ast::type::AliasType alias("B", &s);
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitConstructedType(&alias)) << g.error();
- EXPECT_EQ(g.result(), R"(type B = A;
+ ASSERT_TRUE(gen.EmitConstructedType(&alias)) << gen.error();
+ EXPECT_EQ(gen.result(), R"(type B = A;
)");
}
diff --git a/src/writer/wgsl/generator_impl_array_accessor_test.cc b/src/writer/wgsl/generator_impl_array_accessor_test.cc
index 452f582..ca34234 100644
--- a/src/writer/wgsl/generator_impl_array_accessor_test.cc
+++ b/src/writer/wgsl/generator_impl_array_accessor_test.cc
@@ -21,13 +21,14 @@
#include "src/ast/sint_literal.h"
#include "src/ast/type/i32_type.h"
#include "src/writer/wgsl/generator_impl.h"
+#include "src/writer/wgsl/test_helper.h"
namespace tint {
namespace writer {
namespace wgsl {
namespace {
-using WgslGeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = TestHelper;
TEST_F(WgslGeneratorImplTest, EmitExpression_ArrayAccessor) {
ast::type::I32Type i32;
@@ -37,9 +38,8 @@
ast::ArrayAccessorExpression expr(std::move(ary), std::move(idx));
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitExpression(&expr)) << g.error();
- EXPECT_EQ(g.result(), "ary[5]");
+ ASSERT_TRUE(gen.EmitExpression(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), "ary[5]");
}
TEST_F(WgslGeneratorImplTest, EmitArrayAccessor) {
@@ -48,9 +48,8 @@
ast::ArrayAccessorExpression expr(std::move(ary), std::move(idx));
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitArrayAccessor(&expr)) << g.error();
- EXPECT_EQ(g.result(), "ary[idx]");
+ ASSERT_TRUE(gen.EmitArrayAccessor(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), "ary[idx]");
}
} // namespace
diff --git a/src/writer/wgsl/generator_impl_assign_test.cc b/src/writer/wgsl/generator_impl_assign_test.cc
index c3b7eee..ae2e6e8 100644
--- a/src/writer/wgsl/generator_impl_assign_test.cc
+++ b/src/writer/wgsl/generator_impl_assign_test.cc
@@ -19,24 +19,24 @@
#include "src/ast/assignment_statement.h"
#include "src/ast/identifier_expression.h"
#include "src/writer/wgsl/generator_impl.h"
+#include "src/writer/wgsl/test_helper.h"
namespace tint {
namespace writer {
namespace wgsl {
namespace {
-using WgslGeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = TestHelper;
TEST_F(WgslGeneratorImplTest, Emit_Assign) {
auto lhs = std::make_unique<ast::IdentifierExpression>("lhs");
auto rhs = std::make_unique<ast::IdentifierExpression>("rhs");
ast::AssignmentStatement assign(std::move(lhs), std::move(rhs));
- GeneratorImpl g;
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&assign)) << g.error();
- EXPECT_EQ(g.result(), " lhs = rhs;\n");
+ ASSERT_TRUE(gen.EmitStatement(&assign)) << gen.error();
+ EXPECT_EQ(gen.result(), " lhs = rhs;\n");
}
} // namespace
diff --git a/src/writer/wgsl/generator_impl_binary_test.cc b/src/writer/wgsl/generator_impl_binary_test.cc
index 2858f77..963e1c1 100644
--- a/src/writer/wgsl/generator_impl_binary_test.cc
+++ b/src/writer/wgsl/generator_impl_binary_test.cc
@@ -18,6 +18,7 @@
#include "src/ast/binary_expression.h"
#include "src/ast/identifier_expression.h"
#include "src/writer/wgsl/generator_impl.h"
+#include "src/writer/wgsl/test_helper.h"
namespace tint {
namespace writer {
@@ -32,7 +33,7 @@
out << data.op;
return out;
}
-using WgslBinaryTest = testing::TestWithParam<BinaryData>;
+using WgslBinaryTest = TestParamHelper<BinaryData>;
TEST_P(WgslBinaryTest, Emit) {
auto params = GetParam();
@@ -41,9 +42,8 @@
ast::BinaryExpression expr(params.op, std::move(left), std::move(right));
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitExpression(&expr)) << g.error();
- EXPECT_EQ(g.result(), params.result);
+ ASSERT_TRUE(gen.EmitExpression(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), params.result);
}
INSTANTIATE_TEST_SUITE_P(
WgslGeneratorImplTest,
diff --git a/src/writer/wgsl/generator_impl_bitcast_test.cc b/src/writer/wgsl/generator_impl_bitcast_test.cc
index ac2b940..ee0e204 100644
--- a/src/writer/wgsl/generator_impl_bitcast_test.cc
+++ b/src/writer/wgsl/generator_impl_bitcast_test.cc
@@ -19,22 +19,22 @@
#include "src/ast/identifier_expression.h"
#include "src/ast/type/f32_type.h"
#include "src/writer/wgsl/generator_impl.h"
+#include "src/writer/wgsl/test_helper.h"
namespace tint {
namespace writer {
namespace wgsl {
namespace {
-using WgslGeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = TestHelper;
TEST_F(WgslGeneratorImplTest, EmitExpression_Bitcast) {
ast::type::F32Type f32;
auto id = std::make_unique<ast::IdentifierExpression>("id");
ast::BitcastExpression bitcast(&f32, std::move(id));
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitExpression(&bitcast)) << g.error();
- EXPECT_EQ(g.result(), "bitcast<f32>(id)");
+ ASSERT_TRUE(gen.EmitExpression(&bitcast)) << gen.error();
+ EXPECT_EQ(gen.result(), "bitcast<f32>(id)");
}
} // namespace
diff --git a/src/writer/wgsl/generator_impl_block_test.cc b/src/writer/wgsl/generator_impl_block_test.cc
index 43c0286..80c88bb 100644
--- a/src/writer/wgsl/generator_impl_block_test.cc
+++ b/src/writer/wgsl/generator_impl_block_test.cc
@@ -18,23 +18,23 @@
#include "src/ast/block_statement.h"
#include "src/ast/discard_statement.h"
#include "src/writer/wgsl/generator_impl.h"
+#include "src/writer/wgsl/test_helper.h"
namespace tint {
namespace writer {
namespace wgsl {
namespace {
-using WgslGeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = TestHelper;
TEST_F(WgslGeneratorImplTest, Emit_Block) {
ast::BlockStatement b;
b.append(std::make_unique<ast::DiscardStatement>());
- GeneratorImpl g;
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&b)) << g.error();
- EXPECT_EQ(g.result(), R"( {
+ ASSERT_TRUE(gen.EmitStatement(&b)) << gen.error();
+ EXPECT_EQ(gen.result(), R"( {
discard;
}
)");
@@ -44,11 +44,10 @@
ast::BlockStatement b;
b.append(std::make_unique<ast::DiscardStatement>());
- GeneratorImpl g;
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitBlock(&b)) << g.error();
- EXPECT_EQ(g.result(), R"({
+ ASSERT_TRUE(gen.EmitBlock(&b)) << gen.error();
+ EXPECT_EQ(gen.result(), R"({
discard;
})");
}
diff --git a/src/writer/wgsl/generator_impl_break_test.cc b/src/writer/wgsl/generator_impl_break_test.cc
index e8d3612..cb909f3 100644
--- a/src/writer/wgsl/generator_impl_break_test.cc
+++ b/src/writer/wgsl/generator_impl_break_test.cc
@@ -18,22 +18,22 @@
#include "gtest/gtest.h"
#include "src/ast/break_statement.h"
#include "src/writer/wgsl/generator_impl.h"
+#include "src/writer/wgsl/test_helper.h"
namespace tint {
namespace writer {
namespace wgsl {
namespace {
-using WgslGeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = TestHelper;
TEST_F(WgslGeneratorImplTest, Emit_Break) {
ast::BreakStatement b;
- GeneratorImpl g;
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&b)) << g.error();
- EXPECT_EQ(g.result(), " break;\n");
+ ASSERT_TRUE(gen.EmitStatement(&b)) << gen.error();
+ EXPECT_EQ(gen.result(), " break;\n");
}
} // namespace
diff --git a/src/writer/wgsl/generator_impl_call_test.cc b/src/writer/wgsl/generator_impl_call_test.cc
index 3ed0b3d..b04c1e0 100644
--- a/src/writer/wgsl/generator_impl_call_test.cc
+++ b/src/writer/wgsl/generator_impl_call_test.cc
@@ -19,21 +19,21 @@
#include "src/ast/call_statement.h"
#include "src/ast/identifier_expression.h"
#include "src/writer/wgsl/generator_impl.h"
+#include "src/writer/wgsl/test_helper.h"
namespace tint {
namespace writer {
namespace wgsl {
namespace {
-using WgslGeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = TestHelper;
TEST_F(WgslGeneratorImplTest, EmitExpression_Call_WithoutParams) {
auto id = std::make_unique<ast::IdentifierExpression>("my_func");
ast::CallExpression call(std::move(id), {});
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitExpression(&call)) << g.error();
- EXPECT_EQ(g.result(), "my_func()");
+ ASSERT_TRUE(gen.EmitExpression(&call)) << gen.error();
+ EXPECT_EQ(gen.result(), "my_func()");
}
TEST_F(WgslGeneratorImplTest, EmitExpression_Call_WithParams) {
@@ -43,9 +43,8 @@
params.push_back(std::make_unique<ast::IdentifierExpression>("param2"));
ast::CallExpression call(std::move(id), std::move(params));
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitExpression(&call)) << g.error();
- EXPECT_EQ(g.result(), "my_func(param1, param2)");
+ ASSERT_TRUE(gen.EmitExpression(&call)) << gen.error();
+ EXPECT_EQ(gen.result(), "my_func(param1, param2)");
}
TEST_F(WgslGeneratorImplTest, EmitStatement_Call) {
@@ -57,10 +56,9 @@
ast::CallStatement call(
std::make_unique<ast::CallExpression>(std::move(id), std::move(params)));
- GeneratorImpl g;
- g.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&call)) << g.error();
- EXPECT_EQ(g.result(), " my_func(param1, param2);\n");
+ gen.increment_indent();
+ ASSERT_TRUE(gen.EmitStatement(&call)) << gen.error();
+ EXPECT_EQ(gen.result(), " my_func(param1, param2);\n");
}
} // namespace
diff --git a/src/writer/wgsl/generator_impl_case_test.cc b/src/writer/wgsl/generator_impl_case_test.cc
index d389403..0f6dbb6 100644
--- a/src/writer/wgsl/generator_impl_case_test.cc
+++ b/src/writer/wgsl/generator_impl_case_test.cc
@@ -21,13 +21,14 @@
#include "src/ast/sint_literal.h"
#include "src/ast/type/i32_type.h"
#include "src/writer/wgsl/generator_impl.h"
+#include "src/writer/wgsl/test_helper.h"
namespace tint {
namespace writer {
namespace wgsl {
namespace {
-using WgslGeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = TestHelper;
TEST_F(WgslGeneratorImplTest, Emit_Case) {
ast::type::I32Type i32;
@@ -39,11 +40,10 @@
lit.push_back(std::make_unique<ast::SintLiteral>(&i32, 5));
ast::CaseStatement c(std::move(lit), std::move(body));
- GeneratorImpl g;
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitCase(&c)) << g.error();
- EXPECT_EQ(g.result(), R"( case 5: {
+ ASSERT_TRUE(gen.EmitCase(&c)) << gen.error();
+ EXPECT_EQ(gen.result(), R"( case 5: {
break;
}
)");
@@ -60,11 +60,10 @@
lit.push_back(std::make_unique<ast::SintLiteral>(&i32, 6));
ast::CaseStatement c(std::move(lit), std::move(body));
- GeneratorImpl g;
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitCase(&c)) << g.error();
- EXPECT_EQ(g.result(), R"( case 5, 6: {
+ ASSERT_TRUE(gen.EmitCase(&c)) << gen.error();
+ EXPECT_EQ(gen.result(), R"( case 5, 6: {
break;
}
)");
@@ -77,11 +76,10 @@
body->append(std::make_unique<ast::BreakStatement>());
c.set_body(std::move(body));
- GeneratorImpl g;
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitCase(&c)) << g.error();
- EXPECT_EQ(g.result(), R"( default: {
+ ASSERT_TRUE(gen.EmitCase(&c)) << gen.error();
+ EXPECT_EQ(gen.result(), R"( default: {
break;
}
)");
diff --git a/src/writer/wgsl/generator_impl_cast_test.cc b/src/writer/wgsl/generator_impl_cast_test.cc
index ee81a66..b69043c 100644
--- a/src/writer/wgsl/generator_impl_cast_test.cc
+++ b/src/writer/wgsl/generator_impl_cast_test.cc
@@ -19,13 +19,14 @@
#include "src/ast/type/f32_type.h"
#include "src/ast/type_constructor_expression.h"
#include "src/writer/wgsl/generator_impl.h"
+#include "src/writer/wgsl/test_helper.h"
namespace tint {
namespace writer {
namespace wgsl {
namespace {
-using WgslGeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = TestHelper;
TEST_F(WgslGeneratorImplTest, EmitExpression_Cast) {
ast::type::F32Type f32;
@@ -35,9 +36,8 @@
ast::TypeConstructorExpression cast(&f32, std::move(params));
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitExpression(&cast)) << g.error();
- EXPECT_EQ(g.result(), "f32(id)");
+ ASSERT_TRUE(gen.EmitExpression(&cast)) << gen.error();
+ EXPECT_EQ(gen.result(), "f32(id)");
}
} // namespace
diff --git a/src/writer/wgsl/generator_impl_constructor_test.cc b/src/writer/wgsl/generator_impl_constructor_test.cc
index ef21cac..b7620ce 100644
--- a/src/writer/wgsl/generator_impl_constructor_test.cc
+++ b/src/writer/wgsl/generator_impl_constructor_test.cc
@@ -26,22 +26,22 @@
#include "src/ast/type/vector_type.h"
#include "src/ast/uint_literal.h"
#include "src/writer/wgsl/generator_impl.h"
+#include "src/writer/wgsl/test_helper.h"
namespace tint {
namespace writer {
namespace wgsl {
namespace {
-using WgslGeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = TestHelper;
TEST_F(WgslGeneratorImplTest, EmitConstructor_Bool) {
ast::type::BoolType bool_type;
auto lit = std::make_unique<ast::BoolLiteral>(&bool_type, false);
ast::ScalarConstructorExpression expr(std::move(lit));
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitConstructor(&expr)) << g.error();
- EXPECT_EQ(g.result(), "false");
+ ASSERT_TRUE(gen.EmitConstructor(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), "false");
}
TEST_F(WgslGeneratorImplTest, EmitConstructor_Int) {
@@ -49,9 +49,8 @@
auto lit = std::make_unique<ast::SintLiteral>(&i32, -12345);
ast::ScalarConstructorExpression expr(std::move(lit));
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitConstructor(&expr)) << g.error();
- EXPECT_EQ(g.result(), "-12345");
+ ASSERT_TRUE(gen.EmitConstructor(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), "-12345");
}
TEST_F(WgslGeneratorImplTest, EmitConstructor_UInt) {
@@ -59,9 +58,8 @@
auto lit = std::make_unique<ast::UintLiteral>(&u32, 56779);
ast::ScalarConstructorExpression expr(std::move(lit));
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitConstructor(&expr)) << g.error();
- EXPECT_EQ(g.result(), "56779u");
+ ASSERT_TRUE(gen.EmitConstructor(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), "56779u");
}
TEST_F(WgslGeneratorImplTest, EmitConstructor_Float) {
@@ -71,9 +69,8 @@
&f32, static_cast<float>((1 << 30) - 4));
ast::ScalarConstructorExpression expr(std::move(lit));
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitConstructor(&expr)) << g.error();
- EXPECT_EQ(g.result(), "1.07374182e+09");
+ ASSERT_TRUE(gen.EmitConstructor(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), "1.07374182e+09");
}
TEST_F(WgslGeneratorImplTest, EmitConstructor_Type_Float) {
@@ -86,9 +83,8 @@
ast::TypeConstructorExpression expr(&f32, std::move(values));
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitConstructor(&expr)) << g.error();
- EXPECT_EQ(g.result(), "f32(-1.20000004e-05)");
+ ASSERT_TRUE(gen.EmitConstructor(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), "f32(-1.20000004e-05)");
}
TEST_F(WgslGeneratorImplTest, EmitConstructor_Type_Bool) {
@@ -101,9 +97,8 @@
ast::TypeConstructorExpression expr(&b, std::move(values));
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitConstructor(&expr)) << g.error();
- EXPECT_EQ(g.result(), "bool(true)");
+ ASSERT_TRUE(gen.EmitConstructor(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), "bool(true)");
}
TEST_F(WgslGeneratorImplTest, EmitConstructor_Type_Int) {
@@ -116,9 +111,8 @@
ast::TypeConstructorExpression expr(&i32, std::move(values));
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitConstructor(&expr)) << g.error();
- EXPECT_EQ(g.result(), "i32(-12345)");
+ ASSERT_TRUE(gen.EmitConstructor(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), "i32(-12345)");
}
TEST_F(WgslGeneratorImplTest, EmitConstructor_Type_Uint) {
@@ -131,9 +125,8 @@
ast::TypeConstructorExpression expr(&u32, std::move(values));
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitConstructor(&expr)) << g.error();
- EXPECT_EQ(g.result(), "u32(12345u)");
+ ASSERT_TRUE(gen.EmitConstructor(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), "u32(12345u)");
}
TEST_F(WgslGeneratorImplTest, EmitConstructor_Type_Vec) {
@@ -153,9 +146,8 @@
ast::TypeConstructorExpression expr(&vec, std::move(values));
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitConstructor(&expr)) << g.error();
- EXPECT_EQ(g.result(), "vec3<f32>(1.00000000, 2.00000000, 3.00000000)");
+ ASSERT_TRUE(gen.EmitConstructor(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), "vec3<f32>(1.00000000, 2.00000000, 3.00000000)");
}
TEST_F(WgslGeneratorImplTest, EmitConstructor_Type_Mat) {
@@ -184,9 +176,8 @@
ast::TypeConstructorExpression expr(&mat, std::move(mat_values));
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitConstructor(&expr)) << g.error();
- EXPECT_EQ(g.result(),
+ ASSERT_TRUE(gen.EmitConstructor(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(),
std::string("mat2x3<f32>(vec2<f32>(1.00000000, 2.00000000), ") +
"vec2<f32>(3.00000000, 4.00000000), " +
"vec2<f32>(5.00000000, 6.00000000))");
@@ -221,12 +212,12 @@
ast::TypeConstructorExpression expr(&ary, std::move(ary_values));
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitConstructor(&expr)) << g.error();
- EXPECT_EQ(g.result(), std::string("array<vec3<f32>, 3>(") +
- "vec3<f32>(1.00000000, 2.00000000, 3.00000000), " +
- "vec3<f32>(4.00000000, 5.00000000, 6.00000000), " +
- "vec3<f32>(7.00000000, 8.00000000, 9.00000000))");
+ ASSERT_TRUE(gen.EmitConstructor(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(),
+ std::string("array<vec3<f32>, 3>(") +
+ "vec3<f32>(1.00000000, 2.00000000, 3.00000000), " +
+ "vec3<f32>(4.00000000, 5.00000000, 6.00000000), " +
+ "vec3<f32>(7.00000000, 8.00000000, 9.00000000))");
}
} // namespace
diff --git a/src/writer/wgsl/generator_impl_continue_test.cc b/src/writer/wgsl/generator_impl_continue_test.cc
index 6e8bde2..48d033e 100644
--- a/src/writer/wgsl/generator_impl_continue_test.cc
+++ b/src/writer/wgsl/generator_impl_continue_test.cc
@@ -18,22 +18,22 @@
#include "gtest/gtest.h"
#include "src/ast/continue_statement.h"
#include "src/writer/wgsl/generator_impl.h"
+#include "src/writer/wgsl/test_helper.h"
namespace tint {
namespace writer {
namespace wgsl {
namespace {
-using WgslGeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = TestHelper;
TEST_F(WgslGeneratorImplTest, Emit_Continue) {
ast::ContinueStatement c;
- GeneratorImpl g;
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&c)) << g.error();
- EXPECT_EQ(g.result(), " continue;\n");
+ ASSERT_TRUE(gen.EmitStatement(&c)) << gen.error();
+ EXPECT_EQ(gen.result(), " continue;\n");
}
} // namespace
diff --git a/src/writer/wgsl/generator_impl_discard_test.cc b/src/writer/wgsl/generator_impl_discard_test.cc
index 9e87437..092d197 100644
--- a/src/writer/wgsl/generator_impl_discard_test.cc
+++ b/src/writer/wgsl/generator_impl_discard_test.cc
@@ -15,22 +15,22 @@
#include "gtest/gtest.h"
#include "src/ast/discard_statement.h"
#include "src/writer/wgsl/generator_impl.h"
+#include "src/writer/wgsl/test_helper.h"
namespace tint {
namespace writer {
namespace wgsl {
namespace {
-using WgslGeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = TestHelper;
TEST_F(WgslGeneratorImplTest, Emit_Discard) {
ast::DiscardStatement k;
- GeneratorImpl g;
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&k)) << g.error();
- EXPECT_EQ(g.result(), " discard;\n");
+ ASSERT_TRUE(gen.EmitStatement(&k)) << gen.error();
+ EXPECT_EQ(gen.result(), " discard;\n");
}
} // namespace
diff --git a/src/writer/wgsl/generator_impl_fallthrough_test.cc b/src/writer/wgsl/generator_impl_fallthrough_test.cc
index bbe3547..e8fcbe4 100644
--- a/src/writer/wgsl/generator_impl_fallthrough_test.cc
+++ b/src/writer/wgsl/generator_impl_fallthrough_test.cc
@@ -15,22 +15,22 @@
#include "gtest/gtest.h"
#include "src/ast/fallthrough_statement.h"
#include "src/writer/wgsl/generator_impl.h"
+#include "src/writer/wgsl/test_helper.h"
namespace tint {
namespace writer {
namespace wgsl {
namespace {
-using WgslGeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = TestHelper;
TEST_F(WgslGeneratorImplTest, Emit_Fallthrough) {
ast::FallthroughStatement f;
- GeneratorImpl g;
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&f)) << g.error();
- EXPECT_EQ(g.result(), " fallthrough;\n");
+ ASSERT_TRUE(gen.EmitStatement(&f)) << gen.error();
+ EXPECT_EQ(gen.result(), " fallthrough;\n");
}
} // namespace
diff --git a/src/writer/wgsl/generator_impl_function_test.cc b/src/writer/wgsl/generator_impl_function_test.cc
index f7ba33b..08f77f2 100644
--- a/src/writer/wgsl/generator_impl_function_test.cc
+++ b/src/writer/wgsl/generator_impl_function_test.cc
@@ -33,13 +33,14 @@
#include "src/context.h"
#include "src/type_determiner.h"
#include "src/writer/wgsl/generator_impl.h"
+#include "src/writer/wgsl/test_helper.h"
namespace tint {
namespace writer {
namespace wgsl {
namespace {
-using WgslGeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = TestHelper;
TEST_F(WgslGeneratorImplTest, Emit_Function) {
auto body = std::make_unique<ast::BlockStatement>();
@@ -50,11 +51,10 @@
ast::Function func("my_func", {}, &void_type);
func.set_body(std::move(body));
- GeneratorImpl g;
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitFunction(&func));
- EXPECT_EQ(g.result(), R"( fn my_func() -> void {
+ ASSERT_TRUE(gen.EmitFunction(&func));
+ EXPECT_EQ(gen.result(), R"( fn my_func() -> void {
discard;
return;
}
@@ -78,11 +78,10 @@
ast::Function func("my_func", std::move(params), &void_type);
func.set_body(std::move(body));
- GeneratorImpl g;
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitFunction(&func));
- EXPECT_EQ(g.result(), R"( fn my_func(a : f32, b : i32) -> void {
+ ASSERT_TRUE(gen.EmitFunction(&func));
+ EXPECT_EQ(gen.result(), R"( fn my_func(a : f32, b : i32) -> void {
discard;
return;
}
@@ -100,11 +99,10 @@
std::make_unique<ast::WorkgroupDecoration>(2u, 4u, 6u, Source{}));
func.set_body(std::move(body));
- GeneratorImpl g;
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitFunction(&func));
- EXPECT_EQ(g.result(), R"( [[workgroup_size(2, 4, 6)]]
+ ASSERT_TRUE(gen.EmitFunction(&func));
+ EXPECT_EQ(gen.result(), R"( [[workgroup_size(2, 4, 6)]]
fn my_func() -> void {
discard;
return;
@@ -123,11 +121,10 @@
ast::PipelineStage::kFragment, Source{}));
func.set_body(std::move(body));
- GeneratorImpl g;
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitFunction(&func));
- EXPECT_EQ(g.result(), R"( [[stage(fragment)]]
+ ASSERT_TRUE(gen.EmitFunction(&func));
+ EXPECT_EQ(gen.result(), R"( [[stage(fragment)]]
fn my_func() -> void {
discard;
return;
@@ -148,11 +145,10 @@
std::make_unique<ast::WorkgroupDecoration>(2u, 4u, 6u, Source{}));
func.set_body(std::move(body));
- GeneratorImpl g;
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitFunction(&func));
- EXPECT_EQ(g.result(), R"( [[stage(fragment)]]
+ ASSERT_TRUE(gen.EmitFunction(&func));
+ EXPECT_EQ(gen.result(), R"( [[stage(fragment)]]
[[workgroup_size(2, 4, 6)]]
fn my_func() -> void {
discard;
@@ -207,10 +203,6 @@
decos.push_back(std::make_unique<ast::SetDecoration>(0, Source{}));
data_var->set_decorations(std::move(decos));
- Context ctx;
- ast::Module mod;
- TypeDeterminer td(&ctx, &mod);
-
mod.AddConstructedType(&s);
td.RegisterVariableForTesting(data_var.get());
@@ -260,9 +252,8 @@
ASSERT_TRUE(td.Determine()) << td.error();
- GeneratorImpl g;
- ASSERT_TRUE(g.Generate(mod)) << g.error();
- EXPECT_EQ(g.result(), R"([[block]]
+ ASSERT_TRUE(gen.Generate(mod)) << gen.error();
+ EXPECT_EQ(gen.result(), R"([[block]]
struct Data {
[[offset(0)]]
d : f32;
diff --git a/src/writer/wgsl/generator_impl_identifier_test.cc b/src/writer/wgsl/generator_impl_identifier_test.cc
index 503579a..d0f6b31 100644
--- a/src/writer/wgsl/generator_impl_identifier_test.cc
+++ b/src/writer/wgsl/generator_impl_identifier_test.cc
@@ -14,20 +14,20 @@
#include "gtest/gtest.h"
#include "src/writer/wgsl/generator_impl.h"
+#include "src/writer/wgsl/test_helper.h"
namespace tint {
namespace writer {
namespace wgsl {
namespace {
-using WgslGeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = TestHelper;
TEST_F(WgslGeneratorImplTest, EmitIdentifierExpression_Single) {
ast::IdentifierExpression i("glsl");
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitExpression(&i)) << g.error();
- EXPECT_EQ(g.result(), "glsl");
+ ASSERT_TRUE(gen.EmitExpression(&i)) << gen.error();
+ EXPECT_EQ(gen.result(), "glsl");
}
} // namespace
diff --git a/src/writer/wgsl/generator_impl_if_test.cc b/src/writer/wgsl/generator_impl_if_test.cc
index 985f6da..f024782 100644
--- a/src/writer/wgsl/generator_impl_if_test.cc
+++ b/src/writer/wgsl/generator_impl_if_test.cc
@@ -18,13 +18,14 @@
#include "src/ast/identifier_expression.h"
#include "src/ast/if_statement.h"
#include "src/writer/wgsl/generator_impl.h"
+#include "src/writer/wgsl/test_helper.h"
namespace tint {
namespace writer {
namespace wgsl {
namespace {
-using WgslGeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = TestHelper;
TEST_F(WgslGeneratorImplTest, Emit_If) {
auto cond = std::make_unique<ast::IdentifierExpression>("cond");
@@ -33,11 +34,10 @@
ast::IfStatement i(std::move(cond), std::move(body));
- GeneratorImpl g;
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&i)) << g.error();
- EXPECT_EQ(g.result(), R"( if (cond) {
+ ASSERT_TRUE(gen.EmitStatement(&i)) << gen.error();
+ EXPECT_EQ(gen.result(), R"( if (cond) {
discard;
}
)");
@@ -59,11 +59,10 @@
ast::IfStatement i(std::move(cond), std::move(body));
i.set_else_statements(std::move(elses));
- GeneratorImpl g;
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&i)) << g.error();
- EXPECT_EQ(g.result(), R"( if (cond) {
+ ASSERT_TRUE(gen.EmitStatement(&i)) << gen.error();
+ EXPECT_EQ(gen.result(), R"( if (cond) {
discard;
} elseif (else_cond) {
discard;
@@ -85,11 +84,10 @@
ast::IfStatement i(std::move(cond), std::move(body));
i.set_else_statements(std::move(elses));
- GeneratorImpl g;
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&i)) << g.error();
- EXPECT_EQ(g.result(), R"( if (cond) {
+ ASSERT_TRUE(gen.EmitStatement(&i)) << gen.error();
+ EXPECT_EQ(gen.result(), R"( if (cond) {
discard;
} else {
discard;
@@ -118,11 +116,10 @@
ast::IfStatement i(std::move(cond), std::move(body));
i.set_else_statements(std::move(elses));
- GeneratorImpl g;
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&i)) << g.error();
- EXPECT_EQ(g.result(), R"( if (cond) {
+ ASSERT_TRUE(gen.EmitStatement(&i)) << gen.error();
+ EXPECT_EQ(gen.result(), R"( if (cond) {
discard;
} elseif (else_cond) {
discard;
diff --git a/src/writer/wgsl/generator_impl_loop_test.cc b/src/writer/wgsl/generator_impl_loop_test.cc
index e440234..2371ac6 100644
--- a/src/writer/wgsl/generator_impl_loop_test.cc
+++ b/src/writer/wgsl/generator_impl_loop_test.cc
@@ -18,24 +18,24 @@
#include "src/ast/discard_statement.h"
#include "src/ast/loop_statement.h"
#include "src/writer/wgsl/generator_impl.h"
+#include "src/writer/wgsl/test_helper.h"
namespace tint {
namespace writer {
namespace wgsl {
namespace {
-using WgslGeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = TestHelper;
TEST_F(WgslGeneratorImplTest, Emit_Loop) {
auto body = std::make_unique<ast::BlockStatement>();
body->append(std::make_unique<ast::DiscardStatement>());
ast::LoopStatement l(std::move(body), {});
- GeneratorImpl g;
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&l)) << g.error();
- EXPECT_EQ(g.result(), R"( loop {
+ ASSERT_TRUE(gen.EmitStatement(&l)) << gen.error();
+ EXPECT_EQ(gen.result(), R"( loop {
discard;
}
)");
@@ -50,11 +50,10 @@
ast::LoopStatement l(std::move(body), std::move(continuing));
- GeneratorImpl g;
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&l)) << g.error();
- EXPECT_EQ(g.result(), R"( loop {
+ ASSERT_TRUE(gen.EmitStatement(&l)) << gen.error();
+ EXPECT_EQ(gen.result(), R"( loop {
discard;
continuing {
diff --git a/src/writer/wgsl/generator_impl_member_accessor_test.cc b/src/writer/wgsl/generator_impl_member_accessor_test.cc
index 4c9eaf6..437bb0a 100644
--- a/src/writer/wgsl/generator_impl_member_accessor_test.cc
+++ b/src/writer/wgsl/generator_impl_member_accessor_test.cc
@@ -18,13 +18,14 @@
#include "src/ast/identifier_expression.h"
#include "src/ast/member_accessor_expression.h"
#include "src/writer/wgsl/generator_impl.h"
+#include "src/writer/wgsl/test_helper.h"
namespace tint {
namespace writer {
namespace wgsl {
namespace {
-using WgslGeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = TestHelper;
TEST_F(WgslGeneratorImplTest, EmitExpression_MemberAccessor) {
auto str = std::make_unique<ast::IdentifierExpression>("str");
@@ -32,9 +33,8 @@
ast::MemberAccessorExpression expr(std::move(str), std::move(mem));
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitExpression(&expr)) << g.error();
- EXPECT_EQ(g.result(), "str.mem");
+ ASSERT_TRUE(gen.EmitExpression(&expr)) << gen.error();
+ EXPECT_EQ(gen.result(), "str.mem");
}
} // namespace
diff --git a/src/writer/wgsl/generator_impl_return_test.cc b/src/writer/wgsl/generator_impl_return_test.cc
index 4701813..1d90af8 100644
--- a/src/writer/wgsl/generator_impl_return_test.cc
+++ b/src/writer/wgsl/generator_impl_return_test.cc
@@ -19,33 +19,32 @@
#include "src/ast/identifier_expression.h"
#include "src/ast/return_statement.h"
#include "src/writer/wgsl/generator_impl.h"
+#include "src/writer/wgsl/test_helper.h"
namespace tint {
namespace writer {
namespace wgsl {
namespace {
-using WgslGeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = TestHelper;
TEST_F(WgslGeneratorImplTest, Emit_Return) {
ast::ReturnStatement r;
- GeneratorImpl g;
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&r)) << g.error();
- EXPECT_EQ(g.result(), " return;\n");
+ ASSERT_TRUE(gen.EmitStatement(&r)) << gen.error();
+ EXPECT_EQ(gen.result(), " return;\n");
}
TEST_F(WgslGeneratorImplTest, Emit_ReturnWithValue) {
auto expr = std::make_unique<ast::IdentifierExpression>("expr");
ast::ReturnStatement r(std::move(expr));
- GeneratorImpl g;
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&r)) << g.error();
- EXPECT_EQ(g.result(), " return expr;\n");
+ ASSERT_TRUE(gen.EmitStatement(&r)) << gen.error();
+ EXPECT_EQ(gen.result(), " return expr;\n");
}
} // namespace
diff --git a/src/writer/wgsl/generator_impl_switch_test.cc b/src/writer/wgsl/generator_impl_switch_test.cc
index ceecb80..8994ba8 100644
--- a/src/writer/wgsl/generator_impl_switch_test.cc
+++ b/src/writer/wgsl/generator_impl_switch_test.cc
@@ -22,13 +22,14 @@
#include "src/ast/switch_statement.h"
#include "src/ast/type/i32_type.h"
#include "src/writer/wgsl/generator_impl.h"
+#include "src/writer/wgsl/test_helper.h"
namespace tint {
namespace writer {
namespace wgsl {
namespace {
-using WgslGeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = TestHelper;
TEST_F(WgslGeneratorImplTest, Emit_Switch) {
auto def = std::make_unique<ast::CaseStatement>();
@@ -53,11 +54,10 @@
auto cond = std::make_unique<ast::IdentifierExpression>("cond");
ast::SwitchStatement s(std::move(cond), std::move(body));
- GeneratorImpl g;
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&s)) << g.error();
- EXPECT_EQ(g.result(), R"( switch(cond) {
+ ASSERT_TRUE(gen.EmitStatement(&s)) << gen.error();
+ EXPECT_EQ(gen.result(), R"( switch(cond) {
case 5: {
break;
}
diff --git a/src/writer/wgsl/generator_impl_test.cc b/src/writer/wgsl/generator_impl_test.cc
index 675111d..2f6da33 100644
--- a/src/writer/wgsl/generator_impl_test.cc
+++ b/src/writer/wgsl/generator_impl_test.cc
@@ -20,25 +20,23 @@
#include "src/ast/function.h"
#include "src/ast/module.h"
#include "src/ast/type/void_type.h"
+#include "src/writer/wgsl/test_helper.h"
namespace tint {
namespace writer {
namespace wgsl {
namespace {
-using WgslGeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = TestHelper;
TEST_F(WgslGeneratorImplTest, Generate) {
ast::type::VoidType void_type;
- ast::Module m;
- m.AddFunction(std::make_unique<ast::Function>("my_func", ast::VariableList{},
- &void_type));
+ mod.AddFunction(std::make_unique<ast::Function>(
+ "my_func", ast::VariableList{}, &void_type));
- GeneratorImpl g;
-
- ASSERT_TRUE(g.Generate(m)) << g.error();
- EXPECT_EQ(g.result(), R"(fn my_func() -> void {
+ ASSERT_TRUE(gen.Generate(mod)) << gen.error();
+ EXPECT_EQ(gen.result(), R"(fn my_func() -> void {
}
)");
diff --git a/src/writer/wgsl/generator_impl_type_test.cc b/src/writer/wgsl/generator_impl_type_test.cc
index ec5d0ee..aeaf721 100644
--- a/src/writer/wgsl/generator_impl_type_test.cc
+++ b/src/writer/wgsl/generator_impl_type_test.cc
@@ -36,30 +36,29 @@
#include "src/ast/type/vector_type.h"
#include "src/ast/type/void_type.h"
#include "src/writer/wgsl/generator_impl.h"
+#include "src/writer/wgsl/test_helper.h"
namespace tint {
namespace writer {
namespace wgsl {
namespace {
-using WgslGeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = TestHelper;
TEST_F(WgslGeneratorImplTest, EmitType_Alias) {
ast::type::F32Type f32;
ast::type::AliasType alias("alias", &f32);
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitType(&alias)) << g.error();
- EXPECT_EQ(g.result(), "alias");
+ ASSERT_TRUE(gen.EmitType(&alias)) << gen.error();
+ EXPECT_EQ(gen.result(), "alias");
}
TEST_F(WgslGeneratorImplTest, EmitType_Array) {
ast::type::BoolType b;
ast::type::ArrayType a(&b, 4);
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitType(&a)) << g.error();
- EXPECT_EQ(g.result(), "array<bool, 4>");
+ ASSERT_TRUE(gen.EmitType(&a)) << gen.error();
+ EXPECT_EQ(gen.result(), "array<bool, 4>");
}
TEST_F(WgslGeneratorImplTest, EmitType_Array_Decoration) {
@@ -70,9 +69,8 @@
ast::type::ArrayType a(&b, 4);
a.set_decorations(std::move(decos));
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitType(&a)) << g.error();
- EXPECT_EQ(g.result(), "[[stride(16)]] array<bool, 4>");
+ ASSERT_TRUE(gen.EmitType(&a)) << gen.error();
+ EXPECT_EQ(gen.result(), "[[stride(16)]] array<bool, 4>");
}
TEST_F(WgslGeneratorImplTest, EmitType_Array_MultipleDecorations) {
@@ -84,60 +82,53 @@
ast::type::ArrayType a(&b, 4);
a.set_decorations(std::move(decos));
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitType(&a)) << g.error();
- EXPECT_EQ(g.result(), "[[stride(16)]] [[stride(32)]] array<bool, 4>");
+ ASSERT_TRUE(gen.EmitType(&a)) << gen.error();
+ EXPECT_EQ(gen.result(), "[[stride(16)]] [[stride(32)]] array<bool, 4>");
}
TEST_F(WgslGeneratorImplTest, EmitType_RuntimeArray) {
ast::type::BoolType b;
ast::type::ArrayType a(&b);
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitType(&a)) << g.error();
- EXPECT_EQ(g.result(), "array<bool>");
+ ASSERT_TRUE(gen.EmitType(&a)) << gen.error();
+ EXPECT_EQ(gen.result(), "array<bool>");
}
TEST_F(WgslGeneratorImplTest, EmitType_Bool) {
ast::type::BoolType b;
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitType(&b)) << g.error();
- EXPECT_EQ(g.result(), "bool");
+ ASSERT_TRUE(gen.EmitType(&b)) << gen.error();
+ EXPECT_EQ(gen.result(), "bool");
}
TEST_F(WgslGeneratorImplTest, EmitType_F32) {
ast::type::F32Type f32;
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitType(&f32)) << g.error();
- EXPECT_EQ(g.result(), "f32");
+ ASSERT_TRUE(gen.EmitType(&f32)) << gen.error();
+ EXPECT_EQ(gen.result(), "f32");
}
TEST_F(WgslGeneratorImplTest, EmitType_I32) {
ast::type::I32Type i32;
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitType(&i32)) << g.error();
- EXPECT_EQ(g.result(), "i32");
+ ASSERT_TRUE(gen.EmitType(&i32)) << gen.error();
+ EXPECT_EQ(gen.result(), "i32");
}
TEST_F(WgslGeneratorImplTest, EmitType_Matrix) {
ast::type::F32Type f32;
ast::type::MatrixType m(&f32, 3, 2);
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitType(&m)) << g.error();
- EXPECT_EQ(g.result(), "mat2x3<f32>");
+ ASSERT_TRUE(gen.EmitType(&m)) << gen.error();
+ EXPECT_EQ(gen.result(), "mat2x3<f32>");
}
TEST_F(WgslGeneratorImplTest, EmitType_Pointer) {
ast::type::F32Type f32;
ast::type::PointerType p(&f32, ast::StorageClass::kWorkgroup);
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitType(&p)) << g.error();
- EXPECT_EQ(g.result(), "ptr<workgroup, f32>");
+ ASSERT_TRUE(gen.EmitType(&p)) << gen.error();
+ EXPECT_EQ(gen.result(), "ptr<workgroup, f32>");
}
TEST_F(WgslGeneratorImplTest, EmitType_Struct) {
@@ -159,9 +150,8 @@
ast::type::StructType s("S", std::move(str));
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitType(&s)) << g.error();
- EXPECT_EQ(g.result(), "S");
+ ASSERT_TRUE(gen.EmitType(&s)) << gen.error();
+ EXPECT_EQ(gen.result(), "S");
}
TEST_F(WgslGeneratorImplTest, EmitType_StructDecl) {
@@ -183,9 +173,8 @@
ast::type::StructType s("S", std::move(str));
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitStructType(&s)) << g.error();
- EXPECT_EQ(g.result(), R"(struct S {
+ ASSERT_TRUE(gen.EmitStructType(&s)) << gen.error();
+ EXPECT_EQ(gen.result(), R"(struct S {
a : i32;
[[offset(4)]]
b : f32;
@@ -215,9 +204,8 @@
ast::type::StructType s("S", std::move(str));
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitStructType(&s)) << g.error();
- EXPECT_EQ(g.result(), R"([[block]]
+ ASSERT_TRUE(gen.EmitStructType(&s)) << gen.error();
+ EXPECT_EQ(gen.result(), R"([[block]]
struct S {
a : i32;
[[offset(4)]]
@@ -229,26 +217,23 @@
TEST_F(WgslGeneratorImplTest, EmitType_U32) {
ast::type::U32Type u32;
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitType(&u32)) << g.error();
- EXPECT_EQ(g.result(), "u32");
+ ASSERT_TRUE(gen.EmitType(&u32)) << gen.error();
+ EXPECT_EQ(gen.result(), "u32");
}
TEST_F(WgslGeneratorImplTest, EmitType_Vector) {
ast::type::F32Type f32;
ast::type::VectorType v(&f32, 3);
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitType(&v)) << g.error();
- EXPECT_EQ(g.result(), "vec3<f32>");
+ ASSERT_TRUE(gen.EmitType(&v)) << gen.error();
+ EXPECT_EQ(gen.result(), "vec3<f32>");
}
TEST_F(WgslGeneratorImplTest, EmitType_Void) {
ast::type::VoidType v;
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitType(&v)) << g.error();
- EXPECT_EQ(g.result(), "void");
+ ASSERT_TRUE(gen.EmitType(&v)) << gen.error();
+ EXPECT_EQ(gen.result(), "void");
}
struct TextureData {
@@ -259,16 +244,15 @@
out << data.name;
return out;
}
-using WgslGenerator_DepthTextureTest = testing::TestWithParam<TextureData>;
+using WgslGenerator_DepthTextureTest = TestParamHelper<TextureData>;
TEST_P(WgslGenerator_DepthTextureTest, EmitType_DepthTexture) {
auto param = GetParam();
ast::type::DepthTextureType d(param.dim);
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitType(&d)) << g.error();
- EXPECT_EQ(g.result(), param.name);
+ ASSERT_TRUE(gen.EmitType(&d)) << gen.error();
+ EXPECT_EQ(gen.result(), param.name);
}
INSTANTIATE_TEST_SUITE_P(
WgslGeneratorImplTest,
@@ -281,16 +265,15 @@
TextureData{ast::type::TextureDimension::kCubeArray,
"texture_depth_cube_array"}));
-using WgslGenerator_SampledTextureTest = testing::TestWithParam<TextureData>;
+using WgslGenerator_SampledTextureTest = TestParamHelper<TextureData>;
TEST_P(WgslGenerator_SampledTextureTest, EmitType_SampledTexture_F32) {
auto param = GetParam();
ast::type::F32Type f32;
ast::type::SampledTextureType t(param.dim, &f32);
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitType(&t)) << g.error();
- EXPECT_EQ(g.result(), std::string(param.name) + "<f32>");
+ ASSERT_TRUE(gen.EmitType(&t)) << gen.error();
+ EXPECT_EQ(gen.result(), std::string(param.name) + "<f32>");
}
TEST_P(WgslGenerator_SampledTextureTest, EmitType_SampledTexture_I32) {
@@ -299,9 +282,8 @@
ast::type::I32Type i32;
ast::type::SampledTextureType t(param.dim, &i32);
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitType(&t)) << g.error();
- EXPECT_EQ(g.result(), std::string(param.name) + "<i32>");
+ ASSERT_TRUE(gen.EmitType(&t)) << gen.error();
+ EXPECT_EQ(gen.result(), std::string(param.name) + "<i32>");
}
TEST_P(WgslGenerator_SampledTextureTest, EmitType_SampledTexture_U32) {
@@ -310,9 +292,8 @@
ast::type::U32Type u32;
ast::type::SampledTextureType t(param.dim, &u32);
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitType(&t)) << g.error();
- EXPECT_EQ(g.result(), std::string(param.name) + "<u32>");
+ ASSERT_TRUE(gen.EmitType(&t)) << gen.error();
+ EXPECT_EQ(gen.result(), std::string(param.name) + "<u32>");
}
INSTANTIATE_TEST_SUITE_P(
WgslGeneratorImplTest,
@@ -327,17 +308,15 @@
TextureData{ast::type::TextureDimension::kCubeArray,
"texture_cube_array"}));
-using WgslGenerator_MultiampledTextureTest =
- testing::TestWithParam<TextureData>;
+using WgslGenerator_MultiampledTextureTest = TestParamHelper<TextureData>;
TEST_P(WgslGenerator_MultiampledTextureTest, EmitType_MultisampledTexture_F32) {
auto param = GetParam();
ast::type::F32Type f32;
ast::type::MultisampledTextureType t(param.dim, &f32);
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitType(&t)) << g.error();
- EXPECT_EQ(g.result(), std::string(param.name) + "<f32>");
+ ASSERT_TRUE(gen.EmitType(&t)) << gen.error();
+ EXPECT_EQ(gen.result(), std::string(param.name) + "<f32>");
}
TEST_P(WgslGenerator_MultiampledTextureTest, EmitType_MultisampledTexture_I32) {
@@ -346,9 +325,8 @@
ast::type::I32Type i32;
ast::type::MultisampledTextureType t(param.dim, &i32);
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitType(&t)) << g.error();
- EXPECT_EQ(g.result(), std::string(param.name) + "<i32>");
+ ASSERT_TRUE(gen.EmitType(&t)) << gen.error();
+ EXPECT_EQ(gen.result(), std::string(param.name) + "<i32>");
}
TEST_P(WgslGenerator_MultiampledTextureTest, EmitType_MultisampledTexture_U32) {
@@ -357,9 +335,8 @@
ast::type::U32Type u32;
ast::type::MultisampledTextureType t(param.dim, &u32);
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitType(&t)) << g.error();
- EXPECT_EQ(g.result(), std::string(param.name) + "<u32>");
+ ASSERT_TRUE(gen.EmitType(&t)) << gen.error();
+ EXPECT_EQ(gen.result(), std::string(param.name) + "<u32>");
}
INSTANTIATE_TEST_SUITE_P(WgslGeneratorImplTest,
WgslGenerator_MultiampledTextureTest,
@@ -377,16 +354,14 @@
out << data.name;
return out;
}
-using WgslGenerator_StorageTextureTest =
- testing::TestWithParam<StorageTextureData>;
+using WgslGenerator_StorageTextureTest = TestParamHelper<StorageTextureData>;
TEST_P(WgslGenerator_StorageTextureTest, EmitType_StorageTexture) {
auto param = GetParam();
ast::type::StorageTextureType t(param.dim, param.access, param.fmt);
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitType(&t)) << g.error();
- EXPECT_EQ(g.result(), param.name);
+ ASSERT_TRUE(gen.EmitType(&t)) << gen.error();
+ EXPECT_EQ(gen.result(), param.name);
}
INSTANTIATE_TEST_SUITE_P(
WgslGeneratorImplTest,
@@ -435,13 +410,12 @@
out << data.name;
return out;
}
-using WgslGenerator_ImageFormatTest = testing::TestWithParam<ImageFormatData>;
+using WgslGenerator_ImageFormatTest = TestParamHelper<ImageFormatData>;
TEST_P(WgslGenerator_ImageFormatTest, EmitType_StorageTexture_ImageFormat) {
auto param = GetParam();
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitImageFormat(param.fmt)) << g.error();
- EXPECT_EQ(g.result(), param.name);
+ ASSERT_TRUE(gen.EmitImageFormat(param.fmt)) << gen.error();
+ EXPECT_EQ(gen.result(), param.name);
}
INSTANTIATE_TEST_SUITE_P(
@@ -489,17 +463,15 @@
TEST_F(WgslGeneratorImplTest, EmitType_Sampler) {
ast::type::SamplerType sampler(ast::type::SamplerKind::kSampler);
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitType(&sampler)) << g.error();
- EXPECT_EQ(g.result(), "sampler");
+ ASSERT_TRUE(gen.EmitType(&sampler)) << gen.error();
+ EXPECT_EQ(gen.result(), "sampler");
}
TEST_F(WgslGeneratorImplTest, EmitType_SamplerComparison) {
ast::type::SamplerType sampler(ast::type::SamplerKind::kComparisonSampler);
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitType(&sampler)) << g.error();
- EXPECT_EQ(g.result(), "sampler_comparison");
+ ASSERT_TRUE(gen.EmitType(&sampler)) << gen.error();
+ EXPECT_EQ(gen.result(), "sampler_comparison");
}
} // namespace
diff --git a/src/writer/wgsl/generator_impl_unary_op_test.cc b/src/writer/wgsl/generator_impl_unary_op_test.cc
index 44bc4a2..5ed2345 100644
--- a/src/writer/wgsl/generator_impl_unary_op_test.cc
+++ b/src/writer/wgsl/generator_impl_unary_op_test.cc
@@ -19,6 +19,7 @@
#include "src/ast/identifier_expression.h"
#include "src/ast/unary_op_expression.h"
#include "src/writer/wgsl/generator_impl.h"
+#include "src/writer/wgsl/test_helper.h"
namespace tint {
namespace writer {
@@ -33,16 +34,15 @@
out << data.op;
return out;
}
-using WgslUnaryOpTest = testing::TestWithParam<UnaryOpData>;
+using WgslUnaryOpTest = TestParamHelper<UnaryOpData>;
TEST_P(WgslUnaryOpTest, Emit) {
auto params = GetParam();
auto expr = std::make_unique<ast::IdentifierExpression>("expr");
ast::UnaryOpExpression op(params.op, std::move(expr));
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitExpression(&op)) << g.error();
- EXPECT_EQ(g.result(), std::string(params.name) + "(expr)");
+ ASSERT_TRUE(gen.EmitExpression(&op)) << gen.error();
+ EXPECT_EQ(gen.result(), std::string(params.name) + "(expr)");
}
INSTANTIATE_TEST_SUITE_P(WgslGeneratorImplTest,
WgslUnaryOpTest,
diff --git a/src/writer/wgsl/generator_impl_variable_decl_statement_test.cc b/src/writer/wgsl/generator_impl_variable_decl_statement_test.cc
index 2e0e03a..828b23a 100644
--- a/src/writer/wgsl/generator_impl_variable_decl_statement_test.cc
+++ b/src/writer/wgsl/generator_impl_variable_decl_statement_test.cc
@@ -21,13 +21,14 @@
#include "src/ast/variable.h"
#include "src/ast/variable_decl_statement.h"
#include "src/writer/wgsl/generator_impl.h"
+#include "src/writer/wgsl/test_helper.h"
namespace tint {
namespace writer {
namespace wgsl {
namespace {
-using WgslGeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = TestHelper;
TEST_F(WgslGeneratorImplTest, Emit_VariableDeclStatement) {
ast::type::F32Type f32;
@@ -36,11 +37,10 @@
ast::VariableDeclStatement stmt(std::move(var));
- GeneratorImpl g;
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&stmt)) << g.error();
- EXPECT_EQ(g.result(), " var a : f32;\n");
+ ASSERT_TRUE(gen.EmitStatement(&stmt)) << gen.error();
+ EXPECT_EQ(gen.result(), " var a : f32;\n");
}
TEST_F(WgslGeneratorImplTest, Emit_VariableDeclStatement_Function) {
@@ -53,11 +53,10 @@
ast::VariableDeclStatement stmt(std::move(var));
- GeneratorImpl g;
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&stmt)) << g.error();
- EXPECT_EQ(g.result(), " var a : f32;\n");
+ ASSERT_TRUE(gen.EmitStatement(&stmt)) << gen.error();
+ EXPECT_EQ(gen.result(), " var a : f32;\n");
}
TEST_F(WgslGeneratorImplTest, Emit_VariableDeclStatement_Private) {
@@ -67,11 +66,10 @@
ast::VariableDeclStatement stmt(std::move(var));
- GeneratorImpl g;
- g.increment_indent();
+ gen.increment_indent();
- ASSERT_TRUE(g.EmitStatement(&stmt)) << g.error();
- EXPECT_EQ(g.result(), " var<private> a : f32;\n");
+ ASSERT_TRUE(gen.EmitStatement(&stmt)) << gen.error();
+ EXPECT_EQ(gen.result(), " var<private> a : f32;\n");
}
} // namespace
diff --git a/src/writer/wgsl/generator_impl_variable_test.cc b/src/writer/wgsl/generator_impl_variable_test.cc
index 053f640..4414596 100644
--- a/src/writer/wgsl/generator_impl_variable_test.cc
+++ b/src/writer/wgsl/generator_impl_variable_test.cc
@@ -24,21 +24,21 @@
#include "src/ast/type/f32_type.h"
#include "src/ast/variable_decoration.h"
#include "src/writer/wgsl/generator_impl.h"
+#include "src/writer/wgsl/test_helper.h"
namespace tint {
namespace writer {
namespace wgsl {
namespace {
-using WgslGeneratorImplTest = testing::Test;
+using WgslGeneratorImplTest = TestHelper;
TEST_F(WgslGeneratorImplTest, EmitVariable) {
ast::type::F32Type f32;
ast::Variable v("a", ast::StorageClass::kNone, &f32);
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitVariable(&v)) << g.error();
- EXPECT_EQ(g.result(), R"(var a : f32;
+ ASSERT_TRUE(gen.EmitVariable(&v)) << gen.error();
+ EXPECT_EQ(gen.result(), R"(var a : f32;
)");
}
@@ -46,9 +46,8 @@
ast::type::F32Type f32;
ast::Variable v("a", ast::StorageClass::kInput, &f32);
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitVariable(&v)) << g.error();
- EXPECT_EQ(g.result(), R"(var<in> a : f32;
+ ASSERT_TRUE(gen.EmitVariable(&v)) << gen.error();
+ EXPECT_EQ(gen.result(), R"(var<in> a : f32;
)");
}
@@ -63,9 +62,8 @@
dv.set_type(&f32);
dv.set_decorations(std::move(decos));
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitVariable(&dv)) << g.error();
- EXPECT_EQ(g.result(), R"([[location(2)]] var a : f32;
+ ASSERT_TRUE(gen.EmitVariable(&dv)) << gen.error();
+ EXPECT_EQ(gen.result(), R"([[location(2)]] var a : f32;
)");
}
@@ -85,10 +83,9 @@
dv.set_type(&f32);
dv.set_decorations(std::move(decos));
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitVariable(&dv)) << g.error();
+ ASSERT_TRUE(gen.EmitVariable(&dv)) << gen.error();
EXPECT_EQ(
- g.result(),
+ gen.result(),
R"([[builtin(position), binding(0), set(1), location(2), constant_id(42)]] var a : f32;
)");
}
@@ -100,9 +97,8 @@
ast::Variable v("a", ast::StorageClass::kNone, &f32);
v.set_constructor(std::move(ident));
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitVariable(&v)) << g.error();
- EXPECT_EQ(g.result(), R"(var a : f32 = initializer;
+ ASSERT_TRUE(gen.EmitVariable(&v)) << gen.error();
+ EXPECT_EQ(gen.result(), R"(var a : f32 = initializer;
)");
}
@@ -114,9 +110,8 @@
v.set_constructor(std::move(ident));
v.set_is_const(true);
- GeneratorImpl g;
- ASSERT_TRUE(g.EmitVariable(&v)) << g.error();
- EXPECT_EQ(g.result(), R"(const a : f32 = initializer;
+ ASSERT_TRUE(gen.EmitVariable(&v)) << gen.error();
+ EXPECT_EQ(gen.result(), R"(const a : f32 = initializer;
)");
}
diff --git a/src/writer/wgsl/test_helper.h b/src/writer/wgsl/test_helper.h
new file mode 100644
index 0000000..91e37af
--- /dev/null
+++ b/src/writer/wgsl/test_helper.h
@@ -0,0 +1,54 @@
+// Copyright 2020 The Tint Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef SRC_WRITER_WGSL_TEST_HELPER_H_
+#define SRC_WRITER_WGSL_TEST_HELPER_H_
+
+#include "gtest/gtest.h"
+#include "src/ast/module.h"
+#include "src/context.h"
+#include "src/type_determiner.h"
+#include "src/writer/wgsl/generator_impl.h"
+
+namespace tint {
+namespace writer {
+namespace wgsl {
+
+/// Helper class for testing
+template <typename T>
+class TestHelperBase : public T {
+ public:
+ TestHelperBase() : td(&ctx, &mod), gen(&ctx) {}
+
+ ~TestHelperBase() = default;
+
+ /// The context
+ Context ctx;
+ /// The module
+ ast::Module mod;
+ /// The type determiner
+ TypeDeterminer td;
+ /// The generator
+ GeneratorImpl gen;
+};
+using TestHelper = TestHelperBase<testing::Test>;
+
+template <typename T>
+using TestParamHelper = TestHelperBase<testing::TestWithParam<T>>;
+
+} // namespace wgsl
+} // namespace writer
+} // namespace tint
+
+#endif // SRC_WRITER_WGSL_TEST_HELPER_H_
diff --git a/src/writer/writer.cc b/src/writer/writer.cc
index 545ed3b..c41b556 100644
--- a/src/writer/writer.cc
+++ b/src/writer/writer.cc
@@ -19,9 +19,18 @@
namespace tint {
namespace writer {
-Writer::Writer(ast::Module module) : module_(std::move(module)) {}
+Writer::Writer(ast::Module module)
+ : ctx_(new Context()),
+ context_is_owned_(true),
+ module_(std::move(module)) {}
-Writer::~Writer() = default;
+Writer::Writer(Context* ctx, ast::Module module)
+ : ctx_(ctx), context_is_owned_(false), module_(std::move(module)) {}
+
+Writer::~Writer() {
+ if (context_is_owned_)
+ delete ctx_;
+}
} // namespace writer
} // namespace tint
diff --git a/src/writer/writer.h b/src/writer/writer.h
index b38657b..3caf73e 100644
--- a/src/writer/writer.h
+++ b/src/writer/writer.h
@@ -19,6 +19,7 @@
#include "src/ast/module.h"
#include "src/ast/pipeline_stage.h"
+#include "src/context.h"
namespace tint {
namespace writer {
@@ -49,15 +50,25 @@
protected:
/// Constructor
+ /// DEPRECATED
/// @param module the tint module to convert
explicit Writer(ast::Module module);
+ /// Constructor
+ /// @param ctx the context object, must be non-null
+ /// @param module the tint module to convert
+ Writer(Context* ctx, ast::Module module);
+
/// Sets the error string
/// @param msg the error message
void set_error(const std::string& msg) { error_ = msg; }
/// An error message, if an error was encountered
std::string error_;
+ /// The context
+ Context* ctx_ = nullptr;
+ /// Tracks if we own the context
+ bool context_is_owned_ = false;
/// The module being converted
ast::Module module_;
};