diff options
Diffstat (limited to 'meowpp_unittest/utility/state.cpp')
| -rw-r--r-- | meowpp_unittest/utility/state.cpp | 61 |
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; +} |
