From 86dd4be559c75e6e05f8bffb1c2c7992b3d6c7f2 Mon Sep 17 00:00:00 2001 From: Frederik Beimgraben Date: Sat, 11 Jan 2025 18:49:44 +0100 Subject: [PATCH] Add more error handling and tests --- .gitignore | 2 +- MMS24-25.c | 48 ++++++++++++++++++++++++++++----------- Makefile | 2 +- tests | Bin 16328 -> 0 bytes tests.c | 65 ++++++++++++++++++++++++++++++++++++++++++----------- 5 files changed, 89 insertions(+), 28 deletions(-) delete mode 100755 tests diff --git a/.gitignore b/.gitignore index cb50d2d..a6db308 100644 --- a/.gitignore +++ b/.gitignore @@ -54,4 +54,4 @@ dkms.conf main -*result.txt \ No newline at end of file +*results.txt \ No newline at end of file diff --git a/MMS24-25.c b/MMS24-25.c index 1f08442..93770d0 100644 --- a/MMS24-25.c +++ b/MMS24-25.c @@ -24,30 +24,41 @@ #define NULL 0 #endif -void _error(char* fmt,...) { - printf("<\x1B[31;1m ERROR \x1B[0m: \x1B[34m'"); +void _error(char* fmt, ...) { + fprintf(stderr, "<\x1B[31;1m ERROR \x1B[0m: \x1B[34m'"); va_list args; va_start(args, fmt); - printf(fmt, args); + vfprintf(stderr, fmt, args); va_end(args); - printf("'\x1B[0m >\n"); + fprintf(stderr, "'\x1B[0m >\n"); +#ifndef _TESTS_NONSTOP exit(-1); +#endif } -void _debug(char* fmt,...) { - printf("[\x1B[31;1m DEBUG \x1B[0m] \x1B[34m'"); +void _debug(char* fmt, ...) { + fprintf(stderr, "[\x1B[31;1m DEBUG \x1B[0m] \x1B[34m'"); va_list args; va_start(args, fmt); - printf(fmt, args); + vfprintf(stderr, fmt, args); va_end(args); - printf("'\x1B[0m\n"); + fprintf(stderr, "'\x1B[0m\n"); +} - exit(-1); +void _warn(char* fmt, ...) { + fprintf(stderr, "[\x1B[33;1m WARN \x1B[0m] \x1B[34m'"); + + va_list args; + va_start(args, fmt); + vfprintf(stderr, fmt, args); + va_end(args); + + fprintf(stderr, "'\x1B[0m\n"); } double interpolateLine( @@ -102,9 +113,22 @@ double *generateSineValues( ) { /* Generate an array of `iNumValues` double value, so that the values * represent the Y-coordinates of a sine curve of which one full period - * occupies `iNumSamplesPerPeriod` values + * occupies `iNumSamplesPerPeriod` values. */ + if (iNumSamplesPerPeriod == 0) + _error("*generateSineValues: iNumSamplesPerPeriod must be non-0!"); + + if (iNumSamplesPerPeriod < 0) + _warn("*generateSineValues: iNumSamplesPerPeriod is less than 0!"); + + if (iNumValues < 0) + _error("*generateSineValues: iNumValues must be equal to or greater than 0!"); + + if (iNumValues == 0) + _warn("*generateSineValues: iNumValues is 0!"); + + // Initialize the output array double* sineArray = NULL; sineArray = (double*) malloc(sizeof(double) * iNumValues); @@ -120,9 +144,7 @@ double *generateSineValues( } void writeDoubleArray(double *pdOut, int iLen, char *pcOutName) { - /* Write a list of double values to a file - */ - + // Write a list of double values to a file FILE* datei = fopen(pcOutName, "w"); if (datei == NULL) _error("writeDoubleArray: Error while opening file '%s'.\n", pcOutName); diff --git a/Makefile b/Makefile index b36eebb..1b5c3d8 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ CC=gcc SOURCE_FILE=MMS24-25.c -OPTS=-lm +OPTS=-lm -D _TESTS_NONSTOP all: clean tests run diff --git a/tests b/tests deleted file mode 100755 index 0b0af51e5982bc4400102625d7c7a9fc66513516..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16328 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 jo;x{qhq<^|tEeWIbFP void info(char* fmt,...) { - printf("[\x1B[37;1m INFO \x1B[0m]\t\x1B[34m'"); + fprintf(stderr, "[\x1B[37;1m INFO \x1B[0m] \x1B[34m'"); va_list args; va_start(args, fmt); - vprintf(fmt, args); + vfprintf(stderr, fmt, args); va_end(args); - printf("'\x1B[0m\n"); + fprintf(stderr, "'\x1B[0m\n"); } void success(char* fmt,...) { - printf("[\x1B[32;1m SUCCESS \x1B[0m]\t\x1B[34m'"); + fprintf(stderr, "[\x1B[32;1m PASS \x1B[0m] \x1B[34m'"); va_list args; va_start(args, fmt); - vprintf(fmt, args); + vfprintf(stderr, fmt, args); va_end(args); - printf("'\x1B[0m\n"); + fprintf(stderr, "'\x1B[0m\n"); } void error(const char* fmt, ...) { va_list args; - printf("<\x1B[31;1m ERROR \x1B[0m: \x1B[34m'"); + fprintf(stderr, "<\x1B[31;1m ERROR \x1B[0m: \x1B[34m'"); va_start(args, fmt); - vprintf(fmt, args); + vfprintf(stderr, fmt, args); va_end(args); - printf("'\x1B[0m >\n"); + fprintf(stderr, "'\x1B[0m >\n"); exit(-1); } void testInterpolation() { - info("testInterpolation();"); + info("testInterpolation"); - double dRangeMin = -10; - double dRangeMax = 10; - double dRangeStep = 0.5; + double dRangeMin = -3; + double dRangeMax = 3; + double dRangeStep = 0.33; for (double dX1=dRangeMin;dX1