solstice-solver

Solver library of the solstice app
git clone git://git.meso-star.com/solstice-solver.git
Log | Files | Refs | README | LICENSE

commit 2207f6f56168967858f02990dbaa6f6a925c1381
parent 213db6e14675e11182f9451045851ff193c99fac
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Mon, 12 Dec 2016 16:14:34 +0100

Test the ssol_image_write function

Diffstat:
Msrc/test_ssol_image.c | 106++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------
1 file changed, 97 insertions(+), 9 deletions(-)

diff --git a/src/test_ssol_image.c b/src/test_ssol_image.c @@ -21,10 +21,16 @@ int main(int argc, char** argv) { + double block[8/*#rows*/*3/*#channels*/*8/*#column*/]; struct logger logger; struct mem_allocator allocator; struct ssol_device* dev; - struct ssol_image* image; + struct ssol_image* img; + struct ssol_image_layout layout = SSOL_IMAGE_LAYOUT_NULL; + size_t org[2]; + size_t sz[2]; + void* mem; + size_t i, x, y; (void) argc, (void) argv; mem_init_proxy_allocator(&allocator, &mem_default_allocator); @@ -37,21 +43,102 @@ main(int argc, char** argv) CHECK(ssol_device_create (&logger, &allocator, SSOL_NTHREADS_DEFAULT, 0, &dev), RES_OK); - CHECK(ssol_image_create(dev, &image), RES_OK); + CHECK(ssol_image_create(dev, &img), RES_OK); CHECK(ssol_image_ref_get(NULL), RES_BAD_ARG); - CHECK(ssol_image_ref_get(image), RES_OK); + CHECK(ssol_image_ref_get(img), RES_OK); CHECK(ssol_image_ref_put(NULL), RES_BAD_ARG); - CHECK(ssol_image_ref_put(image), RES_OK); + CHECK(ssol_image_ref_put(img), RES_OK); CHECK(ssol_image_setup(NULL, 128, 128, SSOL_PIXEL_DOUBLE3), RES_BAD_ARG); - CHECK(ssol_image_setup(image, 0, 128, SSOL_PIXEL_DOUBLE3), RES_BAD_ARG); - CHECK(ssol_image_setup(image, 128, 0, (enum ssol_pixel_format)999), RES_BAD_ARG); - CHECK(ssol_image_setup(image, 128, 128, SSOL_PIXEL_DOUBLE3), RES_OK); - CHECK(ssol_image_setup(image, 128, 128, SSOL_PIXEL_DOUBLE3), RES_OK); + CHECK(ssol_image_setup(img, 0, 128, SSOL_PIXEL_DOUBLE3), RES_BAD_ARG); + CHECK(ssol_image_setup(img, 32, 32, (enum ssol_pixel_format)99), RES_BAD_ARG); + CHECK(ssol_image_setup(img, 128, 128, SSOL_PIXEL_DOUBLE3), RES_OK); + CHECK(ssol_image_setup(img, 128, 128, SSOL_PIXEL_DOUBLE3), RES_OK); + CHECK(ssol_image_setup(img, 16, 16, SSOL_PIXEL_DOUBLE3), RES_OK); - CHECK(ssol_image_ref_put(image), RES_OK); + org[0] = 0, org[1] = 0; + sz[0] = 8, sz[1] = 8; + #define WRITE ssol_image_write + FOR_EACH(i, 0, sizeof(block)/sizeof(double)) block[i] = 1.0; + CHECK(WRITE(NULL, NULL, NULL, SSOL_PIXEL_DOUBLE3, NULL), RES_BAD_ARG); + CHECK(WRITE(img, NULL, NULL, SSOL_PIXEL_DOUBLE3, NULL), RES_BAD_ARG); + CHECK(WRITE(NULL, org, NULL, SSOL_PIXEL_DOUBLE3, NULL), RES_BAD_ARG); + CHECK(WRITE(img, org, NULL, SSOL_PIXEL_DOUBLE3, NULL), RES_BAD_ARG); + CHECK(WRITE(NULL, NULL, sz, SSOL_PIXEL_DOUBLE3, NULL), RES_BAD_ARG); + CHECK(WRITE(img, NULL, sz, SSOL_PIXEL_DOUBLE3, NULL), RES_BAD_ARG); + CHECK(WRITE(NULL, org, sz, SSOL_PIXEL_DOUBLE3, NULL), RES_BAD_ARG); + CHECK(WRITE(img, org, sz, SSOL_PIXEL_DOUBLE3, NULL), RES_BAD_ARG); + CHECK(WRITE(NULL, NULL, NULL, SSOL_PIXEL_DOUBLE3, block), RES_BAD_ARG); + CHECK(WRITE(img, NULL, NULL, SSOL_PIXEL_DOUBLE3, block), RES_BAD_ARG); + CHECK(WRITE(NULL, org, NULL, SSOL_PIXEL_DOUBLE3, block), RES_BAD_ARG); + CHECK(WRITE(img, org, NULL, SSOL_PIXEL_DOUBLE3, block), RES_BAD_ARG); + CHECK(WRITE(NULL, NULL, sz, SSOL_PIXEL_DOUBLE3, block), RES_BAD_ARG); + CHECK(WRITE(img, NULL, sz, SSOL_PIXEL_DOUBLE3, block), RES_BAD_ARG); + CHECK(WRITE(NULL, org, sz, SSOL_PIXEL_DOUBLE3, block), RES_BAD_ARG); + CHECK(WRITE(img, org, sz, SSOL_PIXEL_DOUBLE3, block), RES_OK); + + org[0] = 14, org[1] = 0; + CHECK(WRITE(img, org, sz, SSOL_PIXEL_DOUBLE3, block), RES_BAD_ARG); + org[0] = 8, org[1] = 0; + FOR_EACH(i, 0, sizeof(block)/sizeof(double)) block[i] = 2.0; + CHECK(WRITE(img, org, sz, SSOL_PIXEL_DOUBLE3, block), RES_OK); + org[0] = 0, org[1] = 8; + FOR_EACH(i, 0, sizeof(block)/sizeof(double)) block[i] = 3.0; + CHECK(WRITE(img, org, sz, SSOL_PIXEL_DOUBLE3, block), RES_OK); + org[0] = 8, org[1] = 8; + FOR_EACH(i, 0, sizeof(block)/sizeof(double)) block[i] = 4.0; + CHECK(WRITE(img, org, sz, SSOL_PIXEL_DOUBLE3, block), RES_OK); + #undef WRITE + + CHECK(ssol_image_get_layout(NULL, NULL), RES_BAD_ARG); + CHECK(ssol_image_get_layout(img, NULL), RES_BAD_ARG); + CHECK(ssol_image_get_layout(NULL, &layout), RES_BAD_ARG); + CHECK(ssol_image_get_layout(img, &layout), RES_OK); + + CHECK(layout.size > layout.offset, 1); + CHECK(layout.width, 16); + CHECK(layout.height, 16); + CHECK(layout.size - layout.offset >= 16*16, 1); + CHECK(layout.row_pitch >= 16, 1); + CHECK(layout.pixel_format, SSOL_PIXEL_DOUBLE3); + + CHECK(ssol_image_map(NULL, NULL), RES_BAD_ARG); + CHECK(ssol_image_map(img, NULL), RES_BAD_ARG); + CHECK(ssol_image_map(NULL, &mem), RES_BAD_ARG); + CHECK(ssol_image_map(img, &mem), RES_OK); + + FOR_EACH(y, 0, layout.height) { + const double* row = (const double*) + (((char*)mem + layout.offset) + y * layout.row_pitch); + FOR_EACH(x, 0, layout.width) { + const double* pixel = row + x*3; + if(y < 8) { + if(x < 8) { + CHECK(pixel[0], 1); + CHECK(pixel[1], 1); + CHECK(pixel[2], 1); + } else { + CHECK(pixel[0], 2); + CHECK(pixel[1], 2); + CHECK(pixel[2], 2); + } + } else { + if(x < 8) { + CHECK(pixel[0], 3); + CHECK(pixel[1], 3); + CHECK(pixel[2], 3); + } else { + CHECK(pixel[0], 4); + CHECK(pixel[1], 4); + CHECK(pixel[2], 4); + } + } + } + } + + CHECK(ssol_image_ref_put(img), RES_OK); CHECK(ssol_device_ref_put(dev), RES_OK); @@ -63,3 +150,4 @@ main(int argc, char** argv) return 0; } +