Write a test for mic support

This commit is contained in:
Jesse Talavera 2024-03-21 10:03:34 -04:00
parent e5b2aaf51c
commit baa51f3e31
2 changed files with 53 additions and 3 deletions

View File

@ -316,9 +316,10 @@ add_python_test(
add_python_test(
NAME "Core accepts microphone input"
TEST_MODULE ""
DISABLED
) # TODO: Implement this test
TEST_MODULE basics.core_accepts_microphone_input
CONTENT "${MICRECORD_NDS}"
CORE_OPTION melonds_boot_mode=direct
)
add_python_test(
NAME "Core queries device power state"

View File

@ -0,0 +1,49 @@
from collections.abc import Iterator
from itertools import count, repeat
from math import sin
from typing import cast
from libretro import Session
from libretro.api import ArrayAudioState
from libretro.api.input import JoypadState
import prelude
from libretro.api.video import SoftwareVideoState
def generate_input() -> Iterator[int]:
yield from repeat(None, 6)
yield JoypadState(a=True)
yield from repeat(None, 90)
yield JoypadState(a=True)
yield from repeat(None)
def generate_sine_wave() -> Iterator[int]:
for i in count():
yield int(sin(i * 440) * 30000)
kwargs = {
"input_state": generate_input,
"mic_interface": generate_sine_wave,
"options": {
"melonds_mic_input_active": "always"
}
}
session: Session
with prelude.session(**kwargs) as session:
audio = cast(ArrayAudioState, session.audio)
video = cast(SoftwareVideoState, session.video)
for i in range(300):
session.core.run()
assert audio.buffer is not None
assert len(audio.buffer) > 0
assert any(b != 0 for b in audio.buffer)
# Assert that we're not just being given silence