[PATCH 2/3] Add initial unit tests and unit test framework.
From: "U. Artie Eoff" Add tests directory and makefiles to the toolchain configuration. Created first unit tests for wayland-util. Unit tests can be executed with the command 'make check'. Signed-off-by: U. Artie Eoff --- Makefile.am|2 +- configure.ac |1 + tests/Makefile.am |8 +++ tests/check-wayland-util.c | 107 tests/wayland-check.h | 39 5 files changed, 156 insertions(+), 1 deletions(-) create mode 100644 tests/Makefile.am create mode 100644 tests/check-wayland-util.c create mode 100644 tests/wayland-check.h diff --git a/Makefile.am b/Makefile.am index 332f9b4..ea73ebb 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,4 +1,4 @@ -SUBDIRS = src protocol doc +SUBDIRS = src protocol doc tests ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} diff --git a/configure.ac b/configure.ac index 505c2c9..3f3b2ad 100644 --- a/configure.ac +++ b/configure.ac @@ -65,5 +65,6 @@ AC_CONFIG_FILES([Makefile src/Makefile src/wayland-server.pc src/wayland-client.pc + tests/Makefile protocol/Makefile]) AC_OUTPUT diff --git a/tests/Makefile.am b/tests/Makefile.am new file mode 100644 index 000..3b305c2 --- /dev/null +++ b/tests/Makefile.am @@ -0,0 +1,8 @@ + +TESTS = check-wayland-util + +check_PROGRAMS = check-wayland-util + +check_wayland_util_SOURCES = check-wayland-util.c +check_wayland_util_CFLAGS = @CHECK_CFLAGS@ -I$(top_builddir)/src/ -std=c99 +check_wayland_util_LDADD = $(top_builddir)/src/libwayland-util.la @CHECK_LIBS@ diff --git a/tests/check-wayland-util.c b/tests/check-wayland-util.c new file mode 100644 index 000..dda2f50 --- /dev/null +++ b/tests/check-wayland-util.c @@ -0,0 +1,107 @@ +#include +#include "wayland-check.h" + +WLD_START_TEST(test_wl_array_init) +{ +const int iterations = 4122; // this is arbitrary +// init array an arbitray amount of times +// and verify the defaults are sensible +for (int i = 0; i < iterations; ++i) +{ +struct wl_array array; +wl_array_init(&array); + +fail_unless(0 == array.size); +fail_unless(0 == array.alloc); +fail_unless(0 == array.data); +} +} +WLD_END_TEST + +WLD_START_TEST(test_wl_array_add) +{ +struct mydata { +int a; +unsignedb; +double c; +double d; +}; + +const int iterations = 1321; // this is arbitrary +const int datasize = sizeof(struct mydata); + +struct wl_array array; +wl_array_init(&array); + +// add some data +for (int i = 0; i < iterations; ++i) +{ +struct mydata* ptr = wl_array_add(&array, datasize); +fail_unless( (i + 1) * datasize == array.size); + +ptr->a = i * 3; +ptr->b = -i; +ptr->c = (double)(i); +ptr->d = (double)(i / 2.); +} + +// verify the data +for (int i = 0; i < iterations; ++i) +{ +const int index = datasize * i; +struct mydata* check = (struct mydata*)(array.data + index); +fail_unless(i*3 == check->a); +fail_unless(-i == check->b); +fail_unless((double)(i) == check->c); +fail_unless((double)(i/2.) == check->d); +} + +wl_array_release(&array); +} +WLD_END_TEST + +WLD_START_TEST(test_wl_array_copy) +{ +const int iterations = 1529; // this is arbitrary + +struct wl_array source; +wl_array_init(&source); + +// add some data +for (int i = 0; i < iterations; ++i) +{ +int *p = wl_array_add(&source, sizeof(int)); +*p = i * 2 + i; +} + +// copy the array +struct wl_array copy; +wl_array_copy(©, &source); + +// check the copy +for (int i = 0; i < iterations; ++i) +{ +const int index = sizeof(int) * i; +int *s = (int *)(source.data + index); +int *c = (int *)(copy.data + index); +fail_unless(*s == *c); // verify the values are the same +fail_if(s == c); // ensure the addresses aren't the same +fail_unless(i * 2 + i == *s); // sanity check +} + +wl_array_release(&source); +wl_array_release(©); +} +WLD_END_TEST + +// Add all the tests to a test suite +WLD_START_SUITE(util) +{ +WLD_SUITE_ADD_TEST(test_wl_array_init) +WLD_SUITE_ADD_TEST(test_wl_array_add) +WLD_SUITE_ADD_TEST(test_wl_array_copy) +} +WLD_END_SUITE + +// Generate test main +WLD_CHECK_MAIN(util) diff --git a/tests/wayland-check.h b/tests/wayland-check.h new file mode 100644 index 000..754afa2 --- /dev/null +++ b/tests/wayland-check.h @@ -0,0 +1,39 @@ +#ifndef WLD_CHECK_H +#define WLD_CHECK_H + +#include + +#define WLD_START_TEST(fname) \ +START_TEST (fname) + +#define WLD_END_TEST\ +END_TEST + +#define WLD_START_SUITE(name) \ +static Suite * wld_ ## name ## _suite (void)\ +{
[PATCH 2/3] Add initial unit tests and unit test framework.
From: "U. Artie Eoff" Add tests directory and makefiles to the toolchain configuration. Created first unit tests for wayland-util. Unit tests can be executed with the command 'make check'. Signed-off-by: U. Artie Eoff --- Makefile.am|2 +- configure.ac |3 +- tests/Makefile.am |8 +++ tests/check-wayland-util.c | 107 tests/wayland-check.h | 39 5 files changed, 157 insertions(+), 2 deletions(-) create mode 100644 tests/Makefile.am create mode 100644 tests/check-wayland-util.c create mode 100644 tests/wayland-check.h diff --git a/Makefile.am b/Makefile.am index 016bb76..6c4b7e8 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,4 +1,4 @@ -SUBDIRS = src protocol +SUBDIRS = src protocol tests ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} diff --git a/configure.ac b/configure.ac index 50ab47b..19e48ae 100644 --- a/configure.ac +++ b/configure.ac @@ -60,5 +60,6 @@ AC_CONFIG_FILES([Makefile src/Makefile src/wayland-server.pc src/wayland-client.pc -protocol/Makefile]) +protocol/Makefile + tests/Makefile]) AC_OUTPUT diff --git a/tests/Makefile.am b/tests/Makefile.am new file mode 100644 index 000..3b305c2 --- /dev/null +++ b/tests/Makefile.am @@ -0,0 +1,8 @@ + +TESTS = check-wayland-util + +check_PROGRAMS = check-wayland-util + +check_wayland_util_SOURCES = check-wayland-util.c +check_wayland_util_CFLAGS = @CHECK_CFLAGS@ -I$(top_builddir)/src/ -std=c99 +check_wayland_util_LDADD = $(top_builddir)/src/libwayland-util.la @CHECK_LIBS@ diff --git a/tests/check-wayland-util.c b/tests/check-wayland-util.c new file mode 100644 index 000..dda2f50 --- /dev/null +++ b/tests/check-wayland-util.c @@ -0,0 +1,107 @@ +#include +#include "wayland-check.h" + +WLD_START_TEST(test_wl_array_init) +{ +const int iterations = 4122; // this is arbitrary +// init array an arbitray amount of times +// and verify the defaults are sensible +for (int i = 0; i < iterations; ++i) +{ +struct wl_array array; +wl_array_init(&array); + +fail_unless(0 == array.size); +fail_unless(0 == array.alloc); +fail_unless(0 == array.data); +} +} +WLD_END_TEST + +WLD_START_TEST(test_wl_array_add) +{ +struct mydata { +int a; +unsignedb; +double c; +double d; +}; + +const int iterations = 1321; // this is arbitrary +const int datasize = sizeof(struct mydata); + +struct wl_array array; +wl_array_init(&array); + +// add some data +for (int i = 0; i < iterations; ++i) +{ +struct mydata* ptr = wl_array_add(&array, datasize); +fail_unless( (i + 1) * datasize == array.size); + +ptr->a = i * 3; +ptr->b = -i; +ptr->c = (double)(i); +ptr->d = (double)(i / 2.); +} + +// verify the data +for (int i = 0; i < iterations; ++i) +{ +const int index = datasize * i; +struct mydata* check = (struct mydata*)(array.data + index); +fail_unless(i*3 == check->a); +fail_unless(-i == check->b); +fail_unless((double)(i) == check->c); +fail_unless((double)(i/2.) == check->d); +} + +wl_array_release(&array); +} +WLD_END_TEST + +WLD_START_TEST(test_wl_array_copy) +{ +const int iterations = 1529; // this is arbitrary + +struct wl_array source; +wl_array_init(&source); + +// add some data +for (int i = 0; i < iterations; ++i) +{ +int *p = wl_array_add(&source, sizeof(int)); +*p = i * 2 + i; +} + +// copy the array +struct wl_array copy; +wl_array_copy(©, &source); + +// check the copy +for (int i = 0; i < iterations; ++i) +{ +const int index = sizeof(int) * i; +int *s = (int *)(source.data + index); +int *c = (int *)(copy.data + index); +fail_unless(*s == *c); // verify the values are the same +fail_if(s == c); // ensure the addresses aren't the same +fail_unless(i * 2 + i == *s); // sanity check +} + +wl_array_release(&source); +wl_array_release(©); +} +WLD_END_TEST + +// Add all the tests to a test suite +WLD_START_SUITE(util) +{ +WLD_SUITE_ADD_TEST(test_wl_array_init) +WLD_SUITE_ADD_TEST(test_wl_array_add) +WLD_SUITE_ADD_TEST(test_wl_array_copy) +} +WLD_END_SUITE + +// Generate test main +WLD_CHECK_MAIN(util) diff --git a/tests/wayland-check.h b/tests/wayland-check.h new file mode 100644 index 000..754afa2 --- /dev/null +++ b/tests/wayland-check.h @@ -0,0 +1,39 @@ +#ifndef WLD_CHECK_H +#define WLD_CHECK_H + +#include + +#define WLD_START_TEST(fname) \ +START_TEST (fname) + +#define WLD_END_TEST\ +END_TEST + +#define WLD_START_SUITE(name) \ +static Suite * wld_ ## name ## _suite (void)\ +{