loaders: PNG: Handle gamma on 16bpp conversion
[gfxprim.git] / tests / core / WritePixel.gen.c.t
blob094c44387df34b69e064f4e3343f17379b94f080
1 /*
2  * WritePixel tests.
3  *
4  * Copyright (C) 2009-2014 Cyril Hrubis <metan@ucw.cz>
5  */
7 #include <stdio.h>
8 #include <string.h>
9 #include <stdlib.h>
11 #include <core/GP_WritePixel.h>
13 #include "tst_test.h"
15 static void dump_buffer(const char *name, char *buf, unsigned int buf_len)
17         unsigned int i;
19         printf("%s:\n{", name);
21         for (i = 0; i < buf_len; i++) {
22                 printf("%i", !!buf[i]);
24                 if (i != buf_len - 1)
25                         printf(", ");
27                 if (i % 26 == 25)
28                         printf("\n ");
29         }
31         printf("}\n");
35  * Compares two statically defined buffers
36  */
37 #define COMPARE_BUFFERS(id, buf1, buf2) do {                  \
38         unsigned int buf_len = sizeof(buf2)/sizeof(*buf2);    \
39         unsigned int i;                                       \
40                                                               \
41                                                               \
42         for (i = 0; i < buf_len; i++)                         \
43                 if(buf1[i] != buf2[i]) {                      \
44                         printf("%s\n", id);                   \
45                         dump_buffer("wrote", buf1, buf_len);  \
46                         dump_buffer("gen", buf2, buf_len);    \
47                         tst_msg("Buffers are different");     \
48                         return TST_FAILED;                    \
49                 }                                             \
50                                                               \
51         return TST_SUCCESS;                                   \
52 } while (0)
54 @ for pixelsize in [8, 16, 24, 32]:
55 @     for offset in range(0, 4):
56 @         for len in range(0, 6):
57 @             for aligment in [0, 4]:
58 @                 if (pixelsize != 16 and pixelsize != 32) or aligment == 0:
59 static int WritePixel{{ "_%i_%i_%i_%i" % (pixelsize, offset, len, aligment) }}(void)
61         char write_buf[{{ 25 * pixelsize//8 }}] = {};
62         char gen_buf[{{ 25 * pixelsize//8 }}] = {};
64         /*
65          * Fill the compare buffer
66          */
67 @                     for i in range(0, len):
68 @                         for j in range(0, pixelsize//8):
69         gen_buf[{{aligment + offset * pixelsize//8 + i * pixelsize//8 + j}}] = 0xff;
70 @                     end
72         GP_WritePixels_{{ pixelsize }}BPP(write_buf + {{aligment + offset * pixelsize//8}}, {{ len }}, 0xffffffff>>{{32 - pixelsize}});
74         COMPARE_BUFFERS({{'"p=%i o=%i l=%i a=%i"' % (pixelsize, offset, len, aligment)}}, write_buf, gen_buf);
77 static int WritePixel{{ "_%i_%i_%i_%i_alloc" % (pixelsize, offset, len, aligment) }}(void)
79         char gen_buf[{{ 25 * pixelsize//8 }}] = {};
80         char *write_buf = malloc({{ 25 * pixelsize//8 }});
82         /*
83          * Fill the compare buffer
84          */
85 @                     for i in range(0, len):
86 @                         for j in range(0, pixelsize//8):
87         gen_buf[{{aligment + offset * pixelsize//8 + i * pixelsize//8 + j}}] = 0xff;
88 @                     end
90         if (gen_buf == NULL) {
91                 tst_msg("Malloc failed :(");
92                 return TST_UNTESTED;
93         }
95         memset(write_buf, 0, {{ 25 * pixelsize//8 }});
97         GP_WritePixels_{{ pixelsize }}BPP(write_buf + {{aligment + offset * pixelsize//8}}, {{ len }}, 0xffffffff>>{{32 - pixelsize}});
99         COMPARE_BUFFERS({{'"p=%i o=%i l=%i a=%i"' % (pixelsize, offset, len, aligment)}}, write_buf, gen_buf);
101 @ end
103 const struct tst_suite tst_suite = {
104         .suite_name = "WritePixel Testsuite",
105         .tests = {
106 @ for pixelsize in [8, 16, 24, 32]:
107 @     for offset in range(0, 4):
108 @         for len in range(0, 6):
109 @             for aligment in [0, 4]:
110 @                 if (pixelsize != 16 and pixelsize != 32) or aligment == 0:
111                 {.name = "WritePixel {{ pixelsize }} {{ offset }} {{ len }} {{ aligment }} stack",
112                  .tst_fn = WritePixel{{ "_%i_%i_%i_%i" % (pixelsize, offset, len, aligment) }}},
113                 {.name = "WritePixel {{ pixelsize }} {{ offset }} {{ len }} {{ aligment }} alloc",
114                  .tst_fn = WritePixel{{ "_%i_%i_%i_%i_alloc" % (pixelsize, offset, len, aligment) }}},
115 @ end
116                 {.name = NULL}
117         }