diff --git a/lambda-test/.cproject b/lambda-test/.cproject index 1974a71..ef6bacc 100644 --- a/lambda-test/.cproject +++ b/lambda-test/.cproject @@ -84,7 +84,7 @@ - + diff --git a/lambda-test/avrjunit.h b/lambda-test/avrjunit.h index c0ae496..4835a52 100644 --- a/lambda-test/avrjunit.h +++ b/lambda-test/avrjunit.h @@ -15,6 +15,16 @@ #define AVRJUNIT_H_ /** + * Returns false if the given expression is not true. + */ +#define assertTrue(exp) if (! (exp)) return false + +/** + * Returns false if the given expression is not false. + */ +#define assertFalse(exp) if (exp) return false + +/** * A test case with its class, name and pointer to the test function, * which should return true on success and false on failure. */ diff --git a/lambda-test/lambda-test.c b/lambda-test/lambda-test.c index 93eac7c..7967d0e 100644 --- a/lambda-test/lambda-test.c +++ b/lambda-test/lambda-test.c @@ -40,15 +40,15 @@ setupADC(); // AVCC is set as AREF - if ((ADMUX & (1 << REFS0)) != (1 << REFS0)) return false; + assertTrue(bit_is_set(ADMUX, REFS0)); // digital inputs are disabled uint8_t adcPorts = (1 << PC0) | (1 << PC2) | (1 << PC5); - if ((DIDR0 & adcPorts) != adcPorts) return false; + assertTrue((DIDR0 & adcPorts) == adcPorts); // ADC clock prescaler/8 uint8_t prescalerBy8 = (1 << ADPS1) | (1 << ADPS0); - if ((ADCSRA & prescalerBy8) != prescalerBy8) return false; + assertTrue((ADCSRA & prescalerBy8) == prescalerBy8); // ADC enabled - if ((ADCSRA & (1 << ADEN)) != (1 << ADEN)) return false; + assertTrue(bit_is_set(ADCSRA, ADEN)); return true; } @@ -57,11 +57,11 @@ setupSleepMode(); // set_sleep_mode(SLEEP_MODE_ADC); - if ((SMCR & (1 << SM0)) != (1 << SM0)) return false; + assertTrue(bit_is_set(SMCR, SM0)); // sei(); // enable global interrupts - if ((SREG & (1 << SREG_I)) != (1 << SREG_I)) return false; + assertTrue(bit_is_set(SREG, SREG_I)); // ADC interrupt enabled - if ((ADCSRA & (1 << ADIE)) != (1 << ADIE)) return false; + assertTrue(bit_is_set(ADCSRA, ADIE)); return true; } @@ -88,121 +88,65 @@ /* Module integers */ bool testDivRoundNearest(void) { - int32_t round = 0; - - round = divRoundNearest(4, 2); - if (round != 2) return false; - - round = divRoundNearest(5, 2); - if (round != 3) return false; - - round = divRoundNearest(10, 3); - if (round != 3) return false; + assertTrue(divRoundNearest(4, 2) == 2); + assertTrue(divRoundNearest(5, 2) == 3); + assertTrue(divRoundNearest(10, 3) == 3); return true; } bool testDivRoundNearestNumNeg(void) { - int32_t round = 0; - - round = divRoundNearest(-4, 2); - if (round != -2) return false; - - round = divRoundNearest(-5, 2); - if (round != -3) return false; - - round = divRoundNearest(-10, 3); - if (round != -3) return false; + assertTrue(divRoundNearest(-4, 2) == -2); + assertTrue(divRoundNearest(-5, 2) == -3); + assertTrue(divRoundNearest(-10, 3) == -3); return true; } bool testDivRoundNearestDenNeg(void) { - int32_t round = 0; - - round = divRoundNearest(4, -2); - if (round != -2) return false; - - round = divRoundNearest(5, -2); - if (round != -3) return false; - - round = divRoundNearest(10, -3); - if (round != -3) return false; + assertTrue(divRoundNearest(4, -2) == -2); + assertTrue(divRoundNearest(5, -2) == -3); + assertTrue(divRoundNearest(10, -3) == -3); return true; } bool testDivRoundNearestBothNeg(void) { - int32_t round = 0; - - round = divRoundNearest(-4, -2); - if (round != 2) return false; - - round = divRoundNearest(-5, -2); - if (round != 3) return false; - - round = divRoundNearest(-10, -3); - if (round != 3) return false; + assertTrue(divRoundNearest(-4, -2) == 2); + assertTrue(divRoundNearest(-5, -2) == 3); + assertTrue(divRoundNearest(-10, -3) == 3); return true; } bool testDivRoundUp(void) { - int32_t round = 0; - - round = divRoundUp(4, 2); - if (round != 2) return false; - - round = divRoundUp(5, 2); - if (round != 3) return false; - - round = divRoundUp(10, 3); - if (round != 4) return false; + assertTrue(divRoundUp(4, 2) == 2); + assertTrue(divRoundUp(5, 2) == 3); + assertTrue(divRoundUp(10, 3) == 4); return true; } bool testDivRoundUpNumNeg(void) { - int32_t round = 0; - - round = divRoundUp(-4, 2); - if (round != -2) return false; - - round = divRoundUp(-5, 2); - if (round != -3) return false; - - round = divRoundUp(-10, 3); - if (round != -4) return false; + assertTrue(divRoundUp(-4, 2) == -2); + assertTrue(divRoundUp(-5, 2) == -3); + assertTrue(divRoundUp(-10, 3) == -4); return true; } bool testDivRoundUpDenNeg(void) { - int32_t round = 0; - - round = divRoundUp(4, -2); - if (round != -2) return false; - - round = divRoundUp(5, -2); - if (round != -3) return false; - - round = divRoundUp(10, -3); - if (round != -4) return false; + assertTrue(divRoundUp(4, -2) == -2); + assertTrue(divRoundUp(5, -2) == -3); + assertTrue(divRoundUp(10, -3) == -4); return true; } bool testDivRoundUpBothNeg(void) { - int32_t round = 0; - - round = divRoundUp(-4, -2); - if (round != 2) return false; - - round = divRoundUp(-5, -2); - if (round != 3) return false; - - round = divRoundUp(-10, -3); - if (round != 4) return false; + assertTrue(divRoundUp(-4, -2) == 2); + assertTrue(divRoundUp(-5, -2) == 3); + assertTrue(divRoundUp(-10, -3) == 4); return true; } @@ -226,15 +170,15 @@ meas = measure(); } - if (meas.tempIVoltage < 4900) return false; - if (meas.tempOVoltage < 4900) return false; + assertTrue(meas.tempIVoltage > 4900); + assertTrue(meas.tempOVoltage > 4900); // lambdaVoltage is divided by the OP amplification factor 11 - if (meas.lambdaVoltage < (4900 / 11)) return false; + assertTrue(meas.lambdaVoltage > (4900 / 11)); // verify that temperatures and lambda are calculated correctly - if (meas.tempI != toTempI(meas.tempIVoltage)) return false; - if (meas.tempO != toTempO(meas.tempOVoltage)) return false; - if (meas.lambda != toLambda(meas.lambdaVoltage)) return false; + assertTrue(meas.tempI == toTempI(meas.tempIVoltage)); + assertTrue(meas.tempO == toTempO(meas.tempOVoltage)); + assertTrue(meas.lambda == toLambda(meas.lambdaVoltage)); return true; } diff --git a/lambda/.cproject b/lambda/.cproject index 2e6c620..01840e9 100644 --- a/lambda/.cproject +++ b/lambda/.cproject @@ -84,7 +84,7 @@ - + @@ -126,7 +126,14 @@ - + + + + + + + + @@ -136,4 +143,5 @@ + diff --git a/lambda/.settings/org.eclipse.cdt.codan.core.prefs b/lambda/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..77386c2 --- /dev/null +++ b/lambda/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,67 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.codan.checkers.errnoreturn=Warning +org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},implicit\=>false} +org.eclipse.cdt.codan.checkers.errreturnvalue=Error +org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.checkers.noreturn=Error +org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},implicit\=>false} +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false} +org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning +org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},unknown\=>false,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},skip\=>true} +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error +org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},pattern\=>"^[a-z]",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error +org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},paramNot\=>false} +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},else\=>false,afterelse\=>false} +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},macro\=>true,exceptions\=>("@(\#)","$Id")} +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}}