//
// source.cpp
//
// This program is supposed to test the source classes
//
// source_test.cpp,v 1.5 2004/09/05 03:28:28 emwjohb Exp
//
#include <iostream>
#include <iomanip>
#include "base/matfunc.h"
#include "base/random.h"
#include "base/source.h"
#include "base/stat.h"
using std::cout;
using std::endl;
using namespace itpp;
#define N 100000
using namespace std;
void show(const char *name, double sm, double sv)
{
cout << setw(20) << name << " "
<< setw(12) << sm << " "
<< setw(12) << sv << endl;
}
void show(const char *name, complex<double> sm, double sv)
{
cout << setw(20) << name << " "
<< setw(12) << sm << " "
<< setw(12) << sv << endl;
}
#define REALRUN(name,s) \
for (i=0; i<N; i++) \
real_result(i) = s(); \
show(name,mean(real_result),variance(real_result));
#define COMPLEXRUN(name,s) \
for (i=0; i<N; i++) \
complex_result(i) = s(); \
show(name,mean(complex_result),variance(complex_result));
int main()
{
int i;
vec real_result;
cvec complex_result;
Uniform_RNG s0;
Exponential_RNG s1;
Normal_RNG s2;
Weibull_RNG s3;
Rayleigh_RNG s4;
I_Uniform_RNG s5(3, 8);
AR1_Normal_RNG s6(2.0, 1.0, 0.95);
Complex_Normal_RNG s7;
Sine_Source s10(20.0/N);
Square_Source s11(20.0/N);
Triangle_Source s12(20.0/N);
Sawtooth_Source s13(20.0/N);
Impulse_Source s14(20.0/N);
Pattern_Source s15(vec("1 3"));
RNG_reset(12345);
cout << setw(20) << "Source" << " "
<< setw(12) << "sim mean" << " "
<< setw(12) << "sim var" << endl;
for (int i=0; i<20+4*14; i++)
cout << '=';
cout << endl;
real_result.set_size(N,false);
complex_result.set_size(N,false);
REALRUN("Uniform", s0);
REALRUN("Exponential", s1);
REALRUN("Normal", s2);
REALRUN("Weibull", s3);
REALRUN("Rayleigh", s4);
REALRUN("I_Uniform", s5);
REALRUN("AR1_Normal", s6);
COMPLEXRUN("Complex_Normal", s7);
REALRUN("Sine", s10);
REALRUN("Square", s11);
REALRUN("Triangle", s12);
REALRUN("Sawtooth", s13);
REALRUN("Impulse", s14);
REALRUN("Pattern", s15);
return 0;
}
syntax highlighted by Code2HTML, v. 0.9.1