aboutsummaryrefslogtreecommitdiff
path: root/test-vector.c
diff options
context:
space:
mode:
authortlatorre <tlatorre@uchicago.edu>2018-08-14 10:08:27 -0500
committertlatorre <tlatorre@uchicago.edu>2018-08-14 10:08:27 -0500
commit24c8bcfe7f76b20124e2862ea050f815c0f768e7 (patch)
treee5bdbd638a2c7f38f1c094cc9e95cbdfe05b9481 /test-vector.c
parent0b7f199c0d93074484ea580504485a32dc29f5e2 (diff)
downloadsddm-24c8bcfe7f76b20124e2862ea050f815c0f768e7.tar.gz
sddm-24c8bcfe7f76b20124e2862ea050f815c0f768e7.tar.bz2
sddm-24c8bcfe7f76b20124e2862ea050f815c0f768e7.zip
move everything to src directory
Diffstat (limited to 'test-vector.c')
-rw-r--r--test-vector.c319
1 files changed, 0 insertions, 319 deletions
diff --git a/test-vector.c b/test-vector.c
deleted file mode 100644
index 44b4a71..0000000
--- a/test-vector.c
+++ /dev/null
@@ -1,319 +0,0 @@
-#include <math.h>
-#include <stdio.h>
-#include "vector.h"
-#include "mt19937ar.h"
-
-typedef int testFunction(char *err);
-
-int isclose(double a, double b, double rel_tol, double abs_tol)
-{
- /* Returns 1 if a and b are "close". This algorithm is taken from Python's
- * math.isclose() function.
- *
- * See https://www.python.org/dev/peps/pep-0485/. */
- return fabs(a-b) <= fmax(rel_tol*fmax(fabs(a),fabs(b)),abs_tol);
-}
-
-int test_dot(char *err)
-{
- int i;
- double a[3], b[3], c, expected;
-
- init_genrand(0);
-
- for (i = 0; i < 100; i++) {
- a[0] = genrand_real2();
- a[1] = genrand_real2();
- a[2] = genrand_real2();
-
- b[0] = genrand_real2();
- b[1] = genrand_real2();
- b[2] = genrand_real2();
-
- c = DOT(a,b);
-
- expected = a[0]*b[0] + a[1]*b[1] + a[2]*b[2];
-
- if (!isclose(c, expected, 1e-9, 0)) {
- sprintf(err, "a \\dot b = %.5f, but expected %.5f", c, expected);
- return 1;
- }
- }
-
- return 0;
-}
-
-int test_norm(char *err)
-{
- int i;
- double a[3], c, expected;
-
- init_genrand(0);
-
- for (i = 0; i < 100; i++) {
- a[0] = genrand_real2();
- a[1] = genrand_real2();
- a[2] = genrand_real2();
-
- c = NORM(a);
-
- expected = sqrt(a[0]*a[0] + a[1]*a[1] + a[2]*a[2]);
-
- if (!isclose(c, expected, 1e-9, 0)) {
- sprintf(err, "norm(a) = %.5f, but expected %.5f", c, expected);
- return 1;
- }
- }
-
- return 0;
-}
-
-int test_copy(char *err)
-{
- int i, j;
- double a[3], b[3];
-
- init_genrand(0);
-
- for (i = 0; i < 100; i++) {
- b[0] = genrand_real2();
- b[1] = genrand_real2();
- b[2] = genrand_real2();
-
- COPY(a,b);
-
- for (j = 0; j < 3; j++) {
- if (!isclose(a[j], b[j], 1e-9, 0)) {
- sprintf(err, "a[%i] = %.5f, but expected %.5f", j, a[j], b[j]);
- return 1;
- }
- }
- }
-
- return 0;
-}
-
-int test_div(char *err)
-{
- int i, j;
- double a[3], b[3], c;
-
- init_genrand(0);
-
- for (i = 0; i < 100; i++) {
- b[0] = genrand_real2();
- b[1] = genrand_real2();
- b[2] = genrand_real2();
-
- c = genrand_real2();
-
- COPY(a,b);
- DIV(a,c);
-
- for (j = 0; j < 3; j++) {
- if (!isclose(a[j], b[j]/c, 1e-9, 0)) {
- sprintf(err, "a[%i] = %.5f, but expected %.5f", j, a[j], b[j]/c);
- return 1;
- }
- }
- }
-
- return 0;
-}
-
-int test_add(char *err)
-{
- int i;
- double a[3], b[3], c[3];
-
- init_genrand(0);
-
- for (i = 0; i < 100; i++) {
- a[0] = genrand_real2();
- a[1] = genrand_real2();
- a[2] = genrand_real2();
-
- b[0] = genrand_real2();
- b[1] = genrand_real2();
- b[2] = genrand_real2();
-
- ADD(c,a,b);
-
- if (!isclose(c[0], a[0]+b[0], 1e-9, 0)) {
- sprintf(err, "a[0] + b[0] = %.5f, but expected %.5f", c[0], a[0]+b[0]);
- return 1;
- }
-
- if (!isclose(c[1], a[1]+b[1], 1e-9, 0)) {
- sprintf(err, "a[1] + b[1] = %.5f, but expected %.5f", c[1], a[1]+b[1]);
- return 1;
- }
-
- if (!isclose(c[2], a[2]+b[2], 1e-9, 0)) {
- sprintf(err, "a[2] + b[2] = %.5f, but expected %.5f", c[2], a[2]+b[2]);
- return 1;
- }
- }
-
- return 0;
-}
-
-int test_sub(char *err)
-{
- int i;
- double a[3], b[3], c[3];
-
- init_genrand(0);
-
- for (i = 0; i < 100; i++) {
- a[0] = genrand_real2();
- a[1] = genrand_real2();
- a[2] = genrand_real2();
-
- b[0] = genrand_real2();
- b[1] = genrand_real2();
- b[2] = genrand_real2();
-
- SUB(c,a,b);
-
- if (!isclose(c[0], a[0]-b[0], 1e-9, 0)) {
- sprintf(err, "a[0] - b[0] = %.5f, but expected %.5f", c[0], a[0]-b[0]);
- return 1;
- }
-
- if (!isclose(c[1], a[1]-b[1], 1e-9, 0)) {
- sprintf(err, "a[1] - b[1] = %.5f, but expected %.5f", c[1], a[1]-b[1]);
- return 1;
- }
-
- if (!isclose(c[2], a[2]-b[2], 1e-9, 0)) {
- sprintf(err, "a[2] - b[2] = %.5f, but expected %.5f", c[2], a[2]-b[2]);
- return 1;
- }
- }
-
- return 0;
-}
-
-int test_normalize(char *err)
-{
- int i;
- double a[3], c;
-
- init_genrand(0);
-
- for (i = 0; i < 100; i++) {
- a[0] = genrand_real2();
- a[1] = genrand_real2();
- a[2] = genrand_real2();
-
- normalize(a);
-
- c = NORM(a);
-
- if (!isclose(c, 1.0, 1e-9, 0)) {
- sprintf(err, "norm(a) = %.5f, but expected %.5f", c, 1.0);
- return 1;
- }
- }
-
- return 0;
-}
-
-int test_cross_product(char *err)
-{
- int i, j;
- double a[3], b[3], c[3], expected[3];
-
- init_genrand(0);
-
- for (i = 0; i < 100; i++) {
- a[0] = genrand_real2();
- a[1] = genrand_real2();
- a[2] = genrand_real2();
-
- b[0] = genrand_real2();
- b[1] = genrand_real2();
- b[2] = genrand_real2();
-
- CROSS(c,a,b);
-
- expected[0] = a[1]*b[2] - a[2]*b[1];
- expected[1] = a[2]*b[0] - a[0]*b[2];
- expected[2] = a[0]*b[1] - a[1]*b[0];
-
- for (j = 0; j < 3; j++) {
- if (!isclose(c[j], expected[j], 1e-9, 0)) {
- sprintf(err, "(a x b)[%i] = %.5f, but expected %.5f", j, c[j], expected[j]);
- return 1;
- }
- }
- }
-
- return 0;
-}
-
-int test_rotate(char *err)
-{
- int i;
- double a[3], b[3], c[3], expected[3];
-
- a[0] = 1;
- a[1] = 0;
- a[2] = 0;
-
- b[0] = 0;
- b[1] = 0;
- b[2] = 1;
-
- rotate(c,a,b,M_PI/2);
-
- expected[0] = 0;
- expected[1] = 1;
- expected[2] = 0;
-
- for (i = 0; i < 3; i++) {
- if (!isclose(c[i], expected[i], 1e-9, 1e-9)) {
- sprintf(err, "rotate(a,b,pi/2)[%i] = %.5f, but expected %.5f", i, c[i], expected[i]);
- return 1;
- }
- }
-
- return 0;
-}
-
-struct tests {
- testFunction *test;
- char *name;
-} tests[] = {
- {test_dot, "test_dot"},
- {test_norm, "test_norm"},
- {test_copy, "test_copy"},
- {test_div, "test_div"},
- {test_add, "test_add"},
- {test_sub, "test_sub"},
- {test_normalize, "test_normalize"},
- {test_cross_product, "test_cross_product"},
- {test_rotate, "test_rotate"}
-};
-
-int main(int argc, char **argv)
-{
- int i;
- char err[256];
- int retval = 0;
- struct tests test;
-
- for (i = 0; i < sizeof(tests)/sizeof(struct tests); i++) {
- test = tests[i];
-
- if (!test.test(err)) {
- printf("[\033[92mok\033[0m] %s\n", test.name);
- } else {
- printf("[\033[91mfail\033[0m] %s: %s\n", test.name, err);
- retval = 1;
- }
- }
-
- return retval;
-}