Initial commit

This commit is contained in:
2026-02-02 04:50:13 +01:00
commit 5b11698731
22592 changed files with 7677434 additions and 0 deletions

View File

@@ -0,0 +1,71 @@
#include <cxxtest/TestSuite.h>
#include "engines/ultima/ultima8/misc/box.h"
/**
* Test suite for the functions in engines/ultima/ultima8/misc/box.h
*/
class U8BoxTestSuite : public CxxTest::TestSuite {
public:
U8BoxTestSuite() {
}
void test_simple_box() {
// Note: These tests expect Box has reversed coordinates in x and y.
Ultima::Ultima8::Box box;
TS_ASSERT(box.isEmpty());
TS_ASSERT(box.isValid());
TS_ASSERT(!box.overlaps(box));
TS_ASSERT(box == box);
TS_ASSERT(!box.contains(0, 0, 0));
TS_ASSERT(!box.contains(0, 0, 1));
TS_ASSERT(!box.contains(0, -1, 0));
TS_ASSERT(!box.contains(-1, 0, 0));
box.resize(1, 1, 1);
TS_ASSERT(!box.isEmpty());
TS_ASSERT(box.isValid());
TS_ASSERT(box.contains(0, 0, 0));
TS_ASSERT(!box.contains(-1, 0, 0));
TS_ASSERT(!box.contains(0, -1, 0));
TS_ASSERT(!box.contains(0, 0, 1));
TS_ASSERT(box.overlaps(box));
TS_ASSERT(box == box);
box.resize(2, 2, 2);
TS_ASSERT(!box.isEmpty());
TS_ASSERT(box.isValid());
TS_ASSERT(box.overlaps(box));
TS_ASSERT(box == box);
TS_ASSERT(box.contains(-1, -1, 1));
TS_ASSERT(box.contains(-1, -1, 0));
box.moveTo(0, 0, 1);
TS_ASSERT(!box.contains(-1, -1, 0));
TS_ASSERT(box.contains(-1, -1, 2));
Ultima::Ultima8::Box box2(box);
TS_ASSERT(box == box2);
TS_ASSERT(box.overlaps(box2));
TS_ASSERT(box2 == box);
TS_ASSERT(box2.overlaps(box));
Ultima::Ultima8::Box box3(0, 0, 0, 2, 2, 3);
TS_ASSERT(box2 != box3);
TS_ASSERT(box2.overlaps(box3));
TS_ASSERT(box3.overlaps(box2));
box3.resize(1, 1, 1);
TS_ASSERT(!box3.overlaps(box2));
box3.moveTo(2, 2, 2);
box.extend(box3);
TS_ASSERT(!box.isEmpty());
TS_ASSERT(box.isValid());
TS_ASSERT(box._x == 2);
TS_ASSERT(box._y == 2);
TS_ASSERT(box._z == 1);
TS_ASSERT(box._xd == 4);
TS_ASSERT(box._yd == 4);
TS_ASSERT(box._zd == 2);
}
};

View File

@@ -0,0 +1,63 @@
#include <cxxtest/TestSuite.h>
#include "engines/ultima/ultima8/misc/direction.h"
#include "engines/ultima/ultima8/misc/direction_util.h"
/**
* Test suite for the functions in engines/ultima/ultima8/misc/direction_util.h
*/
class U8DirectionTestSuite : public CxxTest::TestSuite {
public:
U8DirectionTestSuite() {
}
// save some typing later..
static const Ultima::Ultima8::DirectionMode dirmode8 = Ultima::Ultima8::dirmode_8dirs;
static const Ultima::Ultima8::DirectionMode dirmode16 = Ultima::Ultima8::dirmode_16dirs;
// test Direction_Get(deltay, deltax, dirmode)
void _test_direction_get_basic(Ultima::Ultima8::DirectionMode mode) {
TS_ASSERT_EQUALS(Ultima::Ultima8::Direction_Get( 1, 1, mode), Ultima::Ultima8::dir_north);
TS_ASSERT_EQUALS(Ultima::Ultima8::Direction_Get( 0, 1, mode), Ultima::Ultima8::dir_northeast);
TS_ASSERT_EQUALS(Ultima::Ultima8::Direction_Get(-1, 1, mode), Ultima::Ultima8::dir_east);
TS_ASSERT_EQUALS(Ultima::Ultima8::Direction_Get(-1, 0, mode), Ultima::Ultima8::dir_southeast);
TS_ASSERT_EQUALS(Ultima::Ultima8::Direction_Get(-1, -1, mode), Ultima::Ultima8::dir_south);
TS_ASSERT_EQUALS(Ultima::Ultima8::Direction_Get( 0, -1, mode), Ultima::Ultima8::dir_southwest);
TS_ASSERT_EQUALS(Ultima::Ultima8::Direction_Get( 1, -1, mode), Ultima::Ultima8::dir_west);
TS_ASSERT_EQUALS(Ultima::Ultima8::Direction_Get( 1, 0, mode), Ultima::Ultima8::dir_northwest);
}
void test_direction_get() {
_test_direction_get_basic(dirmode8);
_test_direction_get_basic(dirmode16);
}
void _test_direction_get_worlddir(Ultima::Ultima8::DirectionMode mode) {
// Note Y is flipped from what you might expect
TS_ASSERT_EQUALS(Ultima::Ultima8::Direction_GetWorldDir(-1, 0, mode), Ultima::Ultima8::dir_north);
TS_ASSERT_EQUALS(Ultima::Ultima8::Direction_GetWorldDir(-1, 1, mode), Ultima::Ultima8::dir_northeast);
TS_ASSERT_EQUALS(Ultima::Ultima8::Direction_GetWorldDir( 0, 1, mode), Ultima::Ultima8::dir_east);
TS_ASSERT_EQUALS(Ultima::Ultima8::Direction_GetWorldDir( 1, 1, mode), Ultima::Ultima8::dir_southeast);
TS_ASSERT_EQUALS(Ultima::Ultima8::Direction_GetWorldDir( 1, 0, mode), Ultima::Ultima8::dir_south);
TS_ASSERT_EQUALS(Ultima::Ultima8::Direction_GetWorldDir( 1, -1, mode), Ultima::Ultima8::dir_southwest);
TS_ASSERT_EQUALS(Ultima::Ultima8::Direction_GetWorldDir( 0, -1, mode), Ultima::Ultima8::dir_west);
TS_ASSERT_EQUALS(Ultima::Ultima8::Direction_GetWorldDir(-1, -1, mode), Ultima::Ultima8::dir_northwest);
}
void test_direction_get_worlddir() {
_test_direction_get_worlddir(dirmode8);
_test_direction_get_worlddir(dirmode16);
}
void test_direction_conversions() {
TS_ASSERT_EQUALS(Ultima::Ultima8::Direction_ToCentidegrees(Ultima::Ultima8::dir_north), 0);
TS_ASSERT_EQUALS(Ultima::Ultima8::Direction_ToCentidegrees(Ultima::Ultima8::dir_nne), 2250);
TS_ASSERT_EQUALS(Ultima::Ultima8::Direction_ToCentidegrees(Ultima::Ultima8::dir_east), 9000);
TS_ASSERT_EQUALS(Ultima::Ultima8::Direction_ToCentidegrees(Ultima::Ultima8::dir_west), 27000);
TS_ASSERT_EQUALS(Ultima::Ultima8::Direction_FromCentidegrees(2250), Ultima::Ultima8::dir_nne);
TS_ASSERT_EQUALS(Ultima::Ultima8::Direction_FromCentidegrees(2249), Ultima::Ultima8::dir_nne);
TS_ASSERT_EQUALS(Ultima::Ultima8::Direction_FromCentidegrees(2251), Ultima::Ultima8::dir_nne);
TS_ASSERT_EQUALS(Ultima::Ultima8::Direction_FromCentidegrees(4500), Ultima::Ultima8::dir_northeast);
}
};

View File

@@ -0,0 +1,42 @@
#include <cxxtest/TestSuite.h>
#include "engines/ultima/ultima8/misc/id_man.h"
/**
* Test suite for the functions in engines/ultima/ultima8/misc/id_man.h
*/
class U8IdManTestSuite : public CxxTest::TestSuite {
public:
U8IdManTestSuite() {
}
void test_trim_spaces() {
Ultima::Ultima8::idMan idman = Ultima::Ultima8::idMan(1234, 5678);
TS_ASSERT(!idman.isFull());
TS_ASSERT(!idman.isIDUsed(1234));
uint16 newid = idman.getNewID();
TS_ASSERT_EQUALS(newid, 1234);
TS_ASSERT(idman.isIDUsed(1234));
bool reserved = idman.reserveID(1234);
TS_ASSERT(!reserved);
reserved = idman.reserveID(1235);
TS_ASSERT(reserved);
TS_ASSERT(idman.isIDUsed(1235));
uint16 newid2 = idman.getNewID();
TS_ASSERT_EQUALS(newid2, 1236);
TS_ASSERT(idman.isIDUsed(1236));
bool reserved2 = idman.reserveID(2000);
TS_ASSERT(reserved2);
TS_ASSERT(idman.isIDUsed(2000));
idman.clearAll();
idman.setNewMax(2001);
TS_ASSERT(!idman.isFull());
TS_ASSERT(!idman.isIDUsed(2000));
TS_ASSERT(!idman.isIDUsed(1234));
}
};

View File

@@ -0,0 +1,49 @@
#include <cxxtest/TestSuite.h>
#include "engines/ultima/shared/std/string.h"
#include "engines/ultima/ultima8/misc/util.h"
/**
* Test suite for the functions in engines/ultima/ultima8/misc/util.h
*/
class U8UtilTestSuite : public CxxTest::TestSuite {
public:
U8UtilTestSuite() {
}
void test_split_string() {
Ultima::Std::string s1 = "abc,def";
Ultima::Std::vector<Ultima::Std::string> v1;
Ultima::Ultima8::SplitString(s1, ',', v1);
TS_ASSERT_EQUALS(v1.size(), 2);
TS_ASSERT_EQUALS(v1[0], "abc");
TS_ASSERT_EQUALS(v1[1], "def");
Ultima::Std::string s2;
Ultima::Std::vector<Ultima::Std::string> v2;
Ultima::Ultima8::SplitString(s2, ',', v1);
TS_ASSERT_EQUALS(v1.size(), 0);
Ultima::Std::string s3 = " aa bb ";
Ultima::Ultima8::SplitString(s3, ' ', v1);
TS_ASSERT_EQUALS(v1.size(), 6);
TS_ASSERT_EQUALS(v1[0], "");
TS_ASSERT_EQUALS(v1[1], "aa");
}
void test_string_to_argv() {
Common::Array<Common::String> v;
Common::String s;
Ultima::Ultima8::StringToArgv(s, v);
TS_ASSERT_EQUALS(v.size(), 0);
// Test it strips leading space on args, and includes spaces inside ""s
s = "abc \\t\\nescape \"\\ me\\ \\\" !\" ";
Ultima::Ultima8::StringToArgv(s, v);
TS_ASSERT_EQUALS(v.size(), 3);
TS_ASSERT_EQUALS(v[0], "abc");
TS_ASSERT_EQUALS(v[1], "escape");
TS_ASSERT_EQUALS(v[2], " me \" !");
}
};