Skip to content

Commit b55c4ac

Browse files
committed
LLVMCodeBuilder: Add test for variable and list loop type analysis
1 parent 1c36433 commit b55c4ac

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed

test/llvm/llvmcodebuilder_test.cpp

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5640,6 +5640,72 @@ TEST_F(LLVMCodeBuilderTest, ListLoopTypeAnalysis12)
56405640
ASSERT_EQ(testing::internal::GetCapturedStdout(), expected);
56415641
}
56425642

5643+
TEST_F(LLVMCodeBuilderTest, VarAndListLoopTypeAnalysis)
5644+
{
5645+
Stage stage;
5646+
Sprite sprite;
5647+
sprite.setEngine(&m_engine);
5648+
EXPECT_CALL(m_engine, stage()).WillRepeatedly(Return(&stage));
5649+
5650+
auto var = std::make_shared<Variable>("", "");
5651+
sprite.addVariable(var);
5652+
5653+
auto list = std::make_shared<List>("", "");
5654+
sprite.addList(list);
5655+
5656+
createBuilder(&sprite, true);
5657+
5658+
CompilerValue *v = m_builder->addConstValue(-2);
5659+
m_builder->createVariableWrite(var.get(), v);
5660+
5661+
m_builder->createListClear(list.get());
5662+
5663+
v = m_builder->addConstValue(5.25);
5664+
m_builder->createListAppend(list.get(), v);
5665+
5666+
v = m_builder->addConstValue(3);
5667+
m_builder->beginRepeatLoop(v);
5668+
{
5669+
// Type is unknown here because a variable value with unknown type is added later
5670+
v = m_builder->createSub(m_builder->addListSize(list.get()), m_builder->addConstValue(1));
5671+
v = m_builder->addListItem(list.get(), v);
5672+
m_builder->addFunctionCall("test_print_number", Compiler::StaticType::Void, { Compiler::StaticType::Number }, { v });
5673+
5674+
v = m_builder->addListItemIndex(list.get(), m_builder->addConstValue(5.25));
5675+
m_builder->addFunctionCall("test_print_number", Compiler::StaticType::Void, { Compiler::StaticType::Number }, { v });
5676+
5677+
v = m_builder->addListContains(list.get(), m_builder->addConstValue(5.25));
5678+
m_builder->addFunctionCall("test_print_bool", Compiler::StaticType::Void, { Compiler::StaticType::Bool }, { v });
5679+
5680+
v = m_builder->addVariableValue(var.get());
5681+
m_builder->createListAppend(list.get(), v);
5682+
5683+
v = m_builder->addConstValue("test");
5684+
m_builder->createVariableWrite(var.get(), v);
5685+
}
5686+
m_builder->endLoop();
5687+
5688+
std::string expected =
5689+
"5.25\n"
5690+
"0\n"
5691+
"1\n"
5692+
"-2\n"
5693+
"0\n"
5694+
"1\n"
5695+
"0\n"
5696+
"0\n"
5697+
"1\n";
5698+
5699+
auto code = m_builder->finalize();
5700+
Script script(&sprite, nullptr, nullptr);
5701+
script.setCode(code);
5702+
Thread thread(&sprite, nullptr, &script);
5703+
auto ctx = code->createExecutionContext(&thread);
5704+
testing::internal::CaptureStdout();
5705+
code->run(ctx.get());
5706+
ASSERT_EQ(testing::internal::GetCapturedStdout(), expected);
5707+
}
5708+
56435709
TEST_F(LLVMCodeBuilderTest, StopNoWarp)
56445710
{
56455711
Sprite sprite;

0 commit comments

Comments
 (0)