[Ns-developers] Request for Merge -- Validation
Mathieu Lacage
mathieu.lacage at sophia.inria.fr
Wed May 6 02:54:52 PDT 2009
On Tue, 2009-05-05 at 19:18 -0700, Tom Henderson wrote:
> > 1) Changes to regression.py to allow non-trace-based tests. The files in
> > regression/tests work just like they used to, except if there's an attribute
> > called "trace_compare" in the test module. In this case, it tells
> > regression.py to just look at the return code from the test program. See
> > regression/tests/test-rng-exponential.py for an example.
>
> I'd prefer that we do not make trace-based comparison the default
> choice, as a hint to not lean on this mode of testing too much.
+1
>
> >
> > 2) There are four new .py files in regression/tests corresponding to the
> > tests for four of the rng distributions I socialized a while back.
> >
> > 3) There is a new valver (validation and verification) directory to hold
> > dedicated tests.
>
> I would prefer tests/ to valver/.
+1
> > 4) In the valver directory there is an rng directory in which you can find
> > four .cc files corresponding to the chi-square tests for the four
> > distributions.
> >
> > N.B. The rng validation tests introduce a GSL dependency.
> >
> > With this in place, we can begin to write validation and verification tests
> > that do not use the trace comparison function.
> >
>
> My main comment/question is that there doesn't seem to be any
> integration with the unit test framework, which could also be performing
> the rng checks you are doing.
>
> - what type of test should be run by ./waf check, and what type of test
> by ./waf --regression? I suppose that trace-based and python script
> tests are constrained to the python-based regression framework, but what
> is the guidance to give to people to put C++ test programs into the unit
> tests or into the python-based framework?
I am worried that the need to add a .py file for each new test, as well
as the need to write a main function for each new test increases the
cost of writing tests. I feel that we should try to lower the barrier to
writing tests as much as possible and that the current regression+valver
python-based wrappers increase too much the size of the barrier to write
tests.
> - can C++ tests in the new directory use the src/core/test.h framework
> including macros? Should we have an example along those lines?
I feel that src/core/test.h could indeed be used to write our new tests
but maybe it would make sense to consider the possibility of ditching
src/core/test.h altogether to use something easier to use such as
http://code.google.com/p/googletest/ (it should be a matter of dropping
gtest.h/cc in src/core). I would be fine with doing the work of porting
our existing tests to a new framework such as this one.
>
> It seems like it would be useful to have these additional examples
> available for ns-3.5:
> 1) deterministic model verification example such as a TCP example
> 2) python-based example script that doesn't rely on trace comparison
>
> but at this stage, it would be helpful to first resolve the ./waf check
> vs. ./waf regression question, and to get agreement that something like
A related question is, where do you put newly-written tests. Should new
tcp tests go in src/internet-stack/tcp-test.cc ? Should they go in
tests/tcp-test.cc ? or tests/internet-stack/tcp-test.cc. I would be fine
either way and would be happy to move the current unit tests somewhere
in tests/ if we feel that this is the way to go.
> your regression/tests/test-rng-exponential.py is the way to insert
> regression tests into the testing framework when using ./waf --regression.
Another important issue is that I feel we need to provide some kind of
simple-to-use API to check that a set of values match a specified
distribution for stochastic tests. Maybe something along those lines in
src/core/distribution-test.h:
class DistributionTest
{
public
void Add (double value);
bool IsGaussian (...);
bool IsPareto (...);
bool IsExponential (...);
bool IsUniform (...);
...
};
Since I personally don't understand the details of the code in craig's
tests (I don't understand why there are N runs, each with n ITERATIONS
rather than N*ITERATIONS iterations), I would love to see that extracted
into something I can reuse to work on wifi tests without having to open
a book on statistics and/or having to dig my rusty maths.
Mathieu
More information about the Ns-developers
mailing list