random-intersections.c [plain text]
#include "cairo-test.h"
static cairo_test_draw_function_t draw;
#define SIZE 512
#define NUM_SEGMENTS 128
static const cairo_test_t test = {
"random-intersections",
"Tests the tessellator trapezoid generation and intersection computation",
SIZE+3, SIZE+3,
draw
};
static uint32_t state;
static double
uniform_random (double minval, double maxval)
{
static uint32_t const poly = 0x9a795537U;
uint32_t n = 32;
while (n-->0)
state = 2*state < state ? (2*state ^ poly) : 2*state;
return minval + state * (maxval - minval) / 4294967296.0;
}
static cairo_test_status_t
draw (cairo_t *cr, int width, int height)
{
int i;
cairo_set_source_rgb (cr, 0, 0, 0);
cairo_paint (cr);
state = 0x12345678;
cairo_translate (cr, 1, 1);
cairo_set_fill_rule (cr, CAIRO_FILL_RULE_EVEN_ODD);
cairo_move_to (cr, 0, 0);
for (i = 0; i < NUM_SEGMENTS; i++) {
double x = uniform_random (0, width);
double y = uniform_random (0, height);
cairo_line_to (cr, x, y);
}
cairo_close_path (cr);
cairo_set_source_rgb (cr, 1, 0, 0);
cairo_fill_preserve (cr);
cairo_set_source_rgb (cr, 0, 1, 0);
cairo_set_line_width (cr, 0.5);
cairo_stroke (cr);
return CAIRO_TEST_SUCCESS;
}
int
main (void)
{
return cairo_test (&test);
}