@@ -107,6 +107,7 @@ TEST_F(MotionBlocksTest, RegisterBlocks)
107
107
EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " motion_glidesecstoxy" , &MotionBlocks::compileGlideSecsToXY));
108
108
EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " motion_glideto" , &MotionBlocks::compileGlideTo));
109
109
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));
110
111
111
112
// Inputs
112
113
EXPECT_CALL (m_engineMock, addInput (m_section.get (), " STEPS" , MotionBlocks::STEPS));
@@ -961,3 +962,42 @@ TEST_F(MotionBlocksTest, ChangeXByImpl)
961
962
ASSERT_EQ (vm.registerCount (), 0 );
962
963
ASSERT_EQ (sprite.x (), 33.14 );
963
964
}
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