MMS-Loesung-2024-25/tests.c

78 lines
1.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,...) {
printf("[\x1B[37;1m INFO \x1B[0m]\t\x1B[34m'");
va_list args;
va_start(args, fmt);
vprintf(fmt, args);
va_end(args);
printf("'\x1B[0m\n");
}
void success(char* fmt,...) {
printf("[\x1B[32;1m SUCCESS \x1B[0m]\t\x1B[34m'");
va_list args;
va_start(args, fmt);
vprintf(fmt, args);
va_end(args);
printf("'\x1B[0m\n");
}
void error(const char* fmt, ...) {
va_list args;
printf("<\x1B[31;1m ERROR \x1B[0m: \x1B[34m'");
va_start(args, fmt);
vprintf(fmt, args);
va_end(args);
printf("'\x1B[0m >\n");
exit(-1);
}
void testInterpolation() {
info("testInterpolation();");
double dRangeMin = -10;
double dRangeMax = 10;
double dRangeStep = 0.5;
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();");
}
int main (int iArgC, char** ppcArgV){
testInterpolation();
return 0;
}