117 lines
2.9 KiB
C
117 lines
2.9 KiB
C
//
|
|
// Created by frederik on 1/11/25.
|
|
//
|
|
|
|
#include "MMS24-25.h"
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <stdarg.h>
|
|
#include <math.h>
|
|
|
|
void info(char* fmt,...) {
|
|
fprintf(stderr, "[\x1B[37;1m INFO \x1B[0m] \x1B[34m'");
|
|
|
|
va_list args;
|
|
va_start(args, fmt);
|
|
vfprintf(stderr, fmt, args);
|
|
va_end(args);
|
|
|
|
fprintf(stderr, "'\x1B[0m\n");
|
|
}
|
|
|
|
void success(char* fmt,...) {
|
|
fprintf(stderr, "[\x1B[32;1m PASS \x1B[0m] \x1B[34m'");
|
|
|
|
va_list args;
|
|
va_start(args, fmt);
|
|
vfprintf(stderr, fmt, args);
|
|
va_end(args);
|
|
|
|
fprintf(stderr, "'\x1B[0m\n");
|
|
}
|
|
|
|
void error(const char* fmt, ...) {
|
|
va_list args;
|
|
|
|
fprintf(stderr, "<\x1B[31;1m ERROR \x1B[0m: \x1B[34m'");
|
|
va_start(args, fmt);
|
|
vfprintf(stderr, fmt, args);
|
|
va_end(args);
|
|
fprintf(stderr, "'\x1B[0m >\n");
|
|
exit(-1);
|
|
}
|
|
|
|
void testInterpolation() {
|
|
info("testInterpolation");
|
|
|
|
double dRangeMin = -3;
|
|
double dRangeMax = 3;
|
|
double dRangeStep = 0.33;
|
|
|
|
for (double dX1=dRangeMin;dX1<dRangeMax;dX1+=dRangeStep) {
|
|
for (double dX2=dRangeMin;dX2<dRangeMax;dX2+=dRangeStep) {
|
|
for (double dY1=dRangeMin;dY1<dRangeMax;dY1+=dRangeStep) {
|
|
for (double dY2=dRangeMin;dY2<dRangeMax;dY2+=dRangeStep) {
|
|
for (double dX=dRangeMin;dX<dRangeMax;dX+=dRangeStep) {
|
|
if (dX1 == dX2 || dX1 == dX || dX2 == dX)
|
|
continue;
|
|
|
|
double dR1 = interpolateLine(dX1, dY1, dX2, dY2, dX);
|
|
double dR2 = interpolateLine(dX1, dY1, dX, dR1, dX2);
|
|
|
|
if (round(dR2*1e6) != round(dY2*1e6))
|
|
error("Failed assertion for: (%lf, %lf), (%lf, %lf) -> (%lf, %lf); %lf", dX1, dY1, dX2, dY2, dX, dR1, dR2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
success("testInterpolation();");
|
|
}
|
|
|
|
void testSineAndWriteDoubleArraySingle(int nValues, int dPLen, double dAmp) {
|
|
info("Trying: %d, %d, %lf", nValues, dPLen, dAmp);
|
|
|
|
char* fileName = NULL;
|
|
fileName = malloc(100*sizeof(char));
|
|
|
|
if (fileName == NULL) {
|
|
error("Could not allocate Memory for `fileName`!");
|
|
}
|
|
|
|
sprintf(fileName, "sine_%d_%d_%lf.results.txt", nValues, dPLen, dAmp);
|
|
|
|
writeDoubleArray(
|
|
generateSineValues(
|
|
nValues,
|
|
dPLen,
|
|
dAmp
|
|
),
|
|
nValues,
|
|
fileName
|
|
);
|
|
|
|
info("use `plot \"%s\", \"%s\" with lines` to view.", fileName, fileName);
|
|
|
|
free(fileName);
|
|
}
|
|
|
|
void testSineAndWriteDoubleArray() {
|
|
info("testSineAndWriteDoubleArray");
|
|
|
|
testSineAndWriteDoubleArraySingle(1000, 300, 1);
|
|
testSineAndWriteDoubleArraySingle(10, 10, 0.5);
|
|
testSineAndWriteDoubleArraySingle(10, -10, 0.5);
|
|
testSineAndWriteDoubleArraySingle(10, 10, 0);
|
|
|
|
success("testSineAndWriteDoubleArray");
|
|
}
|
|
|
|
int main (int iArgC, char** ppcArgV){
|
|
testInterpolation();
|
|
testSineAndWriteDoubleArray();
|
|
|
|
return 0;
|
|
}
|