#ifndef RANDOMTEST_H
#define RANDOMTEST_H

#include <list>
using namespace std;

#include <typedefs.h>

/*!
\brief Test the random classes.
*/
class randomtest
{
public:

  /** Test random11<>. */
  static int test01();
  /** Test random00<>. */
  static int test02();
  /** Test random10<>. */
  static int test03();
  /** Test random01<>. */
  static int test04();

  static int test05();
  static void test06();
  static void test07();

  /** Test interval 0 to 1 optionally with end points. */
//  template< typename T >
//  static boolc domain(T const x, boolc zero, boolc one);

  /** Returns true if elements enpoints are correct. */
  template< typename R >
  static boolc testprintrandom
  ( 
    R & r, 
    uintc n,
    boolc zero,
    boolc one 
  );

  /** \brief Test for out of bounds cases.
  The opposite testing for is harder as their is no 
    garantee that [0,1] would produce a 0 element.
  */
  template< typename R >
  static boolc domaintest
  (
    list< typename R::Ttype > & lst,
    R const & r, 
    boolc zero,
    boolc one
  );

  /** Returns true if elements enpoints are correct. */
  template< typename R >
  static boolc randomcontainer 
  ( 
    list< typename R::Ttype > & lst,
    R & r, 
    uintc n,
    boolc zero,
    boolc one 
  );

};


#endif


