@@ -112,6 +112,7 @@ TEST_F(MotionBlocksTest, RegisterBlocks)
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));
114114 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " motion_xposition" , &MotionBlocks::compileXPosition));
115+ EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " motion_yposition" , &MotionBlocks::compileYPosition));
115116
116117 // Inputs
117118 EXPECT_CALL (m_engineMock, addInput (m_section.get (), " STEPS" , MotionBlocks::STEPS));
@@ -1188,3 +1189,37 @@ TEST_F(MotionBlocksTest, XPositionImpl)
11881189 ASSERT_EQ (vm.registerCount (), 1 );
11891190 ASSERT_EQ (vm.getInput (0 , 1 )->toDouble (), 198.0874 );
11901191}
1192+
1193+ TEST_F (MotionBlocksTest, YPosition)
1194+ {
1195+ Compiler compiler (&m_engineMock);
1196+
1197+ auto block = std::make_shared<Block>(" a" , " motion_yposition" );
1198+
1199+ EXPECT_CALL (m_engineMock, functionIndex (&MotionBlocks::yPosition)).WillOnce (Return (0 ));
1200+
1201+ compiler.init ();
1202+ compiler.setBlock (block);
1203+ MotionBlocks::compileYPosition (&compiler);
1204+ compiler.end ();
1205+
1206+ ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_EXEC, 0 , vm::OP_HALT }));
1207+ ASSERT_TRUE (compiler.constValues ().empty ());
1208+ }
1209+
1210+ TEST_F (MotionBlocksTest, YPositionImpl)
1211+ {
1212+ static unsigned int bytecode[] = { vm::OP_START, vm::OP_EXEC, 0 , vm::OP_HALT };
1213+ static BlockFunc functions[] = { &MotionBlocks::yPosition };
1214+
1215+ Sprite sprite;
1216+ sprite.setY (-68.5408 );
1217+
1218+ VirtualMachine vm (&sprite, nullptr , nullptr );
1219+ vm.setBytecode (bytecode);
1220+ vm.setFunctions (functions);
1221+ vm.run ();
1222+
1223+ ASSERT_EQ (vm.registerCount (), 1 );
1224+ ASSERT_EQ (vm.getInput (0 , 1 )->toDouble (), -68.5408 );
1225+ }
0 commit comments