@@ -107,6 +107,7 @@ TEST_F(MotionBlocksTest, RegisterBlocks)
107107 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " motion_glidesecstoxy" , &MotionBlocks::compileGlideSecsToXY));
108108 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " motion_glideto" , &MotionBlocks::compileGlideTo));
109109 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " motion_changexby" , &MotionBlocks::compileChangeXBy));
110+ EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " motion_setx" , &MotionBlocks::compileSetX));
110111
111112 // Inputs
112113 EXPECT_CALL (m_engineMock, addInput (m_section.get (), " STEPS" , MotionBlocks::STEPS));
@@ -961,3 +962,42 @@ TEST_F(MotionBlocksTest, ChangeXByImpl)
961962 ASSERT_EQ (vm.registerCount (), 0 );
962963 ASSERT_EQ (sprite.x (), 33.14 );
963964}
965+
966+ TEST_F (MotionBlocksTest, SetX)
967+ {
968+ Compiler compiler (&m_engineMock);
969+
970+ // set x to (-63.4)
971+ auto block = std::make_shared<Block>(" a" , " motion_setx" );
972+ addValueInput (block, " X" , MotionBlocks::X, -63.4 );
973+
974+ EXPECT_CALL (m_engineMock, functionIndex (&MotionBlocks::setX)).WillOnce (Return (0 ));
975+
976+ compiler.init ();
977+ compiler.setBlock (block);
978+ MotionBlocks::compileSetX (&compiler);
979+ compiler.end ();
980+
981+ ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_CONST, 0 , vm::OP_EXEC, 0 , vm::OP_HALT }));
982+ ASSERT_EQ (compiler.constValues ().size (), 1 );
983+ ASSERT_EQ (compiler.constValues ()[0 ].toDouble (), -63.4 );
984+ }
985+
986+ TEST_F (MotionBlocksTest, SetXImpl)
987+ {
988+ static unsigned int bytecode[] = { vm::OP_START, vm::OP_CONST, 0 , vm::OP_EXEC, 0 , vm::OP_HALT };
989+ static BlockFunc functions[] = { &MotionBlocks::setX };
990+ static Value constValues[] = { -63.4 };
991+
992+ Sprite sprite;
993+ sprite.setX (239.98 );
994+
995+ VirtualMachine vm (&sprite, nullptr , nullptr );
996+ vm.setBytecode (bytecode);
997+ vm.setFunctions (functions);
998+ vm.setConstValues (constValues);
999+ vm.run ();
1000+
1001+ ASSERT_EQ (vm.registerCount (), 0 );
1002+ ASSERT_EQ (sprite.x (), -63.4 );
1003+ }
0 commit comments