9#include <framework/utilities/ConditionalGaussGenerator.h>
10#include <framework/utilities/MultivariateNormalGenerator.h>
13#include <gtest/gtest.h>
21 class GaussGeneratorsTests :
public ::testing::Test {
25 virtual void SetUp() { }
28 virtual void TearDown() { }
33 TEST_F(GaussGeneratorsTests, Generator6DTest)
35 Eigen::MatrixXd cov(6, 6);
38 for (
int i = 0; i < 6; ++i)
39 for (
int j = 0; j < 6; ++j)
40 cov(i, j) = gRandom->PoissonD(20) - 20;
43 cov *= cov.transpose();
46 Eigen::VectorXd mu(6);
47 mu << 3, 0, -2, 7, -5, -1;
54 Eigen::VectorXd muS = Eigen::VectorXd::Zero(6);
55 Eigen::MatrixXd covS = Eigen::MatrixXd::Zero(6, 6);
56 for (
int i = 0; i < N; ++i) {
58 Eigen::VectorXd x = gen.generate();
60 covS += (x - mu) * (x - mu).transpose() / N;
64 EXPECT_NEAR((muS - mu).squaredNorm(), 0.0, 1e-2);
65 EXPECT_NEAR((covS - cov).squaredNorm(), 0.0, 5e-2);
71 TEST_F(GaussGeneratorsTests, ConditionalGenerator2DTest)
74 Eigen::MatrixXd cov(2, 2);
79 Eigen::VectorXd mu(2);
87 Eigen::VectorXd muS = Eigen::VectorXd::Zero(2);
88 Eigen::MatrixXd covS = Eigen::MatrixXd::Zero(2, 2);
89 for (
int i = 0; i < N; ++i) {
91 double x0 = gRandom->Gaus(mu[0],
sqrt(cov(0, 0)));
94 Eigen::VectorXd x = gen.generate(x0);
96 covS += (x - mu) * (x - mu).transpose() / N;
100 EXPECT_NEAR((muS - mu).squaredNorm(), 0.0, 1e-3);
101 EXPECT_NEAR((covS - cov).squaredNorm(), 0.0, 1e-3);
106 TEST_F(GaussGeneratorsTests, ConditionalGenerator6DTest)
108 Eigen::MatrixXd cov(6, 6);
111 for (
int i = 0; i < 6; ++i)
112 for (
int j = 0; j < 6; ++j)
113 cov(i, j) = gRandom->PoissonD(20) - 20;
116 cov *= cov.transpose();
119 Eigen::VectorXd mu(6);
120 mu << 3, 0, -2, 7, -5, -1;
127 Eigen::VectorXd muS = Eigen::VectorXd::Zero(6);
128 Eigen::MatrixXd covS = Eigen::MatrixXd::Zero(6, 6);
129 for (
int i = 0; i < N; ++i) {
131 double x0 = gRandom->Gaus(mu[0],
sqrt(cov(0, 0)));
134 Eigen::VectorXd x = gen.generate(x0);
136 covS += (x - mu) * (x - mu).transpose() / N;
140 EXPECT_NEAR((muS - mu).squaredNorm(), 0.0, 1e-2);
141 EXPECT_NEAR((covS - cov).squaredNorm(), 0.0, 5e-2);
Class implementing n-dimensional random number generator from Gaussian distribution where the first c...
Class to generate normal distributed, correlated random numbers given the mean values and the covaria...
double sqrt(double a)
sqrt for double
Abstract base class for different kinds of events.