SimGrid: Unit testing support

SimGrid 3.10 Versatile Simulation of Distributed Systems

- Home page
- Online documentation
- Dev's Corner

All Data Structures Functions Variables Typedefs Enumerations Enumerator Groups Pages
Macros | Functions
Unit testing support
Grounding features

Unit test mechanism (to test a set of functions) More...

## Macros
#define | XBT_TEST_SUITE(suite_name, suite_title)
| Provide informations about the suite declared in this file.
#define | XBT_TEST_UNIT(name, func, title)
| Declare a new test units (containing individual tests)
#define | xbt_test_add(...)
| Declare that a new test begins (printf-like parameters, describing the test)
#define | xbt_test_fail(...)
| Declare that the lastly started test failed (printf-like parameters, describing failure cause)
#define | xbt_test_assert(...)
| The lastly started test is actually an assert.

## Functions
void | xbt_test_exception (xbt_ex_t e)
| Declare that the lastly started test failed because of the provided exception.
void | xbt_test_expect_failure (void)
| Declare that the lastly started test was expected to fail (and actually failed)
void | xbt_test_skip (void)
| Declare that the lastly started test should be skiped today.

## Detailed Description

Unit test mechanism (to test a set of functions)

This module is mainly intended to allow the tests of SimGrid itself and may lack the level of genericity that you would expect as a user. Only use it in external projects at your own risk (but it work rather well for us). We play with the idea of migrating to an external solution for our unit tests, possibly offering more features, but having absolutely no dependencies is a nice feature of SimGrid (and this code is sufficient to cover our needs, actually, so why should we bother switching?)

Note that if you want to test a full binary (such as an example), you want to use our integration testing mechanism, not our unit testing one. Please refer to Section Integration testing in SimGrid

Some more information on our unit testing is available in Section Unit testing in SimGrid.

All code intended to be executed as a unit test will be extracted by a script (tools/sg_unit_extract.pl), and must thus be protected between preprocessor definitions, as follows. Note that SIMGRID_TEST string must appear on the endif line too for the script to work, and that this script does not allow to have more than one suite per file. For now, but patches are naturally welcome.

    #ifdef SIMGRID_TEST

    <your code>

    #endif  // SIMGRID_TEST

## Macro Definition Documentation

#define XBT_TEST_SUITE | ( |  | suite_name,
|  |  | suite_title
| ) |  |

Provide informations about the suite declared in this file.

Actually, this macro is not used by C, but by the script extracting the test units, but that should be transparent for you.

Parameters

  suite_name | the short name of this suite, to be used in the –tests argument of testall afterward. Avoid spaces and any other strange chars
  suite_title | instructive title that testall should display when your suite is run

#define XBT_TEST_UNIT | ( |  | name,
|  |  | func,
|  |  | title
| ) |  |

Declare a new test units (containing individual tests)

Parameters

  name | the short name that will be used in test all to enable/disable this test
  func | a valid function name that will be used to contain all code of this unit
  title | human informative description of your test (displayed in testall)

#define xbt_test_assert | ( |  | ... | ) |

The lastly started test is actually an assert.

- If provided a uniq parameter, this is assumed to be a condition that is expected to be true
- If provided more parameters, the first one is a condition, and the other ones are printf-like arguments that are to be displayed when the condition fails.