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
55
56
57
58
59
60
61
|
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <meowpp/debug/assert.h>
#include <meowpp/utility/state.h>
#include <meowpp/utility/state.h>
#include <meowpp/utility/state.h>
using namespace meow;
class Func1State : public State {
public:
static const int SAME = 0;
static const int DIFF = 1;
};
State Func1(int a, int b) {
if (a == b) {
return Func1State::SAME;
} else {
return Func1State::DIFF;
}
}
const int kThreshold = 10;
class Func2State : public Func1State {
public:
static const int NEAR = 2;
static const int FAR = 3;
};
State Func2(int a, int b) {
if (Func1(a, b) == Func1State::SAME) {
return Func1State::SAME;
} else {
if (abs(a - b) < kThreshold) {
return Func2State::NEAR;
} else {
return Func2State::FAR;
}
}
}
int main() {
Assert(Func1(3, 5) != Func1State::SAME, "");
Assert(Func1(3, 5) == Func1State::DIFF, "");
Assert(Func2(3, 3) == Func1State::SAME, "");
Assert(Func2(3, 3) == Func2State::SAME, "");
Assert(Func2(3, 1) == Func2State::NEAR, "");
Assert(Func2(15, 1) == Func2State::FAR, "");
State* st = dynamic_cast<State*>(Func2(15, 1).Copy());
State k;
k.CopyFrom(st);
Assert(k == Func2State::FAR, "");
Assert(k.Equals(st), "");
Assert(*st == Func2State::FAR, "");
delete st;
return 0;
}
|