#ifdef __BORLANDC__
#include <condefs.h>
#endif
#include <time.h>           
#include <stdlib.h>           
#include <iSeeML/fwdPaths>
int main() 
{
  
  
  const int nbConfig = 1000; 
  
  
  
  const double xSize = 50, ySize = 50; 
  
  const double minTurnRadius = 5; 
  
  const double minTurnDist   = 5; 
  
  
#ifdef __BORLANDC__
  srand((unsigned int) time(NULL));
#else
  srandom((unsigned int) time(NULL));
#endif
  
  const int maxRnd = ~(01 << 31); 
  
  
  int i; 
#ifdef __BORLANDC__
#define random rand
#endif
  for(i = 0; i < nbConfig; i++) { 
    
    const double x = xSize * random() / maxRnd, 
      y  = ySize * random() / maxRnd, 
      th = (2.0 * random() / maxRnd - 1) * M_PI; 
    
  
  
  int j, nbPaths, nbShort; 
  double minRatio, maxRatio, ratioSum, squareSum;
  
  const double maxCurv = 1 / minTurnRadius; 
  
  const double maxCurvDeriv = maxCurv / minTurnDist; 
  
  
  double limDeflect, turnRadius, turnAngle; 
                     limDeflect, turnRadius, 
                     turnAngle); 
  
  for(i = 0, nbPaths = 0, nbShort = 0, minRatio = 2, 
    maxRatio = 1, ratioSum = 0, squareSum = 0; 
      i < nbConfig; i++) 
    for(j = 0; j < nbConfig; j++) 
      if (i != j) { 
    
    
                 maxCurvDeriv, limDeflect, 
                 turnRadius, turnAngle); 
    
    
    nbPaths++; 
    if (ratio <= 1.3)      nbShort++; 
    if (ratio < minRatio)  minRatio = ratio; 
    if (ratio > maxRatio)  maxRatio = ratio; 
    ratioSum  += ratio; 
    squareSum += ratio * ratio; } 
  
  const double mean = ratioSum / nbPaths, 
    variance = squareSum / nbPaths - mean * mean; 
  
  cout << "Mean of ratio on " << nbPaths << " computations: " 
       << mean << "; std deviation: " << sqrt(variance)
       << endl; 
  cout << " minimum: " << minRatio << "; maximum: " << maxRatio 
       << "; % under 1.3: " << (double)(nbShort) * 100 / nbPaths 
       << endl; 
#ifdef WIN32
  system(pause);
#endif
  return(0); 
}