@@ -1381,6 +1381,79 @@ TEST_F(LLVMCodeBuilderTest, WriteVariable)
1381
1381
ASSERT_EQ (localVar3->value (), true );
1382
1382
}
1383
1383
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
+
1384
1457
TEST_F (LLVMCodeBuilderTest, ReadVariable)
1385
1458
{
1386
1459
EngineMock engine;
0 commit comments