|
Packit Service |
2781ba |
#include "config.h"
|
|
Packit Service |
2781ba |
#include <gegl.h>
|
|
Packit Service |
2781ba |
#include <gegl-buffer.h>
|
|
Packit Service |
2781ba |
#include <math.h>
|
|
Packit Service |
2781ba |
#include <stdio.h>
|
|
Packit Service |
2781ba |
#include <stdlib.h>
|
|
Packit Service |
2781ba |
#include <glib.h>
|
|
Packit Service |
2781ba |
#include <glib/gstdio.h>
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
/* This file consists of a testing suite for the GeglBuffer API. For every
|
|
Packit Service |
2781ba |
* function matching the regexp ^static.*(' in the file a test is performed and
|
|
Packit Service |
2781ba |
* the output is stored in in a file with the name of the function.
|
|
Packit Service |
2781ba |
*
|
|
Packit Service |
2781ba |
* The makefile contains shell scripting that provides knowledge of how much
|
|
Packit Service |
2781ba |
* passes the reference suite, testing should occur over a range of different
|
|
Packit Service |
2781ba |
* tile sizes to make sure the behavior is consistent.
|
|
Packit Service |
2781ba |
*/
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
#include "../../gegl/buffer/gegl-buffer-iterator.h"
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
/* helper macros for the output, issue a test_start() after your defined
|
|
Packit Service |
2781ba |
* variables and the first logic, use print as your printf and print_buffer to
|
|
Packit Service |
2781ba |
* dump a GeglBuffer's contents to the log, issue test_end for the final
|
|
Packit Service |
2781ba |
* rendering.
|
|
Packit Service |
2781ba |
*/
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
#define test_start() GString *gstring=g_string_new("");\
|
|
Packit Service |
2781ba |
print (("Test: %s\n", G_STRINGIFY (TESTNAME)))
|
|
Packit Service |
2781ba |
#define print(args) G_STMT_START { \
|
|
Packit Service |
2781ba |
gchar *_fmt = g_strdup_printf args; \
|
|
Packit Service |
2781ba |
g_string_append (gstring, _fmt); \
|
|
Packit Service |
2781ba |
g_free (_fmt); \
|
|
Packit Service |
2781ba |
} G_STMT_END
|
|
Packit Service |
2781ba |
#define print_buffer(buffer) print_buffer_internal (gstring, buffer)
|
|
Packit Service |
2781ba |
#define print_linear_buffer_u8(w,h,b) print_linear_buffer_internal_u8 (gstring,w,h,b)
|
|
Packit Service |
2781ba |
#define print_linear_buffer_float(w,h,b) print_linear_buffer_internal_float (gstring,w,h,b)
|
|
Packit Service |
2781ba |
#define test_end() return g_string_free (gstring, FALSE)
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static void print_buffer_internal (GString *gstring,
|
|
Packit Service |
2781ba |
GeglBuffer *buffer);
|
|
Packit Service |
2781ba |
static void
|
|
Packit Service |
2781ba |
print_linear_buffer_internal_float (GString *gstring,
|
|
Packit Service |
2781ba |
gint width,
|
|
Packit Service |
2781ba |
gint height,
|
|
Packit Service |
2781ba |
gfloat *buf);
|
|
Packit Service |
2781ba |
static void
|
|
Packit Service |
2781ba |
print_linear_buffer_internal_u8 (GString *gstring,
|
|
Packit Service |
2781ba |
gint width,
|
|
Packit Service |
2781ba |
gint height,
|
|
Packit Service |
2781ba |
guchar *buf);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static void checkerboard (GeglBuffer *buffer,
|
|
Packit Service |
2781ba |
gint cellsize,
|
|
Packit Service |
2781ba |
gfloat val1,
|
|
Packit Service |
2781ba |
gfloat val2);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static void fill (GeglBuffer *buffer,
|
|
Packit Service |
2781ba |
gfloat value);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static void vgrad (GeglBuffer *buffer);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static void rectangle (GeglBuffer *buffer,
|
|
Packit Service |
2781ba |
gint x,
|
|
Packit Service |
2781ba |
gint y,
|
|
Packit Service |
2781ba |
gint width,
|
|
Packit Service |
2781ba |
gint height,
|
|
Packit Service |
2781ba |
gfloat value);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static void fill_rect (GeglBuffer *buffer,
|
|
Packit Service |
2781ba |
const GeglRectangle *roi,
|
|
Packit Service |
2781ba |
gfloat value
|
|
Packit Service |
2781ba |
);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
/***********************************************************************/
|
|
Packit Service |
2781ba |
/**************************************************************************/
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static void
|
|
Packit Service |
2781ba |
print_linear_buffer_internal_float (GString *gstring,
|
|
Packit Service |
2781ba |
gint width,
|
|
Packit Service |
2781ba |
gint height,
|
|
Packit Service |
2781ba |
gfloat *buf)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
gchar *scale[]={" ", "░", "▒", "▓", "█", "█"};
|
|
Packit Service |
2781ba |
gint x,y;
|
|
Packit Service |
2781ba |
print (("▛"));
|
|
Packit Service |
2781ba |
for (x=0;x
|
|
Packit Service |
2781ba |
print (("▀"));
|
|
Packit Service |
2781ba |
print (("▜\n"));
|
|
Packit Service |
2781ba |
for (y=0;y
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
print (("▌"));
|
|
Packit Service |
2781ba |
for (x=0;x
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
gint val = floor ( buf[y*width+x] * 4 + 0.5);
|
|
Packit Service |
2781ba |
if (val>4)
|
|
Packit Service |
2781ba |
val=4;
|
|
Packit Service |
2781ba |
if (val<0)
|
|
Packit Service |
2781ba |
val=0;
|
|
Packit Service |
2781ba |
print (("%s", scale[val]));
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
print (("▐\n"));
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
print (("▙"));
|
|
Packit Service |
2781ba |
for (x=0;x
|
|
Packit Service |
2781ba |
print (("▄"));
|
|
Packit Service |
2781ba |
print (("▟\n"));
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static void
|
|
Packit Service |
2781ba |
print_linear_buffer_internal_u8 (GString *gstring,
|
|
Packit Service |
2781ba |
gint width,
|
|
Packit Service |
2781ba |
gint height,
|
|
Packit Service |
2781ba |
guchar *buf)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
gchar *scale[]={" ", "░", "▒", "▓", "█"};
|
|
Packit Service |
2781ba |
gint x,y;
|
|
Packit Service |
2781ba |
print (("▛"));
|
|
Packit Service |
2781ba |
for (x=0;x
|
|
Packit Service |
2781ba |
print (("▀"));
|
|
Packit Service |
2781ba |
print (("▜\n"));
|
|
Packit Service |
2781ba |
for (y=0;y
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
print (("▌"));
|
|
Packit Service |
2781ba |
for (x=0;x
|
|
Packit Service |
2781ba |
print (("%s", scale[ (gint)floor ( buf[y*width+x]/256.0 * 4 + 0.5)]));
|
|
Packit Service |
2781ba |
print (("▐\n"));
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
print (("▙"));
|
|
Packit Service |
2781ba |
for (x=0;x
|
|
Packit Service |
2781ba |
print (("▄"));
|
|
Packit Service |
2781ba |
print (("▟\n"));
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static void
|
|
Packit Service |
2781ba |
print_buffer_internal (GString *gstring,
|
|
Packit Service |
2781ba |
GeglBuffer *buffer)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
gfloat *buf;
|
|
Packit Service |
2781ba |
gint width, height, x0, y0;
|
|
Packit Service |
2781ba |
g_object_get (buffer, "x", &x0,
|
|
Packit Service |
2781ba |
"y", &y0,
|
|
Packit Service |
2781ba |
"width", &width,
|
|
Packit Service |
2781ba |
"height", &height,
|
|
Packit Service |
2781ba |
NULL);
|
|
Packit Service |
2781ba |
buf = g_malloc (width*height*sizeof(gfloat));
|
|
Packit Service |
2781ba |
gegl_buffer_get (buffer, NULL, 1.0, babl_format ("Y float"), buf, 0,
|
|
Packit Service |
2781ba |
GEGL_ABYSS_NONE);
|
|
Packit Service |
2781ba |
print_linear_buffer_internal_float (gstring, width, height, buf);
|
|
Packit Service |
2781ba |
g_free (buf);
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static void
|
|
Packit Service |
2781ba |
fill (GeglBuffer *buffer,
|
|
Packit Service |
2781ba |
gfloat value)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
gfloat *buf;
|
|
Packit Service |
2781ba |
gint x,y;
|
|
Packit Service |
2781ba |
gint i;
|
|
Packit Service |
2781ba |
gint width, height, x0, y0;
|
|
Packit Service |
2781ba |
g_object_get (buffer, "x", &x0,
|
|
Packit Service |
2781ba |
"y", &y0,
|
|
Packit Service |
2781ba |
"width", &width,
|
|
Packit Service |
2781ba |
"height", &height,
|
|
Packit Service |
2781ba |
NULL);
|
|
Packit Service |
2781ba |
buf = g_malloc (width*height*sizeof(gfloat));
|
|
Packit Service |
2781ba |
gegl_buffer_get (buffer, NULL, 1.0, babl_format ("Y float"), buf, 0,
|
|
Packit Service |
2781ba |
GEGL_ABYSS_NONE);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
i=0;
|
|
Packit Service |
2781ba |
for (y=0;y
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
for (x=0;x
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
buf[i++]=value;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
gegl_buffer_set (buffer, NULL, 0, babl_format ("Y float"), buf, GEGL_AUTO_ROWSTRIDE);
|
|
Packit Service |
2781ba |
g_free (buf);
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static void checkerboard (GeglBuffer *buffer,
|
|
Packit Service |
2781ba |
gint cellsize,
|
|
Packit Service |
2781ba |
gfloat val1,
|
|
Packit Service |
2781ba |
gfloat val2)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
gfloat *buf;
|
|
Packit Service |
2781ba |
gint x,y;
|
|
Packit Service |
2781ba |
gint i;
|
|
Packit Service |
2781ba |
gint width, height, x0, y0;
|
|
Packit Service |
2781ba |
g_object_get (buffer, "x", &x0,
|
|
Packit Service |
2781ba |
"y", &y0,
|
|
Packit Service |
2781ba |
"width", &width,
|
|
Packit Service |
2781ba |
"height", &height,
|
|
Packit Service |
2781ba |
NULL);
|
|
Packit Service |
2781ba |
buf = g_malloc (width*height*sizeof(gfloat));
|
|
Packit Service |
2781ba |
gegl_buffer_get (buffer, NULL, 1.0, babl_format ("Y float"), buf, 0,
|
|
Packit Service |
2781ba |
GEGL_ABYSS_NONE);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
i=0;
|
|
Packit Service |
2781ba |
for (y=0;y
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
for (x=0;x
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
gfloat val=val1;
|
|
Packit Service |
2781ba |
if ( (x/cellsize) % 2)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
if ( (y/cellsize) % 2)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
val=val2;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
else
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
if ( (y/cellsize) % 2 == 0)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
val=val2;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
buf[i++]= val;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
gegl_buffer_set (buffer, NULL, 0, babl_format ("Y float"), buf, GEGL_AUTO_ROWSTRIDE);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
g_free (buf);
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static void vgrad (GeglBuffer *buffer)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
gfloat *buf;
|
|
Packit Service |
2781ba |
gint x,y;
|
|
Packit Service |
2781ba |
gint i;
|
|
Packit Service |
2781ba |
gint width, height, x0, y0;
|
|
Packit Service |
2781ba |
g_object_get (buffer, "x", &x0,
|
|
Packit Service |
2781ba |
"y", &y0,
|
|
Packit Service |
2781ba |
"width", &width,
|
|
Packit Service |
2781ba |
"height", &height,
|
|
Packit Service |
2781ba |
NULL);
|
|
Packit Service |
2781ba |
buf = g_malloc (width*height*sizeof(gfloat));
|
|
Packit Service |
2781ba |
gegl_buffer_get (buffer, NULL, 1.0, babl_format ("Y float"), buf, 0,
|
|
Packit Service |
2781ba |
GEGL_ABYSS_NONE);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
i=0;
|
|
Packit Service |
2781ba |
for (y=0;y
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
for (x=0;x
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
buf[i++]= (1.0*y)/height;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
gegl_buffer_set (buffer, NULL, 0, babl_format ("Y float"), buf, GEGL_AUTO_ROWSTRIDE);
|
|
Packit Service |
2781ba |
g_free (buf);
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static void fill_rect (GeglBuffer *buffer,
|
|
Packit Service |
2781ba |
const GeglRectangle *roi,
|
|
Packit Service |
2781ba |
gfloat value
|
|
Packit Service |
2781ba |
)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
GeglBufferIterator *gi;
|
|
Packit Service |
2781ba |
gi = gegl_buffer_iterator_new (buffer, roi, 0, NULL,
|
|
Packit Service |
2781ba |
GEGL_BUFFER_WRITE, GEGL_ABYSS_NONE);
|
|
Packit Service |
2781ba |
while (gegl_buffer_iterator_next (gi))
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
gfloat *buf = gi->data[0];
|
|
Packit Service |
2781ba |
gint i;
|
|
Packit Service |
2781ba |
for (i=0; i<gi->length; i++)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
buf[i]=value;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
void rectangle (GeglBuffer *buffer,
|
|
Packit Service |
2781ba |
gint x,
|
|
Packit Service |
2781ba |
gint y,
|
|
Packit Service |
2781ba |
gint width,
|
|
Packit Service |
2781ba |
gint height,
|
|
Packit Service |
2781ba |
gfloat value)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
GeglBuffer *sub_buf;
|
|
Packit Service |
2781ba |
GeglRectangle rect={x,y,width,height};
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
sub_buf = gegl_buffer_create_sub_buffer (buffer, &rect);
|
|
Packit Service |
2781ba |
fill (sub_buf, value);
|
|
Packit Service |
2781ba |
g_object_unref (sub_buf);
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
#include "buffer-tests.inc"
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
gint main (gint argc, gchar **argv)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
gint i;
|
|
Packit Service |
2781ba |
g_thread_init (NULL);
|
|
Packit Service |
2781ba |
gegl_init (&argc, &argv);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
for (i=0; i < G_N_ELEMENTS (tests); i++)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
gchar *ret;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
if (argc > 1)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
/* handle any extra commandline options as a list of tests to
|
|
Packit Service |
2781ba |
* run and output to standard output
|
|
Packit Service |
2781ba |
*/
|
|
Packit Service |
2781ba |
gint j;
|
|
Packit Service |
2781ba |
for (j=1;j
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
if (g_str_equal (argv[j], test_names[i]))
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
ret=tests[i]();
|
|
Packit Service |
2781ba |
printf ("%s", ret);
|
|
Packit Service |
2781ba |
g_free (ret);
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
else
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
gchar output_file[1024];
|
|
Packit Service |
2781ba |
printf ("%s ", test_names[i]);
|
|
Packit Service |
2781ba |
ret=tests[i]();
|
|
Packit Service |
2781ba |
sprintf (output_file, "output/%s.buf", test_names[i]);
|
|
Packit Service |
2781ba |
g_file_set_contents (output_file, ret, -1, NULL);
|
|
Packit Service |
2781ba |
g_free (ret);
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
gegl_exit ();
|
|
Packit Service |
2781ba |
return 0;
|
|
Packit Service |
2781ba |
}
|