@@ -2106,6 +2106,56 @@ TEST_F(LLVMCodeBuilderTest, ReadVariable)
21062106 ASSERT_EQ (testing::internal::GetCapturedStdout (), expected);
21072107}
21082108
2109+ TEST_F (LLVMCodeBuilderTest, CastNonRawValueToUnknownType)
2110+ {
2111+ Stage stage;
2112+ Sprite sprite;
2113+ sprite.setEngine (&m_engine);
2114+ EXPECT_CALL (m_engine, stage ()).WillRepeatedly (Return (&stage));
2115+
2116+ auto var = std::make_shared<Variable>(" " , " " , 87 );
2117+ stage.addVariable (var);
2118+
2119+ createBuilder (&sprite, true );
2120+
2121+ // Unknown type
2122+ CompilerValue *v = m_builder->addVariableValue (var.get ());
2123+ m_builder->addFunctionCall (" test_print_unknown" , Compiler::StaticType::Void, { Compiler::StaticType::Unknown }, { v });
2124+
2125+ // Number
2126+ v = m_builder->addConstValue (23.5 );
2127+ m_builder->createVariableWrite (var.get (), v);
2128+ v = m_builder->addVariableValue (var.get ());
2129+ m_builder->addFunctionCall (" test_print_unknown" , Compiler::StaticType::Void, { Compiler::StaticType::Unknown }, { v });
2130+
2131+ // String
2132+ v = m_builder->addConstValue (" Hello world" );
2133+ m_builder->createVariableWrite (var.get (), v);
2134+ v = m_builder->addVariableValue (var.get ());
2135+ m_builder->addFunctionCall (" test_print_unknown" , Compiler::StaticType::Void, { Compiler::StaticType::Unknown }, { v });
2136+
2137+ // Bool
2138+ v = m_builder->addConstValue (true );
2139+ m_builder->createVariableWrite (var.get (), v);
2140+ v = m_builder->addVariableValue (var.get ());
2141+ m_builder->addFunctionCall (" test_print_unknown" , Compiler::StaticType::Void, { Compiler::StaticType::Unknown }, { v });
2142+
2143+ std::string expected;
2144+ expected += var->value ().toString () + ' \n ' ;
2145+ expected += " 23.5\n " ;
2146+ expected += " Hello world\n " ;
2147+ expected += " true\n " ;
2148+
2149+ auto code = m_builder->finalize ();
2150+ Script script (&sprite, nullptr , nullptr );
2151+ script.setCode (code);
2152+ Thread thread (&sprite, nullptr , &script);
2153+ auto ctx = code->createExecutionContext (&thread);
2154+ testing::internal::CaptureStdout ();
2155+ code->run (ctx.get ());
2156+ ASSERT_EQ (testing::internal::GetCapturedStdout (), expected);
2157+ }
2158+
21092159TEST_F (LLVMCodeBuilderTest, ClearList)
21102160{
21112161 Stage stage;
0 commit comments