@@ -96,6 +96,7 @@ TEST_F(SoundBlocksTest, RegisterBlocks)
9696 // Blocks
9797 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " sound_changevolumeby" , &SoundBlocks::compileChangeVolumeBy));
9898 EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " sound_setvolumeto" , &SoundBlocks::compileSetVolumeTo));
99+ EXPECT_CALL (m_engineMock, addCompileFunction (m_section.get (), " sound_volume" , &SoundBlocks::compileVolume));
99100
100101 // Inputs
101102 EXPECT_CALL (m_engineMock, addInput (m_section.get (), " VOLUME" , SoundBlocks::VOLUME));
@@ -198,3 +199,38 @@ TEST_F(SoundBlocksTest, SetVolumeToImpl)
198199 ASSERT_EQ (vm.registerCount (), 0 );
199200 ASSERT_EQ (target.volume (), 43.409 );
200201}
202+
203+ TEST_F (SoundBlocksTest, Volume)
204+ {
205+ Compiler compiler (&m_engineMock);
206+
207+ auto block = std::make_shared<Block>(" a" , " sound_volume" );
208+
209+ EXPECT_CALL (m_engineMock, functionIndex (&SoundBlocks::volume)).WillOnce (Return (0 ));
210+
211+ compiler.init ();
212+ compiler.setBlock (block);
213+ SoundBlocks::compileVolume (&compiler);
214+ compiler.end ();
215+
216+ ASSERT_EQ (compiler.bytecode (), std::vector<unsigned int >({ vm::OP_START, vm::OP_EXEC, 0 , vm::OP_HALT }));
217+ ASSERT_TRUE (compiler.constValues ().empty ());
218+ }
219+
220+ TEST_F (SoundBlocksTest, VolumeImpl)
221+ {
222+ static unsigned int bytecode[] = { vm::OP_START, vm::OP_EXEC, 0 , vm::OP_HALT };
223+ static BlockFunc functions[] = { &SoundBlocks::volume };
224+
225+ Target target;
226+ target.setVolume (42.4 );
227+
228+ VirtualMachine vm (&target, nullptr , nullptr );
229+
230+ vm.setBytecode (bytecode);
231+ vm.setFunctions (functions);
232+ vm.run ();
233+
234+ ASSERT_EQ (vm.registerCount (), 1 );
235+ ASSERT_EQ (vm.getInput (0 , 1 )->toDouble (), 42.4 );
236+ }
0 commit comments