diff --git a/unit_tests/symphony.cpp b/unit_tests/symphony.cpp new file mode 100644 index 0000000000000000000000000000000000000000..d6dd21f45397adf500981c8823770da7d586e787 --- /dev/null +++ b/unit_tests/symphony.cpp @@ -0,0 +1,44 @@ +#include <cassert> +#include <chrono> +#include "simple/motion/movement.hpp" +#include "simple/motion/symphony.hpp" + +using namespace simple::motion; +using duration = std::chrono::duration<float>; +using namespace std::literals; +using simple::support::way; + +// TODO: use rational, can't rely on float + +void SharpTurn() +{ + using float2 = std::array<float,2>; + float2 block{0,0}; + + using move = movement<duration, float>; + + auto sharp_turn = symphony(std::vector<move>{ + move{0,1, 1250ms}, + move{0,1, 1250ms} + }); + + + sharp_turn.move(block, 500ms); + assert( block[0] == way(0.f,1.f, 0.5f / 1.25f) ); + assert( block[1] == 0.f ); + + sharp_turn.move(block, 500ms); + assert( block[0] == way(0.f,1.f, 1.f / 1.25f) ); + assert( block[1] == 0.f ); + + sharp_turn.move(block, 500ms); + assert( block[0] == way(0.f,1.f, 1.f) ); + assert( block[1] == way(0.f,1.f, 0.25f / 1.25f) ); + +} + +int main() +{ + SharpTurn(); + return 0; +}