Refactor Expression to use std::variant instead of a union (#586)

This commit is contained in:
Geoff Romer
2021-06-22 12:19:49 -07:00
committed by GitHub
parent 0a7895e218
commit 1916258e9b
5 changed files with 131 additions and 119 deletions
@@ -13,7 +13,7 @@ TEST(ParenContentsTest, EmptyAsExpression) {
ParenContents contents;
const Expression* expression = contents.AsExpression(/*line_num=*/1);
EXPECT_EQ(expression->line_num, 1);
ASSERT_EQ(expression->tag, ExpressionKind::Tuple);
ASSERT_EQ(expression->tag(), ExpressionKind::Tuple);
EXPECT_EQ(expression->GetTuple().fields->size(), 0);
}
@@ -21,7 +21,7 @@ TEST(ParenContentsTest, EmptyAsTuple) {
ParenContents contents;
const Expression* tuple = contents.AsTuple(/*line_num=*/1);
EXPECT_EQ(tuple->line_num, 1);
ASSERT_EQ(tuple->tag, ExpressionKind::Tuple);
ASSERT_EQ(tuple->tag(), ExpressionKind::Tuple);
EXPECT_EQ(tuple->GetTuple().fields->size(), 0);
}
@@ -38,7 +38,7 @@ TEST(ParenContentsTest, UnaryNoCommaAsExpression) {
const Expression* expression = contents.AsExpression(/*line_num=*/1);
EXPECT_EQ(expression->line_num, 2);
ASSERT_EQ(expression->tag, ExpressionKind::Integer);
ASSERT_EQ(expression->tag(), ExpressionKind::Integer);
}
TEST(ParenContentsTest, UnaryNoCommaAsTuple) {
@@ -48,10 +48,10 @@ TEST(ParenContentsTest, UnaryNoCommaAsTuple) {
const Expression* tuple = contents.AsTuple(/*line_num=*/1);
EXPECT_EQ(tuple->line_num, 1);
ASSERT_EQ(tuple->tag, ExpressionKind::Tuple);
ASSERT_EQ(tuple->tag(), ExpressionKind::Tuple);
std::vector<FieldInitializer> fields = *tuple->GetTuple().fields;
ASSERT_EQ(fields.size(), 1);
EXPECT_EQ(fields[0].expression->tag, ExpressionKind::Integer);
EXPECT_EQ(fields[0].expression->tag(), ExpressionKind::Integer);
}
TEST(ParenContentsTest, UnaryWithCommaAsExpression) {
@@ -61,10 +61,10 @@ TEST(ParenContentsTest, UnaryWithCommaAsExpression) {
const Expression* expression = contents.AsExpression(/*line_num=*/1);
EXPECT_EQ(expression->line_num, 1);
ASSERT_EQ(expression->tag, ExpressionKind::Tuple);
ASSERT_EQ(expression->tag(), ExpressionKind::Tuple);
std::vector<FieldInitializer> fields = *expression->GetTuple().fields;
ASSERT_EQ(fields.size(), 1);
EXPECT_EQ(fields[0].expression->tag, ExpressionKind::Integer);
EXPECT_EQ(fields[0].expression->tag(), ExpressionKind::Integer);
}
TEST(ParenContentsTest, UnaryWithCommaAsTuple) {
@@ -74,10 +74,10 @@ TEST(ParenContentsTest, UnaryWithCommaAsTuple) {
const Expression* tuple = contents.AsTuple(/*line_num=*/1);
EXPECT_EQ(tuple->line_num, 1);
ASSERT_EQ(tuple->tag, ExpressionKind::Tuple);
ASSERT_EQ(tuple->tag(), ExpressionKind::Tuple);
std::vector<FieldInitializer> fields = *tuple->GetTuple().fields;
ASSERT_EQ(fields.size(), 1);
EXPECT_EQ(fields[0].expression->tag, ExpressionKind::Integer);
EXPECT_EQ(fields[0].expression->tag(), ExpressionKind::Integer);
}
TEST(ParenContentsTest, BinaryAsExpression) {
@@ -88,11 +88,11 @@ TEST(ParenContentsTest, BinaryAsExpression) {
const Expression* expression = contents.AsExpression(/*line_num=*/1);
EXPECT_EQ(expression->line_num, 1);
ASSERT_EQ(expression->tag, ExpressionKind::Tuple);
ASSERT_EQ(expression->tag(), ExpressionKind::Tuple);
std::vector<FieldInitializer> fields = *expression->GetTuple().fields;
ASSERT_EQ(fields.size(), 2);
EXPECT_EQ(fields[0].expression->tag, ExpressionKind::Integer);
EXPECT_EQ(fields[1].expression->tag, ExpressionKind::Integer);
EXPECT_EQ(fields[0].expression->tag(), ExpressionKind::Integer);
EXPECT_EQ(fields[1].expression->tag(), ExpressionKind::Integer);
}
TEST(ParenContentsTest, BinaryAsTuple) {
@@ -103,11 +103,11 @@ TEST(ParenContentsTest, BinaryAsTuple) {
const Expression* tuple = contents.AsTuple(/*line_num=*/1);
EXPECT_EQ(tuple->line_num, 1);
ASSERT_EQ(tuple->tag, ExpressionKind::Tuple);
ASSERT_EQ(tuple->tag(), ExpressionKind::Tuple);
std::vector<FieldInitializer> fields = *tuple->GetTuple().fields;
ASSERT_EQ(fields.size(), 2);
EXPECT_EQ(fields[0].expression->tag, ExpressionKind::Integer);
EXPECT_EQ(fields[1].expression->tag, ExpressionKind::Integer);
EXPECT_EQ(fields[0].expression->tag(), ExpressionKind::Integer);
EXPECT_EQ(fields[1].expression->tag(), ExpressionKind::Integer);
}
} // namespace