@@ -108,6 +108,7 @@ TEST_F(MotionBlocksTest, RegisterBlocks)
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
110
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));
111
112
112
113
// Inputs
113
114
EXPECT_CALL (m_engineMock, addInput (m_section.get (), " STEPS" , MotionBlocks::STEPS));
@@ -119,6 +120,7 @@ TEST_F(MotionBlocksTest, RegisterBlocks)
119
120
EXPECT_CALL (m_engineMock, addInput (m_section.get (), " TO" , MotionBlocks::TO));
120
121
EXPECT_CALL (m_engineMock, addInput (m_section.get (), " SECS" , MotionBlocks::SECS));
121
122
EXPECT_CALL (m_engineMock, addInput (m_section.get (), " DX" , MotionBlocks::DX));
123
+ EXPECT_CALL (m_engineMock, addInput (m_section.get (), " DY" , MotionBlocks::DY));
122
124
123
125
m_section->registerBlocks (&m_engineMock);
124
126
}
@@ -1001,3 +1003,42 @@ TEST_F(MotionBlocksTest, SetXImpl)
1001
1003
ASSERT_EQ (vm.registerCount (), 0 );
1002
1004
ASSERT_EQ (sprite.x (), -63.4 );
1003
1005
}
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