diff --git a/radio/src/tests/frsky.cpp b/radio/src/tests/frsky.cpp index 10f0b3922..38111434e 100644 --- a/radio/src/tests/frsky.cpp +++ b/radio/src/tests/frsky.cpp @@ -33,6 +33,8 @@ void displayVoltagesScreen(); #if defined(TELEMETRY_FRSKY) && !defined(CPUARM) TEST(FrSky, gpsNfuel) { + MODEL_RESET(); + TELEMETRY_RESET(); g_model.frsky.usrProto = 1; telemetryData.hub.gpsFix = 1; @@ -62,6 +64,11 @@ TEST(FrSky, gpsNfuel) TEST(FrSky, dateNtime) { + MODEL_RESET(); + TELEMETRY_RESET(); + g_model.frsky.usrProto = 1; + telemetryData.hub.gpsFix = 1; + uint8_t pkt1[] = { 0xfd, 0x07, 0x00, 0x5e, 0x15, 0x0f, 0x07, 0x5e, 0x16, 0x0b }; uint8_t pkt2[] = { 0xfd, 0x07, 0x00, 0x00, 0x5e, 0x17, 0x06, 0x12, 0x5e, 0x18 }; uint8_t pkt3[] = { 0xfd, 0x03, 0x00, 0x32, 0x00, 0x5e }; @@ -178,6 +185,8 @@ TEST(FrSky, Gps) { MODEL_RESET(); TELEMETRY_RESET(); + allowNewSensors = true; + EXPECT_EQ(telemetryItems[0].value, 0); // latitude 15 degrees north, 30.5000 minutes = 15.508333333333333 degrees @@ -240,6 +249,8 @@ TEST(FrSkySPORT, FrSkyDCells) { MODEL_RESET(); TELEMETRY_RESET(); + allowNewSensors = true; + uint8_t pkt1[] = { 0x7E, 0x98, 0x10, 0x06, 0x00, 0x07, 0xD0, 0x00, 0x00, 0x12 }; EXPECT_EQ(checkSportPacket(pkt1+1), true); sportProcessTelemetryPacket(pkt1+1); @@ -266,6 +277,7 @@ TEST(FrSkySPORT, frskySetCellVoltage) MODEL_RESET(); TELEMETRY_RESET(); + allowNewSensors = true; // test that simulates 3 cell battery generateSportCellPacket(packet, 3, 0, _V(410), _V(420)); sportProcessTelemetryPacket(packet); @@ -360,6 +372,7 @@ TEST(FrSkySPORT, StrangeCellsBug) { MODEL_RESET(); TELEMETRY_RESET(); + allowNewSensors = true; uint8_t pkt[] = { 0x7E, 0x48, 0x10, 0x00, 0x03, 0x30, 0x15, 0x50, 0x81, 0xD5 }; EXPECT_EQ(checkSportPacket(pkt+1), true); @@ -375,6 +388,7 @@ TEST(FrSkySPORT, frskySetCellVoltageTwoSensors) MODEL_RESET(); TELEMETRY_RESET(); + allowNewSensors = true; //sensor 1: 3 cell battery generateSportCellPacket(packet, 3, 0, _V(418), _V(416)); sportProcessTelemetryPacket(packet); @@ -449,6 +463,7 @@ TEST(FrSkySPORT, frskyVfas) MODEL_RESET(); TELEMETRY_RESET(); + allowNewSensors = true; // tests for Vfas generateSportFasVoltagePacket(packet, 5000); sportProcessTelemetryPacket(packet); @@ -487,6 +502,7 @@ TEST(FrSkySPORT, frskyCurrent) MODEL_RESET(); TELEMETRY_RESET(); + allowNewSensors = true; // tests for Curr generateSportFasCurrentPacket(packet, 0); sportProcessTelemetryPacket(packet); diff --git a/radio/src/tests/functions.cpp b/radio/src/tests/functions.cpp index f10d16da9..fc8c48159 100644 --- a/radio/src/tests/functions.cpp +++ b/radio/src/tests/functions.cpp @@ -20,9 +20,10 @@ #include "gtests.h" +class SpecialFunctionsTest : public OpenTxTest {}; #if defined(CPUARM) -TEST(SpecialFunctions, SwitchFiledSize) +TEST_F(SpecialFunctionsTest, SwitchFiledSize) { // test the size of swtch member g_model.customFn[0].swtch = SWSRC_LAST; @@ -32,17 +33,15 @@ TEST(SpecialFunctions, SwitchFiledSize) } #if defined(PCBTARANIS) || defined(PCBHORUS) -TEST(SpecialFunctions, FlightReset) +TEST_F(SpecialFunctionsTest, FlightReset) { - RADIO_RESET(); - MODEL_RESET(); - g_model.customFn[0].swtch = SWSRC_SA0; g_model.customFn[0].func = FUNC_RESET; g_model.customFn[0].all.val = FUNC_RESET_FLIGHT; g_model.customFn[0].active = true; mainRequestFlags = 0; + simuSetSwitch(0, 0); evalFunctions(g_model.customFn, modelFunctionsContext); EXPECT_EQ((bool)(mainRequestFlags & (1 << REQUEST_FLIGHT_RESET)), false); @@ -60,11 +59,8 @@ TEST(SpecialFunctions, FlightReset) } #if defined(GVARS) -TEST(SpecialFunctions, GvarsInc) +TEST_F(SpecialFunctionsTest, GvarsInc) { - RADIO_RESET(); - MODEL_RESET(); - simuSetSwitch(0, 0); // SA- g_model.customFn[0].swtch = SWSRC_SA0; diff --git a/radio/src/tests/gtests.h b/radio/src/tests/gtests.h index 9d9a3ebd8..4592b0140 100644 --- a/radio/src/tests/gtests.h +++ b/radio/src/tests/gtests.h @@ -82,13 +82,34 @@ inline void TELEMETRY_RESET() memclear(&telemetryData, sizeof(telemetryData)); TELEMETRY_RSSI() = 100; #endif -#if defined(CPUARM) && defined(TELEMETRY_FRSKY) +#if defined(CPUARM) +#if defined(TELEMETRY_FRSKY) for (int i=0; icurve.type = CURVE_REF_CUSTOM; expo->curve.value = 1; @@ -415,7 +394,10 @@ TEST(Trims, InstantTrimNegativeCurve) TEST(Curves, LinearIntpol) { + SYSTEM_RESET(); MODEL_RESET(); + MIXER_RESET(); + modelDefault(0); for (int8_t i=-2; i<=2; i++) { g_model.points[2+i] = 50*i; } @@ -429,18 +411,30 @@ TEST(Curves, LinearIntpol) #if !defined(CPUARM) TEST(FlightModes, nullFadeOut_posFadeIn) { - MODEL_RESET(); - g_model.flightModeData[1].swtch = SWSRC_ID1; - g_model.flightModeData[1].fadeIn = 15; - perMain(); - simuSetSwitch(3, 0); - perMain(); -} - -TEST(Mixer, R2029Comment) -{ + SYSTEM_RESET(); MODEL_RESET(); MIXER_RESET(); + modelDefault(0); + lastFlightMode = 255; + simuSetSwitch(3, 1); + g_model.flightModeData[1].swtch = SWSRC_ID1; + g_model.flightModeData[1].fadeIn = 15; + evalMixes(1); + simuSetSwitch(3, 0); + evalMixes(1); + // run mixes enough time to fade out flight modes (otherwise the mixer internal state flightModesFade could affect other tests) + simuSetSwitch(3, 1); + for(int n=0; n<200; n++) { + evalMixes(1); + } +} + +TEST_F(MixerTest, R2029Comment) +{ + SYSTEM_RESET(); + MODEL_RESET(); + MIXER_RESET(); + modelDefault(0); g_model.mixData[0].destCh = 0; g_model.mixData[0].srcRaw = MIXSRC_CH2; g_model.mixData[0].swtch = -SWSRC_THR; @@ -464,10 +458,12 @@ TEST(Mixer, R2029Comment) EXPECT_EQ(chans[1], CHANNEL_MAX); } -TEST(Mixer, Cascaded3Channels) +TEST_F(MixerTest, Cascaded3Channels) { + SYSTEM_RESET(); MODEL_RESET(); MIXER_RESET(); + modelDefault(0); g_model.mixData[0].destCh = 0; g_model.mixData[0].srcRaw = MIXSRC_CH2; g_model.mixData[0].weight = 100; @@ -484,10 +480,8 @@ TEST(Mixer, Cascaded3Channels) EXPECT_EQ(chans[2], CHANNEL_MAX); } -TEST(Mixer, CascadedOrderedChannels) +TEST_F(MixerTest, CascadedOrderedChannels) { - MODEL_RESET(); - MIXER_RESET(); g_model.mixData[0].destCh = 0; g_model.mixData[0].srcRaw = MIXSRC_THR; g_model.mixData[0].weight = 100; @@ -500,10 +494,8 @@ TEST(Mixer, CascadedOrderedChannels) EXPECT_EQ(chans[1], CHANNEL_MAX); } -TEST(Mixer, Cascaded5Channels) +TEST_F(MixerTest, Cascaded5Channels) { - MODEL_RESET(); - MIXER_RESET(); g_model.mixData[0].destCh = 0; g_model.mixData[0].srcRaw = MIXSRC_CH2; g_model.mixData[0].weight = 100; @@ -521,14 +513,14 @@ TEST(Mixer, Cascaded5Channels) g_model.mixData[4].weight = 100; for (uint8_t i=0; i<10; i++) { simuSetSwitch(0, 1); - doMixerCalculations(); + evalMixes(1); EXPECT_EQ(chans[0], CHANNEL_MAX); EXPECT_EQ(chans[1], CHANNEL_MAX); EXPECT_EQ(chans[2], CHANNEL_MAX); EXPECT_EQ(chans[3], CHANNEL_MAX); EXPECT_EQ(chans[4], CHANNEL_MAX); simuSetSwitch(0, 0); - doMixerCalculations(); + evalMixes(1); EXPECT_EQ(chans[0], -CHANNEL_MAX); EXPECT_EQ(chans[1], -CHANNEL_MAX); EXPECT_EQ(chans[2], -CHANNEL_MAX); @@ -538,10 +530,8 @@ TEST(Mixer, Cascaded5Channels) } #endif -TEST(Mixer, InfiniteRecursiveChannels) +TEST_F(MixerTest, InfiniteRecursiveChannels) { - MODEL_RESET(); - MIXER_RESET(); g_model.mixData[0].destCh = 0; g_model.mixData[0].srcRaw = MIXSRC_CH2; g_model.mixData[0].weight = 100; @@ -557,10 +547,8 @@ TEST(Mixer, InfiniteRecursiveChannels) EXPECT_EQ(chans[0], 0); } -TEST(Mixer, BlockingChannel) +TEST_F(MixerTest, BlockingChannel) { - MODEL_RESET(); - MIXER_RESET(); g_model.mixData[0].destCh = 0; g_model.mixData[0].srcRaw = MIXSRC_CH1; g_model.mixData[0].weight = 100; @@ -568,10 +556,8 @@ TEST(Mixer, BlockingChannel) EXPECT_EQ(chans[0], 0); } -TEST(Mixer, RecursiveAddChannel) +TEST_F(MixerTest, RecursiveAddChannel) { - MODEL_RESET(); - MIXER_RESET(); g_model.mixData[0].destCh = 0; g_model.mixData[0].mltpx = MLTPX_ADD; g_model.mixData[0].srcRaw = MIXSRC_MAX; @@ -588,10 +574,8 @@ TEST(Mixer, RecursiveAddChannel) EXPECT_EQ(chans[1], 0); } -TEST(Mixer, RecursiveAddChannelAfterInactivePhase) +TEST_F(MixerTest, RecursiveAddChannelAfterInactivePhase) { - MODEL_RESET(); - MIXER_RESET(); g_model.flightModeData[1].swtch = SWSRC_ID1; g_model.mixData[0].destCh = 0; g_model.mixData[0].mltpx = MLTPX_ADD; @@ -607,28 +591,18 @@ TEST(Mixer, RecursiveAddChannelAfterInactivePhase) g_model.mixData[2].srcRaw = MIXSRC_MAX; g_model.mixData[2].weight = 100; simuSetSwitch(3, -1); -#if defined(CPUARM) - doMixerCalculations(); -#else - perMain(); -#endif + evalMixes(1); EXPECT_EQ(chans[0], CHANNEL_MAX/2); EXPECT_EQ(chans[1], CHANNEL_MAX); simuSetSwitch(3, 0); -#if defined(CPUARM) - doMixerCalculations(); -#else - perMain(); -#endif + evalMixes(1); EXPECT_EQ(chans[0], CHANNEL_MAX/2); EXPECT_EQ(chans[1], CHANNEL_MAX); } #if !defined(CPUARM) -TEST(Mixer, SlowOnSwitch) +TEST_F(MixerTest, SlowOnSwitch) { - MODEL_RESET(); - MIXER_RESET(); g_model.mixData[0].destCh = 0; g_model.mixData[0].mltpx = MLTPX_ADD; g_model.mixData[0].srcRaw = MIXSRC_MAX; @@ -649,10 +623,8 @@ TEST(Mixer, SlowOnSwitch) CHECK_SLOW_MOVEMENT(0, -1, 250); } -TEST(Mixer, SlowUpOnSwitch) +TEST_F(MixerTest, SlowUpOnSwitch) { - MODEL_RESET(); - MIXER_RESET(); g_model.mixData[0].destCh = 0; g_model.mixData[0].mltpx = MLTPX_ADD; g_model.mixData[0].srcRaw = MIXSRC_MAX; @@ -679,10 +651,8 @@ TEST(Mixer, SlowUpOnSwitch) } #endif -TEST(Mixer, SlowOnPhase) +TEST_F(MixerTest, SlowOnPhase) { - MODEL_RESET(); - MIXER_RESET(); g_model.flightModeData[1].swtch = TR(SWSRC_THR, SWSRC_SA0); g_model.mixData[0].destCh = 0; g_model.mixData[0].mltpx = MLTPX_ADD; @@ -704,10 +674,8 @@ TEST(Mixer, SlowOnPhase) } #if !defined(CPUARM) -TEST(Mixer, SlowOnSwitchAndPhase) +TEST_F(MixerTest, SlowOnSwitchAndPhase) { - MODEL_RESET(); - MIXER_RESET(); g_model.flightModeData[1].swtch = TR(SWSRC_THR, SWSRC_SA0); g_model.mixData[0].destCh = 0; g_model.mixData[0].mltpx = MLTPX_ADD; @@ -736,10 +704,8 @@ TEST(Mixer, SlowOnSwitchAndPhase) } #endif -TEST(Mixer, SlowOnSwitchSource) +TEST_F(MixerTest, SlowOnSwitchSource) { - MODEL_RESET(); - MIXER_RESET(); g_model.mixData[0].destCh = 0; g_model.mixData[0].mltpx = MLTPX_ADD; #if defined(PCBTARANIS) || defined(PCBHORUS) @@ -764,10 +730,8 @@ TEST(Mixer, SlowOnSwitchSource) CHECK_SLOW_MOVEMENT(0, +1, 500); } -TEST(Mixer, SlowDisabledOnStartup) +TEST_F(MixerTest, SlowDisabledOnStartup) { - MODEL_RESET(); - MIXER_RESET(); g_model.mixData[0].destCh = 0; g_model.mixData[0].mltpx = MLTPX_ADD; g_model.mixData[0].srcRaw = MIXSRC_MAX; @@ -779,10 +743,8 @@ TEST(Mixer, SlowDisabledOnStartup) EXPECT_EQ(chans[0], CHANNEL_MAX); } -TEST(Mixer, DelayOnSwitch) +TEST_F(MixerTest, DelayOnSwitch) { - MODEL_RESET(); - MIXER_RESET(); g_model.mixData[0].destCh = 0; g_model.mixData[0].mltpx = MLTPX_ADD; g_model.mixData[0].srcRaw = MIXSRC_MAX; @@ -812,10 +774,8 @@ TEST(Mixer, DelayOnSwitch) } #if !defined(CPUARM) -TEST(Mixer, SlowAndDelayOnReplace3POSSource) +TEST_F(MixerTest, SlowAndDelayOnReplace3POSSource) { - MODEL_RESET(); - MIXER_RESET(); g_model.mixData[0].destCh = 0; g_model.mixData[0].mltpx = MLTPX_REP; g_model.mixData[0].srcRaw = MIXSRC_3POS; @@ -842,10 +802,8 @@ TEST(Mixer, SlowAndDelayOnReplace3POSSource) #endif #if !defined(CPUARM) -TEST(Mixer, SlowOnSwitchReplace) +TEST_F(MixerTest, SlowOnSwitchReplace) { - MODEL_RESET(); - MIXER_RESET(); g_model.mixData[0].destCh = 0; g_model.mixData[0].mltpx = MLTPX_ADD; g_model.mixData[0].srcRaw = MIXSRC_MAX; @@ -874,10 +832,8 @@ TEST(Mixer, SlowOnSwitchReplace) #endif #if !defined(VIRTUAL_INPUTS) -TEST(Mixer, NoTrimOnInactiveMix) +TEST_F(MixerTest, NoTrimOnInactiveMix) { - MODEL_RESET(); - MIXER_RESET(); g_model.mixData[0].destCh = 0; g_model.mixData[0].mltpx = MLTPX_ADD; g_model.mixData[0].srcRaw = MIXSRC_Thr; @@ -897,10 +853,8 @@ TEST(Mixer, NoTrimOnInactiveMix) } #endif -TEST(Mixer, SlowOnMultiply) +TEST_F(MixerTest, SlowOnMultiply) { - MODEL_RESET(); - MIXER_RESET(); g_model.mixData[0].destCh = 0; g_model.mixData[0].mltpx = MLTPX_ADD; g_model.mixData[0].srcRaw = MIXSRC_MAX; @@ -929,8 +883,10 @@ TEST(Mixer, SlowOnMultiply) #if defined(HELI) && defined(VIRTUAL_INPUTS) TEST(Heli, BasicTest) { + SYSTEM_RESET(); MODEL_RESET(); - applyDefaultTemplate(); + MIXER_RESET(); + modelDefault(0); g_model.swashR.collectiveSource = MIXSRC_Thr; g_model.swashR.elevatorSource = MIXSRC_Ele; g_model.swashR.aileronSource = MIXSRC_Ail; @@ -959,7 +915,10 @@ TEST(Heli, BasicTest) TEST(Heli, Mode2Test) { + SYSTEM_RESET(); MODEL_RESET(); + MIXER_RESET(); + modelDefault(0); g_eeGeneral.templateSetup = 2; applyDefaultTemplate(); g_model.swashR.collectiveSource = MIXSRC_Thr; @@ -986,13 +945,17 @@ TEST(Heli, Mode2Test) EXPECT_EQ(chans[0], -CHANNEL_MAX); EXPECT_EQ(chans[1], CHANNEL_MAX/2); EXPECT_EQ(chans[2], CHANNEL_MAX/2); + SYSTEM_RESET(); } #endif #if defined(HELI) && !defined(VIRTUAL_INPUTS) TEST(Heli, SimpleTest) { + SYSTEM_RESET(); MODEL_RESET(); + MIXER_RESET(); + modelDefault(0); applyTemplate(TMPL_HELI_SETUP); anaInValues[ELE_STICK] = 1024; evalFlightModeMixes(e_perout_mode_normal, 0); @@ -1004,8 +967,10 @@ TEST(Heli, SimpleTest) TEST(Trainer, UnpluggedTest) { + SYSTEM_RESET(); MODEL_RESET(); MIXER_RESET(); + modelDefault(0); g_model.mixData[0].destCh = 0; g_model.mixData[0].mltpx = MLTPX_ADD; g_model.mixData[0].srcRaw = MIXSRC_FIRST_TRAINER; diff --git a/radio/src/tests/switches.cpp b/radio/src/tests/switches.cpp index 197c56a39..2a87f7b1d 100644 --- a/radio/src/tests/switches.cpp +++ b/radio/src/tests/switches.cpp @@ -68,6 +68,7 @@ TEST(getSwitch, OldTypeStickyCSW) setLogicalSwitch(0, LS_FUNC_AND, SWSRC_SA0, SWSRC_NONE); setLogicalSwitch(1, LS_FUNC_OR, SWSRC_SW1, SWSRC_SW2); + simuSetSwitch(0, 0); evalLogicalSwitches(); EXPECT_EQ(getSwitch(SWSRC_SW1), false); EXPECT_EQ(getSwitch(SWSRC_SW2), false); @@ -107,6 +108,8 @@ TEST(getSwitch, recursiveSW) g_model.logicalSw[0] = { SWSRC_RUD, -SWSRC_SW2, LS_FUNC_OR }; g_model.logicalSw[1] = { SWSRC_ELE, -SWSRC_SW1, LS_FUNC_OR }; + simuSetSwitch(1, 0); // RUD 0 + simuSetSwitch(2, 0); // ELE 0 evalLogicalSwitches(); EXPECT_EQ(getSwitch(SWSRC_SW1), false); EXPECT_EQ(getSwitch(SWSRC_SW2), true); @@ -116,7 +119,7 @@ TEST(getSwitch, recursiveSW) EXPECT_EQ(getSwitch(SWSRC_SW1), false); EXPECT_EQ(getSwitch(SWSRC_SW2), true); - simuSetSwitch(1, 1); + simuSetSwitch(1, 1); // RUD 1 LS_RECURSIVE_EVALUATION_RESET(); evalLogicalSwitches(); EXPECT_EQ(getSwitch(SWSRC_SW1), true); @@ -139,12 +142,12 @@ TEST(getSwitch, inputWithTrim) // g_model.logicalSw[0] = { LS_FUNC_VPOS, MIXSRC_FIRST_INPUT, 0, 0 }; setLogicalSwitch(0, LS_FUNC_VPOS, MIXSRC_FIRST_INPUT, 0, 0); - doMixerCalculations(); + evalMixes(1); evalLogicalSwitches(); EXPECT_EQ(getSwitch(SWSRC_SW1), false); setTrimValue(0, 0, 32); - doMixerCalculations(); + evalMixes(1); evalLogicalSwitches(); EXPECT_EQ(getSwitch(SWSRC_SW1), true); } diff --git a/tools/commit-tests.sh b/tools/commit-tests.sh index 84befb04f..66f28414d 100755 --- a/tools/commit-tests.sh +++ b/tools/commit-tests.sh @@ -37,7 +37,7 @@ rm -rf * cmake ${COMMON_OPTIONS} -DPCB=9X -DHELI=YES -DTEMPLATES=YES -DTELEMETRY=FRSKY ${SRCDIR} make -j${CORES} firmware make -j${CORES} simu -make -j${CORES} gtests ; ./gtests +make -j${CORES} gtests && ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure # OpenTX on 9X stock with Ardupilot telemetry rm -rf * @@ -54,77 +54,77 @@ rm -rf * cmake ${COMMON_OPTIONS} -DPCB=MEGA2560 -DTEMPLATES=YES -DHELI=YES ${SRCDIR} make -j${CORES} firmware make -j${CORES} simu -make -j${CORES} gtests ; ./gtests +make -j${CORES} gtests && ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure # OpenTX on Mega2560 with Mavlink telemetry rm -rf * cmake ${COMMON_OPTIONS} -DPCB=MEGA2560 -DTELEMETRY=MAVLINK -DHELI=YES -DTEMPLATES=YES -DAUDIO=YES -DVOICE=YES ${SRCDIR} make -j${CORES} firmware make -j${CORES} simu -make -j${CORES} gtests ; ./gtests +make -j${CORES} gtests && ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure # OpenTX on gruvin9x board rm -rf * cmake ${COMMON_OPTIONS} -DPCB=GRUVIN9X -DHELI=YES -DTEMPLATES=YES -DAUDIO=YES -DVOICE=YES ${SRCDIR} make -j${CORES} firmware make -j${CORES} simu -make -j${CORES} gtests ; ./gtests +make -j${CORES} gtests && ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure # OpenTX on Sky9x rm -rf * cmake ${COMMON_OPTIONS} -DPCB=SKY9X -DHELI=YES ${SRCDIR} make -j${CORES} firmware make -j${CORES} simu -make -j${CORES} gtests ; ./gtests +make -j${CORES} gtests && ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure # OpenTX on AR9X rm -rf * cmake ${COMMON_OPTIONS} -DPCB=AR9X -DHELI=YES ${SRCDIR} make -j${CORES} firmware make -j${CORES} simu -make -j${CORES} gtests ; ./gtests +make -j${CORES} gtests && ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure # OpenTX on X7D rm -rf * cmake ${COMMON_OPTIONS} -DPCB=X7D -DHELI=YES -DWARNINGS_AS_ERRORS=YES ${SRCDIR} make -j${CORES} firmware make -j${CORES} simu -make -j${CORES} gtests ; ./gtests +make -j${CORES} gtests && ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure # OpenTX on X9D rm -rf * cmake ${COMMON_OPTIONS} -DPCB=X9D -DHELI=YES -DLUA=YES -DGVARS=YES -DWARNINGS_AS_ERRORS=YES ${SRCDIR} make -j${CORES} firmware make -j${CORES} simu -make -j${CORES} gtests ; ./gtests +make -j${CORES} gtests && ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure # OpenTX on X9D+ rm -rf * cmake ${COMMON_OPTIONS} -DPCB=X9D -DHELI=YES -DLUA=YES -DGVARS=YES -DWARNINGS_AS_ERRORS=YES ${SRCDIR} make -j${CORES} firmware make -j${CORES} simu -make -j${CORES} gtests ; ./gtests +make -j${CORES} gtests && ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure # OpenTX on Taranis X9E rm -rf * cmake ${COMMON_OPTIONS} -DPCB=X9E -DHELI=YES -DLUA=YES -DGVARS=YES -DWARNINGS_AS_ERRORS=YES -DPPM_UNIT=PERCENT_PREC1 ${SRCDIR} make -j${CORES} firmware make -j${CORES} simu -make -j${CORES} gtests ; ./gtests +make -j${CORES} gtests && ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure # OpenTX on Horus beta boards rm -rf * cmake ${COMMON_OPTIONS} -DPCB=HORUS -DPCBREV=10 -DHELI=YES -DLUA=YES -DGVARS=YES -DWARNINGS_AS_ERRORS=YES ${SRCDIR} make -j${CORES} firmware make -j${CORES} simu -make -j${CORES} gtests ; ./gtests +make -j${CORES} gtests && ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure # OpenTX on Horus rm -rf * cmake ${COMMON_OPTIONS} -DPCB=HORUS -DHELI=YES -DLUA=YES -DGVARS=YES -DWARNINGS_AS_ERRORS=YES ${SRCDIR} make -j${CORES} firmware make -j${CORES} simu -make -j${CORES} gtests ; ./gtests +make -j${CORES} gtests && ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure # Companion rm -rf *