Add module to the type determiner test helper
This CL updates the type determiner test helper to have a ast::Module
and updates all tests to use the module. The tests have all be updated
to consistently use the type determiner provided by the helper as well.
Change-Id: If47a873c439e5a5019e21679cba957d4c762f4e6
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/19780
Reviewed-by: David Neto <dneto@google.com>
diff --git a/src/type_determiner_test.cc b/src/type_determiner_test.cc
index d59d21f..c999d85 100644
--- a/src/type_determiner_test.cc
+++ b/src/type_determiner_test.cc
@@ -68,17 +68,25 @@
void to_str(std::ostream&, size_t) const override {}
};
-class TypeDeterminerTest : public testing::Test {
+class TypeDeterminerHelper {
public:
- void SetUp() override { td_ = std::make_unique<TypeDeterminer>(&ctx_); }
+ TypeDeterminerHelper() : td_(std::make_unique<TypeDeterminer>(&ctx_)) {}
TypeDeterminer* td() const { return td_.get(); }
+ ast::Module* mod() { return &mod_; }
private:
Context ctx_;
+ ast::Module mod_;
std::unique_ptr<TypeDeterminer> td_;
};
+class TypeDeterminerTest : public TypeDeterminerHelper, public testing::Test {};
+
+template <typename T>
+class TypeDeterminerTestWithParam : public TypeDeterminerHelper,
+ public testing::TestWithParam<T> {};
+
TEST_F(TypeDeterminerTest, Error_WithEmptySource) {
FakeStmt s;
s.set_source(Source{0, 0});
@@ -422,14 +430,12 @@
auto idx = std::make_unique<ast::ScalarConstructorExpression>(
std::make_unique<ast::IntLiteral>(&i32, 2));
-
- ast::Module m;
auto var =
std::make_unique<ast::Variable>("my_var", ast::StorageClass::kNone, &ary);
- m.AddGlobalVariable(std::move(var));
+ mod()->AddGlobalVariable(std::move(var));
// Register the global
- EXPECT_TRUE(td()->Determine(&m));
+ EXPECT_TRUE(td()->Determine(mod()));
ast::ArrayAccessorExpression acc(
std::make_unique<ast::IdentifierExpression>("my_var"), std::move(idx));
@@ -445,14 +451,12 @@
auto idx = std::make_unique<ast::ScalarConstructorExpression>(
std::make_unique<ast::IntLiteral>(&i32, 2));
-
- ast::Module m;
auto var =
std::make_unique<ast::Variable>("my_var", ast::StorageClass::kNone, &mat);
- m.AddGlobalVariable(std::move(var));
+ mod()->AddGlobalVariable(std::move(var));
// Register the global
- EXPECT_TRUE(td()->Determine(&m));
+ EXPECT_TRUE(td()->Determine(mod()));
ast::ArrayAccessorExpression acc(
std::make_unique<ast::IdentifierExpression>("my_var"), std::move(idx));
@@ -471,14 +475,12 @@
std::make_unique<ast::IntLiteral>(&i32, 2));
auto idx2 = std::make_unique<ast::ScalarConstructorExpression>(
std::make_unique<ast::IntLiteral>(&i32, 1));
-
- ast::Module m;
auto var =
std::make_unique<ast::Variable>("my_var", ast::StorageClass::kNone, &mat);
- m.AddGlobalVariable(std::move(var));
+ mod()->AddGlobalVariable(std::move(var));
// Register the global
- EXPECT_TRUE(td()->Determine(&m));
+ EXPECT_TRUE(td()->Determine(mod()));
ast::ArrayAccessorExpression acc(
std::make_unique<ast::ArrayAccessorExpression>(
@@ -498,14 +500,12 @@
auto idx = std::make_unique<ast::ScalarConstructorExpression>(
std::make_unique<ast::IntLiteral>(&i32, 2));
-
- ast::Module m;
auto var =
std::make_unique<ast::Variable>("my_var", ast::StorageClass::kNone, &vec);
- m.AddGlobalVariable(std::move(var));
+ mod()->AddGlobalVariable(std::move(var));
// Register the global
- EXPECT_TRUE(td()->Determine(&m));
+ EXPECT_TRUE(td()->Determine(mod()));
ast::ArrayAccessorExpression acc(
std::make_unique<ast::IdentifierExpression>("my_var"), std::move(idx));
@@ -530,11 +530,10 @@
ast::VariableList params;
auto func =
std::make_unique<ast::Function>("my_func", std::move(params), &f32);
- ast::Module m;
- m.AddFunction(std::move(func));
+ mod()->AddFunction(std::move(func));
// Register the function
- EXPECT_TRUE(td()->Determine(&m));
+ EXPECT_TRUE(td()->Determine(mod()));
ast::ExpressionList call_params;
ast::CallExpression call(
@@ -551,11 +550,10 @@
ast::VariableList params;
auto func =
std::make_unique<ast::Function>("my_func", std::move(params), &f32);
- ast::Module m;
- m.AddFunction(std::move(func));
+ mod()->AddFunction(std::move(func));
// Register the function
- EXPECT_TRUE(td()->Determine(&m));
+ EXPECT_TRUE(td()->Determine(mod()));
ast::ExpressionList call_params;
call_params.push_back(std::make_unique<ast::ScalarConstructorExpression>(
@@ -614,14 +612,12 @@
TEST_F(TypeDeterminerTest, Expr_Identifier_GlobalVariable) {
ast::type::F32Type f32;
-
- ast::Module m;
auto var =
std::make_unique<ast::Variable>("my_var", ast::StorageClass::kNone, &f32);
- m.AddGlobalVariable(std::move(var));
+ mod()->AddGlobalVariable(std::move(var));
// Register the global
- EXPECT_TRUE(td()->Determine(&m));
+ EXPECT_TRUE(td()->Determine(mod()));
ast::IdentifierExpression ident("my_var");
EXPECT_TRUE(td()->DetermineResultType(&ident));
@@ -659,11 +655,10 @@
ast::VariableList params;
auto func =
std::make_unique<ast::Function>("my_func", std::move(params), &f32);
- ast::Module m;
- m.AddFunction(std::move(func));
+ mod()->AddFunction(std::move(func));
// Register the function
- EXPECT_TRUE(td()->Determine(&m));
+ EXPECT_TRUE(td()->Determine(mod()));
ast::IdentifierExpression ident("my_func");
EXPECT_TRUE(td()->DetermineResultType(&ident));
@@ -690,11 +685,10 @@
auto var = std::make_unique<ast::Variable>("my_struct",
ast::StorageClass::kNone, &st);
- ast::Module m;
- m.AddGlobalVariable(std::move(var));
+ mod()->AddGlobalVariable(std::move(var));
// Register the global
- EXPECT_TRUE(td()->Determine(&m));
+ EXPECT_TRUE(td()->Determine(mod()));
auto ident = std::make_unique<ast::IdentifierExpression>("my_struct");
auto mem_ident = std::make_unique<ast::IdentifierExpression>("second_member");
@@ -711,11 +705,10 @@
auto var = std::make_unique<ast::Variable>("my_vec", ast::StorageClass::kNone,
&vec3);
- ast::Module m;
- m.AddGlobalVariable(std::move(var));
+ mod()->AddGlobalVariable(std::move(var));
// Register the global
- EXPECT_TRUE(td()->Determine(&m));
+ EXPECT_TRUE(td()->Determine(mod()));
auto ident = std::make_unique<ast::IdentifierExpression>("my_vec");
auto swizzle = std::make_unique<ast::IdentifierExpression>("xy");
@@ -780,12 +773,10 @@
auto var =
std::make_unique<ast::Variable>("c", ast::StorageClass::kNone, &stA);
-
- ast::Module m;
- m.AddGlobalVariable(std::move(var));
+ mod()->AddGlobalVariable(std::move(var));
// Register the global
- EXPECT_TRUE(td()->Determine(&m));
+ EXPECT_TRUE(td()->Determine(mod()));
auto ident = std::make_unique<ast::IdentifierExpression>("c");
auto mem_ident = std::make_unique<ast::IdentifierExpression>("mem");
@@ -809,7 +800,7 @@
EXPECT_EQ(mem.result_type()->AsVector()->size(), 2u);
}
-using Expr_Binary_BitwiseTest = testing::TestWithParam<ast::BinaryOp>;
+using Expr_Binary_BitwiseTest = TypeDeterminerTestWithParam<ast::BinaryOp>;
TEST_P(Expr_Binary_BitwiseTest, Scalar) {
auto op = GetParam();
@@ -817,21 +808,16 @@
auto var =
std::make_unique<ast::Variable>("val", ast::StorageClass::kNone, &i32);
-
- Context ctx;
- TypeDeterminer td(&ctx);
-
- ast::Module m;
- m.AddGlobalVariable(std::move(var));
+ mod()->AddGlobalVariable(std::move(var));
// Register the global
- ASSERT_TRUE(td.Determine(&m)) << td.error();
+ ASSERT_TRUE(td()->Determine(mod())) << td()->error();
ast::BinaryExpression expr(
op, std::make_unique<ast::IdentifierExpression>("val"),
std::make_unique<ast::IdentifierExpression>("val"));
- ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
+ ASSERT_TRUE(td()->DetermineResultType(&expr)) << td()->error();
ASSERT_NE(expr.result_type(), nullptr);
EXPECT_TRUE(expr.result_type()->IsI32());
}
@@ -844,21 +830,16 @@
auto var =
std::make_unique<ast::Variable>("val", ast::StorageClass::kNone, &vec3);
-
- Context ctx;
- TypeDeterminer td(&ctx);
-
- ast::Module m;
- m.AddGlobalVariable(std::move(var));
+ mod()->AddGlobalVariable(std::move(var));
// Register the global
- ASSERT_TRUE(td.Determine(&m)) << td.error();
+ ASSERT_TRUE(td()->Determine(mod())) << td()->error();
ast::BinaryExpression expr(
op, std::make_unique<ast::IdentifierExpression>("val"),
std::make_unique<ast::IdentifierExpression>("val"));
- ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
+ ASSERT_TRUE(td()->DetermineResultType(&expr)) << td()->error();
ASSERT_NE(expr.result_type(), nullptr);
ASSERT_TRUE(expr.result_type()->IsVector());
EXPECT_TRUE(expr.result_type()->AsVector()->type()->IsI32());
@@ -877,7 +858,7 @@
ast::BinaryOp::kDivide,
ast::BinaryOp::kModulo));
-using Expr_Binary_LogicalTest = testing::TestWithParam<ast::BinaryOp>;
+using Expr_Binary_LogicalTest = TypeDeterminerTestWithParam<ast::BinaryOp>;
TEST_P(Expr_Binary_LogicalTest, Scalar) {
auto op = GetParam();
@@ -885,21 +866,16 @@
auto var = std::make_unique<ast::Variable>("val", ast::StorageClass::kNone,
&bool_type);
-
- Context ctx;
- TypeDeterminer td(&ctx);
-
- ast::Module m;
- m.AddGlobalVariable(std::move(var));
+ mod()->AddGlobalVariable(std::move(var));
// Register the global
- ASSERT_TRUE(td.Determine(&m)) << td.error();
+ ASSERT_TRUE(td()->Determine((mod()))) << td()->error();
ast::BinaryExpression expr(
op, std::make_unique<ast::IdentifierExpression>("val"),
std::make_unique<ast::IdentifierExpression>("val"));
- ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
+ ASSERT_TRUE(td()->DetermineResultType(&expr)) << td()->error();
ASSERT_NE(expr.result_type(), nullptr);
EXPECT_TRUE(expr.result_type()->IsBool());
}
@@ -912,21 +888,16 @@
auto var =
std::make_unique<ast::Variable>("val", ast::StorageClass::kNone, &vec3);
-
- Context ctx;
- TypeDeterminer td(&ctx);
-
- ast::Module m;
- m.AddGlobalVariable(std::move(var));
+ mod()->AddGlobalVariable(std::move(var));
// Register the global
- ASSERT_TRUE(td.Determine(&m)) << td.error();
+ ASSERT_TRUE(td()->Determine(mod())) << td()->error();
ast::BinaryExpression expr(
op, std::make_unique<ast::IdentifierExpression>("val"),
std::make_unique<ast::IdentifierExpression>("val"));
- ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
+ ASSERT_TRUE(td()->DetermineResultType(&expr)) << td()->error();
ASSERT_NE(expr.result_type(), nullptr);
ASSERT_TRUE(expr.result_type()->IsVector());
EXPECT_TRUE(expr.result_type()->AsVector()->type()->IsBool());
@@ -937,7 +908,7 @@
testing::Values(ast::BinaryOp::kLogicalAnd,
ast::BinaryOp::kLogicalOr));
-using Expr_Binary_CompareTest = testing::TestWithParam<ast::BinaryOp>;
+using Expr_Binary_CompareTest = TypeDeterminerTestWithParam<ast::BinaryOp>;
TEST_P(Expr_Binary_CompareTest, Scalar) {
auto op = GetParam();
@@ -945,21 +916,16 @@
auto var =
std::make_unique<ast::Variable>("val", ast::StorageClass::kNone, &i32);
-
- Context ctx;
- TypeDeterminer td(&ctx);
-
- ast::Module m;
- m.AddGlobalVariable(std::move(var));
+ mod()->AddGlobalVariable(std::move(var));
// Register the global
- ASSERT_TRUE(td.Determine(&m)) << td.error();
+ ASSERT_TRUE(td()->Determine((mod()))) << td()->error();
ast::BinaryExpression expr(
op, std::make_unique<ast::IdentifierExpression>("val"),
std::make_unique<ast::IdentifierExpression>("val"));
- ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
+ ASSERT_TRUE(td()->DetermineResultType(&expr)) << td()->error();
ASSERT_NE(expr.result_type(), nullptr);
EXPECT_TRUE(expr.result_type()->IsBool());
}
@@ -972,21 +938,16 @@
auto var =
std::make_unique<ast::Variable>("val", ast::StorageClass::kNone, &vec3);
-
- Context ctx;
- TypeDeterminer td(&ctx);
-
- ast::Module m;
- m.AddGlobalVariable(std::move(var));
+ mod()->AddGlobalVariable(std::move(var));
// Register the global
- ASSERT_TRUE(td.Determine(&m)) << td.error();
+ ASSERT_TRUE(td()->Determine((mod()))) << td()->error();
ast::BinaryExpression expr(
op, std::make_unique<ast::IdentifierExpression>("val"),
std::make_unique<ast::IdentifierExpression>("val"));
- ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
+ ASSERT_TRUE(td()->DetermineResultType(&expr)) << td()->error();
ASSERT_NE(expr.result_type(), nullptr);
ASSERT_TRUE(expr.result_type()->IsVector());
EXPECT_TRUE(expr.result_type()->AsVector()->type()->IsBool());
@@ -1006,22 +967,17 @@
auto var =
std::make_unique<ast::Variable>("val", ast::StorageClass::kNone, &i32);
-
- Context ctx;
- TypeDeterminer td(&ctx);
-
- ast::Module m;
- m.AddGlobalVariable(std::move(var));
+ mod()->AddGlobalVariable(std::move(var));
// Register the global
- ASSERT_TRUE(td.Determine(&m)) << td.error();
+ ASSERT_TRUE(td()->Determine((mod()))) << td()->error();
ast::BinaryExpression expr(
ast::BinaryOp::kMultiply,
std::make_unique<ast::IdentifierExpression>("val"),
std::make_unique<ast::IdentifierExpression>("val"));
- ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
+ ASSERT_TRUE(td()->DetermineResultType(&expr)) << td()->error();
ASSERT_NE(expr.result_type(), nullptr);
EXPECT_TRUE(expr.result_type()->IsI32());
}
@@ -1034,23 +990,18 @@
std::make_unique<ast::Variable>("scalar", ast::StorageClass::kNone, &f32);
auto vector = std::make_unique<ast::Variable>(
"vector", ast::StorageClass::kNone, &vec3);
-
- Context ctx;
- TypeDeterminer td(&ctx);
-
- ast::Module m;
- m.AddGlobalVariable(std::move(scalar));
- m.AddGlobalVariable(std::move(vector));
+ mod()->AddGlobalVariable(std::move(scalar));
+ mod()->AddGlobalVariable(std::move(vector));
// Register the global
- ASSERT_TRUE(td.Determine(&m)) << td.error();
+ ASSERT_TRUE(td()->Determine((mod()))) << td()->error();
ast::BinaryExpression expr(
ast::BinaryOp::kMultiply,
std::make_unique<ast::IdentifierExpression>("vector"),
std::make_unique<ast::IdentifierExpression>("scalar"));
- ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
+ ASSERT_TRUE(td()->DetermineResultType(&expr)) << td()->error();
ASSERT_NE(expr.result_type(), nullptr);
ASSERT_TRUE(expr.result_type()->IsVector());
EXPECT_TRUE(expr.result_type()->AsVector()->type()->IsF32());
@@ -1065,23 +1016,18 @@
std::make_unique<ast::Variable>("scalar", ast::StorageClass::kNone, &f32);
auto vector = std::make_unique<ast::Variable>(
"vector", ast::StorageClass::kNone, &vec3);
-
- Context ctx;
- TypeDeterminer td(&ctx);
-
- ast::Module m;
- m.AddGlobalVariable(std::move(scalar));
- m.AddGlobalVariable(std::move(vector));
+ mod()->AddGlobalVariable(std::move(scalar));
+ mod()->AddGlobalVariable(std::move(vector));
// Register the global
- ASSERT_TRUE(td.Determine(&m)) << td.error();
+ ASSERT_TRUE(td()->Determine((mod()))) << td()->error();
ast::BinaryExpression expr(
ast::BinaryOp::kMultiply,
std::make_unique<ast::IdentifierExpression>("scalar"),
std::make_unique<ast::IdentifierExpression>("vector"));
- ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
+ ASSERT_TRUE(td()->DetermineResultType(&expr)) << td()->error();
ASSERT_NE(expr.result_type(), nullptr);
ASSERT_TRUE(expr.result_type()->IsVector());
EXPECT_TRUE(expr.result_type()->AsVector()->type()->IsF32());
@@ -1094,22 +1040,17 @@
auto vector = std::make_unique<ast::Variable>(
"vector", ast::StorageClass::kNone, &vec3);
-
- Context ctx;
- TypeDeterminer td(&ctx);
-
- ast::Module m;
- m.AddGlobalVariable(std::move(vector));
+ mod()->AddGlobalVariable(std::move(vector));
// Register the global
- ASSERT_TRUE(td.Determine(&m)) << td.error();
+ ASSERT_TRUE(td()->Determine((mod()))) << td()->error();
ast::BinaryExpression expr(
ast::BinaryOp::kMultiply,
std::make_unique<ast::IdentifierExpression>("vector"),
std::make_unique<ast::IdentifierExpression>("vector"));
- ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
+ ASSERT_TRUE(td()->DetermineResultType(&expr)) << td()->error();
ASSERT_NE(expr.result_type(), nullptr);
ASSERT_TRUE(expr.result_type()->IsVector());
EXPECT_TRUE(expr.result_type()->AsVector()->type()->IsF32());
@@ -1124,23 +1065,18 @@
std::make_unique<ast::Variable>("scalar", ast::StorageClass::kNone, &f32);
auto matrix = std::make_unique<ast::Variable>(
"matrix", ast::StorageClass::kNone, &mat3x2);
-
- Context ctx;
- TypeDeterminer td(&ctx);
-
- ast::Module m;
- m.AddGlobalVariable(std::move(scalar));
- m.AddGlobalVariable(std::move(matrix));
+ mod()->AddGlobalVariable(std::move(scalar));
+ mod()->AddGlobalVariable(std::move(matrix));
// Register the global
- ASSERT_TRUE(td.Determine(&m)) << td.error();
+ ASSERT_TRUE(td()->Determine((mod()))) << td()->error();
ast::BinaryExpression expr(
ast::BinaryOp::kMultiply,
std::make_unique<ast::IdentifierExpression>("matrix"),
std::make_unique<ast::IdentifierExpression>("scalar"));
- ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
+ ASSERT_TRUE(td()->DetermineResultType(&expr)) << td()->error();
ASSERT_NE(expr.result_type(), nullptr);
ASSERT_TRUE(expr.result_type()->IsMatrix());
@@ -1158,23 +1094,18 @@
std::make_unique<ast::Variable>("scalar", ast::StorageClass::kNone, &f32);
auto matrix = std::make_unique<ast::Variable>(
"matrix", ast::StorageClass::kNone, &mat3x2);
-
- Context ctx;
- TypeDeterminer td(&ctx);
-
- ast::Module m;
- m.AddGlobalVariable(std::move(scalar));
- m.AddGlobalVariable(std::move(matrix));
+ mod()->AddGlobalVariable(std::move(scalar));
+ mod()->AddGlobalVariable(std::move(matrix));
// Register the global
- ASSERT_TRUE(td.Determine(&m)) << td.error();
+ ASSERT_TRUE(td()->Determine((mod()))) << td()->error();
ast::BinaryExpression expr(
ast::BinaryOp::kMultiply,
std::make_unique<ast::IdentifierExpression>("scalar"),
std::make_unique<ast::IdentifierExpression>("matrix"));
- ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
+ ASSERT_TRUE(td()->DetermineResultType(&expr)) << td()->error();
ASSERT_NE(expr.result_type(), nullptr);
ASSERT_TRUE(expr.result_type()->IsMatrix());
@@ -1193,23 +1124,18 @@
"vector", ast::StorageClass::kNone, &vec3);
auto matrix = std::make_unique<ast::Variable>(
"matrix", ast::StorageClass::kNone, &mat3x2);
-
- Context ctx;
- TypeDeterminer td(&ctx);
-
- ast::Module m;
- m.AddGlobalVariable(std::move(vector));
- m.AddGlobalVariable(std::move(matrix));
+ mod()->AddGlobalVariable(std::move(vector));
+ mod()->AddGlobalVariable(std::move(matrix));
// Register the global
- ASSERT_TRUE(td.Determine(&m)) << td.error();
+ ASSERT_TRUE(td()->Determine((mod()))) << td()->error();
ast::BinaryExpression expr(
ast::BinaryOp::kMultiply,
std::make_unique<ast::IdentifierExpression>("matrix"),
std::make_unique<ast::IdentifierExpression>("vector"));
- ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
+ ASSERT_TRUE(td()->DetermineResultType(&expr)) << td()->error();
ASSERT_NE(expr.result_type(), nullptr);
ASSERT_TRUE(expr.result_type()->IsVector());
EXPECT_TRUE(expr.result_type()->AsVector()->type()->IsF32());
@@ -1225,23 +1151,18 @@
"vector", ast::StorageClass::kNone, &vec3);
auto matrix = std::make_unique<ast::Variable>(
"matrix", ast::StorageClass::kNone, &mat3x2);
-
- Context ctx;
- TypeDeterminer td(&ctx);
-
- ast::Module m;
- m.AddGlobalVariable(std::move(vector));
- m.AddGlobalVariable(std::move(matrix));
+ mod()->AddGlobalVariable(std::move(vector));
+ mod()->AddGlobalVariable(std::move(matrix));
// Register the global
- ASSERT_TRUE(td.Determine(&m)) << td.error();
+ ASSERT_TRUE(td()->Determine((mod()))) << td()->error();
ast::BinaryExpression expr(
ast::BinaryOp::kMultiply,
std::make_unique<ast::IdentifierExpression>("vector"),
std::make_unique<ast::IdentifierExpression>("matrix"));
- ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
+ ASSERT_TRUE(td()->DetermineResultType(&expr)) << td()->error();
ASSERT_NE(expr.result_type(), nullptr);
ASSERT_TRUE(expr.result_type()->IsVector());
EXPECT_TRUE(expr.result_type()->AsVector()->type()->IsF32());
@@ -1257,23 +1178,18 @@
"mat4x3", ast::StorageClass::kNone, &mat4x3);
auto matrix2 = std::make_unique<ast::Variable>(
"mat3x4", ast::StorageClass::kNone, &mat3x4);
-
- Context ctx;
- TypeDeterminer td(&ctx);
-
- ast::Module m;
- m.AddGlobalVariable(std::move(matrix1));
- m.AddGlobalVariable(std::move(matrix2));
+ mod()->AddGlobalVariable(std::move(matrix1));
+ mod()->AddGlobalVariable(std::move(matrix2));
// Register the global
- ASSERT_TRUE(td.Determine(&m)) << td.error();
+ ASSERT_TRUE(td()->Determine((mod()))) << td()->error();
ast::BinaryExpression expr(
ast::BinaryOp::kMultiply,
std::make_unique<ast::IdentifierExpression>("mat4x3"),
std::make_unique<ast::IdentifierExpression>("mat3x4"));
- ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error();
+ ASSERT_TRUE(td()->DetermineResultType(&expr)) << td()->error();
ASSERT_NE(expr.result_type(), nullptr);
ASSERT_TRUE(expr.result_type()->IsMatrix());
@@ -1284,7 +1200,7 @@
}
using UnaryDerivativeExpressionTest =
- testing::TestWithParam<ast::UnaryDerivative>;
+ TypeDeterminerTestWithParam<ast::UnaryDerivative>;
TEST_P(UnaryDerivativeExpressionTest, Expr_UnaryDerivative) {
auto derivative = GetParam();
@@ -1294,20 +1210,15 @@
auto var =
std::make_unique<ast::Variable>("ident", ast::StorageClass::kNone, &vec4);
-
- ast::Module m;
- m.AddGlobalVariable(std::move(var));
-
- Context ctx;
- TypeDeterminer td(&ctx);
+ mod()->AddGlobalVariable(std::move(var));
// Register the global
- EXPECT_TRUE(td.Determine(&m));
+ EXPECT_TRUE(td()->Determine((mod())));
ast::UnaryDerivativeExpression der(
derivative, ast::DerivativeModifier::kNone,
std::make_unique<ast::IdentifierExpression>("ident"));
- EXPECT_TRUE(td.DetermineResultType(&der));
+ EXPECT_TRUE(td()->DetermineResultType(&der));
ASSERT_NE(der.result_type(), nullptr);
ASSERT_TRUE(der.result_type()->IsVector());
EXPECT_TRUE(der.result_type()->AsVector()->type()->IsF32());
@@ -1319,7 +1230,8 @@
ast::UnaryDerivative::kDpdy,
ast::UnaryDerivative::kFwidth));
-using UnaryMethodExpressionBoolTest = testing::TestWithParam<ast::UnaryMethod>;
+using UnaryMethodExpressionBoolTest =
+ TypeDeterminerTestWithParam<ast::UnaryMethod>;
TEST_P(UnaryMethodExpressionBoolTest, Expr_UnaryMethod_Any) {
auto op = GetParam();
@@ -1328,22 +1240,17 @@
auto var = std::make_unique<ast::Variable>("my_var", ast::StorageClass::kNone,
&vec3);
-
- ast::Module m;
- m.AddGlobalVariable(std::move(var));
+ mod()->AddGlobalVariable(std::move(var));
ast::ExpressionList params;
params.push_back(std::make_unique<ast::IdentifierExpression>("my_var"));
ast::UnaryMethodExpression exp(op, std::move(params));
- Context ctx;
- TypeDeterminer td(&ctx);
-
// Register the variable
- EXPECT_TRUE(td.Determine(&m));
+ EXPECT_TRUE(td()->Determine((mod())));
- EXPECT_TRUE(td.DetermineResultType(&exp));
+ EXPECT_TRUE(td()->DetermineResultType(&exp));
ASSERT_NE(exp.result_type(), nullptr);
EXPECT_TRUE(exp.result_type()->IsBool());
}
@@ -1352,7 +1259,8 @@
testing::Values(ast::UnaryMethod::kAny,
ast::UnaryMethod::kAll));
-using UnaryMethodExpressionVecTest = testing::TestWithParam<ast::UnaryMethod>;
+using UnaryMethodExpressionVecTest =
+ TypeDeterminerTestWithParam<ast::UnaryMethod>;
TEST_P(UnaryMethodExpressionVecTest, Expr_UnaryMethod_Bool) {
auto op = GetParam();
@@ -1361,22 +1269,17 @@
auto var = std::make_unique<ast::Variable>("my_var", ast::StorageClass::kNone,
&vec3);
-
- ast::Module m;
- m.AddGlobalVariable(std::move(var));
+ mod()->AddGlobalVariable(std::move(var));
ast::ExpressionList params;
params.push_back(std::make_unique<ast::IdentifierExpression>("my_var"));
ast::UnaryMethodExpression exp(op, std::move(params));
- Context ctx;
- TypeDeterminer td(&ctx);
-
// Register the variable
- EXPECT_TRUE(td.Determine(&m));
+ EXPECT_TRUE(td()->Determine((mod())));
- EXPECT_TRUE(td.DetermineResultType(&exp));
+ EXPECT_TRUE(td()->DetermineResultType(&exp));
ASSERT_NE(exp.result_type(), nullptr);
ASSERT_TRUE(exp.result_type()->IsVector());
EXPECT_TRUE(exp.result_type()->AsVector()->type()->IsBool());
@@ -1389,22 +1292,17 @@
auto var =
std::make_unique<ast::Variable>("my_var", ast::StorageClass::kNone, &f32);
-
- ast::Module m;
- m.AddGlobalVariable(std::move(var));
+ mod()->AddGlobalVariable(std::move(var));
ast::ExpressionList params;
params.push_back(std::make_unique<ast::IdentifierExpression>("my_var"));
ast::UnaryMethodExpression exp(op, std::move(params));
- Context ctx;
- TypeDeterminer td(&ctx);
-
// Register the variable
- EXPECT_TRUE(td.Determine(&m));
+ EXPECT_TRUE(td()->Determine((mod())));
- EXPECT_TRUE(td.DetermineResultType(&exp));
+ EXPECT_TRUE(td()->DetermineResultType(&exp));
ASSERT_NE(exp.result_type(), nullptr);
EXPECT_TRUE(exp.result_type()->IsBool());
}
@@ -1421,9 +1319,7 @@
auto var = std::make_unique<ast::Variable>("my_var", ast::StorageClass::kNone,
&vec3);
-
- ast::Module m;
- m.AddGlobalVariable(std::move(var));
+ mod()->AddGlobalVariable(std::move(var));
ast::ExpressionList params;
params.push_back(std::make_unique<ast::IdentifierExpression>("my_var"));
@@ -1431,13 +1327,10 @@
ast::UnaryMethodExpression exp(ast::UnaryMethod::kDot, std::move(params));
- Context ctx;
- TypeDeterminer td(&ctx);
-
// Register the variable
- EXPECT_TRUE(td.Determine(&m));
+ EXPECT_TRUE(td()->Determine((mod())));
- EXPECT_TRUE(td.DetermineResultType(&exp));
+ EXPECT_TRUE(td()->DetermineResultType(&exp));
ASSERT_NE(exp.result_type(), nullptr);
EXPECT_TRUE(exp.result_type()->IsF32());
}
@@ -1451,10 +1344,8 @@
std::make_unique<ast::Variable>("v3", ast::StorageClass::kNone, &vec3);
auto var2 =
std::make_unique<ast::Variable>("v2", ast::StorageClass::kNone, &vec2);
-
- ast::Module m;
- m.AddGlobalVariable(std::move(var1));
- m.AddGlobalVariable(std::move(var2));
+ mod()->AddGlobalVariable(std::move(var1));
+ mod()->AddGlobalVariable(std::move(var2));
ast::ExpressionList params;
params.push_back(std::make_unique<ast::IdentifierExpression>("v3"));
@@ -1463,13 +1354,10 @@
ast::UnaryMethodExpression exp(ast::UnaryMethod::kOuterProduct,
std::move(params));
- Context ctx;
- TypeDeterminer td(&ctx);
-
// Register the variable
- EXPECT_TRUE(td.Determine(&m));
+ EXPECT_TRUE(td()->Determine((mod())));
- EXPECT_TRUE(td.DetermineResultType(&exp));
+ EXPECT_TRUE(td()->DetermineResultType(&exp));
ASSERT_NE(exp.result_type(), nullptr);
ASSERT_TRUE(exp.result_type()->IsMatrix());
auto* mat = exp.result_type()->AsMatrix();
@@ -1478,7 +1366,7 @@
EXPECT_EQ(mat->columns(), 2u);
}
-using UnaryOpExpressionTest = testing::TestWithParam<ast::UnaryOp>;
+using UnaryOpExpressionTest = TypeDeterminerTestWithParam<ast::UnaryOp>;
TEST_P(UnaryOpExpressionTest, Expr_UnaryOp) {
auto op = GetParam();
@@ -1488,19 +1376,14 @@
auto var =
std::make_unique<ast::Variable>("ident", ast::StorageClass::kNone, &vec4);
-
- ast::Module m;
- m.AddGlobalVariable(std::move(var));
-
- Context ctx;
- TypeDeterminer td(&ctx);
+ mod()->AddGlobalVariable(std::move(var));
// Register the global
- EXPECT_TRUE(td.Determine(&m));
+ EXPECT_TRUE(td()->Determine((mod())));
ast::UnaryOpExpression der(
op, std::make_unique<ast::IdentifierExpression>("ident"));
- EXPECT_TRUE(td.DetermineResultType(&der));
+ EXPECT_TRUE(td()->DetermineResultType(&der));
ASSERT_NE(der.result_type(), nullptr);
ASSERT_TRUE(der.result_type()->IsVector());
EXPECT_TRUE(der.result_type()->AsVector()->type()->IsF32());
@@ -1525,10 +1408,9 @@
stmts.push_back(std::move(stmt));
func->set_body(std::move(stmts));
- ast::Module m;
- m.AddFunction(std::move(func));
+ mod()->AddFunction(std::move(func));
- EXPECT_TRUE(td()->Determine(&m)) << td()->error();
+ EXPECT_TRUE(td()->Determine((mod()))) << td()->error();
EXPECT_EQ(var_ptr->storage_class(), ast::StorageClass::kFunction);
}
@@ -1547,10 +1429,9 @@
stmts.push_back(std::move(stmt));
func->set_body(std::move(stmts));
- ast::Module m;
- m.AddFunction(std::move(func));
+ mod()->AddFunction(std::move(func));
- EXPECT_TRUE(td()->Determine(&m)) << td()->error();
+ EXPECT_TRUE(td()->Determine((mod()))) << td()->error();
EXPECT_EQ(var_ptr->storage_class(), ast::StorageClass::kNone);
}
@@ -1567,10 +1448,9 @@
stmts.push_back(std::move(stmt));
func->set_body(std::move(stmts));
- ast::Module m;
- m.AddFunction(std::move(func));
+ mod()->AddFunction(std::move(func));
- EXPECT_FALSE(td()->Determine(&m));
+ EXPECT_FALSE(td()->Determine((mod())));
EXPECT_EQ(td()->error(),
"function variable has a non-function storage class");
}