function(regression_test testname) if(${ARGC} LESS 4) set(source ${testname}) else() set(source ${ARGV3}) endif() add_executable(${testname} ${source}.asm test_renderer.c) # the tests include the entire ASM but we still want to rebuild when they change file(GLOB FOURKLANG ${PROJECT_SOURCE_DIR}/src/*.inc ${PROJECT_SOURCE_DIR}/src/*.asm ${PROJECT_SOURCE_DIR}/src/opcodes/*.asm ${PROJECT_SOURCE_DIR}/src/opcodes/*.inc) set_source_files_properties(${source}.asm PROPERTIES OBJECT_DEPENDS "${FOURKLANG}") set_source_files_properties(${FOURKLANG} PROPERTIES HEADER_FILE_ONLY TRUE) add_test(${testname} ${testname}) target_compile_definitions(${testname} PUBLIC TEST_NAME="${testname}" SU_USE_INTROSPECTION SU_USE_PLAYER) set (rawinput ${CMAKE_CURRENT_SOURCE_DIR}/expected_output/${testname}.raw) set (rawoutput ${CMAKE_CURRENT_BINARY_DIR}/expected_output/${testname}.raw) add_custom_target(${testname}_rawcopy COMMAND ${CMAKE_COMMAND} -E copy_if_different ${rawinput} ${rawoutput} ) add_dependencies(${testname} ${testname}_rawcopy) if(ARGC GREATER 1) if (ARGV1) message("${testname} requires ${ARGV1}") set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED "${ARGV1}") endif() endif() if(ARGC GREATER 2) if (ARGV2) message("${testname} setups ${ARGV2}") set_tests_properties(${testname} PROPERTIES FIXTURES_SETUP "${ARGV2}") endif() endif() endfunction(regression_test) regression_test(test_envelope "" ENVELOPE) regression_test(test_loadval "" LOAD) regression_test(test_send "" SEND) regression_test(test_send_global) regression_test(test_panning ENVELOPE PANNING) regression_test(test_multiple_instruments ENVELOPE) regression_test(test_pop LOAD FOP_POP) regression_test(test_addp LOAD) regression_test(test_mulp LOAD FOP_MULP) regression_test(test_push "LOAD;FOP_POP" FOP_PUSH) regression_test(test_xch LOAD) regression_test(test_add LOAD) regression_test(test_mul LOAD) regression_test(test_addp_stereo LOAD) regression_test(test_mulp_stereo LOAD FOP_MULP2) regression_test(test_loadnote) regression_test(test_noise ENVELOPE VCO_NOISE) regression_test(test_oscillat_sine ENVELOPE VCO_SINE) regression_test(test_oscillat_trisaw ENVELOPE) regression_test(test_oscillat_pulse ENVELOPE VCO_PULSE) regression_test(test_oscillat_gate ENVELOPE) regression_test(test_oscillat_stereo ENVELOPE) regression_test(test_oscillat_lfo "ENVELOPE;VCO_SINE;VCO_PULSE;FOP_MULP2") regression_test(test_oscillat_transposemod "VCO_SINE;ENVELOPE;FOP_MULP;FOP_PUSH;SEND") regression_test(test_oscillat_detunemod "VCO_SINE;ENVELOPE;FOP_MULP;FOP_PUSH;SEND") regression_test(test_oscillat_phasemod "VCO_SINE;ENVELOPE;FOP_MULP;FOP_PUSH;SEND") regression_test(test_oscillat_colormod "VCO_SINE;ENVELOPE;FOP_MULP;FOP_PUSH;SEND") regression_test(test_oscillat_shapemod "VCO_SINE;ENVELOPE;FOP_MULP;FOP_PUSH;SEND") regression_test(test_oscillat_gainmod "VCO_SINE;ENVELOPE;FOP_MULP;FOP_PUSH;SEND") regression_test(test_distort ENVELOPE) regression_test(test_distort_mod "VCO_SINE;ENVELOPE;SEND") regression_test(test_distort_stereo ENVELOPE) regression_test(test_hold ENVELOPE) regression_test(test_hold_mod "VCO_SINE;ENVELOPE;SEND") regression_test(test_filter_band "VCO_SINE;ENVELOPE;FOP_MULP") regression_test(test_filter_low "VCO_SINE;ENVELOPE;FOP_MULP") regression_test(test_filter_high "VCO_SINE;ENVELOPE;FOP_MULP") regression_test(test_filter_peak "VCO_SINE;ENVELOPE;FOP_MULP") regression_test(test_filter_stereo "VCO_SINE;ENVELOPE;FOP_MULP") regression_test(test_filter_freqmod "VCO_SINE;ENVELOPE;FOP_MULP;SEND") regression_test(test_filter_resmod "VCO_SINE;ENVELOPE;FOP_MULP;SEND") regression_test(test_delay "ENVELOPE;FOP_MULP;PANNING;VCO_SINE") regression_test(test_delay_stereo "ENVELOPE;FOP_MULP;PANNING;VCO_SINE") regression_test(test_delay_notetracking "ENVELOPE;FOP_MULP;PANNING;VCO_NOISE") regression_test(test_delay_reverb "ENVELOPE;FOP_MULP;PANNING;VCO_SINE") regression_test(test_delay_feedbackmod "ENVELOPE;FOP_MULP;PANNING;VCO_SINE;SEND") regression_test(test_delay_pregainmod "ENVELOPE;FOP_MULP;PANNING;VCO_SINE;SEND") regression_test(test_delay_dampmod "ENVELOPE;FOP_MULP;PANNING;VCO_SINE;SEND") regression_test(test_delay_drymod "ENVELOPE;FOP_MULP;PANNING;VCO_SINE;SEND") regression_test(test_envelope_mod "VCO_SINE;ENVELOPE;SEND") regression_test(test_envelope_16bit ENVELOPE "" test_envelope) target_compile_definitions(test_envelope_16bit PUBLIC SU_USE_16BIT_OUTPUT) regression_test(test_polyphony "ENVELOPE;VCO_SINE")