Hi, On Wed, Sep 11, 2013 at 1:33 AM, Eoff, Ullysses A <[email protected]> wrote: >> -----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.
Noted, line continuation added in the next series. vertex_clip_SOURCES is there: +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 > >> 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 :-/. I agree and was just thinking about that last night. I've added it to the shared_tests in the next series (it should have been, and the target name was wrong I guess). > >> 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 -- Sam Spilsbury _______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
