mirror of
https://github.com/libretro/easyrpg-libretro.git
synced 2026-11-10 10:51:35 -10:00
285 lines
5.2 KiB
C++
285 lines
5.2 KiB
C++
#include "game_variables.h"
|
|
#include "doctest.h"
|
|
|
|
TEST_SUITE_BEGIN("Variables");
|
|
|
|
constexpr int max_vars = 5;
|
|
constexpr int minval = Game_Variables::min_2k3;
|
|
constexpr int maxval = Game_Variables::max_2k3;
|
|
|
|
static Game_Variables make() {
|
|
Data::variables.resize(max_vars);
|
|
Game_Variables v(minval, maxval);
|
|
v.SetWarning(0);
|
|
return v;
|
|
}
|
|
|
|
TEST_CASE("Set") {
|
|
constexpr int n = max_vars * 2;
|
|
auto s = make();
|
|
|
|
REQUIRE_EQ(s.Get(0), 0);
|
|
REQUIRE_EQ(s.Set(0, 42), 0);
|
|
REQUIRE_EQ(s.Get(0), 0);
|
|
|
|
REQUIRE_EQ(s.Get(-1), 0);
|
|
REQUIRE_EQ(s.Set(-1, 42), 0);
|
|
REQUIRE_EQ(s.Get(-1), 0);
|
|
for (int i = 1; i <= n; ++i) {
|
|
REQUIRE_EQ(s.Get(i), 0);
|
|
REQUIRE_EQ(s.Set(i, 42 + i), 42 + i);
|
|
REQUIRE_EQ(s.Get(i), 42 + i);
|
|
}
|
|
REQUIRE_EQ(s.Get(n + 1), 0);
|
|
}
|
|
|
|
TEST_CASE("SetRange") {
|
|
constexpr int n = max_vars * 2;
|
|
auto s = make();
|
|
for (int i = 0; i < n; ++i) {
|
|
REQUIRE_EQ(s.Get(i), 0);
|
|
}
|
|
|
|
s.SetRange(-1, n, 42);
|
|
|
|
REQUIRE_EQ(s.Get(-1), 0);
|
|
REQUIRE_EQ(s.Get(0), 0);
|
|
for (int i = 1; i <= n; ++i) {
|
|
REQUIRE_EQ(s.Get(i), 42);
|
|
}
|
|
REQUIRE_EQ(s.Get(n + 1), 0);
|
|
|
|
s.SetRange(2, n-2, 20);
|
|
|
|
REQUIRE_EQ(s.Get(-1), 0);
|
|
REQUIRE_EQ(s.Get(0), 0);
|
|
REQUIRE_EQ(s.Get(1), 42);
|
|
for (int i = 2; i <= n-2; ++i) {
|
|
REQUIRE_EQ(s.Get(i), 20);
|
|
}
|
|
REQUIRE_EQ(s.Get(n - 1), 42);
|
|
REQUIRE_EQ(s.Get(n), 42);
|
|
REQUIRE_EQ(s.Get(n + 1), 0);
|
|
}
|
|
|
|
TEST_CASE("Add") {
|
|
auto s = make();
|
|
|
|
REQUIRE_EQ(s.Get(1), 0);
|
|
|
|
REQUIRE_EQ(s.Set(1, 20), 20);
|
|
REQUIRE_EQ(s.Get(1), 20);
|
|
|
|
REQUIRE_EQ(s.Add(1, 22), 42);
|
|
REQUIRE_EQ(s.Get(1), 42);
|
|
|
|
s.SetRange(1, 2, 20);
|
|
REQUIRE_EQ(s.Get(1), 20);
|
|
REQUIRE_EQ(s.Get(2), 20);
|
|
|
|
s.AddRange(1, 2, 22);
|
|
REQUIRE_EQ(s.Get(1), 42);
|
|
REQUIRE_EQ(s.Get(2), 42);
|
|
}
|
|
|
|
TEST_CASE("Sub") {
|
|
auto s = make();
|
|
|
|
REQUIRE_EQ(s.Get(1), 0);
|
|
|
|
REQUIRE_EQ(s.Set(1, 20), 20);
|
|
REQUIRE_EQ(s.Get(1), 20);
|
|
|
|
REQUIRE_EQ(s.Sub(1, 22), -2);
|
|
REQUIRE_EQ(s.Get(1), -2);
|
|
|
|
s.SetRange(1, 2, 20);
|
|
REQUIRE_EQ(s.Get(1), 20);
|
|
REQUIRE_EQ(s.Get(2), 20);
|
|
|
|
s.SubRange(1, 2, 22);
|
|
REQUIRE_EQ(s.Get(1), -2);
|
|
REQUIRE_EQ(s.Get(2), -2);
|
|
}
|
|
|
|
TEST_CASE("Mult") {
|
|
auto s = make();
|
|
|
|
REQUIRE_EQ(s.Get(1), 0);
|
|
|
|
REQUIRE_EQ(s.Set(1, 20), 20);
|
|
REQUIRE_EQ(s.Get(1), 20);
|
|
|
|
REQUIRE_EQ(s.Mult(1, 22), 440);
|
|
REQUIRE_EQ(s.Get(1), 440);
|
|
|
|
s.SetRange(1, 2, 20);
|
|
REQUIRE_EQ(s.Get(1), 20);
|
|
REQUIRE_EQ(s.Get(2), 20);
|
|
|
|
s.MultRange(1, 2, 22);
|
|
REQUIRE_EQ(s.Get(1), 440);
|
|
REQUIRE_EQ(s.Get(2), 440);
|
|
}
|
|
|
|
TEST_CASE("Div") {
|
|
auto s = make();
|
|
|
|
REQUIRE_EQ(s.Get(1), 0);
|
|
|
|
REQUIRE_EQ(s.Set(1, 20), 20);
|
|
REQUIRE_EQ(s.Get(1), 20);
|
|
|
|
REQUIRE_EQ(s.Div(1, 2), 10);
|
|
REQUIRE_EQ(s.Get(1), 10);
|
|
|
|
REQUIRE_EQ(s.Div(1, 0), 10);
|
|
REQUIRE_EQ(s.Get(1), 10);
|
|
|
|
s.SetRange(1, 2, 20);
|
|
REQUIRE_EQ(s.Get(1), 20);
|
|
REQUIRE_EQ(s.Get(2), 20);
|
|
|
|
s.DivRange(1, 2, 2);
|
|
REQUIRE_EQ(s.Get(1), 10);
|
|
REQUIRE_EQ(s.Get(2), 10);
|
|
|
|
s.DivRange(1, 2, 0);
|
|
REQUIRE_EQ(s.Get(1), 10);
|
|
REQUIRE_EQ(s.Get(2), 10);
|
|
}
|
|
|
|
TEST_CASE("Mod") {
|
|
auto s = make();
|
|
|
|
REQUIRE_EQ(s.Get(1), 0);
|
|
|
|
REQUIRE_EQ(s.Set(1, 8), 8);
|
|
REQUIRE_EQ(s.Get(1), 8);
|
|
|
|
REQUIRE_EQ(s.Mod(1, 5), 3);
|
|
REQUIRE_EQ(s.Get(1), 3);
|
|
|
|
REQUIRE_EQ(s.Mod(1, 0), 0);
|
|
REQUIRE_EQ(s.Get(1), 0);
|
|
|
|
s.SetRange(1, 2, 8);
|
|
REQUIRE_EQ(s.Get(1), 8);
|
|
REQUIRE_EQ(s.Get(2), 8);
|
|
|
|
s.ModRange(1, 2, 5);
|
|
REQUIRE_EQ(s.Get(1), 3);
|
|
REQUIRE_EQ(s.Get(2), 3);
|
|
|
|
s.ModRange(1, 2, 0);
|
|
REQUIRE_EQ(s.Get(1), 0);
|
|
REQUIRE_EQ(s.Get(2), 0);
|
|
}
|
|
|
|
TEST_CASE("RangeVariable") {
|
|
constexpr int n = max_vars * 2;
|
|
auto s = make();
|
|
for (int i = 0; i < n; ++i) {
|
|
REQUIRE_EQ(s.Get(i), 0);
|
|
}
|
|
|
|
s.SetRange(2, 5, 0);
|
|
s.Set(2, 1);
|
|
|
|
REQUIRE_EQ(s.Get(1), 0);
|
|
REQUIRE_EQ(s.Get(2), 1);
|
|
REQUIRE_EQ(s.Get(3), 0);
|
|
REQUIRE_EQ(s.Get(4), 0);
|
|
REQUIRE_EQ(s.Get(5), 0);
|
|
REQUIRE_EQ(s.Get(6), 0);
|
|
|
|
s.AddRangeVariable(3, 5, 2);
|
|
|
|
REQUIRE_EQ(s.Get(1), 0);
|
|
REQUIRE_EQ(s.Get(2), 1);
|
|
REQUIRE_EQ(s.Get(3), 1);
|
|
REQUIRE_EQ(s.Get(4), 1);
|
|
REQUIRE_EQ(s.Get(5), 1);
|
|
REQUIRE_EQ(s.Get(6), 0);
|
|
|
|
s.AddRangeVariable(2, 4, 2);
|
|
|
|
REQUIRE_EQ(s.Get(1), 0);
|
|
REQUIRE_EQ(s.Get(2), 2);
|
|
REQUIRE_EQ(s.Get(3), 3);
|
|
REQUIRE_EQ(s.Get(4), 3);
|
|
REQUIRE_EQ(s.Get(5), 1);
|
|
REQUIRE_EQ(s.Get(6), 0);
|
|
|
|
s.SetRange(2, 5, 0);
|
|
s.Set(3, 1);
|
|
s.AddRangeVariable(2, 5, 3);
|
|
|
|
REQUIRE_EQ(s.Get(1), 0);
|
|
REQUIRE_EQ(s.Get(2), 1);
|
|
REQUIRE_EQ(s.Get(3), 2);
|
|
REQUIRE_EQ(s.Get(4), 2);
|
|
REQUIRE_EQ(s.Get(5), 2);
|
|
REQUIRE_EQ(s.Get(6), 0);
|
|
|
|
s.SetRange(2, 5, 0);
|
|
s.Set(5, 1);
|
|
s.AddRangeVariable(2, 5, 5);
|
|
|
|
REQUIRE_EQ(s.Get(1), 0);
|
|
REQUIRE_EQ(s.Get(2), 1);
|
|
REQUIRE_EQ(s.Get(3), 1);
|
|
REQUIRE_EQ(s.Get(4), 1);
|
|
REQUIRE_EQ(s.Get(5), 2);
|
|
REQUIRE_EQ(s.Get(6), 0);
|
|
}
|
|
|
|
|
|
TEST_CASE("RangeVariableIndirect") {
|
|
constexpr int n = max_vars * 2;
|
|
auto s = make();
|
|
for (int i = 0; i < n; ++i) {
|
|
REQUIRE_EQ(s.Get(i), 0);
|
|
}
|
|
|
|
s.Set(4, 10);
|
|
s.Set(2, 4);
|
|
s.Set(10, 42);
|
|
|
|
s.SetRangeVariableIndirect(1, 5, 2);
|
|
|
|
REQUIRE_EQ(s.Get(1), 10);
|
|
REQUIRE_EQ(s.Get(2), 10);
|
|
REQUIRE_EQ(s.Get(3), 42);
|
|
REQUIRE_EQ(s.Get(4), 42);
|
|
REQUIRE_EQ(s.Get(5), 42);
|
|
REQUIRE_EQ(s.Get(6), 0);
|
|
}
|
|
|
|
TEST_CASE("RangeRandom") {
|
|
constexpr int n = max_vars * 2;
|
|
auto s = make();
|
|
for (int i = 0; i < n; ++i) {
|
|
REQUIRE_EQ(s.Get(i), 0);
|
|
}
|
|
|
|
s.SetRangeRandom(1,100,-999,999);
|
|
|
|
int first_val = s.Get(1);
|
|
int first_diff = 0;
|
|
for (int i = 1; i <= 100; ++i) {
|
|
if (s.Get(i) != first_val && !first_diff) {
|
|
first_diff = i;
|
|
}
|
|
REQUIRE_GE(s.Get(i), -999);
|
|
REQUIRE_LE(s.Get(i), 999);
|
|
}
|
|
|
|
// Verifies the RNG was called for each value.
|
|
REQUIRE_NE(first_diff, 0);
|
|
}
|
|
|
|
|
|
|
|
TEST_SUITE_END();
|