Blame tests/simple/test-path.c

Packit bc1512
#include <stdio.h>
Packit bc1512
#include <math.h>
Packit bc1512
#include <glib.h>
Packit bc1512
Packit bc1512
#include "gegl.h"
Packit bc1512
#include "property-types/gegl-path.h"
Packit bc1512
Packit bc1512
#define SUCCESS  0
Packit bc1512
#define FAILURE -1
Packit bc1512
Packit bc1512
#define EPSILON 0.00001
Packit bc1512
Packit bc1512
#define NSMP 3
Packit bc1512
static gboolean 
Packit bc1512
equals(double a, double b)
Packit bc1512
{
Packit bc1512
  return fabs(a-b) < EPSILON;
Packit bc1512
}
Packit bc1512
static void
Packit bc1512
distribute(double length, int num_samples, gdouble *result)
Packit bc1512
{
Packit bc1512
  int i=0;
Packit bc1512
  gdouble spacing = 0;
Packit bc1512
  if (num_samples>1)
Packit bc1512
    spacing = length/(num_samples-1);
Packit bc1512
  for (i=0; i
Packit bc1512
    result[i]=spacing*i;
Packit bc1512
  if (num_samples>1)
Packit bc1512
    result[num_samples-1]= length;
Packit bc1512
}
Packit bc1512
Packit bc1512
static int 
Packit bc1512
test_path_get_length (GeglPath *path, gdouble exp_length)
Packit bc1512
{  
Packit bc1512
  gdouble length;
Packit bc1512
  length = gegl_path_get_length(path);
Packit bc1512
Packit bc1512
  if (! equals(length, exp_length))
Packit bc1512
    {
Packit bc1512
      g_printerr("test_path_get_length()\n");
Packit bc1512
      g_printerr("The length of path is incorrect.\n");
Packit bc1512
      g_printerr("length is %f, should be %f\n", length, exp_length);
Packit bc1512
      return FALSE;
Packit bc1512
    }
Packit bc1512
  return TRUE;
Packit bc1512
}
Packit bc1512
Packit bc1512
static int 
Packit bc1512
test_path_calc_values (GeglPath *path, int num_samples,
Packit bc1512
                       gdouble *exp_x, gdouble *exp_y)
Packit bc1512
{
Packit bc1512
  int i=0;
Packit bc1512
  gdouble x[num_samples], y[num_samples];
Packit bc1512
  //gdouble length;
Packit bc1512
  /* gegl_path_calc_values:
Packit bc1512
   * Compute @num_samples for a path into the provided arrays @xs and @ys
Packit bc1512
   * the returned values include the start and end positions of the path.
Packit bc1512
   */
Packit bc1512
  //length = gegl_path_get_length(path);
Packit bc1512
Packit bc1512
  gegl_path_calc_values(path,num_samples,x,y);
Packit bc1512
Packit bc1512
  for (i=0; i
Packit bc1512
    if (! (equals(x[i],exp_x[i]) && equals(y[i],exp_y[i])) )
Packit bc1512
    {
Packit bc1512
      g_printerr("test_path_calc_values()\n");
Packit bc1512
      g_printerr("Sample %d is incorrect.\n",i);
Packit bc1512
      for ( i=0;i
Packit bc1512
        printf("Sample %d : x=%f exp_x=%f  y=%f exp_y=%f\n",
Packit bc1512
                i, x[i], exp_x[i], y[i], exp_y[i]);
Packit bc1512
      return FALSE;
Packit bc1512
    }
Packit bc1512
  return TRUE;
Packit bc1512
}
Packit bc1512
Packit bc1512
static int 
Packit bc1512
test_path_calc (GeglPath *path, gdouble pos,
Packit bc1512
                gdouble exp_x, gdouble exp_y)
Packit bc1512
{
Packit bc1512
  gdouble x=0.0, y=0.0;
Packit bc1512
  /* gegl_path_calc_values:
Packit bc1512
   * Compute @num_samples for a path into the provided arrays @xs and @ys
Packit bc1512
   * the returned values include the start and end positions of the path.
Packit bc1512
   */
Packit bc1512
  gegl_path_calc(path,pos,&x,&y);
Packit bc1512
Packit bc1512
  if (! (equals(x,exp_x) && equals(y,exp_y)) )
Packit bc1512
    {
Packit bc1512
      g_printerr("test_path_calc()\n");
Packit bc1512
      g_printerr("Calculated point %f incorrect.\n", pos);
Packit bc1512
      printf("x=%f exp_x=%f  y=%f exp_y=%f\n",
Packit bc1512
              x, exp_x, y, exp_y);
Packit bc1512
      return FALSE;
Packit bc1512
    }
Packit bc1512
  return TRUE;
Packit bc1512
}
Packit bc1512
int main(int argc, char *argv[])
Packit bc1512
{
Packit bc1512
  gdouble exp_x[NSMP],exp_y[NSMP];
Packit bc1512
  int result=SUCCESS;
Packit bc1512
  int i=1, j=1;
Packit bc1512
  GeglPath *path = NULL;
Packit bc1512
Packit bc1512
  g_type_init();
Packit bc1512
  gegl_init (&argc, &argv);
Packit bc1512
Packit bc1512
  distribute (0.0, NSMP ,exp_y);
Packit bc1512
  distribute (1.0, NSMP ,exp_x);
Packit bc1512
Packit bc1512
  path = gegl_path_new ();
Packit bc1512
  gegl_path_append (path, 'M', 0.0, 0.0);
Packit bc1512
  gegl_path_append (path, 'L', 0.5, 0.0);
Packit bc1512
  gegl_path_append (path, 'L', 1.0, 0.0);
Packit bc1512
  if(! test_path_get_length(path, 1.0) )
Packit bc1512
    {
Packit bc1512
      g_printerr("The gegl_path_get_length() test #%d failed.\n",i);
Packit bc1512
      result += FAILURE;
Packit bc1512
    }
Packit bc1512
  /* path_calc forwards */
Packit bc1512
  for ( j=0;j
Packit bc1512
    if(! test_path_calc(path, exp_x[j], exp_x[j], exp_y[j]) )
Packit bc1512
      {
Packit bc1512
        g_printerr("The gegl_path_calc() test #%d.%d failed.\n",i,j+1);
Packit bc1512
        result += FAILURE;
Packit bc1512
      }
Packit bc1512
  /* path_calc backwards */
Packit bc1512
  for ( j=NSMP-1;j>-1;j--)
Packit bc1512
    if(! test_path_calc(path, exp_x[j], exp_x[j], exp_y[j]) )
Packit bc1512
      {
Packit bc1512
        g_printerr("The gegl_path_calc() reverse test #%d.%d failed.\n",i,j+1);
Packit bc1512
        result += FAILURE;
Packit bc1512
      }
Packit bc1512
  if(! test_path_calc_values(path, NSMP, exp_x, exp_y) )
Packit bc1512
    {
Packit bc1512
      g_printerr("The gegl_path_calc_values() test #%d failed.\n",i);
Packit bc1512
      result += FAILURE;
Packit bc1512
    }
Packit bc1512
Packit bc1512
  i++;
Packit bc1512
Packit bc1512
  path = gegl_path_new ();
Packit bc1512
  gegl_path_append (path, 'M', 0.0, 0.0);
Packit bc1512
  gegl_path_append (path, 'L', 0.5, 0.0);
Packit bc1512
  gegl_path_append (path, 'M', 0.5, 0.0);
Packit bc1512
  gegl_path_append (path, 'L', 1.0, 0.0);
Packit bc1512
  if(! test_path_get_length(path, 1.0) )
Packit bc1512
    {
Packit bc1512
      g_printerr("The gegl_path_get_length() test #%d failed.\n",i);
Packit bc1512
      result += FAILURE;
Packit bc1512
    }
Packit bc1512
  /* path_calc forwards */
Packit bc1512
  for ( j=0;j
Packit bc1512
    if(! test_path_calc(path, exp_x[j], exp_x[j], exp_y[j]) )
Packit bc1512
      {
Packit bc1512
        g_printerr("The gegl_path_calc() test #%d.%d failed.\n",i,j+1);
Packit bc1512
        result += FAILURE;
Packit bc1512
      }
Packit bc1512
  /* path_calc backwards */
Packit bc1512
  for ( j=NSMP-1;j>-1;j--)
Packit bc1512
    if(! test_path_calc(path, exp_x[j], exp_x[j], exp_y[j]) )
Packit bc1512
      {
Packit bc1512
        g_printerr("The gegl_path_calc() reverse test #%d.%d failed.\n",i,j+1);
Packit bc1512
        result += FAILURE;
Packit bc1512
      }
Packit bc1512
  if(! test_path_calc_values(path, NSMP, exp_x, exp_y) )
Packit bc1512
    {
Packit bc1512
      g_printerr("The gegl_path_calc_values() test #%d failed.\n",i);
Packit bc1512
      result += FAILURE;
Packit bc1512
    }
Packit bc1512
Packit bc1512
  /* path1   :    |--+--+--|--+--+--|
Packit bc1512
   * path2   :    |--+--+--|
Packit bc1512
   *                       |--+--+--|
Packit bc1512
   * 1sampl  :    ^ ?
Packit bc1512
   * 2sampl  :    ^                 ^
Packit bc1512
   * 3sampl  :    ^        ^        ^
Packit bc1512
   * 4sampl  :    ^     ^     ^     ^
Packit bc1512
   */
Packit bc1512
Packit bc1512
  gegl_exit ();
Packit bc1512
Packit bc1512
  return result;
Packit bc1512
}