@@ -106,6 +106,7 @@ TEST_F(MotionBlocksTest, RegisterBlocks)
106106 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " motion_goto" , &MotionBlocks::compileGoTo));
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));
109+ EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " motion_changexby" , &MotionBlocks::compileChangeXBy));
109110
110111 // Inputs
111112 EXPECT_CALL (m_engineMock, addInput (m_section.get (), " STEPS" , MotionBlocks::STEPS));
@@ -116,6 +117,7 @@ TEST_F(MotionBlocksTest, RegisterBlocks)
116117 EXPECT_CALL (m_engineMock, addInput (m_section.get (), " Y" , MotionBlocks::Y));
117118 EXPECT_CALL (m_engineMock, addInput (m_section.get (), " TO" , MotionBlocks::TO));
118119 EXPECT_CALL (m_engineMock, addInput (m_section.get (), " SECS" , MotionBlocks::SECS));
120+ EXPECT_CALL (m_engineMock, addInput (m_section.get (), " DX" , MotionBlocks::DX));
119121
120122 m_section->registerBlocks (&m_engineMock);
121123}
@@ -920,3 +922,42 @@ TEST_F(MotionBlocksTest, GlideToImpl)
920922 MotionBlocks::clock = Clock::instance ().get ();
921923 MotionBlocks::rng = RandomGenerator::instance ().get ();
922924}
925+
926+ TEST_F (MotionBlocksTest, ChangeXBy)
927+ {
928+ Compiler compiler (&m_engineMock);
929+
930+ // change x by (56.54)
931+ auto block = std::make_shared<Block>(" a" , " motion_changexby" );
932+ addValueInput (block, " DX" , MotionBlocks::DX, 56.54 );
933+
934+ EXPECT_CALL (m_engineMock, functionIndex (&MotionBlocks::changeXBy)).WillOnce (Return (0 ));
935+
936+ compiler.init ();
937+ compiler.setBlock (block);
938+ MotionBlocks::compileChangeXBy (&compiler);
939+ compiler.end ();
940+
941+ ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_CONST, 0 , vm::OP_EXEC, 0 , vm::OP_HALT }));
942+ ASSERT_EQ (compiler.constValues ().size (), 1 );
943+ ASSERT_EQ (compiler.constValues ()[0 ].toDouble (), 56.54 );
944+ }
945+
946+ TEST_F (MotionBlocksTest, ChangeXByImpl)
947+ {
948+ static unsigned int bytecode[] = { vm::OP_START, vm::OP_CONST, 0 , vm::OP_EXEC, 0 , vm::OP_HALT };
949+ static BlockFunc functions[] = { &MotionBlocks::changeXBy };
950+ static Value constValues[] = { 56.54 };
951+
952+ Sprite sprite;
953+ sprite.setX (-23.4 );
954+
955+ VirtualMachine vm (&sprite, nullptr , nullptr );
956+ vm.setBytecode (bytecode);
957+ vm.setFunctions (functions);
958+ vm.setConstValues (constValues);
959+ vm.run ();
960+
961+ ASSERT_EQ (vm.registerCount (), 0 );
962+ ASSERT_EQ (sprite.x (), 33.14 );
963+ }
0 commit comments