25 #include <gsl/gsl_cdf.h> 
   26 #include <gsl/gsl_histogram.h> 
   27 #include <gsl/gsl_sf_zeta.h> 
   32 #include "ns3/boolean.h" 
   33 #include "ns3/double.h" 
   34 #include "ns3/string.h" 
   35 #include "ns3/integer.h" 
   37 #include "ns3/rng-seed-manager.h" 
   38 #include "ns3/random-variable-stream.h" 
   47   double increment = (end - 
start) / (n - 1.);
 
   50   for (uint32_t i = 0; i < n; ++i)
 
   65   static const uint32_t N_RUNS = 5;
 
   66   static const uint32_t N_BINS = 50;
 
   67   static const uint32_t N_MEASUREMENTS = 1000000;
 
   75   virtual void DoRun (
void);
 
   79   : 
TestCase (
"Uniform Random Variable Stream Generator")
 
   90   gsl_histogram * h = gsl_histogram_alloc (
N_BINS);
 
   94   gsl_histogram_set_ranges_uniform (h, 0., 1.);
 
   98       gsl_histogram_increment (h, u->
GetValue ());
 
  103   double expected = ((double)N_MEASUREMENTS / (
double)
N_BINS);
 
  105   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
  107       tmp[i] = gsl_histogram_get (h, i);
 
  113   gsl_histogram_free (h);
 
  115   double chiSquared = 0;
 
  117   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
  119       chiSquared += tmp[i];
 
  128   SeedManager::SetSeed (time (0));
 
  131   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, 
N_BINS);
 
  133   for (uint32_t i = 0; i < 
N_RUNS; ++i)
 
  140   sum /= (double)N_RUNS;
 
  184   virtual void DoRun (
void);
 
  188   : 
TestCase (
"Antithetic Uniform Random Variable Stream Generator")
 
  199   gsl_histogram * h = gsl_histogram_alloc (
N_BINS);
 
  203   gsl_histogram_set_ranges_uniform (h, 0., 1.);
 
  207       gsl_histogram_increment (h, u->
GetValue ());
 
  212   double expected = ((double)N_MEASUREMENTS / (
double)
N_BINS);
 
  214   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
  216       tmp[i] = gsl_histogram_get (h, i);
 
  222   gsl_histogram_free (h);
 
  224   double chiSquared = 0;
 
  226   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
  228       chiSquared += tmp[i];
 
  237   SeedManager::SetSeed (time (0));
 
  240   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, 
N_BINS);
 
  242   for (uint32_t i = 0; i < 
N_RUNS; ++i)
 
  253   sum /= (double)N_RUNS;
 
  297   virtual void DoRun (
void);
 
  301   : 
TestCase (
"Constant Random Variable Stream Generator")
 
  312   SeedManager::SetSeed (time (0));
 
  345   virtual void DoRun (
void);
 
  349   : 
TestCase (
"Sequential Random Variable Stream Generator")
 
  360   SeedManager::SetSeed (time (0));
 
  407   virtual void DoRun (
void);
 
  411   : 
TestCase (
"Normal Random Variable Stream Generator")
 
  422   gsl_histogram * h = gsl_histogram_alloc (
N_BINS);
 
  426   range[0] = -std::numeric_limits<double>::max ();
 
  427   range[
N_BINS] = std::numeric_limits<double>::max ();
 
  429   gsl_histogram_set_ranges (h, range, 
N_BINS + 1);
 
  438   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
  440       expected[i] = gsl_cdf_gaussian_P (range[i + 1], sigma) - gsl_cdf_gaussian_P (range[i], sigma);
 
  446       gsl_histogram_increment (h, n->
GetValue ());
 
  451   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
  453       tmp[i] = gsl_histogram_get (h, i);
 
  454       tmp[i] -= expected[i];
 
  456       tmp[i] /= expected[i];
 
  459   gsl_histogram_free (h);
 
  461   double chiSquared = 0;
 
  463   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
  465       chiSquared += tmp[i];
 
  474   SeedManager::SetSeed (time (0));
 
  477   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, 
N_BINS);
 
  479   for (uint32_t i = 0; i < 
N_RUNS; ++i)
 
  486   sum /= (double)N_RUNS;
 
  491   double variance = 2.0;
 
  510   double expectedMean = mean;
 
  533   virtual void DoRun (
void);
 
  537   : 
TestCase (
"Antithetic Normal Random Variable Stream Generator")
 
  548   gsl_histogram * h = gsl_histogram_alloc (
N_BINS);
 
  552   range[0] = -std::numeric_limits<double>::max ();
 
  553   range[
N_BINS] = std::numeric_limits<double>::max ();
 
  555   gsl_histogram_set_ranges (h, range, 
N_BINS + 1);
 
  564   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
  566       expected[i] = gsl_cdf_gaussian_P (range[i + 1], sigma) - gsl_cdf_gaussian_P (range[i], sigma);
 
  572       gsl_histogram_increment (h, n->
GetValue ());
 
  577   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
  579       tmp[i] = gsl_histogram_get (h, i);
 
  580       tmp[i] -= expected[i];
 
  582       tmp[i] /= expected[i];
 
  585   gsl_histogram_free (h);
 
  587   double chiSquared = 0;
 
  589   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
  591       chiSquared += tmp[i];
 
  600   SeedManager::SetSeed (time (0));
 
  603   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, 
N_BINS);
 
  605   for (uint32_t i = 0; i < 
N_RUNS; ++i)
 
  616   sum /= (double)N_RUNS;
 
  621   double variance = 2.0;
 
  643   double expectedMean = mean;
 
  666   virtual void DoRun (
void);
 
  670   : 
TestCase (
"Exponential Random Variable Stream Generator")
 
  681   gsl_histogram * h = gsl_histogram_alloc (
N_BINS);
 
  685   range[
N_BINS] = std::numeric_limits<double>::max ();
 
  687   gsl_histogram_set_ranges (h, range, 
N_BINS + 1);
 
  695   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
  697       expected[i] = gsl_cdf_exponential_P (range[i + 1], mu) - gsl_cdf_exponential_P (range[i], mu);
 
  703       gsl_histogram_increment (h, e->
GetValue ());
 
  708   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
  710       tmp[i] = gsl_histogram_get (h, i);
 
  711       tmp[i] -= expected[i];
 
  713       tmp[i] /= expected[i];
 
  716   gsl_histogram_free (h);
 
  718   double chiSquared = 0;
 
  720   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
  722       chiSquared += tmp[i];
 
  731   SeedManager::SetSeed (time (0));
 
  734   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, 
N_BINS);
 
  736   for (uint32_t i = 0; i < 
N_RUNS; ++i)
 
  743   sum /= (double)N_RUNS;
 
  786   virtual void DoRun (
void);
 
  790   : 
TestCase (
"Antithetic Exponential Random Variable Stream Generator")
 
  801   gsl_histogram * h = gsl_histogram_alloc (
N_BINS);
 
  805   range[
N_BINS] = std::numeric_limits<double>::max ();
 
  807   gsl_histogram_set_ranges (h, range, 
N_BINS + 1);
 
  815   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
  817       expected[i] = gsl_cdf_exponential_P (range[i + 1], mu) - gsl_cdf_exponential_P (range[i], mu);
 
  823       gsl_histogram_increment (h, e->
GetValue ());
 
  828   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
  830       tmp[i] = gsl_histogram_get (h, i);
 
  831       tmp[i] -= expected[i];
 
  833       tmp[i] /= expected[i];
 
  836   gsl_histogram_free (h);
 
  838   double chiSquared = 0;
 
  840   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
  842       chiSquared += tmp[i];
 
  851   SeedManager::SetSeed (time (0));
 
  854   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, 
N_BINS);
 
  856   for (uint32_t i = 0; i < 
N_RUNS; ++i)
 
  867   sum /= (double)N_RUNS;
 
  913   virtual void DoRun (
void);
 
  917   : 
TestCase (
"Pareto Random Variable Stream Generator")
 
  928   gsl_histogram * h = gsl_histogram_alloc (
N_BINS);
 
  932   range[
N_BINS] = std::numeric_limits<double>::max ();
 
  934   gsl_histogram_set_ranges (h, range, 
N_BINS + 1);
 
  942   double scale = mean * (shape - 1.0) / shape;
 
  944   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
  946       expected[i] = gsl_cdf_pareto_P (range[i + 1], shape, scale) - gsl_cdf_pareto_P (range[i], shape, scale);
 
  952       gsl_histogram_increment (h, p->
GetValue ());
 
  957   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
  959       tmp[i] = gsl_histogram_get (h, i);
 
  960       tmp[i] -= expected[i];
 
  962       tmp[i] /= expected[i];
 
  965   gsl_histogram_free (h);
 
  967   double chiSquared = 0;
 
  969   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
  971       chiSquared += tmp[i];
 
  980   SeedManager::SetSeed (time (0));
 
  983   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, 
N_BINS);
 
  985   for (uint32_t i = 0; i < 
N_RUNS; ++i)
 
  992   sum /= (double)N_RUNS;
 
  998   double scale = mean * (shape - 1.0) / shape;
 
 1024   double expectedMean = (shape * scale) / (shape - 1.0);
 
 1047   virtual void DoRun (
void);
 
 1051   : 
TestCase (
"Antithetic Pareto Random Variable Stream Generator")
 
 1062   gsl_histogram * h = gsl_histogram_alloc (
N_BINS);
 
 1064   double range[
N_BINS + 1];
 
 1066   range[
N_BINS] = std::numeric_limits<double>::max ();
 
 1068   gsl_histogram_set_ranges (h, range, 
N_BINS + 1);
 
 1076   double scale = mean * (shape - 1.0) / shape;
 
 1078   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
 1080       expected[i] = gsl_cdf_pareto_P (range[i + 1], shape, scale) - gsl_cdf_pareto_P (range[i], shape, scale);
 
 1086       gsl_histogram_increment (h, p->
GetValue ());
 
 1091   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
 1093       tmp[i] = gsl_histogram_get (h, i);
 
 1094       tmp[i] -= expected[i];
 
 1096       tmp[i] /= expected[i];
 
 1099   gsl_histogram_free (h);
 
 1101   double chiSquared = 0;
 
 1103   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
 1105       chiSquared += tmp[i];
 
 1114   SeedManager::SetSeed (time (0));
 
 1117   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, 
N_BINS);
 
 1119   for (uint32_t i = 0; i < 
N_RUNS; ++i)
 
 1130   sum /= (double)N_RUNS;
 
 1136   double scale = mean * (shape - 1.0) / shape;
 
 1166   double expectedMean = (shape * scale) / (shape - 1.0);
 
 1189   virtual void DoRun (
void);
 
 1193   : 
TestCase (
"Weibull Random Variable Stream Generator")
 
 1204   gsl_histogram * h = gsl_histogram_alloc (
N_BINS);
 
 1206   double range[
N_BINS + 1];
 
 1208   range[
N_BINS] = std::numeric_limits<double>::max ();
 
 1210   gsl_histogram_set_ranges (h, range, 
N_BINS + 1);
 
 1220   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
 1222       expected[i] = gsl_cdf_weibull_P (range[i + 1], a, b) - gsl_cdf_weibull_P (range[i], a, b);
 
 1228       gsl_histogram_increment (h, p->
GetValue ());
 
 1233   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
 1235       tmp[i] = gsl_histogram_get (h, i);
 
 1236       tmp[i] -= expected[i];
 
 1238       tmp[i] /= expected[i];
 
 1241   gsl_histogram_free (h);
 
 1243   double chiSquared = 0;
 
 1245   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
 1247       chiSquared += tmp[i];
 
 1256   SeedManager::SetSeed (time (0));
 
 1259   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, 
N_BINS);
 
 1261   for (uint32_t i = 0; i < 
N_RUNS; ++i)
 
 1268   sum /= (double)N_RUNS;
 
 1312   double expectedMean = scale;
 
 1335   virtual void DoRun (
void);
 
 1339   : 
TestCase (
"Antithetic Weibull Random Variable Stream Generator")
 
 1350   gsl_histogram * h = gsl_histogram_alloc (
N_BINS);
 
 1352   double range[
N_BINS + 1];
 
 1354   range[
N_BINS] = std::numeric_limits<double>::max ();
 
 1356   gsl_histogram_set_ranges (h, range, 
N_BINS + 1);
 
 1366   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
 1368       expected[i] = gsl_cdf_weibull_P (range[i + 1], a, b) - gsl_cdf_weibull_P (range[i], a, b);
 
 1374       gsl_histogram_increment (h, p->
GetValue ());
 
 1379   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
 1381       tmp[i] = gsl_histogram_get (h, i);
 
 1382       tmp[i] -= expected[i];
 
 1384       tmp[i] /= expected[i];
 
 1387   gsl_histogram_free (h);
 
 1389   double chiSquared = 0;
 
 1391   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
 1393       chiSquared += tmp[i];
 
 1402   SeedManager::SetSeed (time (0));
 
 1405   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, 
N_BINS);
 
 1407   for (uint32_t i = 0; i < 
N_RUNS; ++i)
 
 1418   sum /= (double)N_RUNS;
 
 1465   double expectedMean = scale;
 
 1488   virtual void DoRun (
void);
 
 1492   : 
TestCase (
"Log-Normal Random Variable Stream Generator")
 
 1503   gsl_histogram * h = gsl_histogram_alloc (
N_BINS);
 
 1505   double range[
N_BINS + 1];
 
 1507   range[
N_BINS] = std::numeric_limits<double>::max ();
 
 1509   gsl_histogram_set_ranges (h, range, 
N_BINS + 1);
 
 1519   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
 1521       expected[i] = gsl_cdf_lognormal_P (range[i + 1], mu, sigma) - gsl_cdf_lognormal_P (range[i], mu, sigma);
 
 1527       gsl_histogram_increment (h, n->
GetValue ());
 
 1532   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
 1534       tmp[i] = gsl_histogram_get (h, i);
 
 1535       tmp[i] -= expected[i];
 
 1537       tmp[i] /= expected[i];
 
 1540   gsl_histogram_free (h);
 
 1542   double chiSquared = 0;
 
 1544   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
 1546       chiSquared += tmp[i];
 
 1555   SeedManager::SetSeed (time (0));
 
 1558   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, 
N_BINS);
 
 1560   for (uint32_t i = 0; i < 
N_RUNS; ++i)
 
 1567   sum /= (double)N_RUNS;
 
 1596   double expectedMean = std::exp(mu + sigma * sigma / 2.0);
 
 1624   virtual void DoRun (
void);
 
 1628   : 
TestCase (
"Antithetic Log-Normal Random Variable Stream Generator")
 
 1639   gsl_histogram * h = gsl_histogram_alloc (
N_BINS);
 
 1641   double range[
N_BINS + 1];
 
 1643   range[
N_BINS] = std::numeric_limits<double>::max ();
 
 1645   gsl_histogram_set_ranges (h, range, 
N_BINS + 1);
 
 1655   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
 1657       expected[i] = gsl_cdf_lognormal_P (range[i + 1], mu, sigma) - gsl_cdf_lognormal_P (range[i], mu, sigma);
 
 1663       gsl_histogram_increment (h, n->
GetValue ());
 
 1668   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
 1670       tmp[i] = gsl_histogram_get (h, i);
 
 1671       tmp[i] -= expected[i];
 
 1673       tmp[i] /= expected[i];
 
 1676   gsl_histogram_free (h);
 
 1678   double chiSquared = 0;
 
 1680   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
 1682       chiSquared += tmp[i];
 
 1691   SeedManager::SetSeed (time (0));
 
 1694   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, 
N_BINS);
 
 1696   for (uint32_t i = 0; i < 
N_RUNS; ++i)
 
 1707   sum /= (double)N_RUNS;
 
 1739   double expectedMean = std::exp(mu + sigma * sigma / 2.0);
 
 1767   virtual void DoRun (
void);
 
 1771   : 
TestCase (
"Gamma Random Variable Stream Generator")
 
 1782   gsl_histogram * h = gsl_histogram_alloc (
N_BINS);
 
 1784   double range[
N_BINS + 1];
 
 1786   range[
N_BINS] = std::numeric_limits<double>::max ();
 
 1788   gsl_histogram_set_ranges (h, range, 
N_BINS + 1);
 
 1798   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
 1800       expected[i] = gsl_cdf_gamma_P (range[i + 1], alpha, beta) - gsl_cdf_gamma_P (range[i], alpha, beta);
 
 1806       gsl_histogram_increment (h, n->
GetValue ());
 
 1811   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
 1813       tmp[i] = gsl_histogram_get (h, i);
 
 1814       tmp[i] -= expected[i];
 
 1816       tmp[i] /= expected[i];
 
 1819   gsl_histogram_free (h);
 
 1821   double chiSquared = 0;
 
 1823   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
 1825       chiSquared += tmp[i];
 
 1834   SeedManager::SetSeed (time (0));
 
 1837   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, 
N_BINS);
 
 1839   for (uint32_t i = 0; i < 
N_RUNS; ++i)
 
 1846   sum /= (double)N_RUNS;
 
 1873   double expectedMean = alpha * beta;
 
 1896   virtual void DoRun (
void);
 
 1900   : 
TestCase (
"Antithetic Gamma Random Variable Stream Generator")
 
 1911   gsl_histogram * h = gsl_histogram_alloc (
N_BINS);
 
 1913   double range[
N_BINS + 1];
 
 1915   range[
N_BINS] = std::numeric_limits<double>::max ();
 
 1917   gsl_histogram_set_ranges (h, range, 
N_BINS + 1);
 
 1927   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
 1929       expected[i] = gsl_cdf_gamma_P (range[i + 1], alpha, beta) - gsl_cdf_gamma_P (range[i], alpha, beta);
 
 1935       gsl_histogram_increment (h, n->
GetValue ());
 
 1940   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
 1942       tmp[i] = gsl_histogram_get (h, i);
 
 1943       tmp[i] -= expected[i];
 
 1945       tmp[i] /= expected[i];
 
 1948   gsl_histogram_free (h);
 
 1950   double chiSquared = 0;
 
 1952   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
 1954       chiSquared += tmp[i];
 
 1963   SeedManager::SetSeed (time (0));
 
 1966   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, 
N_BINS);
 
 1968   for (uint32_t i = 0; i < 
N_RUNS; ++i)
 
 1979   sum /= (double)N_RUNS;
 
 2010   double expectedMean = alpha * beta;
 
 2033   virtual void DoRun (
void);
 
 2037   : 
TestCase (
"Erlang Random Variable Stream Generator")
 
 2048   gsl_histogram * h = gsl_histogram_alloc (
N_BINS);
 
 2050   double range[
N_BINS + 1];
 
 2052   range[
N_BINS] = std::numeric_limits<double>::max ();
 
 2054   gsl_histogram_set_ranges (h, range, 
N_BINS + 1);
 
 2062   double lambda = 1.0;
 
 2067   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
 2069       expected[i] = gsl_cdf_gamma_P (range[i + 1], k, lambda) - gsl_cdf_gamma_P (range[i], k, lambda);
 
 2075       gsl_histogram_increment (h, n->
GetValue ());
 
 2080   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
 2082       tmp[i] = gsl_histogram_get (h, i);
 
 2083       tmp[i] -= expected[i];
 
 2085       tmp[i] /= expected[i];
 
 2088   gsl_histogram_free (h);
 
 2090   double chiSquared = 0;
 
 2092   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
 2094       chiSquared += tmp[i];
 
 2103   SeedManager::SetSeed (time (0));
 
 2106   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, 
N_BINS);
 
 2108   for (uint32_t i = 0; i < 
N_RUNS; ++i)
 
 2115   sum /= (double)N_RUNS;
 
 2120   double lambda = 2.0;
 
 2142   double expectedMean = k * lambda;
 
 2165   virtual void DoRun (
void);
 
 2169   : 
TestCase (
"Antithetic Erlang Random Variable Stream Generator")
 
 2180   gsl_histogram * h = gsl_histogram_alloc (
N_BINS);
 
 2182   double range[
N_BINS + 1];
 
 2184   range[
N_BINS] = std::numeric_limits<double>::max ();
 
 2186   gsl_histogram_set_ranges (h, range, 
N_BINS + 1);
 
 2194   double lambda = 1.0;
 
 2199   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
 2201       expected[i] = gsl_cdf_gamma_P (range[i + 1], k, lambda) - gsl_cdf_gamma_P (range[i], k, lambda);
 
 2207       gsl_histogram_increment (h, n->
GetValue ());
 
 2212   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
 2214       tmp[i] = gsl_histogram_get (h, i);
 
 2215       tmp[i] -= expected[i];
 
 2217       tmp[i] /= expected[i];
 
 2220   gsl_histogram_free (h);
 
 2222   double chiSquared = 0;
 
 2224   for (uint32_t i = 0; i < 
N_BINS; ++i)
 
 2226       chiSquared += tmp[i];
 
 2235   SeedManager::SetSeed (time (0));
 
 2238   double maxStatistic = gsl_cdf_chisq_Qinv (0.05, 
N_BINS);
 
 2240   for (uint32_t i = 0; i < 
N_RUNS; ++i)
 
 2251   sum /= (double)N_RUNS;
 
 2256   double lambda = 2.0;
 
 2282   double expectedMean = k * lambda;
 
 2301   virtual void DoRun (
void);
 
 2305   : 
TestCase (
"Zipf Random Variable Stream Generator")
 
 2316   SeedManager::SetSeed (time (0));
 
 2364   double expectedMean = 1.0;
 
 2383   virtual void DoRun (
void);
 
 2387   : 
TestCase (
"Antithetic Zipf Random Variable Stream Generator")
 
 2398   SeedManager::SetSeed (time (0));
 
 2449   double expectedMean = 1.0;
 
 2468   virtual void DoRun (
void);
 
 2472   : 
TestCase (
"Zeta Random Variable Stream Generator")
 
 2483   SeedManager::SetSeed (time (0));
 
 2513   double expectedMean = gsl_sf_zeta_int (alpha - 1) / gsl_sf_zeta_int (alpha);
 
 2532   virtual void DoRun (
void);
 
 2536   : 
TestCase (
"Antithetic Zeta Random Variable Stream Generator")
 
 2547   SeedManager::SetSeed (time (0));
 
 2580   double expectedMean = gsl_sf_zeta_int (alpha - 1) / gsl_sf_zeta_int (alpha);
 
 2599   virtual void DoRun (
void);
 
 2603   : 
TestCase (
"Deterministic Random Variable Stream Generator")
 
 2614   SeedManager::SetSeed (time (0));
 
 2622   double array1 [] = { 4, 4, 7, 7, 10, 10};
 
 2623   uint64_t count1 = 6;
 
 2646   double array2 [] = { 1000, 2000, 3000, 4000};
 
 2647   uint64_t count2 = 4;
 
 2674   virtual void DoRun (
void);
 
 2678   : 
TestCase (
"Empirical Random Variable Stream Generator")
 
 2689   SeedManager::SetSeed (time (0));
 
 2712   double expectedMean = 5.0;
 
 2731   virtual void DoRun (
void);
 
 2735   : 
TestCase (
"EmpiricalAntithetic Random Variable Stream Generator")
 
 2746   SeedManager::SetSeed (time (0));
 
 2772   double expectedMean = 5.0;
 
 2786   : 
TestSuite (
"random-variable-stream-generators", UNIT)
 
static const uint32_t N_MEASUREMENTS
 
virtual ~RandomVariableStreamExponentialAntitheticTestCase()
 
static const uint32_t N_MEASUREMENTS
 
static const uint32_t N_RUNS
 
virtual double GetValue(void)
Returns the next value in the empirical distribution. 
 
double GetValue(double constant)
Returns the value passed in. 
 
static const uint32_t N_RUNS
 
double ChiSquaredTest(Ptr< LogNormalRandomVariable > n)
 
void FillHistoRangeUniformly(double *array, uint32_t n, double start, double end)
 
RandomVariableStreamLogNormalAntitheticTestCase()
 
virtual ~RandomVariableStreamZipfTestCase()
 
RandomVariableStreamGammaTestCase()
 
static const uint32_t N_RUNS
 
virtual ~RandomVariableStreamExponentialTestCase()
 
virtual ~RandomVariableStreamZetaAntitheticTestCase()
 
hold variables of type string 
 
#define NS_TEST_ASSERT_MSG_EQ_TOL(actual, limit, tol, msg)
Test that actual and expected (limit) values are equal to plus or minus some tolerance and report and...
 
static RandomVariableStreamTestSuite randomVariableStreamTestSuite
 
RandomVariableStreamExponentialAntitheticTestCase()
 
virtual ~RandomVariableStreamGammaTestCase()
 
static const uint32_t N_RUNS
 
RandomVariableStreamTestSuite()
 
static const uint32_t N_RUNS
 
RandomVariableStreamParetoAntitheticTestCase()
 
virtual ~RandomVariableStreamEmpiricalTestCase()
 
static const uint32_t N_MEASUREMENTS
 
static const uint32_t N_RUNS
 
double ChiSquaredTest(Ptr< LogNormalRandomVariable > n)
 
virtual ~RandomVariableStreamLogNormalAntitheticTestCase()
 
static const uint32_t N_MEASUREMENTS
 
Hold a signed integer type. 
 
double GetValue(uint32_t k, double lambda)
Returns a random double from an Erlang distribution with the specified k and lambda. 
 
RandomVariableStreamExponentialTestCase()
 
virtual ~RandomVariableStreamErlangAntitheticTestCase()
 
double GetValue(double mean, double shape, double bound)
Returns a random double from a Pareto distribution with the specified mean, shape, and upper bound. 
 
static const uint32_t N_BINS
 
virtual void DoRun(void)
Implementation to actually run this TestCase. 
 
double GetValue(double mean, double variance, double bound=NormalRandomVariable::INFINITE_VALUE)
Returns a random double from a normal distribution with the specified mean, variance, and bound. 
 
#define NS_TEST_ASSERT_MSG_NE(actual, limit, msg)
Test that an actual and expected (limit) value are not equal and report and abort if not...
 
double GetValue(double alpha)
Returns a random double from a zeta distribution with the specified alpha. 
 
RandomVariableStreamConstantTestCase()
 
double ChiSquaredTest(Ptr< NormalRandomVariable > n)
 
double ChiSquaredTest(Ptr< ExponentialRandomVariable > e)
 
static const uint32_t N_BINS
 
static const uint32_t N_MEASUREMENTS
 
double ChiSquaredTest(Ptr< ExponentialRandomVariable > e)
 
double ChiSquaredTest(Ptr< WeibullRandomVariable > p)
 
virtual void DoRun(void)
Implementation to actually run this TestCase. 
 
virtual void DoRun(void)
Implementation to actually run this TestCase. 
 
static const uint32_t N_BINS
 
static const uint32_t N_RUNS
 
static const uint32_t N_RUNS
 
static const uint32_t N_BINS
 
static const uint32_t N_RUNS
 
virtual void DoRun(void)
Implementation to actually run this TestCase. 
 
static const uint32_t N_BINS
 
virtual ~RandomVariableStreamZipfAntitheticTestCase()
 
virtual ~RandomVariableStreamGammaAntitheticTestCase()
 
virtual double GetValue(void)
Returns the next value in the sequence returned by this RNG stream. 
 
static const double TOLERANCE
 
static const uint32_t N_MEASUREMENTS
 
static const uint32_t N_MEASUREMENTS
 
RandomVariableStreamWeibullTestCase()
 
RandomVariableStreamZetaTestCase()
 
virtual ~RandomVariableStreamNormalTestCase()
 
RandomVariableStreamZipfAntitheticTestCase()
 
virtual double GetValue(void)
Returns the next value in the sequence. 
 
double ChiSquaredTest(Ptr< ErlangRandomVariable > n)
 
static const uint32_t N_MEASUREMENTS
 
static const uint32_t N_RUNS
 
virtual void DoRun(void)
Implementation to actually run this TestCase. 
 
static const uint32_t N_BINS
 
static const uint32_t N_BINS
 
double GetValue(double alpha, double beta)
Returns a random double from a gamma distribution with the specified alpha and beta. 
 
void CDF(double v, double c)
Specifies a point in the empirical distribution. 
 
virtual ~RandomVariableStreamNormalAntitheticTestCase()
 
static const uint32_t N_MEASUREMENTS
 
static const uint32_t N_BINS
 
virtual void DoRun(void)
Implementation to actually run this TestCase. 
 
RandomVariableStreamZipfTestCase()
 
static const uint32_t N_BINS
 
static const uint32_t N_MEASUREMENTS
 
static const uint32_t N_BINS
 
double ChiSquaredTest(Ptr< GammaRandomVariable > n)
 
RandomVariableStreamZetaAntitheticTestCase()
 
virtual void DoRun(void)
Implementation to actually run this TestCase. 
 
static const uint32_t N_RUNS
 
static const double TOLERANCE
 
virtual void DoRun(void)
Implementation to actually run this TestCase. 
 
double ChiSquaredTest(Ptr< NormalRandomVariable > n)
 
virtual void DoRun(void)
Implementation to actually run this TestCase. 
 
virtual void DoRun(void)
Implementation to actually run this TestCase. 
 
virtual void DoRun(void)
Implementation to actually run this TestCase. 
 
virtual ~RandomVariableStreamErlangTestCase()
 
virtual void DoRun(void)
Implementation to actually run this TestCase. 
 
double GetValue(double mu, double sigma)
Returns a random double from a log-normal distribution with the specified mu and sigma. 
 
virtual void DoRun(void)
Implementation to actually run this TestCase. 
 
static const uint32_t N_MEASUREMENTS
 
virtual ~RandomVariableStreamWeibullTestCase()
 
RandomVariableStreamNormalAntitheticTestCase()
 
RandomVariableStreamSequentialTestCase()
 
void SetValueArray(double *values, uint64_t length)
Sets the array of values that holds the predetermined sequence. 
 
virtual ~RandomVariableStreamParetoTestCase()
 
virtual void DoRun(void)
Implementation to actually run this TestCase. 
 
virtual ~RandomVariableStreamLogNormalTestCase()
 
virtual void DoRun(void)
Implementation to actually run this TestCase. 
 
static const uint32_t N_MEASUREMENTS
 
void AddTestCase(TestCase *testCase) NS_DEPRECATED
Add an individual child TestCase case to this TestCase. 
 
static const uint32_t N_BINS
 
double ChiSquaredTest(Ptr< WeibullRandomVariable > p)
 
virtual ~RandomVariableStreamParetoAntitheticTestCase()
 
double ChiSquaredTest(Ptr< GammaRandomVariable > n)
 
RandomVariableStreamDeterministicTestCase()
 
static const uint32_t N_BINS
 
static const uint32_t N_BINS
 
static const uint32_t N_MEASUREMENTS
 
virtual void DoRun(void)
Implementation to actually run this TestCase. 
 
virtual void DoRun(void)
Implementation to actually run this TestCase. 
 
virtual void DoRun(void)
Implementation to actually run this TestCase. 
 
static const uint32_t N_MEASUREMENTS
 
RandomVariableStreamErlangAntitheticTestCase()
 
virtual ~RandomVariableStreamZetaTestCase()
 
virtual ~RandomVariableStreamEmpiricalAntitheticTestCase()
 
static const uint32_t N_MEASUREMENTS
 
RandomVariableStreamErlangTestCase()
 
double ChiSquaredTest(Ptr< ParetoRandomVariable > p)
 
RandomVariableStreamEmpiricalTestCase()
 
RandomVariableStreamWeibullAntitheticTestCase()
 
static const uint32_t N_MEASUREMENTS
 
static const uint32_t N_RUNS
 
static const uint32_t N_RUNS
 
static const uint32_t N_MEASUREMENTS
 
virtual ~RandomVariableStreamWeibullAntitheticTestCase()
 
double GetValue(double mean, double bound)
Returns a random double from an exponential distribution with the specified mean and upper bound...
 
#define NS_TEST_ASSERT_MSG_LT(actual, limit, msg)
Test that an actual value is less than a limit and report and abort if not. 
 
RandomVariableStreamParetoTestCase()
 
virtual void DoRun(void)
Implementation to actually run this TestCase. 
 
static const double TOLERANCE
 
double ChiSquaredTest(Ptr< ParetoRandomVariable > p)
 
virtual void DoRun(void)
Implementation to actually run this TestCase. 
 
virtual void DoRun(void)
Implementation to actually run this TestCase. 
 
RandomVariableStreamNormalTestCase()
 
virtual void DoRun(void)
Implementation to actually run this TestCase. 
 
RandomVariableStreamLogNormalTestCase()
 
static const uint32_t N_BINS
 
double GetValue(uint32_t n, double alpha)
Returns a random double from a Zipf distribution with the specified n and alpha. 
 
Hold a floating point type. 
 
static const uint32_t N_MEASUREMENTS
 
void SetAttribute(std::string name, const AttributeValue &value)
 
virtual ~RandomVariableStreamConstantTestCase()
 
RandomVariableStreamEmpiricalAntitheticTestCase()
 
static const uint32_t N_RUNS
 
static const uint32_t N_MEASUREMENTS
 
virtual void DoRun(void)
Implementation to actually run this TestCase. 
 
double ChiSquaredTest(Ptr< ErlangRandomVariable > n)
 
double GetValue(double scale, double shape, double bound)
Returns a random double from a Weibull distribution with the specified scale, shape, and upper bound. 
 
virtual ~RandomVariableStreamDeterministicTestCase()
 
RandomVariableStreamGammaAntitheticTestCase()
 
virtual ~RandomVariableStreamSequentialTestCase()
 
#define NS_TEST_ASSERT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report and abort if not. 
 
static const uint32_t N_MEASUREMENTS
 
static const uint32_t N_MEASUREMENTS