mirror of
https://github.com/MadeOfJelly/MushMachine.git
synced 2025-06-19 11:16:37 +02:00
initial import, >900commits predate this
This commit is contained in:
230
framework/engine/test/update_test.cpp
Normal file
230
framework/engine/test/update_test.cpp
Normal file
@ -0,0 +1,230 @@
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include <mm/engine.hpp>
|
||||
|
||||
TEST(engine_fixed_update, empty_add_rm) {
|
||||
MM::Engine engine;
|
||||
|
||||
auto test_fun = [](auto&) {};
|
||||
|
||||
auto handle = engine.addFixedUpdate(test_fun);
|
||||
ASSERT_NE(handle.lock(), nullptr);
|
||||
|
||||
handle.lock()->priority = 1;
|
||||
|
||||
engine.removeFixedUpdate(handle);
|
||||
}
|
||||
|
||||
TEST(engine_update, empty_add_rm) {
|
||||
MM::Engine engine;
|
||||
|
||||
auto test_fun = [](auto&) {};
|
||||
|
||||
auto handle = engine.addUpdate(test_fun);
|
||||
ASSERT_NE(handle.lock(), nullptr);
|
||||
|
||||
handle.lock()->priority = 1;
|
||||
|
||||
engine.removeUpdate(handle);
|
||||
}
|
||||
|
||||
TEST(engine_fixed_update, empty_run) {
|
||||
MM::Engine engine;
|
||||
|
||||
auto test_fun = [](auto&) {};
|
||||
|
||||
auto handle = engine.addFixedUpdate(test_fun);
|
||||
ASSERT_NE(handle.lock(), nullptr);
|
||||
|
||||
handle.lock()->priority = 1;
|
||||
|
||||
engine.fixedUpdate(); // single update
|
||||
|
||||
engine.removeFixedUpdate(handle);
|
||||
}
|
||||
|
||||
TEST(engine_update, empty_run) {
|
||||
MM::Engine engine;
|
||||
|
||||
auto test_fun = [](auto&) {};
|
||||
|
||||
auto handle = engine.addUpdate(test_fun);
|
||||
ASSERT_NE(handle.lock(), nullptr);
|
||||
|
||||
handle.lock()->priority = 1;
|
||||
|
||||
engine.update();
|
||||
|
||||
engine.removeUpdate(handle);
|
||||
}
|
||||
|
||||
TEST(engine_fixed_update, test_run) {
|
||||
MM::Engine engine;
|
||||
|
||||
bool run = false;
|
||||
|
||||
auto test_fun = [&run](auto&) { run = true; };
|
||||
|
||||
auto handle = engine.addFixedUpdate(test_fun);
|
||||
ASSERT_NE(handle.lock(), nullptr);
|
||||
|
||||
handle.lock()->priority = 1;
|
||||
|
||||
ASSERT_FALSE(run);
|
||||
engine.fixedUpdate(); // single update
|
||||
ASSERT_TRUE(run);
|
||||
|
||||
engine.removeFixedUpdate(handle);
|
||||
}
|
||||
|
||||
TEST(engine_update, test_run) {
|
||||
MM::Engine engine;
|
||||
|
||||
bool run = false;
|
||||
|
||||
auto test_fun = [&run](auto&) { run = true; };
|
||||
|
||||
auto handle = engine.addUpdate(test_fun);
|
||||
ASSERT_NE(handle.lock(), nullptr);
|
||||
|
||||
handle.lock()->priority = 1;
|
||||
|
||||
ASSERT_FALSE(run);
|
||||
engine.update();
|
||||
ASSERT_TRUE(run);
|
||||
|
||||
engine.removeUpdate(handle);
|
||||
}
|
||||
|
||||
TEST(engine_fixed_update, test_order_run) {
|
||||
MM::Engine engine;
|
||||
|
||||
bool run1 = false;
|
||||
bool run2 = false;
|
||||
|
||||
auto test_fun1 = [&](auto&) {
|
||||
ASSERT_FALSE(run2);
|
||||
run1 = true;
|
||||
};
|
||||
auto test_fun2 = [&](auto&) {
|
||||
ASSERT_TRUE(run1);
|
||||
run2 = true;
|
||||
};
|
||||
|
||||
auto handle1 = engine.addFixedUpdate(test_fun1);
|
||||
ASSERT_NE(handle1.lock(), nullptr);
|
||||
handle1.lock()->priority = 1;
|
||||
|
||||
auto handle2 = engine.addFixedUpdate(test_fun2);
|
||||
ASSERT_NE(handle2.lock(), nullptr);
|
||||
handle2.lock()->priority = 0;
|
||||
|
||||
ASSERT_FALSE(run1);
|
||||
ASSERT_FALSE(run2);
|
||||
engine.fixedUpdate(); // single update
|
||||
ASSERT_TRUE(run1);
|
||||
ASSERT_TRUE(run2);
|
||||
|
||||
engine.removeFixedUpdate(handle1);
|
||||
engine.removeFixedUpdate(handle2);
|
||||
}
|
||||
|
||||
TEST(engine_fixed_update, test_order_rev_run) {
|
||||
MM::Engine engine;
|
||||
|
||||
bool run1 = false;
|
||||
bool run2 = false;
|
||||
|
||||
auto test_fun1 = [&](auto&) {
|
||||
ASSERT_TRUE(run2);
|
||||
run1 = true;
|
||||
};
|
||||
auto test_fun2 = [&](auto&) {
|
||||
ASSERT_FALSE(run1);
|
||||
run2 = true;
|
||||
};
|
||||
|
||||
auto handle1 = engine.addFixedUpdate(test_fun1);
|
||||
ASSERT_NE(handle1.lock(), nullptr);
|
||||
handle1.lock()->priority = 0;
|
||||
|
||||
auto handle2 = engine.addFixedUpdate(test_fun2);
|
||||
ASSERT_NE(handle2.lock(), nullptr);
|
||||
handle2.lock()->priority = 1;
|
||||
|
||||
ASSERT_FALSE(run1);
|
||||
ASSERT_FALSE(run2);
|
||||
engine.fixedUpdate(); // single update
|
||||
ASSERT_TRUE(run1);
|
||||
ASSERT_TRUE(run2);
|
||||
|
||||
engine.removeFixedUpdate(handle1);
|
||||
engine.removeFixedUpdate(handle2);
|
||||
}
|
||||
|
||||
TEST(engine_update, test_order_run) {
|
||||
MM::Engine engine;
|
||||
|
||||
bool run1 = false;
|
||||
bool run2 = false;
|
||||
|
||||
auto test_fun1 = [&](auto&) {
|
||||
ASSERT_FALSE(run2);
|
||||
run1 = true;
|
||||
};
|
||||
auto test_fun2 = [&](auto&) {
|
||||
ASSERT_TRUE(run1);
|
||||
run2 = true;
|
||||
};
|
||||
|
||||
auto handle1 = engine.addUpdate(test_fun1);
|
||||
ASSERT_NE(handle1.lock(), nullptr);
|
||||
handle1.lock()->priority = 1;
|
||||
|
||||
auto handle2 = engine.addUpdate(test_fun2);
|
||||
ASSERT_NE(handle2.lock(), nullptr);
|
||||
handle2.lock()->priority = 0;
|
||||
|
||||
ASSERT_FALSE(run1);
|
||||
ASSERT_FALSE(run2);
|
||||
engine.update(); // single update
|
||||
ASSERT_TRUE(run1);
|
||||
ASSERT_TRUE(run2);
|
||||
|
||||
engine.removeUpdate(handle1);
|
||||
engine.removeUpdate(handle2);
|
||||
}
|
||||
|
||||
TEST(engine_update, test_order_rev_run) {
|
||||
MM::Engine engine;
|
||||
|
||||
bool run1 = false;
|
||||
bool run2 = false;
|
||||
|
||||
auto test_fun1 = [&](auto&) {
|
||||
ASSERT_TRUE(run2);
|
||||
run1 = true;
|
||||
};
|
||||
auto test_fun2 = [&](auto&) {
|
||||
ASSERT_FALSE(run1);
|
||||
run2 = true;
|
||||
};
|
||||
|
||||
auto handle1 = engine.addUpdate(test_fun1);
|
||||
ASSERT_NE(handle1.lock(), nullptr);
|
||||
handle1.lock()->priority = 0;
|
||||
|
||||
auto handle2 = engine.addUpdate(test_fun2);
|
||||
ASSERT_NE(handle2.lock(), nullptr);
|
||||
handle2.lock()->priority = 1;
|
||||
|
||||
ASSERT_FALSE(run1);
|
||||
ASSERT_FALSE(run2);
|
||||
engine.update(); // single update
|
||||
ASSERT_TRUE(run1);
|
||||
ASSERT_TRUE(run2);
|
||||
|
||||
engine.removeUpdate(handle1);
|
||||
engine.removeUpdate(handle2);
|
||||
}
|
||||
|
Reference in New Issue
Block a user