@@ -108,6 +108,7 @@ TEST_F(MotionBlocksTest, RegisterBlocks)
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));
110110 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " motion_setx" , &MotionBlocks::compileSetX));
111+ EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " motion_changeyby" , &MotionBlocks::compileChangeYBy));
111112
112113 // Inputs
113114 EXPECT_CALL (m_engineMock, addInput (m_section.get (), " STEPS" , MotionBlocks::STEPS));
@@ -119,6 +120,7 @@ TEST_F(MotionBlocksTest, RegisterBlocks)
119120 EXPECT_CALL (m_engineMock, addInput (m_section.get (), " TO" , MotionBlocks::TO));
120121 EXPECT_CALL (m_engineMock, addInput (m_section.get (), " SECS" , MotionBlocks::SECS));
121122 EXPECT_CALL (m_engineMock, addInput (m_section.get (), " DX" , MotionBlocks::DX));
123+ EXPECT_CALL (m_engineMock, addInput (m_section.get (), " DY" , MotionBlocks::DY));
122124
123125 m_section->registerBlocks (&m_engineMock);
124126}
@@ -1001,3 +1003,42 @@ TEST_F(MotionBlocksTest, SetXImpl)
10011003 ASSERT_EQ (vm.registerCount (), 0 );
10021004 ASSERT_EQ (sprite.x (), -63.4 );
10031005}
1006+
1007+ TEST_F (MotionBlocksTest, ChangeYBy)
1008+ {
1009+ Compiler compiler (&m_engineMock);
1010+
1011+ // change y by (135.2)
1012+ auto block = std::make_shared<Block>(" a" , " motion_changeyby" );
1013+ addValueInput (block, " DY" , MotionBlocks::DY, 135.2 );
1014+
1015+ EXPECT_CALL (m_engineMock, functionIndex (&MotionBlocks::changeYBy)).WillOnce (Return (0 ));
1016+
1017+ compiler.init ();
1018+ compiler.setBlock (block);
1019+ MotionBlocks::compileChangeYBy (&compiler);
1020+ compiler.end ();
1021+
1022+ ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_CONST, 0 , vm::OP_EXEC, 0 , vm::OP_HALT }));
1023+ ASSERT_EQ (compiler.constValues ().size (), 1 );
1024+ ASSERT_EQ (compiler.constValues ()[0 ].toDouble (), 135.2 );
1025+ }
1026+
1027+ TEST_F (MotionBlocksTest, ChangeYByImpl)
1028+ {
1029+ static unsigned int bytecode[] = { vm::OP_START, vm::OP_CONST, 0 , vm::OP_EXEC, 0 , vm::OP_HALT };
1030+ static BlockFunc functions[] = { &MotionBlocks::changeYBy };
1031+ static Value constValues[] = { 135.2 };
1032+
1033+ Sprite sprite;
1034+ sprite.setY (200.657 );
1035+
1036+ VirtualMachine vm (&sprite, nullptr , nullptr );
1037+ vm.setBytecode (bytecode);
1038+ vm.setFunctions (functions);
1039+ vm.setConstValues (constValues);
1040+ vm.run ();
1041+
1042+ ASSERT_EQ (vm.registerCount (), 0 );
1043+ ASSERT_EQ (std::round (sprite.y () * 1000 ) / 1000 , 335.857 );
1044+ }
0 commit comments