@@ -1381,6 +1381,79 @@ TEST_F(LLVMCodeBuilderTest, WriteVariable)
13811381 ASSERT_EQ (localVar3->value (), true );
13821382}
13831383
1384+ TEST_F (LLVMCodeBuilderTest, Select)
1385+ {
1386+ EngineMock engine;
1387+ Stage stage;
1388+ Sprite sprite;
1389+ sprite.setEngine (&engine);
1390+ EXPECT_CALL (engine, stage ()).WillRepeatedly (Return (&stage));
1391+
1392+ createBuilder (&sprite, true );
1393+
1394+ // Number
1395+ CompilerValue *v = m_builder->addConstValue (true );
1396+ v = m_builder->createSelect (v, m_builder->addConstValue (5.8 ), m_builder->addConstValue (-17.42 ), Compiler::StaticType::Number);
1397+ m_builder->addFunctionCall (" test_print_number" , Compiler::StaticType::Void, { Compiler::StaticType::Number }, { v });
1398+
1399+ v = m_builder->addConstValue (false );
1400+ v = m_builder->createSelect (v, m_builder->addConstValue (5.8 ), m_builder->addConstValue (-17.42 ), Compiler::StaticType::Number);
1401+ m_builder->addFunctionCall (" test_print_number" , Compiler::StaticType::Void, { Compiler::StaticType::Number }, { v });
1402+
1403+ // Bool
1404+ v = m_builder->addConstValue (true );
1405+ v = m_builder->createSelect (v, m_builder->addConstValue (true ), m_builder->addConstValue (false ), Compiler::StaticType::Bool);
1406+ m_builder->addFunctionCall (" test_print_bool" , Compiler::StaticType::Void, { Compiler::StaticType::Bool }, { v });
1407+
1408+ v = m_builder->addConstValue (false );
1409+ v = m_builder->createSelect (v, m_builder->addConstValue (true ), m_builder->addConstValue (false ), Compiler::StaticType::Bool);
1410+ m_builder->addFunctionCall (" test_print_bool" , Compiler::StaticType::Void, { Compiler::StaticType::Bool }, { v });
1411+
1412+ // String
1413+ v = m_builder->addConstValue (true );
1414+ v = m_builder->createSelect (v, m_builder->addConstValue (" hello" ), m_builder->addConstValue (" world" ), Compiler::StaticType::String);
1415+ m_builder->addFunctionCall (" test_print_string" , Compiler::StaticType::Void, { Compiler::StaticType::String }, { v });
1416+
1417+ v = m_builder->addConstValue (false );
1418+ v = m_builder->createSelect (v, m_builder->addConstValue (" hello" ), m_builder->addConstValue (" world" ), Compiler::StaticType::String);
1419+ m_builder->addFunctionCall (" test_print_string" , Compiler::StaticType::Void, { Compiler::StaticType::String }, { v });
1420+
1421+ // Different types
1422+ v = m_builder->addConstValue (true );
1423+ v = m_builder->createSelect (v, m_builder->addConstValue (" 543" ), m_builder->addConstValue (" true" ), Compiler::StaticType::Number);
1424+ m_builder->addFunctionCall (" test_print_number" , Compiler::StaticType::Void, { Compiler::StaticType::Number }, { v });
1425+
1426+ v = m_builder->addConstValue (false );
1427+ v = m_builder->createSelect (v, m_builder->addConstValue (" 543" ), m_builder->addConstValue (" true" ), Compiler::StaticType::Number);
1428+ m_builder->addFunctionCall (" test_print_number" , Compiler::StaticType::Void, { Compiler::StaticType::Number }, { v });
1429+
1430+ v = m_builder->addConstValue (true );
1431+ v = m_builder->createSelect (v, m_builder->addConstValue (1 ), m_builder->addConstValue (" false" ), Compiler::StaticType::Bool);
1432+ m_builder->addFunctionCall (" test_print_bool" , Compiler::StaticType::Void, { Compiler::StaticType::Bool }, { v });
1433+
1434+ v = m_builder->addConstValue (false );
1435+ v = m_builder->createSelect (v, m_builder->addConstValue (1 ), m_builder->addConstValue (" false" ), Compiler::StaticType::Bool);
1436+ m_builder->addFunctionCall (" test_print_bool" , Compiler::StaticType::Void, { Compiler::StaticType::Bool }, { v });
1437+
1438+ static const std::string expected =
1439+ " 5.8\n "
1440+ " -17.42\n "
1441+ " 1\n "
1442+ " 0\n "
1443+ " hello\n "
1444+ " world\n "
1445+ " 543\n "
1446+ " 0\n "
1447+ " 1\n "
1448+ " 0\n " ;
1449+
1450+ auto code = m_builder->finalize ();
1451+ testing::internal::CaptureStdout ();
1452+ auto ctx = code->createExecutionContext (&sprite);
1453+ code->run (ctx.get ());
1454+ ASSERT_EQ (testing::internal::GetCapturedStdout (), expected);
1455+ }
1456+
13841457TEST_F (LLVMCodeBuilderTest, ReadVariable)
13851458{
13861459 EngineMock engine;
0 commit comments