aboutsummaryrefslogtreecommitdiffstats
path: root/meowpp/utility/state_test.cpp
blob: 8b0e69ea2d543d4d642962e9076029193113ac10 (plain) (blame)
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;
}