dethrace/test/DETHRACE/test_loading.c

245 lines
9.5 KiB
C

#include "tests.h"
#include <string.h>
#include "CORE/PIXELMAP/pixelmap.h"
#include "common/globvars.h"
#include "common/graphics.h"
#include "common/init.h"
#include "common/loading.h"
#include "common/newgame.h"
#include "common/utility.h"
#include "common/world.h"
void test_loading_GetCDPathFromPathsTxtFile() {
REQUIRES_DATA_DIRECTORY();
int result;
tPath_name cd_path;
result = GetCDPathFromPathsTxtFile(cd_path);
TEST_ASSERT_EQUAL_INT(1, result);
TEST_ASSERT_EQUAL_STRING(".\\DATA\\MINICD", cd_path);
}
void test_loading_OldDRfopen() {
REQUIRES_DATA_DIRECTORY();
FILE* f;
f = OldDRfopen("DATA/i-dont-exist", "rt");
TEST_ASSERT_NULL(f);
f = OldDRfopen("DATA/GENERAL.TXT", "rt");
TEST_ASSERT_NOT_NULL(f);
}
void test_loading_LoadGeneralParameters() {
REQUIRES_DATA_DIRECTORY();
LoadGeneralParameters();
TEST_ASSERT_EQUAL_FLOAT(0.02f, gCamera_hither);
TEST_ASSERT_EQUAL_INT(7500, gInitial_credits[0]);
TEST_ASSERT_EQUAL_INT(5000, gInitial_credits[1]);
TEST_ASSERT_EQUAL_INT(3000, gInitial_credits[2]);
TEST_ASSERT_EQUAL_STRING("NEWEAGLE.TXT", gBasic_car_names[0]);
TEST_ASSERT_EQUAL_FLOAT(0.2f, gDefault_default_water_spec_vol.gravity_multiplier);
TEST_ASSERT_EQUAL_FLOAT(50.0f, gDefault_default_water_spec_vol.viscosity_multiplier);
TEST_ASSERT_EQUAL_INT(0, gInitial_net_credits[0]);
TEST_ASSERT_EQUAL_INT(2000, gInitial_net_credits[1]);
TEST_ASSERT_EQUAL_INT(1, gDefault_gravity);
}
void test_loading_brfont() {
REQUIRES_DATA_DIRECTORY();
br_font* font;
font = LoadBRFont("FONT7.FNT");
TEST_ASSERT_NOT_NULL(font);
TEST_ASSERT_EQUAL_INT(1, font->flags);
TEST_ASSERT_EQUAL_INT(7, font->glyph_y); // font height
TEST_ASSERT_EQUAL_INT(0, font->width[0]);
TEST_ASSERT_EQUAL_INT(3, font->width[32]);
}
void test_loading_opponents() {
REQUIRES_DATA_DIRECTORY();
tOpponent* o;
LoadOpponents();
TEST_ASSERT_EQUAL_INT(40, gNumber_of_racers);
o = &gOpponents[2];
TEST_ASSERT_EQUAL_STRING("Sinthea", o->name);
TEST_ASSERT_EQUAL_STRING("Sinthea", o->abbrev_name);
TEST_ASSERT_EQUAL_INT(73, o->car_number);
TEST_ASSERT_EQUAL_INT(4, o->strength_rating);
TEST_ASSERT_EQUAL_INT(eNet_avail_never, o->network_availability);
TEST_ASSERT_EQUAL_STRING("SINTHMUG.FLI", o->mug_shot_name);
TEST_ASSERT_EQUAL_STRING("SLED.TXT", o->car_file_name);
TEST_ASSERT_EQUAL_STRING("SLED.FLI", o->stolen_car_flic_name);
TEST_ASSERT_EQUAL_INT(2, o->text_chunk_count);
TEST_ASSERT_EQUAL_INT(5, o->text_chunks[0].x_coord);
TEST_ASSERT_EQUAL_INT(3, o->text_chunks[0].y_coord);
TEST_ASSERT_EQUAL_INT(3, o->text_chunks[0].line_count);
TEST_ASSERT_EQUAL_STRING("TOP SPEED: 150MPH", o->text_chunks[0].text[0]);
}
void test_loading_memread() {
int32_t int_array[] = { 1, 2, 3, 4 };
char* data = (char*)int_array;
TEST_ASSERT_EQUAL_INT(1, MemReadU32(&data));
TEST_ASSERT_EQUAL_INT(2, MemReadU32(&data));
MemSkipBytes(&data, sizeof(int32_t));
TEST_ASSERT_EQUAL_INT(4, MemReadU32(&data));
int16_t short_array[] = { 1, 2, 3, 4, -5, -6 };
data = (char*)short_array;
TEST_ASSERT_EQUAL_INT(1, MemReadU16(&data));
TEST_ASSERT_EQUAL_INT(2, MemReadU16(&data));
MemSkipBytes(&data, sizeof(int16_t));
TEST_ASSERT_EQUAL_INT(4, MemReadU16(&data));
TEST_ASSERT_EQUAL_INT(-5, MemReadS16(&data));
TEST_ASSERT_EQUAL_INT(-6, MemReadS16(&data));
int8_t char_array[] = { 1, 2, 3, -4 };
data = (char*)char_array;
TEST_ASSERT_EQUAL_INT(1, MemReadU8(&data));
TEST_ASSERT_EQUAL_INT(2, MemReadU8(&data));
MemSkipBytes(&data, sizeof(int8_t));
TEST_ASSERT_EQUAL_INT(252, MemReadU8(&data)); // (unsigned)
data = (char*)char_array;
TEST_ASSERT_EQUAL_INT(1, MemReadS8(&data));
TEST_ASSERT_EQUAL_INT(2, MemReadS8(&data));
MemSkipBytes(&data, sizeof(int8_t));
TEST_ASSERT_EQUAL_INT(-4, MemReadS8(&data));
}
void test_loading_ConvertPixToStripMap() {
REQUIRES_DATA_DIRECTORY();
br_pixelmap* pm;
tS8* strip_data;
br_pixelmap* pm_unstripped;
int x;
int y;
br_uint_8* src_pix;
br_uint_8* dst_pix;
pm = DRPixelmapLoad("DATA/32X20X8/PIXELMAP/FRANKF.PIX");
TEST_ASSERT_NOT_NULL(pm);
strip_data = ConvertPixToStripMap(pm);
TEST_ASSERT_NOT_NULL(strip_data);
pm_unstripped = BrPixelmapAllocate(BR_MEMORY_PIXELS, pm->width, pm->height, NULL, BR_PMAF_NORMAL);
CopyStripImage(pm_unstripped, 0, 0, 0, 0, strip_data, 0, 0, pm->width, pm->height);
src_pix = (br_uint_8*)pm->pixels;
dst_pix = (br_uint_8*)pm_unstripped->pixels;
for (y = 0; y < pm->height; y++) {
for (x = 0; x < pm->width; x++) {
if (src_pix[y * pm->row_bytes + x] != dst_pix[y * pm_unstripped->row_bytes + x]) {
printf("Original and unstripped images do not match at (%d %d)\n", x, y);
TEST_FAIL();
}
}
}
}
void test_loading_LoadCar() {
REQUIRES_DATA_DIRECTORY();
tCar_spec car_spec;
tBrender_storage storage;
InitialiseStorageSpace(&storage, 50, 50, 50, 50);
LoadCar("NEWEAGLE.TXT", eDriver_local_human, &car_spec, eFrankie, "playerName", &storage);
TEST_ASSERT_TRUE(car_spec.active);
TEST_ASSERT_FALSE(car_spec.disabled);
br_model* model = car_spec.car_model_actors[car_spec.principal_car_actor].actor->model;
TEST_ASSERT_EQUAL_STRING("NEWEAGLE.DAT", model->identifier);
TEST_ASSERT_EQUAL_FLOAT(1.0, car_spec.M);
float e_cmpos[] = { 0, 0.345, 0 };
TEST_ASSERT_EQUAL_FLOAT_ARRAY(e_cmpos, car_spec.cmpos.v, 3);
TEST_ASSERT_EQUAL_INT(2, car_spec.number_of_steerable_wheels);
TEST_ASSERT_EQUAL_INT(7, car_spec.steering_ref[0]);
TEST_ASSERT_EQUAL_INT(8, car_spec.steering_ref[1]);
TEST_ASSERT_EQUAL_INT(-1, car_spec.driven_wheels_spin_ref_1);
TEST_ASSERT_EQUAL_INT(-1, car_spec.driven_wheels_spin_ref_2);
TEST_ASSERT_EQUAL_INT(2, car_spec.driven_wheels_spin_ref_3);
TEST_ASSERT_EQUAL_INT(1, car_spec.driven_wheels_spin_ref_4);
TEST_ASSERT_EQUAL_FLOAT(36.231884, car_spec.sk[0]);
TEST_ASSERT_EQUAL_FLOAT(36.231884, car_spec.sk[1]);
TEST_ASSERT_EQUAL_FLOAT(4.2562828, car_spec.sb[0]);
TEST_ASSERT_EQUAL_FLOAT(4.2562828, car_spec.sb[1]);
TEST_ASSERT_EQUAL_FLOAT(0.41400003, car_spec.ride_height);
TEST_ASSERT_EQUAL_FLOAT(2.1244245, car_spec.mu[0]);
TEST_ASSERT_EQUAL_FLOAT(2.2325289, car_spec.mu[1]);
TEST_ASSERT_EQUAL_FLOAT(2.3518364, car_spec.mu[2]);
TEST_ASSERT_NOT_NULL(car_spec.car_model_actors[0].actor->model);
// Test prepared mesh creation
TEST_ASSERT_EQUAL_INT(17, V11MODEL(model)->ngroups);
int found_test_prep_group = 0;
for (int i = 0; i < V11MODEL(model)->ngroups; i++) {
if (V11MODEL(model)->groups[i].nfaces == 47) {
found_test_prep_group = 1;
TEST_ASSERT_EQUAL_INT(99, V11MODEL(model)->groups[i].nvertices);
TEST_ASSERT_EQUAL_FLOAT(-0.0844900012, V11MODEL(model)->groups[i].vertices[0].p.v[0]);
TEST_ASSERT_EQUAL_FLOAT(0.0440330058, V11MODEL(model)->groups[i].vertices[0].p.v[1]);
TEST_ASSERT_EQUAL_FLOAT(0.1230980009, V11MODEL(model)->groups[i].vertices[0].p.v[2]);
TEST_ASSERT_EQUAL_FLOAT(1.0, V11MODEL(model)->groups[i].vertices[0].map.v[0]);
TEST_ASSERT_EQUAL_FLOAT(0.664765000, V11MODEL(model)->groups[i].vertices[0].map.v[1]);
TEST_ASSERT_EQUAL_FLOAT(-0.0071384655, V11MODEL(model)->groups[i].vertices[0].n.v[0]);
TEST_ASSERT_EQUAL_FLOAT(0.9597771764, V11MODEL(model)->groups[i].vertices[0].n.v[1]);
TEST_ASSERT_EQUAL_FLOAT(-0.2806721628, V11MODEL(model)->groups[i].vertices[0].n.v[2]);
break;
}
}
if (!found_test_prep_group) {
TEST_FAIL_MESSAGE("expected prep group not found");
}
// for (int i = 0; i < V11MODEL(model)->ngroups; i++) {
// printf("group %d, nfaces=%d, verts=%d\n", i, V11MODEL(model)->groups[i].nfaces, V11MODEL(model)->groups[i].nvertices);
// for (int j = 0; j < V11MODEL(model)->groups[i].nvertices; j++) {
// printf("(%.10f %.10f %.10f), (%.9f %.9f), (%.10f %.10f %.10f)\n",
// V11MODEL(model)->groups[i].vertices[j].p.v[j], V11MODEL(model)->groups[i].vertices[j].p.v[1], V11MODEL(model)->groups[i].vertices[j].p.v[2],
// V11MODEL(model)->groups[i].vertices[j].map.v[j], V11MODEL(model)->groups[i].vertices[j].map.v[1],
// V11MODEL(model)->groups[i].vertices[j].n.v[j], V11MODEL(model)->groups[i].vertices[j].n.v[1], V11MODEL(model)->groups[i].vertices[j].n.v[2]);
// }
// }
// for (int j = 0; j < V11MODEL(model)->groups[i].nfaces; j++) {
// printf("(%d %d %d)\n", V11MODEL(model)->groups[i].faces[j].vertices[0], V11MODEL(model)->groups[i].faces[j].vertices[1], V11MODEL(model)->groups[i].faces[j].vertices[2]);
// }
}
void test_loading_LoadOpponentCar() {
REQUIRES_DATA_DIRECTORY();
tCar_spec car_spec;
tBrender_storage storage;
InitialiseStorageSpace(&storage, 50, 50, 50, 50);
for (int i = 0; i < 10; i++) {
LOG_DEBUG("iteration %d", i);
LoadCar("NEWEAGLE.TXT", eDriver_oppo, &car_spec, eFrankie, "playerName", &storage);
ClearOutStorageSpace(&storage);
}
}
void test_loading_suite() {
UnitySetTestFile(__FILE__);
RUN_TEST(test_loading_GetCDPathFromPathsTxtFile);
RUN_TEST(test_loading_OldDRfopen);
RUN_TEST(test_loading_LoadGeneralParameters);
RUN_TEST(test_loading_brfont);
RUN_TEST(test_loading_opponents);
RUN_TEST(test_loading_memread);
RUN_TEST(test_loading_ConvertPixToStripMap);
RUN_TEST(test_loading_LoadCar);
RUN_TEST(test_loading_LoadOpponentCar);
}