From 253d191f13dafb883c794f2b7c4e65d3361279b1 Mon Sep 17 00:00:00 2001 From: Frederik Beimgraben Date: Tue, 14 Jan 2025 13:06:39 +0100 Subject: [PATCH] Post-Submission Changes --- MMS24-25.c | 21 ++-- MMS24-25_BEIMG_CAM_HORNB.zip | Bin 0 -> 12081 bytes Makefile | 2 +- err.txt | 4 + result.txt | 4 + testInterpolation | Bin 0 -> 31552 bytes testInterpolation.c | 26 +++++ tests.c | 179 ++++++++++++++++++++++++++++++++++- 8 files changed, 226 insertions(+), 10 deletions(-) create mode 100644 MMS24-25_BEIMG_CAM_HORNB.zip create mode 100644 err.txt create mode 100644 result.txt create mode 100755 testInterpolation create mode 100644 testInterpolation.c diff --git a/MMS24-25.c b/MMS24-25.c index d9bcc81..1bf87c8 100644 --- a/MMS24-25.c +++ b/MMS24-25.c @@ -249,7 +249,7 @@ void rescaleDoubleArray( } /* - * Generate an array of `iNumValues` double value, so that the values + * Generate an array of `iNumValues` double values, so that the values * represent the Y-coordinates of a sine curve of which one full period * occupies `iNumSamplesPerPeriod` values. */ @@ -330,7 +330,7 @@ void writeDoubleArray(double *pdOut, int iLen, char *pcOutName) { _error("writeDoubleArray: Error while opening file '%s'.", pcOutName); if (iLen == 0) - _warn("writeDoubleArray: iLen is 0."); + _warn("writeDoubleArray: iLen is 0."); if (pdOut == NULL && iLen != 0) /* @@ -476,7 +476,7 @@ MMSignal *createSignalFromSignal(MMSignal *pmmsIn) { } } else { if (pmmsIn->iNumValues != 0) - _error("createSignalFromSignal: pmmsIn->pdValues is NULL while pmmsIn->iNumValues is not %d", pmmsIn->iNumValues); + _error("createSignalFromSignal: pmmsIn->pdValues is NULL while pmmsIn->iNumValues is not %d", pmmsIn->iNumValues); _warn("createSignalFromSignal: pmmsIn->pdValues is NULL"); signal->pdValues = NULL; @@ -895,8 +895,8 @@ Histogram *initHistogram(double *pdIn, int iLen, int iNumBins) { if (iNumBins == 0) _error("initHistogram: iNumBins must be non-0"); - if (iLen == 0) - _warn("initHistogram: iLen is 0"); + /*if (iLen == 0) // FIXME: This should be an error in the final version + _error("initHistogram: iLen is 0"); histogram->dIntervalMin = pdIn[0]; histogram->dIntervalMax = pdIn[0]; @@ -905,7 +905,12 @@ Histogram *initHistogram(double *pdIn, int iLen, int iNumBins) { histogram->dIntervalMin = pdIn[i]; if (pdIn[i] > histogram->dIntervalMax) histogram->dIntervalMax = pdIn[i]; - } + }*/ + + int minPos, maxPos; + getMinMaxPos(pdIn, iLen, &minPos, &maxPos); + histogram->dIntervalMin = pdIn[minPos]; + histogram->dIntervalMax = pdIn[maxPos]; #ifdef _DEBUG _debug("initHistogram: histogram->dIntervalMin = %lf", histogram->dIntervalMin); @@ -922,6 +927,7 @@ Histogram *initHistogram(double *pdIn, int iLen, int iNumBins) { if (histogram->dBinWidth == 0) histogram->dBinWidth = 1; + histogram->pdBinValues = NULL; // FIXME: This should be added in the final version histogram->pdBinValues = (double*) malloc(sizeof(double) *iNumBins); if (histogram->pdBinValues == NULL) _mem_error("initHistogram: Failed to allocate memory for histogram->pdBinValues"); @@ -997,7 +1003,8 @@ MMSignal *convoluteSignals(MMSignal *pmmsInA, MMSignal *pmmsInB) { // Calculate output length int iOutLen = pmmsInA->iNumValues + pmmsInB->iNumValues - 1; - double *pdOut = (double*) malloc(sizeof(double) *iOutLen); + double *pdOut = NULL; // FIXME: This should be added in the final version + pdOut = (double*) malloc(sizeof(double) *iOutLen); if (pdOut == NULL) _mem_error("convoluteSignals: Failed to allocate memory for pdOut"); diff --git a/MMS24-25_BEIMG_CAM_HORNB.zip b/MMS24-25_BEIMG_CAM_HORNB.zip new file mode 100644 index 0000000000000000000000000000000000000000..67f52518b2f287a957f5fee0640f6e7f0bde426f GIT binary patch literal 12081 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 bN9?cBP?Cj&`nxF*{|tUm5Rh%gzpMWR-pJIS literal 0 HcmV?d00001 diff --git a/Makefile b/Makefile index c14a28a..bf8468c 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ CC=gcc SOURCE_FILE=MMS24-25.c -OPTS=-lm -D _DEBUG_ +OPTS=-lm all: clean tests run diff --git a/err.txt b/err.txt new file mode 100644 index 0000000..50696ef --- /dev/null +++ b/err.txt @@ -0,0 +1,4 @@ +[ WARN ] 'Test!' +[ WARN ] 'Test!' +[ WARN ] 'Test!' +[ WARN ] 'Test!' diff --git a/result.txt b/result.txt new file mode 100644 index 0000000..0786535 --- /dev/null +++ b/result.txt @@ -0,0 +1,4 @@ +6.000000 +7.000000 +8.000000 +9.000000 diff --git a/testInterpolation b/testInterpolation new file mode 100755 index 0000000000000000000000000000000000000000..f6dcf2c4a1cc1b9878831b5e60ce5c50f5a0bf6e GIT binary patch literal 31552 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 literal 0 HcmV?d00001 diff --git a/testInterpolation.c b/testInterpolation.c new file mode 100644 index 0000000..389bd3a --- /dev/null +++ b/testInterpolation.c @@ -0,0 +1,26 @@ +#include "MMS24-25.h" +#include +#include + +int main (int iArgC, char** ppcArgV){ + int iRes = -1; + + if (iArgC != 6){ + printf("Number of Arguments != 6\n"); + printf("Usage testInterpolation \n"); + exit(iRes); + }; + + double dX1 = atof(ppcArgV[1]); + double dY1 = atof(ppcArgV[2]); + double dX2 = atof(ppcArgV[3]); + double dY2 = atof(ppcArgV[4]); + double dX = atof(ppcArgV[5]); + + for(int i=0; i<4; i++){ + double dRes = interpolateLine(dX1, dY1, dX2, dY2, dX+(double)i); + printf ("%f\n",dRes); + } + + return iRes; +} diff --git a/tests.c b/tests.c index 1a271e2..9ad5137 100644 --- a/tests.c +++ b/tests.c @@ -496,6 +496,182 @@ void testCalcExtrema() { success("testCalcExtrema"); } +void testInitMMSignalFeatures() { + /* + * Test for Signals of multiple lengths including edge cases. + */ + + info("testInitMMSignalFeatures"); + + // Test for 0 values + info("Test for 0 values"); + MMSignal *signal = createSignalWithDefault(0, 0); + initMMSignalFeatures(signal); + if (signal->dArea != 0) { + error("Failed to calculate the correct area: %lf != 0", signal->dArea); + } + if (signal->dMean != 0) { + error("Failed to calculate the correct mean: %lf != 0", signal->dMean); + } + if (signal->dStdDev != 0) { + error("Failed to calculate the correct standard deviation: %lf != 0", signal->dStdDev); + } + if (signal->dMedian != 0) { + error("Failed to calculate the correct median: %lf != 0", signal->dMedian); + } + if (signal->pexExtrema->iGlobalMinPos != 0) { + error("Failed to calculate the correct global minimum position: %d != 0", signal->pexExtrema->iGlobalMinPos); + } + if (signal->pexExtrema->iGlobalMaxPos != 0) { + error("Failed to calculate the correct global maximum position: %d != 0", signal->pexExtrema->iGlobalMaxPos); + } + if (signal->pexExtrema->pexLocalMax->iNumLocalExtrema != 0) { + error("Failed to calculate the correct number of local maxima: %d != 0", signal->pexExtrema->pexLocalMax->iNumLocalExtrema); + } + deleteSignal(signal); + + // List of 1 to 10 + double pdValuesL[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; + signal = createSignalFromDoubleArray(10, pdValuesL); + initMMSignalFeatures(signal); + if (signal->dArea != 55) { + error("Failed to calculate the correct area: %lf != 55", signal->dArea); + } + if (signal->dMean != 5.5) { + error("Failed to calculate the correct mean: %lf != 5.5", signal->dMean); + } + if (round(signal->dStdDev*1e6) != 2.872281e6) { + error("Failed to calculate the correct standard deviation: %lf != 2.872281", signal->dStdDev); + } + if (signal->dMedian != 5.5) { + error("Failed to calculate the correct median: %lf != 5.5", signal->dMedian); + } + if (signal->pexExtrema->iGlobalMinPos != 0) { + error("Failed to calculate the correct global minimum position: %d != 0", signal->pexExtrema->iGlobalMinPos); + } + if (signal->pexExtrema->iGlobalMaxPos != 9) { + error("Failed to calculate the correct global maximum position: %d != 9", signal->pexExtrema->iGlobalMaxPos); + } + if (signal->pexExtrema->pexLocalMax->iNumLocalExtrema != 0) { + error("Failed to calculate the correct number of local maxima: %d != 1", signal->pexExtrema->pexLocalMax->iNumLocalExtrema); + } + deleteSignal(signal); + + + // Test for 1 value + info("Test for 1 value"); + signal = createSignalWithDefault(1, 1); + initMMSignalFeatures(signal); + if (signal->dArea != 1) { + error("Failed to calculate the correct area: %lf != 1", signal->dArea); + } + if (signal->dMean != 1) { + error("Failed to calculate the correct mean: %lf != 1", signal->dMean); + } + if (signal->dStdDev != 0) { + error("Failed to calculate the correct standard deviation: %lf != 0", signal->dStdDev); + } + if (signal->dMedian != 1) { + error("Failed to calculate the correct median: %lf != 1", signal->dMedian); + } + if (signal->pexExtrema->iGlobalMinPos != 0) { + error("Failed to calculate the correct global minimum position: %d != 0", signal->pexExtrema->iGlobalMinPos); + } + if (signal->pexExtrema->iGlobalMaxPos != 0) { + error("Failed to calculate the correct global maximum position: %d != 0", signal->pexExtrema->iGlobalMaxPos); + } + if (signal->pexExtrema->pexLocalMax->iNumLocalExtrema != 0) { + error("Failed to calculate the correct number of local maxima: %d != 1", signal->pexExtrema->pexLocalMax->iNumLocalExtrema); + } + deleteSignal(signal); + + // Test for 2 values + info("testInitMMSignalFeatures: 2 values"); + double pdValuesT[] = {1, 1}; + signal = createSignalFromDoubleArray(2, pdValuesT); + initMMSignalFeatures(signal); + if (signal->dArea != 2) { + error("Failed to calculate the correct area: %lf != 2", signal->dArea); + } + if (signal->dMean != 1) { + error("Failed to calculate the correct mean: %lf != 1", signal->dMean); + } + if (signal->dStdDev != 0) { + error("Failed to calculate the correct standard deviation: %lf != 0", signal->dStdDev); + } + if (signal->dMedian != 1) { + error("Failed to calculate the correct median: %lf != 1", signal->dMedian); + } + if (signal->pexExtrema->iGlobalMinPos != 0) { + error("Failed to calculate the correct global minimum position: %d != 0", signal->pexExtrema->iGlobalMinPos); + } + if (signal->pexExtrema->iGlobalMaxPos != 0) { + error("Failed to calculate the correct global maximum position: %d != 0", signal->pexExtrema->iGlobalMaxPos); + } + if (signal->pexExtrema->pexLocalMax->iNumLocalExtrema != 0) { + error("Failed to calculate the correct number of local maxima: %d != 0", signal->pexExtrema->pexLocalMax->iNumLocalExtrema); + } + deleteSignal(signal); + + // Test for 3 values with local maximum + info("testInitMMSignalFeatures: 3 values with local maximum"); + double pdValues[] = {1, 2, 1}; + signal = createSignalFromDoubleArray(3, pdValues); + initMMSignalFeatures(signal); + if (signal->dArea != 4) { + error("Failed to calculate the correct area: %lf != 4", signal->dArea); + } + if (signal->dMean != 4.0/3.0) { + error("Failed to calculate the correct mean: %lf != 4/3", signal->dMean); + } + if (round(signal->dStdDev*1e6) != 0.471405e6) { + error("Failed to calculate the correct standard deviation: %lf != 0.471405", signal->dStdDev); + } + if (signal->dMedian != 1) { + error("Failed to calculate the correct median: %lf != 1", signal->dMedian); + } + if (signal->pexExtrema->iGlobalMinPos != 0) { + error("Failed to calculate the correct global minimum position: %d != 2", signal->pexExtrema->iGlobalMinPos); + } + if (signal->pexExtrema->iGlobalMaxPos != 1) { + error("Failed to calculate the correct global maximum position: %d != 1", signal->pexExtrema->iGlobalMaxPos); + } + if (signal->pexExtrema->pexLocalMax->iNumLocalExtrema != 1) { + error("Failed to calculate the correct number of local maxima: %d != 1", signal->pexExtrema->pexLocalMax->iNumLocalExtrema); + } + deleteSignal(signal); + + // Test for 3 values with local minimum + info("testInitMMSignalFeatures: 3 values with local minimum"); + double pdValues2[] = {1, 0, 1}; + signal = createSignalFromDoubleArray(3, pdValues2); + initMMSignalFeatures(signal); + if (signal->dArea != 2) { + error("Failed to calculate the correct area: %lf != 2", signal->dArea); + } + if (signal->dMean != 2.0/3.0) { + error("Failed to calculate the correct mean: %lf != 2/3", signal->dMean); + } + if (round(signal->dStdDev*1e6) != 0.471405e6) { + error("Failed to calculate the correct standard deviation: %lf != 0.471405", signal->dStdDev); + } + if (signal->dMedian != 1) { + error("Failed to calculate the correct median: %lf != 1", signal->dMedian); + } + if (signal->pexExtrema->iGlobalMinPos != 1) { + error("Failed to calculate the correct global minimum position: %d != 1", signal->pexExtrema->iGlobalMinPos); + } + if (signal->pexExtrema->iGlobalMaxPos != 0) { + error("Failed to calculate the correct global maximum position: %d != 2", signal->pexExtrema->iGlobalMaxPos); + } + if (signal->pexExtrema->pexLocalMin->iNumLocalExtrema != 1) { + error("Failed to calculate the correct number of local minima: %d != 1", signal->pexExtrema->pexLocalMin->iNumLocalExtrema); + } + deleteSignal(signal); + + success("testInitMMSignalFeatures"); +} + int main (int iArgC, char** ppcArgV){ testInterpolation(); testSineAndReadWriteDoubleArray(); @@ -515,8 +691,7 @@ int main (int iArgC, char** ppcArgV){ testConvertPolar2Cart(); testApplyPascalConvForSeriesGT40(); testCalcExtrema(); - - initMMSignalFeatures(createSignal()); + testInitMMSignalFeatures(); return 0; }