diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/point-array.c | 137 | 
1 files changed, 137 insertions, 0 deletions
| diff --git a/tests/point-array.c b/tests/point-array.c new file mode 100644 index 0000000..90490de --- /dev/null +++ b/tests/point-array.c @@ -0,0 +1,137 @@ +/* + * 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 (); +} + | 
