logdiag/tests/point-array.c

138 lines
3.1 KiB
C
Raw Normal View History

2011-02-03 00:03:08 +01:00
/*
* point-array.c
*
* This file is a part of logdiag.
* Copyright Přemysl Janouch 2011. All rights reserved.
*
* See the file LICENSE for licensing information.
*
*/
#include <liblogdiag/liblogdiag.h>
#define POINT_ARRAY_LENGTH 5
typedef struct
{
LdPointArray *points;
}
PointArray;
static void
point_array_setup (PointArray *fixture, gconstpointer test_data)
{
guint i;
fixture->points = ld_point_array_sized_new (POINT_ARRAY_LENGTH);
fixture->points->length = POINT_ARRAY_LENGTH;
for (i = 0; i < POINT_ARRAY_LENGTH; i++)
{
fixture->points->points[i].x = i;
fixture->points->points[i].y = i;
}
}
static void
point_array_teardown (PointArray *fixture, gconstpointer test_data)
{
ld_point_array_free (fixture->points);
}
static void
point_array_test_new (void)
{
LdPointArray *points;
points = ld_point_array_new ();
g_assert_cmpuint (points->length, ==, 0);
ld_point_array_free (points);
}
static void
point_array_test_sized_new (void)
{
LdPointArray *points;
points = ld_point_array_sized_new (5);
g_assert_cmpuint (points->length, ==, 0);
g_assert_cmpuint (points->size, ==, 5);
g_assert (points->points != NULL);
ld_point_array_free (points);
}
static void
point_array_test_insert (PointArray *fixture, gconstpointer user_data)
{
LdPoint points[] = {{3, -1}, {4, -1}, {5, -9}};
const guint offset = 1;
guint i, j;
ld_point_array_insert (fixture->points,
points, offset, G_N_ELEMENTS (points));
g_assert_cmpuint (fixture->points->length,
==, POINT_ARRAY_LENGTH + G_N_ELEMENTS (points));
for (i = 0, j = 0; i < POINT_ARRAY_LENGTH + G_N_ELEMENTS (points); i++)
{
/* Check that our values have been really inserted. */
if (i >= offset && i < offset + G_N_ELEMENTS (points))
{
g_assert_cmpfloat (fixture->points->points[i].x,
==, points[i - offset].x);
g_assert_cmpfloat (fixture->points->points[i].y,
==, points[i - offset].y);
continue;
}
/* And everything else is intact. */
g_assert_cmpfloat (fixture->points->points[i].x, ==, j);
g_assert_cmpfloat (fixture->points->points[i].y, ==, j);
j++;
}
}
static void
point_array_test_remove (PointArray *fixture, gconstpointer user_data)
{
const guint offset = 1;
const guint length = 3;
guint i, j;
ld_point_array_remove (fixture->points, offset, length);
g_assert_cmpuint (fixture->points->length,
==, POINT_ARRAY_LENGTH - length);
for (i = 0, j = 0; i < POINT_ARRAY_LENGTH; i++)
{
/* Leave out the hole. */
if (i >= offset && i < offset + length)
continue;
/* And test that everything else is intact. */
g_assert_cmpfloat (fixture->points->points[j].x, ==, i);
g_assert_cmpfloat (fixture->points->points[j].y, ==, i);
j++;
}
}
int
main (int argc, char *argv[])
{
gtk_test_init (&argc, &argv, NULL);
/* Creation. */
g_test_add_func ("/point-array/new", point_array_test_new);
g_test_add_func ("/point-array/sized-new", point_array_test_sized_new);
/* Modification. */
g_test_add ("/point-array/insert", PointArray, NULL,
point_array_setup, point_array_test_insert,
point_array_teardown);
g_test_add ("/point-array/remove", PointArray, NULL,
point_array_setup, point_array_test_remove,
point_array_teardown);
return g_test_run ();
}