@@ -111,6 +111,7 @@ TEST_F(MotionBlocksTest, RegisterBlocks)
111111 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " motion_changeyby" , &MotionBlocks::compileChangeYBy));
112112 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " motion_sety" , &MotionBlocks::compileSetY));
113113 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " motion_setrotationstyle" , &MotionBlocks::compileSetRotationStyle));
114+ EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " motion_xposition" , &MotionBlocks::compileXPosition));
114115
115116 // Inputs
116117 EXPECT_CALL (m_engineMock, addInput (m_section.get (), " STEPS" , MotionBlocks::STEPS));
@@ -1153,3 +1154,37 @@ TEST_F(MotionBlocksTest, SetRotationStyleImpl)
11531154 ASSERT_EQ (vm.registerCount (), 0 );
11541155 ASSERT_EQ (sprite.rotationStyle (), Sprite::RotationStyle::AllAround);
11551156}
1157+
1158+ TEST_F (MotionBlocksTest, XPosition)
1159+ {
1160+ Compiler compiler (&m_engineMock);
1161+
1162+ auto block = std::make_shared<Block>(" a" , " motion_xposition" );
1163+
1164+ EXPECT_CALL (m_engineMock, functionIndex (&MotionBlocks::xPosition)).WillOnce (Return (0 ));
1165+
1166+ compiler.init ();
1167+ compiler.setBlock (block);
1168+ MotionBlocks::compileXPosition (&compiler);
1169+ compiler.end ();
1170+
1171+ ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_EXEC, 0 , vm::OP_HALT }));
1172+ ASSERT_TRUE (compiler.constValues ().empty ());
1173+ }
1174+
1175+ TEST_F (MotionBlocksTest, XPositionImpl)
1176+ {
1177+ static unsigned int bytecode[] = { vm::OP_START, vm::OP_EXEC, 0 , vm::OP_HALT };
1178+ static BlockFunc functions[] = { &MotionBlocks::xPosition };
1179+
1180+ Sprite sprite;
1181+ sprite.setX (198.0874 );
1182+
1183+ VirtualMachine vm (&sprite, nullptr , nullptr );
1184+ vm.setBytecode (bytecode);
1185+ vm.setFunctions (functions);
1186+ vm.run ();
1187+
1188+ ASSERT_EQ (vm.registerCount (), 1 );
1189+ ASSERT_EQ (vm.getInput (0 , 1 )->toDouble (), 198.0874 );
1190+ }
0 commit comments