-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmarkovtest.cpp
54 lines (47 loc) · 1.45 KB
/
markovtest.cpp
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include "markovevaluator.h"
#include "parser/driver.h"
#include <gtest/gtest.h>
#define EXPECT_CLOSE(a, b) EXPECT_LT(abs((b) - (a)), 1)
class MarkovTest : public ::testing::Test {
protected:
void SetUp() override {}
void TearDown() override {
// Code here will be called immediately after each test
// (right before the destructor).
}
};
TEST_F(MarkovTest, twoValues) {
driver drv;
int startValue = 50;
drv.parse_string("a := " + std::to_string(startValue) + "; a -> b;");
MarkovEvaluator evaluator(drv.network);
evaluator.timeThreshold = 0;
double oldTime = 0;
for (int i = 0; i < startValue * 2; i++) {
auto nextState = evaluator.GetNextNetworkState();
if (evaluator.IsFinished())
break;
EXPECT_GT(nextState.time, oldTime);
oldTime = nextState.time;
EXPECT_FLOAT_EQ(nextState["a"], startValue - 1 - i);
EXPECT_FLOAT_EQ(nextState["b"], i + 1);
}
auto finalState = evaluator.GetNextNetworkState();
EXPECT_FLOAT_EQ(finalState["a"], 0);
EXPECT_FLOAT_EQ(finalState["b"], startValue);
EXPECT_EQ(evaluator.IsFinished(), true);
}
TEST_F(MarkovTest, threshold) {
double finalTime;
driver drv;
std::vector<NetworkState> states;
drv.parse_string("a := 10; b := 15; a -> a + b; b -> 0;0 -> b;");
MarkovEvaluator markov(drv.network);
markov.timeThreshold = 50000;
while (!markov.IsFinished()) {
states.push_back(markov.GetNextNetworkState());
}
finalTime = states.back().time;
EXPECT_GT(finalTime, 50000);
EXPECT_LT(finalTime, 51000);
}