Blame tests/simple/test-gegl-rectangle.c

Packit Service 2781ba
/*
Packit Service 2781ba
 * This program is free software; you can redistribute it and/or modify
Packit Service 2781ba
 * it under the terms of the GNU General Public License as published by
Packit Service 2781ba
 * the Free Software Foundation; either version 3 of the License, or
Packit Service 2781ba
 * (at your option) any later version.
Packit Service 2781ba
 *
Packit Service 2781ba
 * This program is distributed in the hope that it will be useful,
Packit Service 2781ba
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 2781ba
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 2781ba
 * GNU General Public License for more details.
Packit Service 2781ba
 *
Packit Service 2781ba
 * You should have received a copy of the GNU General Public License
Packit Service 2781ba
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
Packit Service 2781ba
 *
Packit Service 2781ba
 * Copyright (C) 2009 Martin Nordholts
Packit Service 2781ba
 */
Packit Service 2781ba
Packit Service 2781ba
#include <string.h>
Packit Service 2781ba
Packit Service 2781ba
#include "gegl.h"
Packit Service 2781ba
#include "gegl-utils.h"
Packit Service 2781ba
Packit Service 2781ba
Packit Service 2781ba
#define SUCCESS  0
Packit Service 2781ba
#define FAILURE -1
Packit Service 2781ba
Packit Service 2781ba
#define INFINITE_PLANE G_MININT / 2, G_MININT / 2, G_MAXINT, G_MAXINT
Packit Service 2781ba
Packit Service 2781ba
typedef struct
Packit Service 2781ba
{
Packit Service 2781ba
  GeglRectangle rect1;
Packit Service 2781ba
  GeglRectangle rect2;
Packit Service 2781ba
Packit Service 2781ba
  GeglRectangle bounding_box_result;
Packit Service 2781ba
Packit Service 2781ba
  GeglRectangle intersect_result;
Packit Service 2781ba
  gboolean      intersect_return_value;
Packit Service 2781ba
Packit Service 2781ba
  gboolean      contains_return_value;
Packit Service 2781ba
} GeglRectangleTestCase;
Packit Service 2781ba
Packit Service 2781ba
static GeglRectangleTestCase tests[] =
Packit Service 2781ba
{
Packit Service 2781ba
  /* 1 */
Packit Service 2781ba
  { { INFINITE_PLANE },
Packit Service 2781ba
    { INFINITE_PLANE },
Packit Service 2781ba
Packit Service 2781ba
    { INFINITE_PLANE },
Packit Service 2781ba
Packit Service 2781ba
    { INFINITE_PLANE },
Packit Service 2781ba
    TRUE,
Packit Service 2781ba
Packit Service 2781ba
    TRUE },
Packit Service 2781ba
Packit Service 2781ba
  /* 2 */
Packit Service 2781ba
  { { INFINITE_PLANE   },
Packit Service 2781ba
    { -10, -10, 20, 20 },
Packit Service 2781ba
Packit Service 2781ba
    { INFINITE_PLANE   },
Packit Service 2781ba
Packit Service 2781ba
    { -10, -10, 20, 20 },
Packit Service 2781ba
    TRUE,
Packit Service 2781ba
Packit Service 2781ba
    TRUE },
Packit Service 2781ba
Packit Service 2781ba
Packit Service 2781ba
  /* 3 */
Packit Service 2781ba
  { { -10, -10, 20, 20 },
Packit Service 2781ba
    { INFINITE_PLANE   },
Packit Service 2781ba
Packit Service 2781ba
    { INFINITE_PLANE   },
Packit Service 2781ba
Packit Service 2781ba
    { -10, -10, 20, 20 },
Packit Service 2781ba
    TRUE,
Packit Service 2781ba
Packit Service 2781ba
    FALSE },
Packit Service 2781ba
Packit Service 2781ba
Packit Service 2781ba
  /* 4 */
Packit Service 2781ba
  { { -10, -10, 10, 10 },
Packit Service 2781ba
    {  0,   0,  10, 10 },
Packit Service 2781ba
Packit Service 2781ba
    { -10, -10, 20, 20 },
Packit Service 2781ba
Packit Service 2781ba
    {  0,   0,  0,  0  },
Packit Service 2781ba
    FALSE,
Packit Service 2781ba
Packit Service 2781ba
    FALSE },
Packit Service 2781ba
Packit Service 2781ba
Packit Service 2781ba
  /* 5 */
Packit Service 2781ba
  { {  0,   0,  10, 10 },
Packit Service 2781ba
    { -10, -10, 10, 10 },
Packit Service 2781ba
Packit Service 2781ba
    { -10, -10, 20, 20 },
Packit Service 2781ba
Packit Service 2781ba
    {  0,   0,  0,  0 },
Packit Service 2781ba
    FALSE,
Packit Service 2781ba
Packit Service 2781ba
    FALSE },
Packit Service 2781ba
Packit Service 2781ba
Packit Service 2781ba
  /* 6 */
Packit Service 2781ba
  { { -10, -10, 0, 0 },
Packit Service 2781ba
    {  1,   2,  3, 4 },
Packit Service 2781ba
Packit Service 2781ba
    {  1,   2,  3, 4 },
Packit Service 2781ba
Packit Service 2781ba
    {  0,   0,  0, 0 },
Packit Service 2781ba
    FALSE,
Packit Service 2781ba
Packit Service 2781ba
    FALSE },
Packit Service 2781ba
Packit Service 2781ba
Packit Service 2781ba
  /* 7 */
Packit Service 2781ba
  { {  1,   2,  3, 4 },
Packit Service 2781ba
    { -10, -10, 0, 0 },
Packit Service 2781ba
Packit Service 2781ba
    {  1,   2,  3, 4 },
Packit Service 2781ba
Packit Service 2781ba
    {  0,   0,  0, 0 },
Packit Service 2781ba
    FALSE,
Packit Service 2781ba
Packit Service 2781ba
    FALSE },
Packit Service 2781ba
Packit Service 2781ba
Packit Service 2781ba
  /* 8 */
Packit Service 2781ba
  { { G_MININT / 2, G_MININT / 2, 1, 1 },
Packit Service 2781ba
    { INFINITE_PLANE                   },
Packit Service 2781ba
Packit Service 2781ba
    { INFINITE_PLANE                   },
Packit Service 2781ba
Packit Service 2781ba
    { G_MININT / 2, G_MININT / 2, 1, 1 },
Packit Service 2781ba
    TRUE,
Packit Service 2781ba
Packit Service 2781ba
    FALSE },
Packit Service 2781ba
Packit Service 2781ba
Packit Service 2781ba
  /* 9 */
Packit Service 2781ba
  { { G_MAXINT / 2 - 1, G_MAXINT / 2- 1, 1, 1  },
Packit Service 2781ba
    { INFINITE_PLANE                           },
Packit Service 2781ba
Packit Service 2781ba
    { INFINITE_PLANE                           },
Packit Service 2781ba
Packit Service 2781ba
    { G_MAXINT / 2 - 1, G_MAXINT / 2 - 1, 1, 1 },
Packit Service 2781ba
    TRUE,
Packit Service 2781ba
Packit Service 2781ba
    FALSE },
Packit Service 2781ba
Packit Service 2781ba
Packit Service 2781ba
  /* 10 */
Packit Service 2781ba
  { { -5,  -5,  10, 10 },
Packit Service 2781ba
    {  0,   0,  5,  5  },
Packit Service 2781ba
Packit Service 2781ba
    { -5,  -5,  10, 10 },
Packit Service 2781ba
Packit Service 2781ba
    {  0,   0,  5,  5  },
Packit Service 2781ba
    TRUE,
Packit Service 2781ba
Packit Service 2781ba
    TRUE },
Packit Service 2781ba
};
Packit Service 2781ba
Packit Service 2781ba
int main(int argc, char *argv[])
Packit Service 2781ba
{
Packit Service 2781ba
  GeglRectangle expected_infinite_plane = gegl_rectangle_infinite_plane ();
Packit Service 2781ba
  GeglRectangle infinite_plane          = { INFINITE_PLANE };
Packit Service 2781ba
  int           result = SUCCESS;
Packit Service 2781ba
  int           i      = 0;
Packit Service 2781ba
Packit Service 2781ba
  /* Make sure our representation of an infinite plane GeglRectangle
Packit Service 2781ba
   * is correct
Packit Service 2781ba
   */
Packit Service 2781ba
  if (! gegl_rectangle_equal (&infinite_plane, &expected_infinite_plane))
Packit Service 2781ba
    {
Packit Service 2781ba
      result = FAILURE;
Packit Service 2781ba
      g_printerr("This test case and GEGL does not represent an infinite plane\n"
Packit Service 2781ba
                 "GeglRectangle in the same way, update this test case. Aborting.\n");
Packit Service 2781ba
      goto abort;
Packit Service 2781ba
    }
Packit Service 2781ba
Packit Service 2781ba
  for (i = 0; i < G_N_ELEMENTS (tests); i++)
Packit Service 2781ba
    {
Packit Service 2781ba
      GeglRectangle result_rect;
Packit Service 2781ba
      gboolean      return_value;
Packit Service 2781ba
Packit Service 2781ba
      /* gegl_rectangle_bounding_box() */
Packit Service 2781ba
      gegl_rectangle_bounding_box (&result_rect,
Packit Service 2781ba
                                   &tests[i].rect1,
Packit Service 2781ba
                                   &tests[i].rect2);
Packit Service 2781ba
      if (! gegl_rectangle_equal (&result_rect, &tests[i].bounding_box_result))
Packit Service 2781ba
        {
Packit Service 2781ba
          result = FAILURE;
Packit Service 2781ba
          g_printerr("The gegl_rectangle_bounding_box() test #%d failed. Aborting.\n", i + 1);
Packit Service 2781ba
          goto abort;
Packit Service 2781ba
        }
Packit Service 2781ba
Packit Service 2781ba
      /* gegl_rectangle_intersect() */
Packit Service 2781ba
      return_value = gegl_rectangle_intersect (&result_rect,
Packit Service 2781ba
                                               &tests[i].rect1,
Packit Service 2781ba
                                               &tests[i].rect2);
Packit Service 2781ba
      if (! gegl_rectangle_equal (&result_rect, &tests[i].intersect_result) ||
Packit Service 2781ba
          return_value != tests[i].intersect_return_value)
Packit Service 2781ba
        {
Packit Service 2781ba
          result = FAILURE;
Packit Service 2781ba
          g_printerr("The gegl_rectangle_intersect() test #%d failed. Aborting.\n", i + 1);
Packit Service 2781ba
          goto abort;
Packit Service 2781ba
        }
Packit Service 2781ba
Packit Service 2781ba
      /* gegl_rectangle_contains() */
Packit Service 2781ba
      return_value = gegl_rectangle_contains (&tests[i].rect1,
Packit Service 2781ba
                                              &tests[i].rect2);
Packit Service 2781ba
      if (return_value != tests[i].contains_return_value)
Packit Service 2781ba
        {
Packit Service 2781ba
          result = FAILURE;
Packit Service 2781ba
          g_printerr("The gegl_rectangle_contains() test #%d failed. Aborting.\n", i + 1);
Packit Service 2781ba
          goto abort;
Packit Service 2781ba
        }
Packit Service 2781ba
    }
Packit Service 2781ba
Packit Service 2781ba
abort:
Packit Service 2781ba
  return result;
Packit Service 2781ba
}