#!/bin/sh
. ./Common

###############################################################################

tst "forall_v2d_once, open polygon" <<EOF
struct p2d *p = p2d_new();
const struct v2d *v;

p2d_append(p, v2d_new(0, 0));
p2d_append(p, v2d_new(1, 0));
p2d_append(p, v2d_new(2, 3));
forall_v2d_once(v, p->v)
	printf("%g %g\n", v->x, v->y);
EOF

expect <<EOF
0 0
1 0
2 3
EOF

#------------------------------------------------------------------------------

tst "forall_v2d_once, closed polygon" <<EOF
struct p2d *p = p2d_new();
const struct v2d *v;

p2d_append(p, v2d_new(0, 0));
p2d_append(p, v2d_new(1, 0));
p2d_append(p, v2d_new(2, 3));
p2d_close(p);
forall_v2d_once(v, p->v)
	printf("%g %g\n", v->x, v->y);
EOF

expect <<EOF
0 0
1 0
2 3
EOF

#------------------------------------------------------------------------------

tst "forall_v2d, open polygon" <<EOF
struct p2d *p = p2d_new();
const struct v2d *v;

p2d_append(p, v2d_new(0, 0));
p2d_append(p, v2d_new(1, 0));
p2d_append(p, v2d_new(2, 3));
forall_v2d(v, p->v)
	printf("%g %g\n", v->x, v->y);
EOF

expect <<EOF
0 0
1 0
2 3
EOF

#------------------------------------------------------------------------------

tst "forall_v2d, closed polygon" <<EOF
struct p2d *p = p2d_new();
const struct v2d *v;

p2d_append(p, v2d_new(0, 0));
p2d_append(p, v2d_new(1, 0));
p2d_append(p, v2d_new(2, 3));
p2d_close(p);
forall_v2d(v, p->v)
	printf("%g %g\n", v->x, v->y);
EOF

expect <<EOF
0 0
1 0
2 3
0 0
EOF

#------------------------------------------------------------------------------

tst "forall_edges, open polygon" <<EOF
struct p2d *p = p2d_new();
const struct v2d *a, *b;

p2d_append(p, v2d_new(0, 0));
p2d_append(p, v2d_new(1, 0));
p2d_append(p, v2d_new(2, 3));
forall_edges(a, b, p->v)
	printf("%g %g %g %g\n", a->x, a->y, b->x, b->y);
EOF

expect <<EOF
0 0 1 0
1 0 2 3
EOF

#------------------------------------------------------------------------------

tst "forall_edges, closed polygon" <<EOF
struct p2d *p = p2d_new();
const struct v2d *a, *b;

p2d_append(p, v2d_new(0, 0));
p2d_append(p, v2d_new(1, 0));
p2d_append(p, v2d_new(2, 3));
p2d_close(p);
forall_edges(a, b, p->v)
	printf("%g %g %g %g\n", a->x, a->y, b->x, b->y);
EOF

expect <<EOF
0 0 1 0
1 0 2 3
2 3 0 0
EOF

###############################################################################