diff options
author | Tavian Barnes <tavianator@gmail.com> | 2011-05-15 15:54:56 -0600 |
---|---|---|
committer | Tavian Barnes <tavianator@gmail.com> | 2011-05-15 15:58:05 -0600 |
commit | a5a6b94c038e01ebf1e2de0a0774a69b02fb8e1e (patch) | |
tree | 66a4b977fff9f0119456b6c5a3398d25976f6c53 /tests/libdimension | |
parent | 130cbc32499ade9235873bc5d575816f80636916 (diff) | |
download | dimension-a5a6b94c038e01ebf1e2de0a0774a69b02fb8e1e.tar.xz |
Group tests and benchmarks with the corresponding source code.
Diffstat (limited to 'tests/libdimension')
-rw-r--r-- | tests/libdimension/Makefile.am | 81 | ||||
-rw-r--r-- | tests/libdimension/cxx.cpp | 36 | ||||
-rw-r--r-- | tests/libdimension/display-stubs.c | 38 | ||||
-rw-r--r-- | tests/libdimension/display.c | 151 | ||||
-rw-r--r-- | tests/libdimension/error.c | 30 | ||||
-rw-r--r-- | tests/libdimension/gl.c | 87 | ||||
-rw-r--r-- | tests/libdimension/png.c | 106 | ||||
-rw-r--r-- | tests/libdimension/polynomial.c | 62 | ||||
-rw-r--r-- | tests/libdimension/prtree.c | 98 | ||||
-rw-r--r-- | tests/libdimension/render.c | 309 | ||||
-rw-r--r-- | tests/libdimension/tests.h | 46 | ||||
-rw-r--r-- | tests/libdimension/warning-as-error.c | 31 | ||||
-rw-r--r-- | tests/libdimension/warning.c | 30 |
13 files changed, 0 insertions, 1105 deletions
diff --git a/tests/libdimension/Makefile.am b/tests/libdimension/Makefile.am deleted file mode 100644 index 6b5f8ca..0000000 --- a/tests/libdimension/Makefile.am +++ /dev/null @@ -1,81 +0,0 @@ -########################################################################### -## Copyright (C) 2009-2011 Tavian Barnes <tavianator@tavianator.com> ## -## ## -## This file is part of The Dimension Build Suite. ## -## ## -## The Dimension Build Suite is free software; you can redistribute it ## -## and/or modify it under the terms of the GNU General Public License as ## -## published by the Free Software Foundation; either version 3 of the ## -## License, or (at your option) any later version. ## -## ## -## The Dimension Build Suite is distributed in the hope that it will be ## -## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## -## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## -## General Public License for more details. ## -## ## -## You should have received a copy of the GNU General Public License ## -## along with this program. If not, see <http://www.gnu.org/licenses/>. ## -########################################################################### - -INCLUDES = -I$(top_srcdir)/libdimension - -check_LTLIBRARIES = libdimension-tests.la -check_PROGRAMS = warning-test \ - warning-as-error-test \ - error-test \ - polynomial-test \ - prtree-test \ - png-test \ - gl-test \ - render-test \ - cxx-test -TESTS = $(check_PROGRAMS) -XFAIL_TESTS = warning-as-error-test error-test - -if !PNG -XFAIL_TESTS += png-test -endif - -if !GL -XFAIL_TESTS += gl-test -endif - -libdimension_tests_la_SOURCES = tests.h -libdimension_tests_la_LIBADD = $(top_builddir)/libdimension/libdimension.la - -if GLX -libdimension_tests_la_SOURCES += display.c -libdimension_tests_la_LIBADD += -lX11 -lGL -else -libdimension_tests_la_SOURCES += display-stubs.c -endif - -warning_test_SOURCES = warning.c -warning_test_LDADD = libdimension-tests.la - -warning_as_error_test_SOURCES = warning-as-error.c -warning_as_error_test_LDADD = libdimension-tests.la - -error_test_SOURCES = error.c -error_test_LDADD = libdimension-tests.la - -polynomial_test_SOURCES = polynomial.c -polynomial_test_LDADD = libdimension-tests.la - -prtree_test_SOURCES = prtree.c -prtree_test_LDADD = libdimension-tests.la - -png_test_SOURCES = png.c -png_test_LDADD = libdimension-tests.la - -gl_test_SOURCES = gl.c -gl_test_LDADD = libdimension-tests.la - -render_test_SOURCES = render.c -render_test_LDADD = libdimension-tests.la - -cxx_test_SOURCES = cxx.cpp -cxx_test_LDADD = libdimension-tests.la - -clean-local: - rm -f *.png diff --git a/tests/libdimension/cxx.cpp b/tests/libdimension/cxx.cpp deleted file mode 100644 index 7405502..0000000 --- a/tests/libdimension/cxx.cpp +++ /dev/null @@ -1,36 +0,0 @@ -/************************************************************************* - * Copyright (C) 2010-2011 Tavian Barnes <tavianator@tavianator.com> * - * * - * This file is part of The Dimension Test Suite. * - * * - * The Dimension Test Suite is free software; you can redistribute it * - * and/or modify it under the terms of the GNU General Public License as * - * published by the Free Software Foundation; either version 3 of the * - * License, or (at your option) any later version. * - * * - * The Dimension Test Suite is distributed in the hope that it will be * - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty * - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see <http://www.gnu.org/licenses/>. * - *************************************************************************/ - -#include "tests.h" -#include <cstdlib> - -/* - * Ensure that dimension.h can be included in a C++ program and behave properly. - */ -int -main(void) -{ - /* Treat warnings as errors for tests */ - dmnsn_die_on_warnings(true); - - /* Make sure we can to bit-ops on this enum type */ - dmnsn_quality quality = DMNSN_RENDER_PIGMENT | DMNSN_RENDER_LIGHTS; - - return EXIT_SUCCESS; -} diff --git a/tests/libdimension/display-stubs.c b/tests/libdimension/display-stubs.c deleted file mode 100644 index e3fb99e..0000000 --- a/tests/libdimension/display-stubs.c +++ /dev/null @@ -1,38 +0,0 @@ -/************************************************************************* - * Copyright (C) 2009-2010 Tavian Barnes <tavianator@tavianator.com> * - * * - * This file is part of The Dimension Test Suite. * - * * - * The Dimension Test Suite is free software; you can redistribute it * - * and/or modify it under the terms of the GNU General Public License as * - * published by the Free Software Foundation; either version 3 of the * - * License, or (at your option) any later version. * - * * - * The Dimension Test Suite is distributed in the hope that it will be * - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty * - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see <http://www.gnu.org/licenses/>. * - *************************************************************************/ - -#include "tests.h" -#include <errno.h> - -dmnsn_display * -dmnsn_new_display(const dmnsn_canvas *canvas) -{ - errno = ENOSYS; - return NULL; -} - -void -dmnsn_delete_display(dmnsn_display *display) -{ -} - -void -dmnsn_display_flush(dmnsn_display *display) -{ -} diff --git a/tests/libdimension/display.c b/tests/libdimension/display.c deleted file mode 100644 index d4e2a1c..0000000 --- a/tests/libdimension/display.c +++ /dev/null @@ -1,151 +0,0 @@ -/************************************************************************* - * Copyright (C) 2009-2010 Tavian Barnes <tavianator@tavianator.com> * - * * - * This file is part of The Dimension Test Suite. * - * * - * The Dimension Test Suite is free software; you can redistribute it * - * and/or modify it under the terms of the GNU General Public License as * - * published by the Free Software Foundation; either version 3 of the * - * License, or (at your option) any later version. * - * * - * The Dimension Test Suite is distributed in the hope that it will be * - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty * - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see <http://www.gnu.org/licenses/>. * - *************************************************************************/ - -#include "tests.h" -#include <GL/glx.h> -#include <GL/gl.h> -#include <stdlib.h> - -struct dmnsn_display { - Display *dpy; - Window win; - Colormap cmap; - GLXContext cx; - XEvent event; - XVisualInfo *vi; -}; - -/* XIfEvent callback */ -static Bool -WaitForNotify(Display *d, XEvent *e, char *arg) -{ - return (e->type == MapNotify) && (e->xmap.window == (Window)arg); -} - -dmnsn_display * -dmnsn_new_display(const dmnsn_canvas *canvas) -{ - int attributeList[] = { - GLX_RGBA, - GLX_DOUBLEBUFFER, - GLX_RED_SIZE, 1, - GLX_GREEN_SIZE, 1, - GLX_BLUE_SIZE, 1, - None - }; - XSetWindowAttributes swa; - dmnsn_display *display; - - display = dmnsn_malloc(sizeof(dmnsn_display)); - - display->dpy = NULL; - display->win = 0; - display->cmap = 0; - display->cx = NULL; - display->vi = NULL; - - /* Get an X connection */ - display->dpy = XOpenDisplay(0); - if (!display->dpy) { - dmnsn_delete_display(display); - return NULL; - } - - /* Get an appropriate visual */ - display->vi = glXChooseVisual(display->dpy, DefaultScreen(display->dpy), - attributeList); - if (!display->vi) { - dmnsn_delete_display(display); - return NULL; - } - - /* Create a GLX context */ - display->cx = glXCreateContext(display->dpy, display->vi, 0, GL_TRUE); - if (!display->cx) { - dmnsn_delete_display(display); - return NULL; - } - - /* Create a color map */ - display->cmap = XCreateColormap(display->dpy, - RootWindow(display->dpy, display->vi->screen), - display->vi->visual, AllocNone); - if (!display->cmap) { - dmnsn_delete_display(display); - return NULL; - } - - /* Create a window */ - swa.colormap = display->cmap; - swa.border_pixel = 0; - swa.event_mask = StructureNotifyMask; - display->win = XCreateWindow(display->dpy, - RootWindow(display->dpy, display->vi->screen), - 0, 0, canvas->width, canvas->height, - 0, display->vi->depth, InputOutput, - display->vi->visual, - CWBorderPixel|CWColormap|CWEventMask, &swa); - if (!display->win) { - dmnsn_delete_display(display); - return NULL; - } - - XStoreName(display->dpy, display->win, "glX"); - - XMapWindow(display->dpy, display->win); - XIfEvent(display->dpy, &display->event, WaitForNotify, (char*)display->win); - - /* Connect the context to the window */ - glXMakeCurrent(display->dpy, display->win, display->cx); - glClearColor(0.0, 0.0, 0.0, 1.0); - glClear(GL_COLOR_BUFFER_BIT); - dmnsn_display_flush(display); - - return display; -} - -void -dmnsn_delete_display(dmnsn_display *display) -{ - if (display) { - if (display->win) - XDestroyWindow(display->dpy, display->win); - - if (display->cmap) - XFreeColormap(display->dpy, display->cmap); - - if (display->cx) - glXDestroyContext(display->dpy, display->cx); - - if (display->vi) - XFree(display->vi); - - if (display->dpy) - XCloseDisplay(display->dpy); - - dmnsn_free(display); - } -} - -void -dmnsn_display_flush(dmnsn_display *display) -{ - glXWaitX(); - glXSwapBuffers(display->dpy, display->win); -} diff --git a/tests/libdimension/error.c b/tests/libdimension/error.c deleted file mode 100644 index 5a4d7fd..0000000 --- a/tests/libdimension/error.c +++ /dev/null @@ -1,30 +0,0 @@ -/************************************************************************* - * Copyright (C) 2009-2011 Tavian Barnes <tavianator@tavianator.com> * - * * - * This file is part of The Dimension Test Suite. * - * * - * The Dimension Test Suite is free software; you can redistribute it * - * and/or modify it under the terms of the GNU General Public License as * - * published by the Free Software Foundation; either version 3 of the * - * License, or (at your option) any later version. * - * * - * The Dimension Test Suite is distributed in the hope that it will be * - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty * - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see <http://www.gnu.org/licenses/>. * - *************************************************************************/ - -/* Make sure that errors terminate us - this test should fail */ - -#include "dimension.h" -#include <stdlib.h> - -int -main(void) -{ - dmnsn_error("This error is expected."); - return EXIT_SUCCESS; -} diff --git a/tests/libdimension/gl.c b/tests/libdimension/gl.c deleted file mode 100644 index 8d93cf5..0000000 --- a/tests/libdimension/gl.c +++ /dev/null @@ -1,87 +0,0 @@ -/************************************************************************* - * Copyright (C) 2009-2011 Tavian Barnes <tavianator@tavianator.com> * - * * - * This file is part of The Dimension Test Suite. * - * * - * The Dimension Test Suite is free software; you can redistribute it * - * and/or modify it under the terms of the GNU General Public License as * - * published by the Free Software Foundation; either version 3 of the * - * License, or (at your option) any later version. * - * * - * The Dimension Test Suite is distributed in the hope that it will be * - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty * - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see <http://www.gnu.org/licenses/>. * - *************************************************************************/ - -#include "tests.h" -#include <stdlib.h> - -int -main(void) -{ - /* Treat warnings as errors for tests */ - dmnsn_die_on_warnings(true); - - /* Allocate our canvas */ - dmnsn_canvas *canvas = dmnsn_new_canvas(768, 480); - - /* Optimize the canvas for GL drawing */ - if (dmnsn_gl_optimize_canvas(canvas) != 0) { - dmnsn_delete_canvas(canvas); - fprintf(stderr, "--- Couldn't optimize canvas for GL! ---\n"); - return EXIT_FAILURE; - } - - /* Paint the canvas blue */ - dmnsn_clear_canvas(canvas, dmnsn_blue); - - /* Create a new glX display */ - dmnsn_display *display = dmnsn_new_display(canvas); - if (!display) { - fprintf(stderr, "--- WARNING: Couldn't initialize X or glX! ---\n"); - return EXIT_SUCCESS; - } - - /* Draw to OpenGL */ - printf("Drawing to OpenGL\n"); - if (dmnsn_gl_write_canvas(canvas) != 0) { - dmnsn_delete_display(display); - dmnsn_delete_canvas(canvas); - fprintf(stderr, "--- Drawing to OpenGL failed! ---\n"); - return EXIT_FAILURE; - } - dmnsn_display_flush(display); - dmnsn_delete_canvas(canvas); - - /* - * Now test GL import/export - */ - - /* Read the image back from OpenGL */ - printf("Reading from OpenGL\n"); - canvas = dmnsn_gl_read_canvas(0, 0, 768, 480); - if (!canvas) { - dmnsn_delete_display(display); - dmnsn_delete_canvas(canvas); - fprintf(stderr, "--- Reading from OpenGL failed! ---\n"); - return EXIT_FAILURE; - } - - /* And draw it back */ - printf("Drawing to OpenGL\n"); - if (dmnsn_gl_write_canvas(canvas) != 0) { - dmnsn_delete_display(display); - dmnsn_delete_canvas(canvas); - fprintf(stderr, "--- Drawing to OpenGL failed! ---\n"); - return EXIT_FAILURE; - } - - dmnsn_display_flush(display); - dmnsn_delete_display(display); - dmnsn_delete_canvas(canvas); - return EXIT_SUCCESS; -} diff --git a/tests/libdimension/png.c b/tests/libdimension/png.c deleted file mode 100644 index 328ee36..0000000 --- a/tests/libdimension/png.c +++ /dev/null @@ -1,106 +0,0 @@ -/************************************************************************* - * Copyright (C) 2009-2011 Tavian Barnes <tavianator@tavianator.com> * - * * - * This file is part of The Dimension Test Suite. * - * * - * The Dimension Test Suite is free software; you can redistribute it * - * and/or modify it under the terms of the GNU General Public License as * - * published by the Free Software Foundation; either version 3 of the * - * License, or (at your option) any later version. * - * * - * The Dimension Test Suite is distributed in the hope that it will be * - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty * - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see <http://www.gnu.org/licenses/>. * - *************************************************************************/ - -#include "tests.h" -#include <stdlib.h> -#include <stdio.h> - -int -main(void) -{ - /* Treat warnings as errors for tests */ - dmnsn_die_on_warnings(true); - - /* Allocate our canvas */ - dmnsn_canvas *canvas = dmnsn_new_canvas(768, 480); - - /* Optimize the canvas for PNG export */ - if (dmnsn_png_optimize_canvas(canvas) != 0) { - dmnsn_delete_canvas(canvas); - fprintf(stderr, "--- Couldn't optimize canvas for PNG! ---\n"); - return EXIT_FAILURE; - } - - /* Paint the canvas blue */ - dmnsn_clear_canvas(canvas, dmnsn_blue); - - /* Write the image to PNG */ - - printf("Writing scene to PNG\n"); - FILE *ofile = fopen("png1.png", "wb"); - if (!ofile) { - dmnsn_delete_canvas(canvas); - fprintf(stderr, "--- Couldn't open 'png1.png' for writing! ---\n"); - return EXIT_FAILURE; - } - - if (dmnsn_png_write_canvas(canvas, ofile) != 0) { - fclose(ofile); - dmnsn_delete_canvas(canvas); - fprintf(stderr, "--- Writing canvas to PNG failed! ---\n"); - return EXIT_FAILURE; - } - - fclose(ofile); - dmnsn_delete_canvas(canvas); - - /* - * Now test PNG import/export - */ - - /* Read the image back from PNG */ - - printf("Reading scene from PNG\n"); - FILE *ifile = fopen("png1.png", "rb"); - if (!ifile) { - fprintf(stderr, "--- Couldn't open 'png1.png' for reading! ---\n"); - return EXIT_FAILURE; - } - - canvas = dmnsn_png_read_canvas(ifile); - if (!canvas) { - fclose(ifile); - fprintf(stderr, "--- Reading canvas from PNG failed! ---\n"); - return EXIT_FAILURE; - } - - fclose(ifile); - - /* And write it back */ - - printf("Writing scene to PNG\n"); - ofile = fopen("png2.png", "wb"); - if (!ofile) { - fprintf(stderr, "--- Couldn't open 'png2.png' for writing! ---\n"); - dmnsn_delete_canvas(canvas); - return EXIT_FAILURE; - } - - if (dmnsn_png_write_canvas(canvas, ofile) != 0) { - fclose(ofile); - dmnsn_delete_canvas(canvas); - fprintf(stderr, "--- Writing canvas to PNG failed! ---\n"); - return EXIT_FAILURE; - } - - fclose(ofile); - dmnsn_delete_canvas(canvas); - - return EXIT_SUCCESS; -} diff --git a/tests/libdimension/polynomial.c b/tests/libdimension/polynomial.c deleted file mode 100644 index 5632b49..0000000 --- a/tests/libdimension/polynomial.c +++ /dev/null @@ -1,62 +0,0 @@ -/************************************************************************* - * Copyright (C) 2010-2011 Tavian Barnes <tavianator@tavianator.com> * - * * - * This file is part of The Dimension Test Suite. * - * * - * The Dimension Test Suite is free software; you can redistribute it * - * and/or modify it under the terms of the GNU General Public License as * - * published by the Free Software Foundation; either version 3 of the * - * License, or (at your option) any later version. * - * * - * The Dimension Test Suite is distributed in the hope that it will be * - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty * - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see <http://www.gnu.org/licenses/>. * - *************************************************************************/ - -/* - * Basic test of numerical polynomial root-finder - */ - -#include "dimension.h" -#include <stddef.h> -#include <stdio.h> - -int -main(void) -{ - /* Treat warnings as errors for tests */ - dmnsn_die_on_warnings(true); - - double poly[6], x[5]; - /* poly[] = (x + 1)*(x - 1.2345)*(x - 2.3456)*(x - 5)*(x - 100) */ - poly[5] = 1.0; - poly[4] = -107.5801; - poly[3] = 770.2260432; - poly[2] = -1215.2863928; - poly[1] = -646.270936; - poly[0] = 1447.8216; - - size_t n = dmnsn_solve_polynomial(poly, 5, x); - if (n != 4) { - fprintf(stderr, - "--- Wrong number of roots found (%zu, should be %u) ---\n", - n, 4); - return EXIT_FAILURE; - } - - for (size_t i = 0; i < n; ++i) { - double evmin = dmnsn_evaluate_polynomial(poly, 5, x[i] - dmnsn_epsilon); - double ev = dmnsn_evaluate_polynomial(poly, 5, x[i]); - double evmax = dmnsn_evaluate_polynomial(poly, 5, x[i] + dmnsn_epsilon); - if (fabs(evmin) < ev || fabs(evmax) < ev) { - fprintf(stderr, "--- Root %.15g is inaccurate! ---\n", x[i]); - return EXIT_FAILURE; - } - } - - return EXIT_SUCCESS; -} diff --git a/tests/libdimension/prtree.c b/tests/libdimension/prtree.c deleted file mode 100644 index cb36153..0000000 --- a/tests/libdimension/prtree.c +++ /dev/null @@ -1,98 +0,0 @@ -/************************************************************************* - * Copyright (C) 2010-2011 Tavian Barnes <tavianator@tavianator.com> * - * * - * This file is part of The Dimension Test Suite. * - * * - * The Dimension Test Suite is free software; you can redistribute it * - * and/or modify it under the terms of the GNU General Public License as * - * published by the Free Software Foundation; either version 3 of the * - * License, or (at your option) any later version. * - * * - * The Dimension Test Suite is distributed in the hope that it will be * - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty * - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see <http://www.gnu.org/licenses/>. * - *************************************************************************/ - -/* - * Basic tests of PR-trees - */ - -#include "dimension-impl.h" -#include "../../libdimension/prtree.c" /* For DMNSN_PRTREE_B */ -#include <stdio.h> -#include <stdlib.h> - -unsigned int calls = 0; - -static bool -dmnsn_fake_intersection_fn(const dmnsn_object *object, dmnsn_line line, - dmnsn_intersection *intersection) -{ - intersection->t = (object->bounding_box.min.z - line.x0.z)/line.n.z; - intersection->normal = dmnsn_x; - ++calls; - return true; -} - -static void -dmnsn_randomize_bounding_box(dmnsn_object *object) -{ - dmnsn_vector a, b; - - a.x = 2.0*((double)rand())/RAND_MAX - 1.0; - a.y = 2.0*((double)rand())/RAND_MAX - 1.0; - a.z = 2.0*((double)rand())/RAND_MAX - 1.0; - - b.x = 2.0*((double)rand())/RAND_MAX - 1.0; - b.y = 2.0*((double)rand())/RAND_MAX - 1.0; - b.z = 2.0*((double)rand())/RAND_MAX - 1.0; - - object->bounding_box.min = dmnsn_vector_min(a, b); - object->bounding_box.max = dmnsn_vector_max(a, b); -} - -int -main(void) -{ - /* Treat warnings as errors for tests */ - dmnsn_die_on_warnings(true); - - const size_t nobjects = 128; - dmnsn_scene *scene = dmnsn_new_scene(); - - for (size_t i = 0; i < nobjects; ++i) { - dmnsn_object *object = dmnsn_new_object(); - dmnsn_randomize_bounding_box(object); - object->intersection_fn = dmnsn_fake_intersection_fn; - dmnsn_initialize_object(object); - dmnsn_array_push(scene->objects, &object); - } - - dmnsn_prtree *prtree = dmnsn_new_prtree(scene->objects); - - dmnsn_intersection intersection; - dmnsn_line ray = dmnsn_new_line( - dmnsn_new_vector(0.0, 0.0, -2.0), - dmnsn_new_vector(0.0, 0.0, 1.0) - ); - - if (!dmnsn_prtree_intersection(prtree, ray, &intersection, true)) { - fprintf(stderr, "--- Didn't find intersection! ---\n"); - return EXIT_FAILURE; - } - - if (calls > DMNSN_PRTREE_B) { - fprintf(stderr, - "--- Too many intersection function calls: %u! ---\n", - calls); - return EXIT_FAILURE; - } - - dmnsn_delete_prtree(prtree); - dmnsn_delete_scene(scene); - return EXIT_SUCCESS; -} diff --git a/tests/libdimension/render.c b/tests/libdimension/render.c deleted file mode 100644 index 5b03423..0000000 --- a/tests/libdimension/render.c +++ /dev/null @@ -1,309 +0,0 @@ -/************************************************************************* - * Copyright (C) 2010-2011 Tavian Barnes <tavianator@tavianator.com> * - * * - * This file is part of The Dimension Test Suite. * - * * - * The Dimension Test Suite is free software; you can redistribute it * - * and/or modify it under the terms of the GNU General Public License as * - * published by the Free Software Foundation; either version 3 of the * - * License, or (at your option) any later version. * - * * - * The Dimension Test Suite is distributed in the hope that it will be * - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty * - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see <http://www.gnu.org/licenses/>. * - *************************************************************************/ - -#include "tests.h" -#include <errno.h> -#include <stdlib.h> -#include <stdio.h> - -/* - * Test scene -- code version of tests/dimension/demo.pov - */ -static dmnsn_scene * -dmnsn_new_test_scene(void) -{ - /* Allocate a new scene */ - dmnsn_scene *scene = dmnsn_new_scene(); - - /* Default finish */ - scene->default_texture->finish = dmnsn_new_finish_combination( - dmnsn_new_ambient_finish( - dmnsn_color_mul(0.1, dmnsn_white) - ), - dmnsn_new_diffuse_finish(0.6) - ); - - /* Allocate a canvas */ - scene->canvas = dmnsn_new_canvas(768, 480); - - /* Set up the transformation matrix for the perspective camera */ - dmnsn_matrix trans = dmnsn_scale_matrix( - dmnsn_new_vector( - ((double)scene->canvas->width)/scene->canvas->height, 1.0, 1.0 - ) - ); - trans = dmnsn_matrix_mul( - dmnsn_rotation_matrix(dmnsn_new_vector(0.0624188099959577, 0.0, 0.0)), - trans - ); - trans = dmnsn_matrix_mul( - dmnsn_translation_matrix(dmnsn_new_vector(0.0, 0.25, -4.0)), - trans - ); - trans = dmnsn_matrix_mul( - dmnsn_rotation_matrix(dmnsn_new_vector(0.0, dmnsn_radians(53.0), 0.0)), - trans - ); - - /* Create a perspective camera */ - scene->camera = dmnsn_new_perspective_camera(); - scene->camera->trans = trans; - - /* Background color */ - scene->background = dmnsn_clear; - - /* Sky sphere */ - scene->sky_sphere = dmnsn_new_sky_sphere(); - dmnsn_pattern *sky_gradient = dmnsn_new_gradient_pattern(dmnsn_y); - dmnsn_map *sky_gradient_color_map = dmnsn_new_color_map(); - dmnsn_add_map_entry(sky_gradient_color_map, 0.0, &dmnsn_orange); - dmnsn_color background = dmnsn_new_color5(0.0, 0.1, 0.2, 0.1, 0.0); - dmnsn_add_map_entry(sky_gradient_color_map, 0.35, &background); - dmnsn_pigment *sky_pigment - = dmnsn_new_color_map_pigment(sky_gradient, sky_gradient_color_map); - dmnsn_array_push(scene->sky_sphere->pigments, &sky_pigment); - - /* Light source */ - dmnsn_light *light = dmnsn_new_point_light( - dmnsn_new_vector(-15.0, 20.0, 10.0), - dmnsn_white - ); - dmnsn_array_push(scene->lights, &light); - - /* Now make our objects */ - - dmnsn_object *cube = dmnsn_new_cube(); - cube->trans = dmnsn_rotation_matrix( - dmnsn_new_vector(dmnsn_radians(45.0), 0.0, 0.0) - ); - cube->texture = dmnsn_new_texture(); - - dmnsn_color cube_color = dmnsn_blue; - cube_color.filter = 0.25; - cube_color.trans = 0.5; - cube->texture->pigment = dmnsn_new_solid_pigment(cube_color); - - dmnsn_color reflect = dmnsn_color_mul(0.5, dmnsn_white); - cube->texture->finish = dmnsn_new_reflective_finish(reflect, reflect, 1.0); - - cube->interior = dmnsn_new_interior(); - cube->interior->ior = 1.1; - - dmnsn_object *sphere = dmnsn_new_sphere(); - sphere->texture = dmnsn_new_texture(); - sphere->texture->pigment = dmnsn_new_solid_pigment(dmnsn_green); - sphere->texture->finish = dmnsn_new_phong_finish(0.2, 40.0); - sphere->trans = dmnsn_scale_matrix(dmnsn_new_vector(1.25, 1.25, 1.25)); - - dmnsn_object *csg = dmnsn_new_csg_difference(cube, sphere); - dmnsn_array_push(scene->objects, &csg); - - dmnsn_array *arrow_array = dmnsn_new_array(sizeof(dmnsn_object *)); - - dmnsn_object *cylinder = dmnsn_new_cone(0.1, 0.1, false); - cylinder->trans = dmnsn_scale_matrix(dmnsn_new_vector(1.0, 1.25, 1.0)); - dmnsn_array_push(arrow_array, &cylinder); - - dmnsn_object *cone = dmnsn_new_cone(0.1, 0.0, true); - cone->trans = - dmnsn_matrix_mul( - dmnsn_translation_matrix(dmnsn_new_vector(0.0, 1.375, 0.0)), - dmnsn_scale_matrix(dmnsn_new_vector(1.0, 0.125, 1.0)) - ); - dmnsn_array_push(arrow_array, &cone); - - dmnsn_object *arrow = dmnsn_new_csg_union(arrow_array); - arrow->trans = dmnsn_rotation_matrix( - dmnsn_new_vector(dmnsn_radians(-45.0), 0.0, 0.0) - ); - dmnsn_pattern *gradient = dmnsn_new_gradient_pattern(dmnsn_y); - dmnsn_map *gradient_color_map = dmnsn_new_color_map(); - dmnsn_add_map_entry(gradient_color_map, 0.0, &dmnsn_red); - dmnsn_add_map_entry(gradient_color_map, 1.0/6.0, &dmnsn_orange); - dmnsn_add_map_entry(gradient_color_map, 2.0/6.0, &dmnsn_yellow); - dmnsn_add_map_entry(gradient_color_map, 3.0/6.0, &dmnsn_green); - dmnsn_add_map_entry(gradient_color_map, 4.0/6.0, &dmnsn_blue); - dmnsn_add_map_entry(gradient_color_map, 5.0/6.0, &dmnsn_magenta); - dmnsn_add_map_entry(gradient_color_map, 1.0, &dmnsn_red); - arrow->texture = dmnsn_new_texture(); - arrow->texture->pigment - = dmnsn_new_color_map_pigment(gradient, gradient_color_map); - arrow->texture->trans = - dmnsn_matrix_mul( - dmnsn_translation_matrix(dmnsn_new_vector(0.0, -1.25, 0.0)), - dmnsn_scale_matrix(dmnsn_new_vector(1.0, 2.75, 1.0)) - ); - dmnsn_array_push(scene->objects, &arrow); - dmnsn_delete_array(arrow_array); - - dmnsn_array *torus_array = dmnsn_new_array(sizeof(dmnsn_object *)); - - dmnsn_object *torus1 = dmnsn_new_torus(0.15, 0.05); - torus1->trans = dmnsn_translation_matrix(dmnsn_new_vector(0.0, -1.0, 0.0)); - dmnsn_array_push(torus_array, &torus1); - - dmnsn_object *torus2 = dmnsn_new_torus(0.15, 0.05); - dmnsn_array_push(torus_array, &torus2); - - dmnsn_object *torus3 = dmnsn_new_torus(0.15, 0.05); - torus3->trans = dmnsn_translation_matrix(dmnsn_new_vector(0.0, 1.0, 0.0)); - dmnsn_array_push(torus_array, &torus3); - - dmnsn_object *torii = dmnsn_new_csg_union(torus_array); - torii->trans = dmnsn_rotation_matrix( - dmnsn_new_vector(dmnsn_radians(-45.0), 0.0, 0.0) - ); - torii->texture = dmnsn_new_texture(); - torii->texture->pigment = dmnsn_new_solid_pigment(dmnsn_blue); - torii->texture->finish = dmnsn_new_ambient_finish(dmnsn_white); - dmnsn_array_push(scene->objects, &torii); - dmnsn_delete_array(torus_array); - - dmnsn_object *plane = dmnsn_new_plane(dmnsn_new_vector(0.0, 1.0, 0.0)); - plane->trans = dmnsn_translation_matrix(dmnsn_new_vector(0.0, -2.0, 0.0)); - plane->texture = dmnsn_new_texture(); - dmnsn_pattern *checker1 = dmnsn_new_checker_pattern(); - dmnsn_pattern *checker2 = dmnsn_new_checker_pattern(); - dmnsn_map *checker_color_map = dmnsn_new_color_map(); - dmnsn_add_map_entry(checker_color_map, 0.0, &dmnsn_black); - dmnsn_add_map_entry(checker_color_map, 1.0, &dmnsn_white); - dmnsn_pigment *pigment1 = dmnsn_new_solid_pigment(dmnsn_white); - dmnsn_pigment *pigment2 - = dmnsn_new_color_map_pigment(checker1, checker_color_map); - pigment2->trans - = dmnsn_scale_matrix(dmnsn_new_vector(1.0/3.0, 1.0/3.0, 1.0/3.0)); - dmnsn_map *checker_pigment_map = dmnsn_new_pigment_map(); - dmnsn_add_map_entry(checker_pigment_map, 0.0, &pigment1); - dmnsn_add_map_entry(checker_pigment_map, 1.0, &pigment2); - plane->texture->pigment - = dmnsn_new_pigment_map_pigment(checker2, checker_pigment_map); - plane->texture->pigment->quick_color = dmnsn_new_color(1.0, 0.5, 0.75); - dmnsn_array_push(scene->objects, &plane); - - return scene; -} - -int -main(void) -{ - /* Treat warnings as errors for tests */ - dmnsn_die_on_warnings(true); - - /* Create the test scene */ - dmnsn_scene *scene = dmnsn_new_test_scene(); - - /* Optimize the canvas for PNG export */ - bool have_png = true; - errno = 0; - if (dmnsn_png_optimize_canvas(scene->canvas) != 0) { - if (errno == ENOSYS) { - have_png = false; - } else { - dmnsn_delete_scene(scene); - fprintf(stderr, "--- Couldn't optimize canvas for PNG! ---\n"); - return EXIT_FAILURE; - } - } - - /* Optimize the canvas for GL drawing */ - bool have_gl = true; - errno = 0; - if (dmnsn_gl_optimize_canvas(scene->canvas) != 0) { - if (errno == ENOSYS) { - have_gl = false; - } else { - dmnsn_delete_scene(scene); - fprintf(stderr, "--- Couldn't optimize canvas for GL! ---\n"); - return EXIT_FAILURE; - } - } - - dmnsn_clear_canvas(scene->canvas, dmnsn_black); - - /* Create a new glX display */ - dmnsn_display *display = NULL; - if (have_gl) { - display = dmnsn_new_display(scene->canvas); - if (!display) { - fprintf(stderr, "--- WARNING: Couldn't initialize X or glX! ---\n"); - } - } - - /* Render the scene */ - - printf("Rendering scene\n"); - dmnsn_progress *progress = dmnsn_raytrace_scene_async(scene); - - /* Display the scene as it's rendered */ - if (display) { - while (dmnsn_get_progress(progress) < 1.0) { - if (dmnsn_gl_write_canvas(scene->canvas) != 0) { - dmnsn_delete_display(display); - dmnsn_delete_scene(scene); - fprintf(stderr, "--- Drawing to OpenGL failed! ---\n"); - return EXIT_FAILURE; - } - dmnsn_display_flush(display); - } - } - - if (dmnsn_finish_progress(progress) != 0) { - dmnsn_delete_display(display); - dmnsn_delete_scene(scene); - fprintf(stderr, "--- Raytracing failed! ---\n"); - return EXIT_FAILURE; - } - - /* Make sure we show the completed rendering */ - if (display) { - printf("Drawing to OpenGL\n"); - if (dmnsn_gl_write_canvas(scene->canvas) != 0) { - dmnsn_delete_display(display); - dmnsn_delete_scene(scene); - fprintf(stderr, "--- Drawing to OpenGL failed! ---\n"); - return EXIT_FAILURE; - } - dmnsn_display_flush(display); - } - - if (have_png) { - printf("Writing scene to PNG\n"); - FILE *ofile = fopen("render.png", "wb"); - if (!ofile) { - dmnsn_delete_display(display); - dmnsn_delete_scene(scene); - fprintf(stderr, "--- Couldn't open 'render.png' for writing! ---\n"); - return EXIT_FAILURE; - } - - if (dmnsn_png_write_canvas(scene->canvas, ofile) != 0) { - fclose(ofile); - dmnsn_delete_display(display); - dmnsn_delete_scene(scene); - fprintf(stderr, "--- Writing canvas to PNG failed! ---\n"); - return EXIT_FAILURE; - } - - fclose(ofile); - } - - dmnsn_delete_display(display); - dmnsn_delete_scene(scene); - return EXIT_SUCCESS; -} diff --git a/tests/libdimension/tests.h b/tests/libdimension/tests.h deleted file mode 100644 index d61e442..0000000 --- a/tests/libdimension/tests.h +++ /dev/null @@ -1,46 +0,0 @@ -/************************************************************************* - * Copyright (C) 2009-2010 Tavian Barnes <tavianator@tavianator.com> * - * * - * This file is part of The Dimension Test Suite. * - * * - * The Dimension Test Suite is free software; you can redistribute it * - * and/or modify it under the terms of the GNU General Public License as * - * published by the Free Software Foundation; either version 3 of the * - * License, or (at your option) any later version. * - * * - * The Dimension Test Suite is distributed in the hope that it will be * - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty * - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see <http://www.gnu.org/licenses/>. * - *************************************************************************/ - -#ifndef TESTS_H -#define TESTS_H - -#include "dimension.h" - -#ifdef __cplusplus -/* We've been included from a C++ file; mark everything here as extern "C" */ -extern "C" { -#endif - -/* - * Windowing - */ - -typedef struct dmnsn_display dmnsn_display; - -dmnsn_display *dmnsn_new_display(const dmnsn_canvas *canvas); -void dmnsn_delete_display(dmnsn_display *display); - -/* Flush the GL buffers */ -void dmnsn_display_flush(dmnsn_display *display); - -#ifdef __cplusplus -} -#endif - -#endif /* TESTS_H */ diff --git a/tests/libdimension/warning-as-error.c b/tests/libdimension/warning-as-error.c deleted file mode 100644 index ce274d3..0000000 --- a/tests/libdimension/warning-as-error.c +++ /dev/null @@ -1,31 +0,0 @@ -/************************************************************************* - * Copyright (C) 2009-2011 Tavian Barnes <tavianator@gmail.com> * - * * - * This file is part of The Dimension Test Suite. * - * * - * The Dimension Test Suite is free software; you can redistribute it * - * and/or modify it under the terms of the GNU General Public License as * - * published by the Free Software Foundation; either version 3 of the * - * License, or (at your option) any later version. * - * * - * The Dimension Test Suite is distributed in the hope that it will be * - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty * - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see <http://www.gnu.org/licenses/>. * - *************************************************************************/ - -/* Make sure warnings kill us in strict mode - this test should fail */ - -#include "dimension.h" -#include <stdlib.h> - -int -main(void) -{ - dmnsn_die_on_warnings(true); - dmnsn_warning("This warning is expected."); - return EXIT_SUCCESS; -} diff --git a/tests/libdimension/warning.c b/tests/libdimension/warning.c deleted file mode 100644 index aecedd5..0000000 --- a/tests/libdimension/warning.c +++ /dev/null @@ -1,30 +0,0 @@ -/************************************************************************* - * Copyright (C) 2009-2011 Tavian Barnes <tavianator@tavianator.com> * - * * - * This file is part of The Dimension Test Suite. * - * * - * The Dimension Test Suite is free software; you can redistribute it * - * and/or modify it under the terms of the GNU General Public License as * - * published by the Free Software Foundation; either version 3 of the * - * License, or (at your option) any later version. * - * * - * The Dimension Test Suite is distributed in the hope that it will be * - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty * - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see <http://www.gnu.org/licenses/>. * - *************************************************************************/ - -/* Make sure warnings don't kill us - this test should pass */ - -#include "dimension.h" -#include <stdlib.h> - -int -main(void) -{ - dmnsn_warning("This warning is expected."); - return EXIT_SUCCESS; -} |