Blame tests/simple/test-change-processor-rect.c

Packit bc1512
/*
Packit bc1512
 * This program is free software; you can redistribute it and/or modify
Packit bc1512
 * it under the terms of the GNU General Public License as published by
Packit bc1512
 * the Free Software Foundation; either version 3 of the License, or
Packit bc1512
 * (at your option) any later version.
Packit bc1512
 *
Packit bc1512
 * This program is distributed in the hope that it will be useful,
Packit bc1512
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit bc1512
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit bc1512
 * GNU General Public License for more details.
Packit bc1512
 *
Packit bc1512
 * You should have received a copy of the GNU General Public License
Packit bc1512
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
Packit bc1512
 *
Packit bc1512
 * Copyright (C) 2009 Martin Nordholts
Packit bc1512
 */
Packit bc1512
Packit bc1512
#include "config.h"
Packit bc1512
#include <string.h>
Packit bc1512
#include <math.h>
Packit bc1512
Packit bc1512
#include "gegl.h"
Packit bc1512
Packit bc1512
#define SUCCESS  0
Packit bc1512
#define FAILURE -1
Packit bc1512
Packit bc1512
#define FLOATS_EQUAL(x,y) (fabs((x) - (y)) < 0.00001f)
Packit bc1512
Packit bc1512
Packit bc1512
static gboolean
Packit bc1512
test_change_processor_rect_do_test (GeglProcessor       *processor,
Packit bc1512
                                    const GeglRectangle *rect,
Packit bc1512
                                    GeglNode            *sink)
Packit bc1512
{
Packit bc1512
  gint        i                         = 0;
Packit bc1512
  gboolean    result                    = TRUE;
Packit bc1512
  float       expected_result_buffer[4] = { 1.0, 1.0, 1.0, 1.0 };
Packit bc1512
  float       result_buffer[4]          = { 0, };
Packit bc1512
  GeglBuffer *buffer                    = NULL;
Packit bc1512
Packit bc1512
  gegl_node_set (sink,
Packit bc1512
                 "buffer", &buffer,
Packit bc1512
                 NULL);
Packit bc1512
  
Packit bc1512
  gegl_processor_set_rectangle (processor, rect);
Packit bc1512
Packit bc1512
  while (gegl_processor_work (processor, NULL));
Packit bc1512
Packit bc1512
  gegl_buffer_get (buffer,
Packit bc1512
                   rect,
Packit bc1512
                   1.0,
Packit bc1512
                   babl_format ("RGBA float"),
Packit bc1512
                   result_buffer,
Packit bc1512
                   GEGL_AUTO_ROWSTRIDE,
Packit bc1512
                   GEGL_ABYSS_NONE);
Packit bc1512
Packit bc1512
  /* Compare with a small epsilon to account for accumulated error */
Packit bc1512
  for(i = 0; i < G_N_ELEMENTS (expected_result_buffer); i++)
Packit bc1512
    result = result && FLOATS_EQUAL (expected_result_buffer[i], result_buffer[i]);
Packit bc1512
Packit bc1512
  gegl_node_set (sink,
Packit bc1512
                 "buffer", NULL,
Packit bc1512
                 NULL);
Packit bc1512
Packit bc1512
  g_object_unref (buffer);
Packit bc1512
Packit bc1512
  return result;
Packit bc1512
}
Packit bc1512
Packit bc1512
int main(int argc, char *argv[])
Packit bc1512
{
Packit bc1512
  gint           result       = SUCCESS;
Packit bc1512
  GeglRectangle  rect1        = { 0, 0, 1, 1 };
Packit bc1512
  GeglRectangle  rect2        = { 1, 0, 1, 1 };
Packit bc1512
  GeglRectangle  rect3        = { 1, 1, 1, 1 };
Packit bc1512
  GeglRectangle  rect4        = { 0, 1, 1, 1 };
Packit bc1512
  GeglColor     *common_color = NULL;
Packit bc1512
  GeglNode      *gegl         = NULL;
Packit bc1512
  GeglNode      *color        = NULL;
Packit bc1512
  GeglNode      *layer        = NULL;
Packit bc1512
  GeglNode      *text         = NULL;
Packit bc1512
  GeglNode      *sink         = NULL;
Packit bc1512
  GeglProcessor *processor    = NULL;
Packit bc1512
Packit bc1512
  /* Convenient line to keep around:
Packit bc1512
  g_log_set_always_fatal (G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL);
Packit bc1512
   */
Packit bc1512
Packit bc1512
  g_thread_init (NULL);
Packit bc1512
  gegl_init (&argc, &argv);
Packit bc1512
Packit bc1512
  common_color = gegl_color_new ("rgb(1.0, 1.0, 1.0)");
Packit bc1512
Packit bc1512
  gegl         = gegl_node_new ();
Packit bc1512
  color        = gegl_node_new_child (gegl,
Packit bc1512
                                      "operation", "gegl:color",
Packit bc1512
                                      "value", common_color,
Packit bc1512
                                      NULL);
Packit bc1512
  layer        = gegl_node_new_child (gegl,
Packit bc1512
                                      "operation", "gegl:layer",
Packit bc1512
                                      "x", 0.0,
Packit bc1512
                                      "y", 0.0,
Packit bc1512
                                      NULL);
Packit bc1512
  text         = gegl_node_new_child (gegl,
Packit bc1512
                                      "operation", "gegl:text",
Packit bc1512
                                      "color", common_color,
Packit bc1512
                                      "string", "█████████████████████████",
Packit bc1512
                                      "size", 200.0,
Packit bc1512
                                      NULL);
Packit bc1512
  sink         = gegl_node_new_child (gegl,
Packit bc1512
                                      "operation", "gegl:buffer-sink",
Packit bc1512
                                      NULL);
Packit bc1512
Packit bc1512
  /* We build our graph for processing complexity, not for compositing
Packit bc1512
   * complexity
Packit bc1512
   */
Packit bc1512
  gegl_node_link_many (color, layer, sink, NULL);
Packit bc1512
  gegl_node_connect_to (text, "output",  layer, "aux");
Packit bc1512
Packit bc1512
  /* Create a processor */
Packit bc1512
  processor = gegl_node_new_processor (sink, NULL);
Packit bc1512
Packit bc1512
  /* Do the tests */
Packit bc1512
  if (!test_change_processor_rect_do_test (processor, &rect1, sink))
Packit bc1512
    {
Packit bc1512
      g_printerr ("test-change-processor-rect: First compare failed\n");
Packit bc1512
      result = FAILURE;
Packit bc1512
      goto abort;
Packit bc1512
    }
Packit bc1512
  if (!test_change_processor_rect_do_test (processor, &rect2, sink))
Packit bc1512
    {
Packit bc1512
      g_printerr ("test-change-processor-rect: Second compare failed\n");
Packit bc1512
      result = FAILURE;
Packit bc1512
      goto abort;
Packit bc1512
    }
Packit bc1512
  if (!test_change_processor_rect_do_test (processor, &rect3, sink))
Packit bc1512
    {
Packit bc1512
      g_printerr ("test-change-processor-rect: Third compare failed\n");
Packit bc1512
      result = FAILURE;
Packit bc1512
      goto abort;
Packit bc1512
    }
Packit bc1512
  if (!test_change_processor_rect_do_test (processor, &rect4, sink))
Packit bc1512
    {
Packit bc1512
      g_printerr ("test-change-processor-rect: Fourth compare failed\n");
Packit bc1512
      result = FAILURE;
Packit bc1512
      goto abort;
Packit bc1512
    }
Packit bc1512
Packit bc1512
  /* Cleanup */
Packit bc1512
 abort:
Packit bc1512
  g_object_unref (processor);
Packit bc1512
  g_object_unref (common_color);
Packit bc1512
  g_object_unref (gegl);
Packit bc1512
  gegl_exit ();
Packit bc1512
Packit bc1512
  return result;
Packit bc1512
}