aboutsummaryrefslogtreecommitdiffstats
path: root/meowpp_unittest/utility/state.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'meowpp_unittest/utility/state.cpp')
-rw-r--r--meowpp_unittest/utility/state.cpp61
1 files changed, 61 insertions, 0 deletions
diff --git a/meowpp_unittest/utility/state.cpp b/meowpp_unittest/utility/state.cpp
new file mode 100644
index 0000000..8b0e69e
--- /dev/null
+++ b/meowpp_unittest/utility/state.cpp
@@ -0,0 +1,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;
+}