Skip to content

Commit

Permalink
Remove more magic numbers in E2E tests
Browse files Browse the repository at this point in the history
  • Loading branch information
rhargreaves committed Feb 19, 2025
1 parent b0c7538 commit 2de8546
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 57 deletions.
111 changes: 55 additions & 56 deletions tests/system/test_e2e.c
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,9 @@ int test_e2e_setup(void** state)
void test_midi_note_on_event_sent_to_ym2612(void** state)
{
stub_everdrive_as_present();
stub_usb_receive_note_on(TEST_MIDI_CHANNEL_1, 48, 127);
expect_ym2612_write_frequency(0, 0x1A84);
expect_ym2612_note_on(0);
stub_usb_receive_note_on(TEST_MIDI_CHANNEL_1, 48, TEST_VELOCITY_MAX);
expect_ym2612_write_frequency(YM_CH1, 0x1A84);
expect_ym2612_note_on(YM_CH1);
midi_receiver_read();
}

Expand All @@ -69,13 +69,13 @@ void test_polyphonic_midi_sent_to_separate_ym2612_channels(void** state)
midi_receiver_read();

stub_usb_receive_note_on(TEST_MIDI_CHANNEL_1, 48, TEST_VELOCITY_MAX);
expect_ym2612_write_frequency(0, 0x1A84);
expect_ym2612_note_on(0);
expect_ym2612_write_frequency(YM_CH1, 0x1A84);
expect_ym2612_note_on(YM_CH1);
midi_receiver_read();

stub_usb_receive_note_on(TEST_MIDI_CHANNEL_1, 49, TEST_VELOCITY_MAX);
expect_ym2612_write_frequency(1, 0x1AA9);
expect_ym2612_note_on(1);
expect_ym2612_write_frequency(YM_CH2, 0x1AA9);
expect_ym2612_note_on(YM_CH2);
midi_receiver_read();
}

Expand Down Expand Up @@ -103,14 +103,14 @@ void test_general_midi_reset_sysex_stops_all_notes(void** state)

// FM note
stub_usb_receive_note_on(TEST_MIDI_CHANNEL_1, noteOnKey, TEST_VELOCITY_MAX);
expect_ym2612_write_frequency(0, 0x1A84);
expect_ym2612_note_on(0);
expect_ym2612_write_frequency(YM_CH1, 0x1A84);
expect_ym2612_note_on(YM_CH1);
midi_receiver_read();

// PSG note
stub_usb_receive_note_on(TEST_MIDI_CHANNEL_PSG_1, noteOnKey, TEST_VELOCITY_MAX);
expect_psg_tone(0, 0x357);
expect_psg_attenuation(0, 0);
expect_psg_tone(PSG_CH1, 0x357);
expect_psg_attenuation(PSG_CH1, 0);
midi_receiver_read();

// Send General MIDI reset
Expand All @@ -121,7 +121,7 @@ void test_general_midi_reset_sysex_stops_all_notes(void** state)
for (u8 chan = 0; chan < MAX_FM_CHANS; chan++) {
expect_ym2612_note_off(chan);
}
expect_psg_attenuation(0, 0xF);
expect_psg_attenuation(PSG_CH1, 0xF);
midi_receiver_read();
}

Expand Down Expand Up @@ -149,8 +149,8 @@ void test_remap_midi_channel_1_to_psg_channel_1()
midi_receiver_read();

stub_usb_receive_note_on(TEST_MIDI_CHANNEL_1, 48, TEST_VELOCITY_MAX);
expect_psg_tone(0, 0x357);
expect_psg_attenuation(0, 0);
expect_psg_tone(PSG_CH1, 0x357);
expect_psg_attenuation(PSG_CH1, 0);
midi_receiver_read();
}

Expand All @@ -164,8 +164,8 @@ void test_set_device_for_midi_channel_1_to_psg()
midi_receiver_read();

stub_usb_receive_note_on(TEST_MIDI_CHANNEL_1, 48, TEST_VELOCITY_MAX);
expect_psg_tone(0, 0x357);
expect_psg_attenuation(0, 0);
expect_psg_tone(PSG_CH1, 0x357);
expect_psg_attenuation(PSG_CH1, 0);
midi_receiver_read();
}

Expand Down Expand Up @@ -202,24 +202,24 @@ void test_loads_psg_envelope()
midi_receiver_read();

stub_usb_receive_note_on(TEST_MIDI_CHANNEL_PSG_1, 60, TEST_VELOCITY_MAX);
expect_psg_tone(0, 0x17c);
expect_psg_attenuation(0, 6);
expect_psg_tone(PSG_CH1, 0x17c);
expect_psg_attenuation(PSG_CH1, 6);
midi_receiver_read();
}

void test_enables_ch3_special_mode(void** state)
{
stub_everdrive_as_present();
stub_usb_receive_cc(TEST_MIDI_CHANNEL_1, TEST_CC_SPECIAL_MODE, TEST_SPECIAL_MODE_ON);
expect_ym2612_write_reg(0, 0x27, 0x40);
expect_ym2612_write_reg(0, YM_CH3_MODE, 0x40);
midi_receiver_read();
}

void test_sets_separate_ch3_operator_frequencies(void** state)
{
stub_everdrive_as_present();
stub_usb_receive_cc(TEST_MIDI_CHANNEL_1, TEST_CC_SPECIAL_MODE, TEST_SPECIAL_MODE_ON);
expect_ym2612_write_reg(0, 0x27, 0x40);
expect_ym2612_write_reg(0, YM_CH3_MODE, 0x40);
midi_receiver_read();

stub_usb_receive_cc(TEST_MIDI_CHANNEL_3, TEST_CC_ALGORITHM, 0x7F); // alg 7
Expand All @@ -243,22 +243,22 @@ void test_pitch_bends_ch3_special_mode_operators(void** state)
{
stub_everdrive_as_present();
stub_usb_receive_cc(TEST_MIDI_CHANNEL_1, TEST_CC_SPECIAL_MODE, TEST_SPECIAL_MODE_ON);
expect_ym2612_write_reg(0, 0x27, 0x40);
expect_ym2612_write_reg(0, YM_CH3_MODE, 0x40);
midi_receiver_read();

stub_usb_receive_cc(TEST_MIDI_CHANNEL_3, TEST_CC_ALGORITHM, 0x7F); // alg 7
expect_ym2612_write_reg(0, 0xB2, 0x7);
expect_ym2612_write_reg(0, YM_REG(YM_BASE_ALGORITHM_FEEDBACK, YM_CH3), 0x7);
midi_receiver_read();

stub_usb_receive_note_on(TEST_MIDI_CHANNEL_11, 60, 120);
expect_ym2612_write_reg(0, 0xAD, 0x22);
expect_ym2612_write_reg(0, 0xA9, 0x84);
expect_ym2612_write_reg(0, YM_CH3SM_OP1_FREQ_MSB_BLK, 0x22);
expect_ym2612_write_reg(0, YM_CH3SM_OP1_FREQ_LSB, 0x84);
expect_ym2612_write_operator_any_data(CH3_SPECIAL_MODE, 0, 0x40);
midi_receiver_read();

stub_usb_receive_pitch_bend(TEST_MIDI_CHANNEL_11, 0x4000);
expect_ym2612_write_reg(0, 0xAD, 0x22);
expect_ym2612_write_reg(0, 0xA9, 0xD2);
expect_ym2612_write_reg(0, YM_CH3SM_OP1_FREQ_MSB_BLK, 0x22);
expect_ym2612_write_reg(0, YM_CH3SM_OP1_FREQ_LSB, 0xD2);
midi_receiver_read();
}

Expand All @@ -278,7 +278,7 @@ void test_plays_pcm_sample(void** state)
{
stub_everdrive_as_present();
stub_usb_receive_cc(TEST_MIDI_CHANNEL_1, TEST_CC_ENABLE_DAC, 127);
expect_ym2612_write_reg(0, 0x2B, 0x80);
expect_ym2612_write_reg(0, YM_DAC_ENABLE, 0x80);
midi_receiver_read();

stub_usb_receive_note_on(TEST_MIDI_CHANNEL_6, 60, TEST_VOLUME_MAX);
Expand All @@ -293,61 +293,60 @@ void test_plays_pcm_sample(void** state)
void test_midi_last_note_played_priority_respected_on_fm(void** state)
{
stub_everdrive_as_present();
stub_usb_receive_note_on(TEST_MIDI_CHANNEL_1, 48, 127);
expect_ym2612_write_frequency(0, 0x1A84);
expect_ym2612_note_on(0);
stub_usb_receive_note_on(TEST_MIDI_CHANNEL_1, 48, TEST_VELOCITY_MAX);
expect_ym2612_write_frequency(YM_CH1, 0x1A84);
expect_ym2612_note_on(YM_CH1);
midi_receiver_read();

stub_usb_receive_note_on(TEST_MIDI_CHANNEL_1, 50, 127);
expect_ym2612_write_frequency(0, 0x1AD2);
expect_ym2612_note_on(0);
stub_usb_receive_note_on(TEST_MIDI_CHANNEL_1, 50, TEST_VELOCITY_MAX);
expect_ym2612_write_frequency(YM_CH1, 0x1AD2);
expect_ym2612_note_on(YM_CH1);
midi_receiver_read();

stub_usb_receive_note_off(TEST_MIDI_CHANNEL_1, 50);
expect_ym2612_write_frequency(0, 0x1A84);
expect_ym2612_note_on(0);
expect_ym2612_write_frequency(YM_CH1, 0x1A84);
expect_ym2612_note_on(YM_CH1);
midi_receiver_read();
}

void test_midi_last_note_played_remembers_velocity_on_fm(void** state)
{
stub_everdrive_as_present();
stub_usb_receive_note_on(TEST_MIDI_CHANNEL_1, 48, 100);
const u8 volumes[] = { 0x27, 0x04, 0x24, 0x04 };
expect_ym2612_write_operator_volumes(0, volumes, 4);
expect_ym2612_write_frequency(0, 0x1A84);
expect_ym2612_note_on(0);
expect_ym2612_write_operator_volumes(0, ((u8[]) { 0x27, 0x04, 0x24, 0x04 }), 4);
expect_ym2612_write_frequency(YM_CH1, 0x1A84);
expect_ym2612_note_on(YM_CH1);
midi_receiver_read();

stub_usb_receive_note_on(TEST_MIDI_CHANNEL_1, 50, 100);
expect_ym2612_write_frequency(0, 0x1AD2);
expect_ym2612_note_on(0);
expect_ym2612_write_frequency(YM_CH1, 0x1AD2);
expect_ym2612_note_on(YM_CH1);
midi_receiver_read();

stub_usb_receive_note_off(TEST_MIDI_CHANNEL_1, 50);
expect_ym2612_write_frequency(0, 0x1A84);
expect_ym2612_note_on(0);
expect_ym2612_write_frequency(YM_CH1, 0x1A84);
expect_ym2612_note_on(YM_CH1);
midi_receiver_read();
}

void test_midi_last_note_played_cleared_when_released_on_fm(void** state)
{
stub_everdrive_as_present();
stub_usb_receive_note_on(TEST_MIDI_CHANNEL_1, 48, 127);
expect_ym2612_write_frequency(0, 0x1A84);
expect_ym2612_note_on(0);
stub_usb_receive_note_on(TEST_MIDI_CHANNEL_1, 48, TEST_VELOCITY_MAX);
expect_ym2612_write_frequency(YM_CH1, 0x1A84);
expect_ym2612_note_on(YM_CH1);
midi_receiver_read();

stub_usb_receive_note_on(TEST_MIDI_CHANNEL_1, 50, 127);
expect_ym2612_write_frequency(0, 0x1AD2);
expect_ym2612_note_on(0);
stub_usb_receive_note_on(TEST_MIDI_CHANNEL_1, 50, TEST_VELOCITY_MAX);
expect_ym2612_write_frequency(YM_CH1, 0x1AD2);
expect_ym2612_note_on(YM_CH1);
midi_receiver_read();

stub_usb_receive_note_off(TEST_MIDI_CHANNEL_1, 48);
midi_receiver_read();

stub_usb_receive_note_off(TEST_MIDI_CHANNEL_1, 50);
expect_ym2612_note_off(0);
expect_ym2612_note_off(YM_CH1);
midi_receiver_read();
}

Expand Down Expand Up @@ -449,19 +448,19 @@ void test_midi_portamento_glides_note(void** state)
stub_usb_receive_cc(TEST_MIDI_CHANNEL_1, TEST_CC_PORTAMENTO_ON, 0x7F);
midi_receiver_read();

stub_usb_receive_note_on(TEST_MIDI_CHANNEL_1, 48, 127);
expect_ym2612_write_frequency(0, 0x1A84);
expect_ym2612_note_on(0);
stub_usb_receive_note_on(TEST_MIDI_CHANNEL_1, 48, TEST_VELOCITY_MAX);
expect_ym2612_write_frequency(YM_CH1, 0x1A84);
expect_ym2612_note_on(YM_CH1);
midi_receiver_read();

stub_usb_receive_note_on(TEST_MIDI_CHANNEL_1, 58, 127);
stub_usb_receive_note_on(TEST_MIDI_CHANNEL_1, 58, TEST_VELOCITY_MAX);
midi_receiver_read();

expect_ym2612_write_frequency(0, 0x1A87);
expect_ym2612_write_frequency(YM_CH1, 0x1A87);
scheduler_vsync();
scheduler_tick();
for (u16 i = 0; i < 99; i++) {
expect_ym2612_write_frequency_any_data(0);
expect_ym2612_write_frequency_any_data(YM_CH1);
scheduler_vsync();
scheduler_tick();
}
Expand Down
16 changes: 15 additions & 1 deletion tests/ym2612_helper.h
Original file line number Diff line number Diff line change
@@ -1,10 +1,19 @@
#pragma once

#define YM_CH3SM_OP_SELECT(baseReg, op) (baseReg + ((op + 1) % 3))
#define YM_CH_SELECT(baseReg, channel) (baseReg + (channel % 3))
#define YM_REG(baseReg, channel) (baseReg + (channel % 3))
#define YM_OP_REG_INDEX(op) ((op) == 1 ? 2 : ((op) == 2 ? 1 : (op)))
#define YM_OP_SELECT(baseReg, op) (baseReg + (YM_OP_REG_INDEX(op) * 4))

#define YM_CH3SM_OP1_FREQ_LSB 0xA9
#define YM_CH3SM_OP1_FREQ_MSB_BLK 0xAD
#define YM_CH3SM_OP2_FREQ_LSB 0xA8
#define YM_CH3SM_OP2_FREQ_MSB_BLK 0xAC
#define YM_CH3SM_OP3_FREQ_LSB 0xAA
#define YM_CH3SM_OP3_FREQ_MSB_BLK 0xAE
#define YM_CH3SM_OP4_FREQ_LSB 0xA2
#define YM_CH3SM_OP4_FREQ_MSB_BLK 0xA6

#define YM_TOTAL_LEVEL_LOUDEST 0
#define YM_TOTAL_LEVEL_SILENCE 0x7F

Expand All @@ -19,3 +28,8 @@
#define YM_OP2 1
#define YM_OP3 2
#define YM_OP4 3

#define PSG_CH1 0
#define PSG_CH2 1
#define PSG_CH3 2
#define PSG_NOISE_CH4 3

0 comments on commit 2de8546

Please sign in to comment.