Add a unit test for LdPointArray.
This commit is contained in:
parent
75c2358b69
commit
e651ac258a
|
@ -142,6 +142,9 @@ set (liblogdiag_HEADERS
|
||||||
liblogdiag/ld-lua-symbol.h
|
liblogdiag/ld-lua-symbol.h
|
||||||
liblogdiag/ld-lua-symbol-private.h)
|
liblogdiag/ld-lua-symbol-private.h)
|
||||||
|
|
||||||
|
set (logdiag_TESTS
|
||||||
|
point-array)
|
||||||
|
|
||||||
set (logdiag_SOURCES
|
set (logdiag_SOURCES
|
||||||
src/ld-window-main.c
|
src/ld-window-main.c
|
||||||
src/logdiag.c)
|
src/logdiag.c)
|
||||||
|
@ -220,6 +223,20 @@ set_target_properties (liblogdiag PROPERTIES OUTPUT_NAME logdiag)
|
||||||
add_executable (logdiag WIN32 ${logdiag_SOURCES} ${logdiag_HEADERS})
|
add_executable (logdiag WIN32 ${logdiag_SOURCES} ${logdiag_HEADERS})
|
||||||
target_link_libraries (logdiag liblogdiag ${logdiag_LIBS})
|
target_link_libraries (logdiag liblogdiag ${logdiag_LIBS})
|
||||||
|
|
||||||
|
# Testing
|
||||||
|
option (BUILD_TESTING "Build tests" OFF)
|
||||||
|
|
||||||
|
if (BUILD_TESTING)
|
||||||
|
enable_testing ()
|
||||||
|
|
||||||
|
foreach (name ${logdiag_TESTS})
|
||||||
|
add_executable (test-${name} tests/${name}.c)
|
||||||
|
target_link_libraries (test-${name} liblogdiag ${logdiag_LIBS})
|
||||||
|
|
||||||
|
add_test (test-${name} test-${name})
|
||||||
|
endforeach (name)
|
||||||
|
endif (BUILD_TESTING)
|
||||||
|
|
||||||
# Generate documentation
|
# Generate documentation
|
||||||
if (GTK_DOC_FOUND)
|
if (GTK_DOC_FOUND)
|
||||||
GTK_DOC_RUN (WORKING_DIR ${project_DOC_DIR}
|
GTK_DOC_RUN (WORKING_DIR ${project_DOC_DIR}
|
||||||
|
|
|
@ -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 ();
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue