Jo Shields a575963da9 Imported Upstream version 3.6.0
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
2014-08-13 10:39:27 +01:00

114 lines
3.3 KiB
Plaintext

EGlib Unit Testing
===============================================================================
1. Writing new tests
2. Using the test driver
===============================================================================
1. Writing new tests
===============================================================================
Tests are easy to write, but must be grouped in to logical cases. For instance,
the GPtrArray group has a number of tests that cover the entire GPtrArray
implementation.
These logical case groups should be in a single C file, and must have
three elements:
#include <glib.h>
#include "test.h"
...
<define test implementations>
...
static Test groupname_tests [] = {
{"groupname_test1", groupname_test1},
{"groupname_test1", groupname_test2},
{NULL, NULL}
};
DEFINE_TEST_GROUP_INIT(groupname_tests_init, groupname_tests)
A test implementation should look like:
RESULT groupname_test1()
{
<perform the test>
if(test_failed) {
return FAILED("reason: %s", "this works like printf");
}
return OK; /* just NULL, but OK is cute */
}
Once a test group is written, it needs to be added to the groups table
in tests.h:
DEFINE_TEST_GROUP_INIT_H(groupname_tests_init) // same as in impl
static Group test_groups [] = {
...
{"groupname", groupname_tests_init}
...
};
===============================================================================
2. Using the test driver
===============================================================================
When tests are written, they are rebuilt with make. Two programs will be
built:
test-eglib: the test driver and tests linked against eglib
test-glib: the test driver and tests linked against system glib-2.0
Each driver program works exactly the same. Running test-eglib will run
the tests against eglib, and test-glib against glib-2.0.
The test driver supports a few options to allow for performance measuring:
--help show all options and available test groups
--time time the overall run and report it, even if --quiet is set
--quiet do not print test results, useful for timing
--iterations N run all or specified test groups N times
Run "test-eglib --help" for more details.
Example: run the ptrarray test group 100000 times and only print the time
it took to perform all iterations
./test-eglib -tqi 100000 ptrarray
Example: show single iteration of test output for two groups
./test-eglib ptrarray hashtable
Example: show test output of all available groups
./test-eglib
The 'test-both' script can be used to run both test-eglib and test-glib
with the same options back to back:
$ ./test-both -tqi 100000 ptrarray
EGlib Total Time: 1.1961s
GLib Total Time: 0.955957s
test-both also has a nice --speed-compare mode that shows comparison
information about EGlib vs GLib. It can run all tests or specific tests
with a configurable number of iterations. --speed-compare mode always runs
the drivers with -qtni
The syntax for --speed-compare is:
./test-both --speed-compare [ITERATIONS] [GROUPS...]
$ ./test-both --speed-compare Runs all tests with default iterations
$ ./test-both --speed-compare 500 Runs all tests with 500 iterations
$ ./test-both --speed-compare ptrarray Runs ptrarray test with default
iterations