> -----Original Message----- > From: wayland-devel-bounces+ullysses.a.eoff=intel....@lists.freedesktop.org > [mailto:wayland-devel- > [email protected]] On Behalf Of Sam > Spilsbury > Sent: Tuesday, September 10, 2013 9:15 AM > To: [email protected] > Cc: Sam Spilsbury > Subject: [PATCH 3/3] Added tests for the vertex clipping code. > > This tests (via the table-driven testing method) that the correct > number of vertices and also the correct vertices themselves > are generated for an clip box and polygon of up to eight vertices. > --- > tests/Makefile.am | 11 ++- > tests/vertex-clip-test.c | 219 > +++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 229 insertions(+), 1 deletion(-) > create mode 100644 tests/vertex-clip-test.c > > diff --git a/tests/Makefile.am b/tests/Makefile.am > index 82bf630..336c5f9 100644 > --- a/tests/Makefile.am > +++ b/tests/Makefile.am > @@ -2,6 +2,7 @@ TESTS = $(shared_tests) $(module_tests) $(weston_tests) > > shared_tests = \ > config-parser.test > + vertex-clipping.test >
You're missing a line continuation "\" after config-parser.test Also, I don't see vertex_clipping_test_SOURCES, etc... sections defined. > module_tests = \ > surface-test.la \ > @@ -33,7 +34,8 @@ noinst_LTLIBRARIES = \ > > noinst_PROGRAMS = \ > $(setbacklight) \ > - matrix-test > + matrix-test \ > + vertex-clip-test > Hmm... do you want to have vertex-clip-test (i.e. vertex-clipping.test) to be part of the shared_tests so that it gets executed by "make check"? matrix-test and backlight-test are only defined this way because they are legacy tests that never got converted to "runner" style tests when that test framework was introduced :-/. > check_LTLIBRARIES = \ > $(module_tests) > @@ -84,6 +86,13 @@ weston_test_client_libs = \ > $(SIMPLE_CLIENT_LIBS) \ > ../shared/libshared.la > > +vertex_clip_test_SOURCES = \ > + vertex-clip-test.c \ > + $(top_srcdir)/shared/vertex-clipping.c \ > + $(top_srcdir)/shared/vertex-clipping.h \ > + $(weston_test_runner_src) > +vertex_clip_test_LDADD = -lm -lrt > + > keyboard_weston_SOURCES = keyboard-test.c $(weston_test_client_src) > keyboard_weston_LDADD = $(weston_test_client_libs) > > diff --git a/tests/vertex-clip-test.c b/tests/vertex-clip-test.c > new file mode 100644 > index 0000000..51188b2 > --- /dev/null > +++ b/tests/vertex-clip-test.c > @@ -0,0 +1,219 @@ > +/* > + * Copyright © 2013 Sam Spilsbury <[email protected]> > + * > + * Permission to use, copy, modify, distribute, and sell this software and > + * its documentation for any purpose is hereby granted without fee, provided > + * that the above copyright notice appear in all copies and that both that > + * copyright notice and this permission notice appear in supporting > + * documentation, and that the name of the copyright holders not be used in > + * advertising or publicity pertaining to distribution of the software > + * without specific, written prior permission. The copyright holders make > + * no representations about the suitability of this software for any > + * purpose. It is provided "as is" without express or implied warranty. > + * > + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS > + * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND > + * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY > + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER > + * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF > + * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN > + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. > + */ > +#include <assert.h> > +#include <stdio.h> > +#include <stdlib.h> > +#include <string.h> > +#include <math.h> > + > +#include "weston-test-runner.h" > + > +#include "../shared/vertex-clipping.h" > + > +#define BOUNDING_BOX_TOP_Y 100.0f > +#define BOUNDING_BOX_LEFT_X 50.0f > +#define BOUNDING_BOX_RIGHT_X 100.0f > +#define BOUNDING_BOX_BOTTOM_Y 50.0f > + > +#define INSIDE_X1 (BOUNDING_BOX_LEFT_X + 1.0f) > +#define INSIDE_X2 (BOUNDING_BOX_RIGHT_X - 1.0f) > +#define INSIDE_Y1 (BOUNDING_BOX_BOTTOM_Y + 1.0f) > +#define INSIDE_Y2 (BOUNDING_BOX_TOP_Y - 1.0f) > + > +#define OUTSIDE_X1 (BOUNDING_BOX_LEFT_X - 1.0f) > +#define OUTSIDE_X2 (BOUNDING_BOX_RIGHT_X + 1.0f) > +#define OUTSIDE_Y1 (BOUNDING_BOX_BOTTOM_Y - 1.0f) > +#define OUTSIDE_Y2 (BOUNDING_BOX_TOP_Y + 1.0f) > + > +static void > +populate_clip_context (struct clip_context *ctx) > +{ > + ctx->clip.x1 = BOUNDING_BOX_LEFT_X; > + ctx->clip.y1 = BOUNDING_BOX_BOTTOM_Y; > + ctx->clip.x2 = BOUNDING_BOX_RIGHT_X; > + ctx->clip.y2 = BOUNDING_BOX_TOP_Y; > +} > + > +static int > +clip_polygon (struct clip_context *ctx, > + struct polygon8 *polygon, > + GLfloat *vertices_x, > + GLfloat *vertices_y) > +{ > + populate_clip_context(ctx); > + return clip_transformed(ctx, polygon, vertices_x, vertices_y); > +} > + > +struct vertex_clip_test_data > +{ > + struct polygon8 surface; > + struct polygon8 expected; > +}; > + > +const struct vertex_clip_test_data test_data[] = > +{ > + /* All inside */ > + { > + { > + { INSIDE_X1, INSIDE_X2, INSIDE_X2, INSIDE_X1 }, > + { INSIDE_Y1, INSIDE_Y1, INSIDE_Y2, INSIDE_Y2 }, > + 4 > + }, > + { > + { INSIDE_X1, INSIDE_X2, INSIDE_X2, INSIDE_X1 }, > + { INSIDE_Y1, INSIDE_Y1, INSIDE_Y2, INSIDE_Y2 }, > + 4 > + } > + }, > + /* Top outside */ > + { > + { > + { INSIDE_X1, INSIDE_X2, INSIDE_X2, INSIDE_X1 }, > + { INSIDE_Y1, INSIDE_Y1, OUTSIDE_Y2, OUTSIDE_Y2 }, > + 4 > + }, > + { > + { INSIDE_X1, INSIDE_X1, INSIDE_X2, INSIDE_X2 }, > + { BOUNDING_BOX_TOP_Y, INSIDE_Y1, INSIDE_Y1, > BOUNDING_BOX_TOP_Y }, > + 4 > + } > + }, > + /* Bottom outside */ > + { > + { > + { INSIDE_X1, INSIDE_X2, INSIDE_X2, INSIDE_X1 }, > + { OUTSIDE_Y1, OUTSIDE_Y1, INSIDE_Y2, INSIDE_Y2 }, > + 4 > + }, > + { > + { INSIDE_X1, INSIDE_X2, INSIDE_X2, INSIDE_X1 }, > + { BOUNDING_BOX_BOTTOM_Y, BOUNDING_BOX_BOTTOM_Y, > INSIDE_Y2, INSIDE_Y2 }, > + 4 > + } > + }, > + /* Left outside */ > + { > + { > + { OUTSIDE_X1, INSIDE_X2, INSIDE_X2, OUTSIDE_X1 }, > + { INSIDE_Y1, INSIDE_Y1, INSIDE_Y2, INSIDE_Y2 }, > + 4 > + }, > + { > + { BOUNDING_BOX_LEFT_X, INSIDE_X2, INSIDE_X2, > BOUNDING_BOX_LEFT_X }, > + { INSIDE_Y1, INSIDE_Y1, INSIDE_Y2, INSIDE_Y2 }, > + 4 > + } > + }, > + /* Right outside */ > + { > + { > + { INSIDE_X1, OUTSIDE_X2, OUTSIDE_X2, INSIDE_X1 }, > + { INSIDE_Y1, INSIDE_Y1, INSIDE_Y2, INSIDE_Y2 }, > + 4 > + }, > + { > + { INSIDE_X1, BOUNDING_BOX_RIGHT_X, > BOUNDING_BOX_RIGHT_X, INSIDE_X1 }, > + { INSIDE_Y1, INSIDE_Y1, INSIDE_Y2, INSIDE_Y2 }, > + 4 > + } > + }, > + /* Diamond extending from bounding box edges, clip to bounding box */ > + { > + { > + { BOUNDING_BOX_LEFT_X - 25, BOUNDING_BOX_LEFT_X + 25, > BOUNDING_BOX_RIGHT_X + 25, > BOUNDING_BOX_RIGHT_X - 25 }, > + { BOUNDING_BOX_BOTTOM_Y + 25, BOUNDING_BOX_TOP_Y + 25, > BOUNDING_BOX_TOP_Y - 25, > BOUNDING_BOX_BOTTOM_Y - 25 }, > + 4 > + }, > + { > + { BOUNDING_BOX_LEFT_X, BOUNDING_BOX_LEFT_X, > BOUNDING_BOX_RIGHT_X, > BOUNDING_BOX_RIGHT_X }, > + { BOUNDING_BOX_BOTTOM_Y, BOUNDING_BOX_TOP_Y, > BOUNDING_BOX_TOP_Y, > BOUNDING_BOX_BOTTOM_Y }, > + 4 > + } > + }, > + /* Diamond inside of bounding box edges, clip t bounding box, 8 > resulting vertices */ > + { > + { > + { BOUNDING_BOX_LEFT_X - 12.5, BOUNDING_BOX_LEFT_X + 25, > BOUNDING_BOX_RIGHT_X + 12.5, > BOUNDING_BOX_RIGHT_X - 25 }, > + { BOUNDING_BOX_BOTTOM_Y + 25, BOUNDING_BOX_TOP_Y + > 12.5, BOUNDING_BOX_TOP_Y - 25, > BOUNDING_BOX_BOTTOM_Y - 12.5 }, > + 4 > + }, > + { > + { BOUNDING_BOX_LEFT_X + 12.5, BOUNDING_BOX_LEFT_X, > BOUNDING_BOX_LEFT_X, > BOUNDING_BOX_LEFT_X + 12.5, > + BOUNDING_BOX_RIGHT_X - 12.5, BOUNDING_BOX_RIGHT_X, > BOUNDING_BOX_RIGHT_X, > BOUNDING_BOX_RIGHT_X - 12.5 }, > + { BOUNDING_BOX_BOTTOM_Y, BOUNDING_BOX_BOTTOM_Y + 12.5, > BOUNDING_BOX_TOP_Y - 12.5, > BOUNDING_BOX_TOP_Y, > + BOUNDING_BOX_TOP_Y, BOUNDING_BOX_TOP_Y - 12.5, > BOUNDING_BOX_BOTTOM_Y + 12.5, > BOUNDING_BOX_BOTTOM_Y }, > + 8 > + } > + } > +}; > + > +/* clip_polygon modifies the source operand and the test data must > + * be const, so we need to deep copy it */ > +static void > +deep_copy_polygon8(const struct polygon8 *src, struct polygon8 *dst) > +{ > + dst->n = src->n; > + memcpy((void *) dst->x, src->x, sizeof (src->x)); > + memcpy((void *) dst->y, src->y, sizeof (src->y)); > +} > + > +TEST_P(clip_polygon_n_vertices_emitted, test_data) > +{ > + struct vertex_clip_test_data *tdata = data; > + struct clip_context ctx; > + struct polygon8 polygon; > + GLfloat vertices_x[8]; > + GLfloat vertices_y[8]; > + deep_copy_polygon8(&tdata->surface, &polygon); > + int emitted = clip_polygon(&ctx, &polygon, vertices_x, vertices_y); > + > + assert(emitted == tdata->expected.n); > +} > + > +TEST_P(clip_polygon_expected_vertices, test_data) > +{ > + struct vertex_clip_test_data *tdata = data; > + struct clip_context ctx; > + struct polygon8 polygon; > + GLfloat vertices_x[8]; > + GLfloat vertices_y[8]; > + deep_copy_polygon8(&tdata->surface, &polygon); > + int emitted = clip_polygon(&ctx, &polygon, vertices_x, vertices_y); > + int i = 0; > + > + for (; i < emitted; ++i) > + { > + assert(vertices_x[i] == tdata->expected.x[i]); > + assert(vertices_y[i] == tdata->expected.y[i]); > + } > +} > + > +TEST(float_difference_different) > +{ > + assert(float_difference(1.0f, 0.0f) == 1.0f); > +} > + > +TEST(float_difference_same) > +{ > + assert(float_difference(1.0f, 1.0f) == 0.0f); > +} > + > -- > 1.8.3.2 > > _______________________________________________ > wayland-devel mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/wayland-devel _______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
