-
-
Notifications
You must be signed in to change notification settings - Fork 378
Expand file tree
/
Copy pathvar_adaptation_test.cpp
More file actions
37 lines (28 loc) · 1.08 KB
/
var_adaptation_test.cpp
File metadata and controls
37 lines (28 loc) · 1.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stan/mcmc/var_adaptation.hpp>
#include <test/unit/services/instrumented_callbacks.hpp>
#include <gtest/gtest.h>
TEST(McmcVarAdaptation, learn_variance) {
stan::test::unit::instrumented_logger logger;
const int n = 10;
Eigen::VectorXd q = Eigen::VectorXd::Zero(n);
Eigen::VectorXd var(Eigen::VectorXd::Zero(n));
const int n_learn = 10;
Eigen::VectorXd target_var(Eigen::VectorXd::Ones(n));
target_var *= 1e-3 * 5.0 / (n_learn + 5.0);
stan::mcmc::var_adaptation adapter(n);
adapter.set_window_params(30, 0, 0, n_learn, logger);
for (int i = 0; i < n_learn - 1; ++i) {
EXPECT_FALSE(adapter.learn_variance(var, q));
}
// Learn variance should return true at end of first window
EXPECT_TRUE(adapter.learn_variance(var, q));
for (int i = 0; i < n; ++i)
EXPECT_EQ(target_var(i), var(i));
// Make sure learn_variance doesn't return true after second window
// (adaptation finished)
for (int i = 0; i < 2 * n_learn; ++i) {
EXPECT_FALSE(adapter.learn_variance(var, q));
}
EXPECT_TRUE(adapter.finished());
EXPECT_EQ(0, logger.call_count());
}