do not call log10(0) for new lighthouses.

some tests for LEARN MAGIC.
This commit is contained in:
Enno Rehling 2016-09-11 11:02:04 +02:00
parent 3a438ffd4f
commit 5dc9ccb03e
4 changed files with 63 additions and 14 deletions

View File

@ -522,7 +522,7 @@ static void test_pay_cmd_other_building(CuTest *tc) {
building *b; building *b;
char cmd[32]; char cmd[32];
test_cleanup(); test_setup();
setup_pay_cmd(&fix); setup_pay_cmd(&fix);
f = fix.u1->faction; f = fix.u1->faction;
b = test_create_building(fix.u1->region, bt_get_or_create("lighthouse")); b = test_create_building(fix.u1->region, bt_get_or_create("lighthouse"));

View File

@ -8,6 +8,7 @@
#include <kernel/region.h> #include <kernel/region.h>
#include <kernel/terrain.h> #include <kernel/terrain.h>
#include <kernel/unit.h> #include <kernel/unit.h>
#include <util/log.h>
#include <util/attrib.h> #include <util/attrib.h>
#include <assert.h> #include <assert.h>
@ -25,14 +26,12 @@ static attrib_type at_lighthouse = {
*/ */
void update_lighthouse(building * lh) void update_lighthouse(building * lh)
{ {
if (is_building_type(lh->type, "lighthouse")) { if (lh->size>0 && is_building_type(lh->type, "lighthouse")) {
region *r = lh->region; region *r = lh->region;
int d = (int)log10(lh->size) + 1; int d = (int)log10(lh->size) + 1;
int x; int x;
if (lh->size > 0) { r->flags |= RF_LIGHTHOUSE;
r->flags |= RF_LIGHTHOUSE;
}
for (x = -d; x <= d; ++x) { for (x = -d; x <= d; ++x) {
int y; int y;
@ -40,6 +39,7 @@ void update_lighthouse(building * lh)
attrib *a; attrib *a;
region *r2; region *r2;
int px = r->x + x, py = r->y + y; int px = r->x + x, py = r->y + y;
pnormalize(&px, &py, rplane(r)); pnormalize(&px, &py, rplane(r));
r2 = findregion(px, py); r2 = findregion(px, py);
if (!r2 || !fval(r2->terrain, SEA_REGION)) if (!r2 || !fval(r2->terrain, SEA_REGION))

View File

@ -318,15 +318,58 @@ static void test_study_cmd(CuTest *tc) {
test_cleanup(); test_cleanup();
} }
static void test_study_magic(CuTest *tc) {
unit *u;
faction *f;
const struct locale *lang;
const struct resource_type *rtype;
test_setup();
init_resources();
f = test_create_faction(0);
u = test_create_unit(f, test_create_region(0, 0, 0));
lang = f->locale;
CuAssertPtrNotNull(tc, rtype = get_resourcetype(R_SILVER));
u->thisorder = create_order(K_STUDY, lang, "%s", skillnames[SK_MAGIC]);
study_cmd(u, u->thisorder);
CuAssertPtrNotNull(tc, test_find_messagetype(f->msgs, "error178"));
free_order(u->thisorder);
test_clear_messages(f);
u->thisorder = create_order(K_STUDY, lang, "%s %s", skillnames[SK_MAGIC], magic_school[M_GWYRRD]);
study_cmd(u, u->thisorder);
CuAssertPtrNotNull(tc, test_find_messagetype(f->msgs, "error65"));
test_clear_messages(f);
i_change(&u->items, rtype->itype, 100);
study_cmd(u, u->thisorder);
CuAssertIntEquals(tc, M_GWYRRD, f->magiegebiet);
CuAssertIntEquals(tc, 0, i_get(u->items, rtype->itype));
CuAssertPtrNotNull(tc, get_mage(u));
CuAssertPtrEquals(tc, 0, test_find_messagetype(f->msgs, "error65"));
CuAssertIntEquals(tc, M_GWYRRD, get_mage(u)->magietyp);
/* the static cost array in study_cost prevents this test:
test_clear_messages(f);
config_set("skills.cost.magic", "50");
i_change(&u->items, rtype->itype, 50);
study_cmd(u, u->thisorder);
CuAssertPtrEquals(tc, 0, test_find_messagetype(f->msgs, "error65"));
*/
test_cleanup();
}
static void test_study_cost(CuTest *tc) { static void test_study_cost(CuTest *tc) {
unit *u; unit *u;
const struct item_type *itype; const struct item_type *itype;
test_setup(); test_setup();
init_resources(); init_resources();
itype = get_resourcetype(R_SILVER)->itype; itype = get_resourcetype(R_SILVER)->itype;
u = test_create_unit(test_create_faction(0), test_create_region(0, 0, 0)); u = test_create_unit(test_create_faction(0), test_create_region(0, 0, 0));
scale_number(u, 2); scale_number(u, 2);
u->thisorder = create_order(K_STUDY, u->faction->locale, "ALCHEMY"); u->thisorder = create_order(K_STUDY, u->faction->locale, skillnames[SK_ALCHEMY]);
i_change(&u->items, itype, u->number * study_cost(u, SK_ALCHEMY)); i_change(&u->items, itype, u->number * study_cost(u, SK_ALCHEMY));
learn_inject(); learn_inject();
study_cmd(u, u->thisorder); study_cmd(u, u->thisorder);
@ -505,6 +548,7 @@ CuSuite *get_study_suite(void)
CuSuite *suite = CuSuiteNew(); CuSuite *suite = CuSuiteNew();
SUITE_ADD_TEST(suite, test_study_cmd); SUITE_ADD_TEST(suite, test_study_cmd);
SUITE_ADD_TEST(suite, test_study_cost); SUITE_ADD_TEST(suite, test_study_cost);
SUITE_ADD_TEST(suite, test_study_magic);
SUITE_ADD_TEST(suite, test_teach_cmd); SUITE_ADD_TEST(suite, test_teach_cmd);
SUITE_ADD_TEST(suite, test_teach_two); SUITE_ADD_TEST(suite, test_teach_two);
SUITE_ADD_TEST(suite, test_teach_one_to_many); SUITE_ADD_TEST(suite, test_teach_one_to_many);

View File

@ -94,16 +94,14 @@ struct locale * test_create_locale(void) {
for (i = 0; i != MAXKEYWORDS; ++i) { for (i = 0; i != MAXKEYWORDS; ++i) {
locale_setstring(loc, mkname("keyword", keywords[i]), keywords[i]); locale_setstring(loc, mkname("keyword", keywords[i]), keywords[i]);
} }
for (i = 0; i != MAXSKILLS; ++i) {
locale_setstring(loc, mkname("skill", skillnames[i]), skillnames[i]);
}
for (i = 0; i != MAXPARAMS; ++i) { for (i = 0; i != MAXPARAMS; ++i) {
locale_setstring(loc, parameters[i], parameters[i]); locale_setstring(loc, parameters[i], parameters[i]);
test_translate_param(loc, i, parameters[i]); test_translate_param(loc, i, parameters[i]);
} }
init_parameters(loc); for (i = 0; i != MAXMAGIETYP; ++i) {
init_keywords(loc); locale_setstring(loc, mkname("school", magic_school[i]), magic_school[i]);
init_skills(loc); }
init_locale(loc);
} }
return loc; return loc;
} }
@ -163,6 +161,13 @@ static void test_reset(void) {
int i; int i;
turn = 0; turn = 0;
default_locale = 0; default_locale = 0;
if (errno) {
int error = errno;
errno = 0;
log_error("errno: %d (%s)", error, strerror(error));
}
free_gamedata(); free_gamedata();
free_terrains(); free_terrains();
free_resources(); free_resources();
@ -184,13 +189,13 @@ static void test_reset(void) {
for (i = 0; i != MAXKEYWORDS; ++i) { for (i = 0; i != MAXKEYWORDS; ++i) {
enable_keyword(i, true); enable_keyword(i, true);
} }
random_source_reset();
if (errno) { if (errno) {
int error = errno; int error = errno;
errno = 0; errno = 0;
log_error("errno: %d (%s)", error, strerror(error)); log_error("errno: %d (%s)", error, strerror(error));
} }
random_source_reset();
} }
void test_setup(void) { void test_setup(void) {