@@ -109,6 +109,7 @@ TEST_F(MotionBlocksTest, RegisterBlocks)
109109 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " motion_changexby" , &MotionBlocks::compileChangeXBy));
110110 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " motion_setx" , &MotionBlocks::compileSetX));
111111 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " motion_changeyby" , &MotionBlocks::compileChangeYBy));
112+ EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " motion_sety" , &MotionBlocks::compileSetY));
112113
113114 // Inputs
114115 EXPECT_CALL (m_engineMock, addInput (m_section.get (), " STEPS" , MotionBlocks::STEPS));
@@ -1042,3 +1043,42 @@ TEST_F(MotionBlocksTest, ChangeYByImpl)
10421043 ASSERT_EQ (vm.registerCount (), 0 );
10431044 ASSERT_EQ (std::round (sprite.y () * 1000 ) / 1000 , 335.857 );
10441045}
1046+
1047+ TEST_F (MotionBlocksTest, SetY)
1048+ {
1049+ Compiler compiler (&m_engineMock);
1050+
1051+ // set y to (189.42)
1052+ auto block = std::make_shared<Block>(" a" , " motion_sety" );
1053+ addValueInput (block, " Y" , MotionBlocks::Y, 189.42 );
1054+
1055+ EXPECT_CALL (m_engineMock, functionIndex (&MotionBlocks::setY)).WillOnce (Return (0 ));
1056+
1057+ compiler.init ();
1058+ compiler.setBlock (block);
1059+ MotionBlocks::compileSetY (&compiler);
1060+ compiler.end ();
1061+
1062+ ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_CONST, 0 , vm::OP_EXEC, 0 , vm::OP_HALT }));
1063+ ASSERT_EQ (compiler.constValues ().size (), 1 );
1064+ ASSERT_EQ (compiler.constValues ()[0 ].toDouble (), 189.42 );
1065+ }
1066+
1067+ TEST_F (MotionBlocksTest, SetYImpl)
1068+ {
1069+ static unsigned int bytecode[] = { vm::OP_START, vm::OP_CONST, 0 , vm::OP_EXEC, 0 , vm::OP_HALT };
1070+ static BlockFunc functions[] = { &MotionBlocks::setY };
1071+ static Value constValues[] = { 189.42 };
1072+
1073+ Sprite sprite;
1074+ sprite.setY (-15.056 );
1075+
1076+ VirtualMachine vm (&sprite, nullptr , nullptr );
1077+ vm.setBytecode (bytecode);
1078+ vm.setFunctions (functions);
1079+ vm.setConstValues (constValues);
1080+ vm.run ();
1081+
1082+ ASSERT_EQ (vm.registerCount (), 0 );
1083+ ASSERT_EQ (sprite.y (), 189.42 );
1084+ }
0 commit comments