//#ifdef RUN_TEST #include "SynthCore.h" #include "Player.h" #include #include #define TEST_LOOP_NUN 10000 Synthesizer synthesizerC; Synthesizer synthesizerASM; void TestInit(void) { SynthInit(&synthesizerC); SynthInit(&synthesizerASM); } int32_t abs_s32(int32_t num) { return num>0?num:-num; } void PrintParameters(Synthesizer* synth) { SoundUnit* soundUnits = synth->SoundUnitList; printf("MixOut:%d\n",synth->mixOut); printf("LastSoundUnit:%d\n",synth->lastSoundUnit); printf("%12s","Chn Val"); for(uint8_t k=0;kSoundUnitList; SoundUnit* sb=synthB->SoundUnitList; if(abs_s32(synthA->mixOut-synthB->mixOut)>POLY_NUM) error++; for(uint32_t k=0;k2) error++; if(sa[k].sampleVal!=sb[k].sampleVal) error++; if(sa[k].envelopeLevel!=sb[k].envelopeLevel) error++; if(sa[k].envelopePos!=sb[k].envelopePos) error++; if(sa[k].wavetablePos!=sb[k].wavetablePos) error++; if(sa[k].increment!=sb[k].increment) error++; } if(error>0) { printf("%lu error(s) found:\n",error); printf("Synth C:\n"); PrintParameters(&synthesizerC); printf("Synth ASM:\n"); PrintParameters(&synthesizerASM); } else { printf("Passed.\n"); } return error; } extern Player mainPlayer; void TestSynth(void) { uint32_t maxErrorCnt=3; printf("~~~~~~~Start testing synthesizer.~~~~~~~\n"); for (uint32_t i = 0; i < POLY_NUM; i++) { NoteOnC(&synthesizerC,i % 56); NoteOnC(&synthesizerASM,i % 56); } for (uint32_t i = 0; i < TEST_LOOP_NUN; i++) { for (uint32_t i = 0; i < 200; i++) { SynthAsm(&synthesizerASM); SynthC(&synthesizerC); } GenDecayEnvlopeAsm(&synthesizerASM); GenDecayEnvlopeC(&synthesizerC); printf("=============%d==============\n", i); if (SynthParamterCompare(&synthesizerC, &synthesizerASM) > 0 && maxErrorCnt--==0) break; } } void TestProcess(void) { TestInit(); TestUpdateTickFunc(); TestSynth(); } //#endif