diff --git a/MMS24-25.c b/MMS24-25.c index 72ece9d..14dd5ba 100644 --- a/MMS24-25.c +++ b/MMS24-25.c @@ -228,9 +228,9 @@ double interpolateLine( * \[ \forall i, j \in (0,\dots,iLen-1): * (pdOut_i - pdOut_j) = (pdIn_i - pdIn_j) *dFactor \], * which naturally results from: - * $ pdOut_i = pdIn_i *dFactor + (dMin - min(pdIn)) $. + * $ pdOut_i = (pdIn_i + min(pdIn)) * dFactor + dMin $. */ -void rescaleDoubleArray( + void rescaleDoubleArray( double *pdIn, int iLen, double dMin, @@ -242,30 +242,19 @@ void rescaleDoubleArray( return; } + // First find the old minimum + double dOldMin = pdIn[0]; + for (int i = 1; i < iLen; i++) { + if (pdIn[i] < dOldMin) + dOldMin = pdIn[i]; + } + + _debug("dOldMin: %lf", dOldMin); + // Rescale the array for (int i = 0; i < iLen; i++) { - pdOut[i] = pdIn[i] * dFactor; + pdOut[i] = (pdIn[i] - dOldMin) * dFactor + dMin; } - - // First find the minimum - double dOldMin = pdOut[0]; - for (int i = 1; i < iLen; i++) { - if (pdOut[i] < dOldMin) - dOldMin = pdOut[i]; - } - - // Calculate the offset - double dOffset = dMin - dOldMin; - - // Move the values to the new minimum - for (int i = 0; i < iLen; i++) { - pdOut[i] += dOffset; - } - -#ifdef _DEBUG - _debug("rescaleDoubleArray: dOldMin = %lf", dOldMin); - _debug("rescaleDoubleArray: dOffset = %lf", dOffset); -#endif } /* diff --git a/Makefile b/Makefile index 600c731..d733fb8 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,8 @@ CC=gcc SOURCE_FILE=MMS24-25.c -OPTS=-lm -D _DEBUG -std=c99 +OPTS=-lm -std=c99 + +FCC=afl-cc all: clean tests run @@ -12,3 +14,7 @@ tests: run: ./tests + +fuzz: + $(FCC) $(SOURCE_FILE) -o fuzz $(OPTS) + afl-fuzz -i in -o out ./fuzz diff --git a/tests.c b/tests.c index 3141940..5b0c68a 100644 --- a/tests.c +++ b/tests.c @@ -678,6 +678,99 @@ void testInitMMSignalFeatures() { success("testInitMMSignalFeatures"); } +int eqToNDecimals(double dValueA, double dValueB, int iDecimals) { + return round(dValueA * pow(10, iDecimals)) == round(dValueB * pow(10, iDecimals)); +} + +void testRescaleDoubleArraySingle( + double *pdValues, + double *pdExpectedValues, + int iNumValues, + double dMin, + double dFactor +) { + double pdOut[10]; + + rescaleDoubleArray(pdValues, iNumValues, dMin, dFactor, pdOut); + + for (int i=0; i%d: %lf != %lf", i-1, i, pdOut[i] - pdOut[i-1], (pdValues[i] - pdValues[i-1]) * dFactor); + } + } + + int minIndex = 0; + for (int i=1; i