@c ========================================================================
@c How to write tests
@c ========================================================================

@node How to write tests
@chapter How to write tests

A primary goal of the ns-3 project is to help users to improve the 
validity and credibility of their results.  There are many elements
to obtaining valid models and simulations, and testing is a major
component.  If you contribute models or examples to ns-3, you may
be asked to contribute test code.  Models that you contribute will be
used for many years by other people, who probably have no idea upon
first glance whether the model is correct.  The test code that you
write for your model will help to avoid future regressions in
the output and will aid future users in understanding the validity
and bounds of applicability of your models.

There are many ways to test that a model is valid.  In this chapter,
we hope to cover some common cases that can be used as a guide to
writing new tests.

@section Sample TestSuite skeleton

When starting from scratch (i.e. not adding a TestCase to an existing
TestSuite), these things need to be decided up front:

@itemize @bullet
@item What the test suite will be called 
@item What type of test it will be (Build Verification Test, Unit Test,
System Test, or Performance Test)
@item Where the test code will live (either in an existing ns-3 module or
separately in src/test/ directory).  You will have to edit the wscript
file in that directory to compile your new code, if it is a new file.
@end itemize

See the file @code{src/test/sample-test-suite.cc} and corresponding
wscript file in that directory for a simple example, and see the directories
under @code{src/test} for more complicated examples.

@cartouche
@emph{The rest of this chapter remains to be written}
@end cartouche

@section How to add an example program to the test suite

@section Testing for boolean outcomes

@section Testing outcomes when randomness is involved

@section Testing output data against a known distribution

@section Providing non-trivial input vectors of data

@section Storing and referencing non-trivial output data

@section Presenting your output test data

