diff options
Diffstat (limited to '')
| -rw-r--r-- | libglitter_create_render_context.c | 384 | 
1 files changed, 383 insertions, 1 deletions
| diff --git a/libglitter_create_render_context.c b/libglitter_create_render_context.c index 7898ff8..9dd7871 100644 --- a/libglitter_create_render_context.c +++ b/libglitter_create_render_context.c @@ -54,7 +54,389 @@ fail:  int  main(void)  { -	return 0; /* TODO add test */ +#define POS(Y, X) ((Y) * ctx->rowsize + (X)) + +	LIBGLITTER_RENDER_CONTEXT *ctx; +	uint8_t cellmap[6]; +	uint8_t ncellvalues[4]; +	uint8_t a, b, c, i; + +	ncellvalues[0] = 2; +	ncellvalues[1] = 16; +	ncellvalues[2] = 4; +	ncellvalues[3] = 8; +	cellmap[0] = 0, cellmap[1] = 1, cellmap[2] = 2; +	cellmap[3] = 1, cellmap[4] = 2, cellmap[5] = 0; +	ctx = libglitter_create_render_context(4, 10, 3, 2, cellmap, ncellvalues); +	ASSERT(ctx); +	ASSERT(ctx->cellmap); +	ASSERT(ctx->cellmap[0] == 0); +	ASSERT(ctx->cellmap[1] == 1); +	ASSERT(ctx->cellmap[2] == 2); +	ASSERT(ctx->cellmap[3] == 1); +	ASSERT(ctx->cellmap[4] == 2); +	ASSERT(ctx->cellmap[5] == 0); +	ASSERT(ctx->ncellvalues); +	ASSERT(ctx->ncellvalues[0] == 2); +	ASSERT(ctx->ncellvalues[1] == 16); +	ASSERT(ctx->ncellvalues[2] == 4); +	ASSERT(ctx->ncellvalues[3] == 8); +	ASSERT(ctx->noutputs == 4); +	ASSERT(ctx->widthmul == 3); +	ASSERT(ctx->heightmul == 2); +	ASSERT(ctx->cellweights_double); +	ASSERT(ctx->cellweights_double[0] == (double)1 / 2); +	ASSERT(ctx->cellweights_double[1] == (double)1 / 16); +	ASSERT(ctx->cellweights_double[2] == (double)1 / 4); +	ASSERT(ctx->cellweights_double[3] == (double)1 / 8); +	ASSERT(ctx->cellweights_float); +	ASSERT(ctx->cellweights_float[0] == (float)1 / 2); +	ASSERT(ctx->cellweights_float[1] == (float)1 / 16); +	ASSERT(ctx->cellweights_float[2] == (float)1 / 4); +	ASSERT(ctx->cellweights_float[3] == (float)1 / 8); +	ASSERT(ctx->render_method == RENDER_METHOD_GENERIC); +	ASSERT(ctx->rowsize == 10); +	libglitter_update_render_context(ctx, 20); +	ASSERT(ctx->cellmap); +	ASSERT(ctx->cellmap[0] == 0); +	ASSERT(ctx->cellmap[1] == 1); +	ASSERT(ctx->cellmap[2] == 2); +	ASSERT(ctx->cellmap[3] == 1); +	ASSERT(ctx->cellmap[4] == 2); +	ASSERT(ctx->cellmap[5] == 0); +	ASSERT(ctx->ncellvalues); +	ASSERT(ctx->ncellvalues[0] == 2); +	ASSERT(ctx->ncellvalues[1] == 16); +	ASSERT(ctx->ncellvalues[2] == 4); +	ASSERT(ctx->ncellvalues[3] == 8); +	ASSERT(ctx->noutputs == 4); +	ASSERT(ctx->widthmul == 3); +	ASSERT(ctx->heightmul == 2); +	ASSERT(ctx->cellweights_double); +	ASSERT(ctx->cellweights_double[0] == (double)1 / 2); +	ASSERT(ctx->cellweights_double[1] == (double)1 / 16); +	ASSERT(ctx->cellweights_double[2] == (double)1 / 4); +	ASSERT(ctx->cellweights_double[3] == (double)1 / 8); +	ASSERT(ctx->cellweights_float); +	ASSERT(ctx->cellweights_float[0] == (float)1 / 2); +	ASSERT(ctx->cellweights_float[1] == (float)1 / 16); +	ASSERT(ctx->cellweights_float[2] == (float)1 / 4); +	ASSERT(ctx->cellweights_float[3] == (float)1 / 8); +	ASSERT(ctx->render_method == RENDER_METHOD_GENERIC); +	ASSERT(ctx->rowsize == 20); +	libglitter_free_render_context(ctx); + +	ncellvalues[0] = 1; +	ncellvalues[1] = 1; +	ncellvalues[2] = 1; +	cellmap[0] = 1, cellmap[1] = 0, cellmap[2] = 2; +	ctx = libglitter_create_render_context(3, 6, 3, 1, cellmap, ncellvalues); +	ASSERT(ctx); +	ASSERT(ctx->cellmap); +	ASSERT(ctx->cellmap[0] == 1); +	ASSERT(ctx->cellmap[1] == 0); +	ASSERT(ctx->cellmap[2] == 2); +	ASSERT(ctx->ncellvalues); +	ASSERT(ctx->ncellvalues[0] == 1); +	ASSERT(ctx->ncellvalues[1] == 1); +	ASSERT(ctx->ncellvalues[2] == 1); +	ASSERT(ctx->noutputs == 3); +	ASSERT(ctx->widthmul == 3); +	ASSERT(ctx->heightmul == 1); +	ASSERT(ctx->cellweights_double); +	ASSERT(ctx->cellweights_double[0] == 1); +	ASSERT(ctx->cellweights_double[1] == 1); +	ASSERT(ctx->cellweights_double[2] == 1); +	ASSERT(ctx->cellweights_float); +	ASSERT(ctx->cellweights_float[0] == 1); +	ASSERT(ctx->cellweights_float[1] == 1); +	ASSERT(ctx->cellweights_float[2] == 1); +	ASSERT(ctx->render_method == RENDER_METHOD_VSTRIPS); +	ASSERT(ctx->rowsize == 6); +	libglitter_update_render_context(ctx, 15); +	ASSERT(ctx->cellmap); +	ASSERT(ctx->cellmap[0] == 1); +	ASSERT(ctx->cellmap[1] == 0); +	ASSERT(ctx->cellmap[2] == 2); +	ASSERT(ctx->ncellvalues); +	ASSERT(ctx->ncellvalues[0] == 1); +	ASSERT(ctx->ncellvalues[1] == 1); +	ASSERT(ctx->ncellvalues[2] == 1); +	ASSERT(ctx->noutputs == 3); +	ASSERT(ctx->widthmul == 3); +	ASSERT(ctx->heightmul == 1); +	ASSERT(ctx->cellweights_double); +	ASSERT(ctx->cellweights_double[0] == 1); +	ASSERT(ctx->cellweights_double[1] == 1); +	ASSERT(ctx->cellweights_double[2] == 1); +	ASSERT(ctx->cellweights_float); +	ASSERT(ctx->cellweights_float[0] == 1); +	ASSERT(ctx->cellweights_float[1] == 1); +	ASSERT(ctx->cellweights_float[2] == 1); +	ASSERT(ctx->render_method == RENDER_METHOD_VSTRIPS); +	ASSERT(ctx->rowsize == 15); +	libglitter_free_render_context(ctx); + +	ncellvalues[0] = 1; +	ncellvalues[1] = 1; +	ncellvalues[2] = 1; +	cellmap[0] = 1, cellmap[1] = 0, cellmap[2] = 2; +	ctx = libglitter_create_render_context(3, 6, 1, 3, cellmap, ncellvalues); +	ASSERT(ctx); +	ASSERT(ctx->cellmap); +	ASSERT(ctx->cellmap[0] == 1); +	ASSERT(ctx->cellmap[1] == 0); +	ASSERT(ctx->cellmap[2] == 2); +	ASSERT(ctx->ncellvalues); +	ASSERT(ctx->ncellvalues[0] == 1); +	ASSERT(ctx->ncellvalues[1] == 1); +	ASSERT(ctx->ncellvalues[2] == 1); +	ASSERT(ctx->noutputs == 3); +	ASSERT(ctx->widthmul == 1); +	ASSERT(ctx->heightmul == 3); +	ASSERT(ctx->cellweights_double); +	ASSERT(ctx->cellweights_double[0] == 1); +	ASSERT(ctx->cellweights_double[1] == 1); +	ASSERT(ctx->cellweights_double[2] == 1); +	ASSERT(ctx->cellweights_float); +	ASSERT(ctx->cellweights_float[0] == 1); +	ASSERT(ctx->cellweights_float[1] == 1); +	ASSERT(ctx->cellweights_float[2] == 1); +	ASSERT(ctx->render_method == RENDER_METHOD_HSTRIPS); +	ASSERT(ctx->rowsize == 6); +	libglitter_update_render_context(ctx, 15); +	ASSERT(ctx->cellmap); +	ASSERT(ctx->cellmap[0] == 1); +	ASSERT(ctx->cellmap[1] == 0); +	ASSERT(ctx->cellmap[2] == 2); +	ASSERT(ctx->ncellvalues); +	ASSERT(ctx->ncellvalues[0] == 1); +	ASSERT(ctx->ncellvalues[1] == 1); +	ASSERT(ctx->ncellvalues[2] == 1); +	ASSERT(ctx->noutputs == 3); +	ASSERT(ctx->widthmul == 1); +	ASSERT(ctx->heightmul == 3); +	ASSERT(ctx->cellweights_double); +	ASSERT(ctx->cellweights_double[0] == 1); +	ASSERT(ctx->cellweights_double[1] == 1); +	ASSERT(ctx->cellweights_double[2] == 1); +	ASSERT(ctx->cellweights_float); +	ASSERT(ctx->cellweights_float[0] == 1); +	ASSERT(ctx->cellweights_float[1] == 1); +	ASSERT(ctx->cellweights_float[2] == 1); +	ASSERT(ctx->render_method == RENDER_METHOD_HSTRIPS); +	ASSERT(ctx->rowsize == 15); +	libglitter_free_render_context(ctx); + +	for (i = 1; i < 8; i++) { +		ncellvalues[0] = a = 2 + !!(i & 1); +		ncellvalues[1] = b = 2 + !!(i & 2); +		ncellvalues[2] = c = 2 + !!(i & 4); +		cellmap[0] = 0, cellmap[1] = 1, cellmap[2] = 2; +		cellmap[3] = 1, cellmap[4] = 2, cellmap[5] = 0; +		ctx = libglitter_create_render_context(3, 8, 3, 2, cellmap, ncellvalues); +		ASSERT(ctx); +		ASSERT(ctx->cellmap); +		ASSERT(ctx->cellmap[0] == 0); +		ASSERT(ctx->cellmap[1] == 1); +		ASSERT(ctx->cellmap[2] == 2); +		ASSERT(ctx->cellmap[3] == 1); +		ASSERT(ctx->cellmap[4] == 2); +		ASSERT(ctx->cellmap[5] == 0); +		ASSERT(ctx->ncellvalues); +		ASSERT(ctx->ncellvalues[0] == a); +		ASSERT(ctx->ncellvalues[1] == b); +		ASSERT(ctx->ncellvalues[2] == c); +		ASSERT(ctx->noutputs == 3); +		ASSERT(ctx->widthmul == 3); +		ASSERT(ctx->heightmul == 2); +		ASSERT(ctx->cellweights_double); +		ASSERT(ctx->cellweights_double[0] == (double)1 / a); +		ASSERT(ctx->cellweights_double[1] == (double)1 / b); +		ASSERT(ctx->cellweights_double[2] == (double)1 / c); +		ASSERT(ctx->cellweights_float); +		ASSERT(ctx->cellweights_float[0] == (float)1 / a); +		ASSERT(ctx->cellweights_float[1] == (float)1 / b); +		ASSERT(ctx->cellweights_float[2] == (float)1 / c); +		ASSERT(ctx->render_method == RENDER_METHOD_GENERIC); +		ASSERT(ctx->rowsize == 8); +		libglitter_update_render_context(ctx, 30); +		ASSERT(ctx->cellmap); +		ASSERT(ctx->cellmap[0] == 0); +		ASSERT(ctx->cellmap[1] == 1); +		ASSERT(ctx->cellmap[2] == 2); +		ASSERT(ctx->cellmap[3] == 1); +		ASSERT(ctx->cellmap[4] == 2); +		ASSERT(ctx->cellmap[5] == 0); +		ASSERT(ctx->ncellvalues); +		ASSERT(ctx->ncellvalues[0] == a); +		ASSERT(ctx->ncellvalues[1] == b); +		ASSERT(ctx->ncellvalues[2] == c); +		ASSERT(ctx->noutputs == 3); +		ASSERT(ctx->widthmul == 3); +		ASSERT(ctx->heightmul == 2); +		ASSERT(ctx->cellweights_double); +		ASSERT(ctx->cellweights_double[0] == (double)1 / a); +		ASSERT(ctx->cellweights_double[1] == (double)1 / b); +		ASSERT(ctx->cellweights_double[2] == (double)1 / c); +		ASSERT(ctx->cellweights_float); +		ASSERT(ctx->cellweights_float[0] == (float)1 / a); +		ASSERT(ctx->cellweights_float[1] == (float)1 / b); +		ASSERT(ctx->cellweights_float[2] == (float)1 / c); +		ASSERT(ctx->render_method == RENDER_METHOD_GENERIC); +		ASSERT(ctx->rowsize == 30); +		libglitter_free_render_context(ctx); +	} + +	for (i = 0; i < 8; i++) { +		ncellvalues[0] = a = 1 + !!(i & 1); +		ncellvalues[1] = b = 1 + !!(i & 2); +		ncellvalues[2] = c = 1 + !!(i & 4); +		cellmap[0] = 0, cellmap[1] = 1, cellmap[2] = 2; +		cellmap[3] = 1, cellmap[4] = 2, cellmap[5] = 0; +		ctx = libglitter_create_render_context(3, 8, 3, 2, cellmap, ncellvalues); +		ASSERT(ctx); +		ASSERT(ctx->cellmap); +		ASSERT(ctx->cellmap[0] == 0); +		ASSERT(ctx->cellmap[1] == 1); +		ASSERT(ctx->cellmap[2] == 2); +		ASSERT(ctx->cellmap[3] == 1); +		ASSERT(ctx->cellmap[4] == 2); +		ASSERT(ctx->cellmap[5] == 0); +		ASSERT(ctx->ncellvalues); +		ASSERT(ctx->ncellvalues[0] == a); +		ASSERT(ctx->ncellvalues[1] == b); +		ASSERT(ctx->ncellvalues[2] == c); +		ASSERT(ctx->noutputs == 3); +		ASSERT(ctx->widthmul == 3); +		ASSERT(ctx->heightmul == 2); +		ASSERT(ctx->cellweights_double); +		ASSERT(ctx->cellweights_double[0] == (double)1 / a); +		ASSERT(ctx->cellweights_double[1] == (double)1 / b); +		ASSERT(ctx->cellweights_double[2] == (double)1 / c); +		ASSERT(ctx->cellweights_float); +		ASSERT(ctx->cellweights_float[0] == (float)1 / a); +		ASSERT(ctx->cellweights_float[1] == (float)1 / b); +		ASSERT(ctx->cellweights_float[2] == (float)1 / c); +		ASSERT(ctx->render_method == RENDER_METHOD_SIMPLE); +		ASSERT(ctx->rowsize == 8); +		ASSERT(ctx->cells[0][0] == POS(0, 0) || ctx->cells[0][0] == POS(1, 2)); +		ASSERT(ctx->cells[0][1] == POS(1, 2) || ctx->cells[0][1] == POS(0, 0)); +		ASSERT(ctx->cells[1][0] == POS(0, 1) || ctx->cells[1][0] == POS(1, 0)); +		ASSERT(ctx->cells[1][1] == POS(1, 0) || ctx->cells[1][1] == POS(0, 1)); +		ASSERT(ctx->cells[2][0] == POS(0, 2) || ctx->cells[2][0] == POS(1, 1)); +		ASSERT(ctx->cells[2][1] == POS(1, 1) || ctx->cells[2][1] == POS(0, 2)); +		ASSERT(ctx->cells[0][0] != ctx->cells[0][1]); +		ASSERT(ctx->cells[1][0] != ctx->cells[1][1]); +		ASSERT(ctx->cells[2][0] != ctx->cells[2][1]); +		libglitter_update_render_context(ctx, 30); +		ASSERT(ctx->cellmap); +		ASSERT(ctx->cellmap[0] == 0); +		ASSERT(ctx->cellmap[1] == 1); +		ASSERT(ctx->cellmap[2] == 2); +		ASSERT(ctx->cellmap[3] == 1); +		ASSERT(ctx->cellmap[4] == 2); +		ASSERT(ctx->cellmap[5] == 0); +		ASSERT(ctx->ncellvalues); +		ASSERT(ctx->ncellvalues[0] == a); +		ASSERT(ctx->ncellvalues[1] == b); +		ASSERT(ctx->ncellvalues[2] == c); +		ASSERT(ctx->noutputs == 3); +		ASSERT(ctx->widthmul == 3); +		ASSERT(ctx->heightmul == 2); +		ASSERT(ctx->cellweights_double); +		ASSERT(ctx->cellweights_double[0] == (double)1 / a); +		ASSERT(ctx->cellweights_double[1] == (double)1 / b); +		ASSERT(ctx->cellweights_double[2] == (double)1 / c); +		ASSERT(ctx->cellweights_float); +		ASSERT(ctx->cellweights_float[0] == (float)1 / a); +		ASSERT(ctx->cellweights_float[1] == (float)1 / b); +		ASSERT(ctx->cellweights_float[2] == (float)1 / c); +		ASSERT(ctx->render_method == RENDER_METHOD_SIMPLE); +		ASSERT(ctx->rowsize == 30); +		ASSERT(ctx->cells[0][0] == POS(0, 0) || ctx->cells[0][0] == POS(1, 2)); +		ASSERT(ctx->cells[0][1] == POS(1, 2) || ctx->cells[0][1] == POS(0, 0)); +		ASSERT(ctx->cells[1][0] == POS(0, 1) || ctx->cells[1][0] == POS(1, 0)); +		ASSERT(ctx->cells[1][1] == POS(1, 0) || ctx->cells[1][1] == POS(0, 1)); +		ASSERT(ctx->cells[2][0] == POS(0, 2) || ctx->cells[2][0] == POS(1, 1)); +		ASSERT(ctx->cells[2][1] == POS(1, 1) || ctx->cells[2][1] == POS(0, 2)); +		ASSERT(ctx->cells[0][0] != ctx->cells[0][1]); +		ASSERT(ctx->cells[1][0] != ctx->cells[1][1]); +		ASSERT(ctx->cells[2][0] != ctx->cells[2][1]); +		libglitter_free_render_context(ctx); +	} + +	ncellvalues[0] = a = 1; +	ncellvalues[1] = b = 2; +	ncellvalues[2] = c = 1; +	cellmap[0] = 1, cellmap[1] = 2; +	cellmap[2] = 0, cellmap[3] = 1; +	ctx = libglitter_create_render_context(3, 8, 2, 2, cellmap, ncellvalues); +	ASSERT(ctx); +	ASSERT(ctx->cellmap); +	ASSERT(ctx->cellmap[0] == 1); +	ASSERT(ctx->cellmap[1] == 2); +	ASSERT(ctx->cellmap[2] == 0); +	ASSERT(ctx->cellmap[3] == 1); +	ASSERT(ctx->ncellvalues); +	ASSERT(ctx->ncellvalues[0] == a); +	ASSERT(ctx->ncellvalues[1] == b); +	ASSERT(ctx->ncellvalues[2] == c); +	ASSERT(ctx->noutputs == 3); +	ASSERT(ctx->widthmul == 2); +	ASSERT(ctx->heightmul == 2); +	ASSERT(ctx->cellweights_double); +	ASSERT(ctx->cellweights_double[0] == (double)1 / a); +	ASSERT(ctx->cellweights_double[1] == (double)1 / b); +	ASSERT(ctx->cellweights_double[2] == (double)1 / c); +	ASSERT(ctx->cellweights_float); +	ASSERT(ctx->cellweights_float[0] == (float)1 / a); +	ASSERT(ctx->cellweights_float[1] == (float)1 / b); +	ASSERT(ctx->cellweights_float[2] == (float)1 / c); +	ASSERT(ctx->render_method == RENDER_METHOD_SIMPLE); +	ASSERT(ctx->rowsize == 8); +	ASSERT(ctx->cells[0][0] == POS(1, 0)); +	ASSERT(ctx->cells[1][0] == POS(0, 0) || ctx->cells[1][0] == POS(1, 1)); +	ASSERT(ctx->cells[1][1] == POS(1, 1) || ctx->cells[1][1] == POS(0, 0)); +	ASSERT(ctx->cells[2][0] == POS(0, 1)); +	ASSERT(ctx->cells[0][0] == ctx->cells[0][1]); +	ASSERT(ctx->cells[1][0] != ctx->cells[1][1]); +	ASSERT(ctx->cells[2][0] == ctx->cells[2][1]); +	libglitter_update_render_context(ctx, 30); +	ASSERT(ctx->cellmap); +	ASSERT(ctx->cellmap[0] == 1); +	ASSERT(ctx->cellmap[1] == 2); +	ASSERT(ctx->cellmap[2] == 0); +	ASSERT(ctx->cellmap[3] == 1); +	ASSERT(ctx->ncellvalues); +	ASSERT(ctx->ncellvalues[0] == a); +	ASSERT(ctx->ncellvalues[1] == b); +	ASSERT(ctx->ncellvalues[2] == c); +	ASSERT(ctx->noutputs == 3); +	ASSERT(ctx->widthmul == 2); +	ASSERT(ctx->heightmul == 2); +	ASSERT(ctx->cellweights_double); +	ASSERT(ctx->cellweights_double[0] == (double)1 / a); +	ASSERT(ctx->cellweights_double[1] == (double)1 / b); +	ASSERT(ctx->cellweights_double[2] == (double)1 / c); +	ASSERT(ctx->cellweights_float); +	ASSERT(ctx->cellweights_float[0] == (float)1 / a); +	ASSERT(ctx->cellweights_float[1] == (float)1 / b); +	ASSERT(ctx->cellweights_float[2] == (float)1 / c); +	ASSERT(ctx->render_method == RENDER_METHOD_SIMPLE); +	ASSERT(ctx->rowsize == 30); +	ASSERT(ctx->cells[0][0] == POS(1, 0)); +	ASSERT(ctx->cells[1][0] == POS(0, 0) || ctx->cells[1][0] == POS(1, 1)); +	ASSERT(ctx->cells[1][1] == POS(1, 1) || ctx->cells[1][1] == POS(0, 0)); +	ASSERT(ctx->cells[2][0] == POS(0, 1)); +	ASSERT(ctx->cells[0][0] == ctx->cells[0][1]); +	ASSERT(ctx->cells[1][0] != ctx->cells[1][1]); +	ASSERT(ctx->cells[2][0] == ctx->cells[2][1]); +	libglitter_free_render_context(ctx); + +#undef POS + +	return 0;  } | 
