eigenmath/selftest.cpp

213 lines
2.8 KiB
C++

// self test functions
#include "stdafx.h"
#include "defs.h"
#include "selftest.h"
static jmp_buf jbuf;
void
selftest(void)
{
// for handling "errout"
if (setjmp(jbuf))
return;
#if SELFTEST
test_low_level();
test_multiply();
test_scan();
test_power();
test_factor_number();
test_test();
test_tensor();
test_bake();
test(__FILE__, s, sizeof (s) / sizeof (char *)); // "s" is in selftest.h
test_abs();
test_adj();
test_arg();
test_besselj();
test_bessely();
test_ceiling();
test_choose();
test_circexp();
test_clock();
test_cofactor();
test_condense();
test_contract();
test_defint();
test_denominator();
test_derivative();
test_dirac();
test_erf();
test_erfc();
test_expand();
test_expcos();
test_expsin();
test_factorpoly();
test_float();
test_floor();
test_gamma();
test_gcd();
test_imag();
test_inner();
test_lcm();
test_log();
test_mag();
test_mod();
test_nroots();
test_numerator();
test_outer();
test_polar();
test_quotient();
test_rationalize();
test_real();
test_rect();
test_sgn();
test_taylor();
test_transpose();
test_zero();
test_hermite();
test_laguerre();
test_legendre();
test_binomial();
test_divisors();
test_coeff();
test_sin();
test_cos();
test_tan();
test_sinh();
test_cosh();
test_tanh();
test_arcsin();
test_arcsinh();
test_arccos();
test_arccosh();
test_arctan();
test_arctanh();
test_index();
test_isprime();
test_integral();
test_simplify();
test_roots();
test_eigen();
#endif
mini_test();
logout("OK, all tests passed.\n");
}
void
logout(char *s)
{
printstr(s);
}
void
errout(void)
{
logout("\n");
longjmp(jbuf, 1);
}
void
test(char *file, char **s, int n)
{
int i;
char *t;
test_flag = 1;
run("clear");
run("e=quote(e)");
for (i = 0; i < n; i++) {
logout(s[i]);
logout("\n");
if (s[i][0] == '#')
continue;
out_count = 0;
run(s[i]);
out_buf[out_count] = 0;
t = out_buf;
// skip leading newlines
while (*t == '\n')
t++;
// remove trailing newlines
while (out_count && out_buf[out_count - 1] == '\n')
out_buf[--out_count] = 0;
i++;
if (strcmp(t, s[i]) == 0)
continue;
// make copy because logout clobbers out_buf
t = strdup(t);
logout("expected to get the following result:\n");
logout(s[i]);
logout("\n");
logout("got this result instead:\n");
logout(t);
logout("\n");
logout(file);
logout("\n");
free(t);
errout();
}
test_flag = 0;
}
// these tests do not use "run" but still need a "stop" context
extern jmp_buf stop_return;
void
test_low_level(void)
{
run("clear"); // to initialize stack and memory
if (setjmp(stop_return)) {
errout();
return;
}
test_madd();
test_msub();
test_mmul();
test_mdiv();
test_mmod();
test_mprime();
test_mgcd();
test_mpow();
test_mroot();
test_quickfactor();
}