From 58cbc3ccbc1623729d7a75e3322e18f80bd23b03 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 25 May 2012 16:15:21 -0700 Subject: [PATCH] add some tests for pools, because I found a bug here and we don't want to have that happen again. --- src/items/xerewards.c | 5 +++-- src/kernel.vcxproj | 1 + src/kernel.vcxproj.filters | 3 +++ src/kernel/item.c | 2 +- src/kernel/item.h | 1 - src/kernel/magic.c | 3 ++- src/kernel/pool.c | 7 +++++++ src/kernel/pool_test.c | 43 ++++++++++++++++++++++++++++++++++++++ src/tests.c | 2 ++ 9 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 src/kernel/pool_test.c diff --git a/src/items/xerewards.c b/src/items/xerewards.c index f06a667ac..fb1a9595d 100644 --- a/src/items/xerewards.c +++ b/src/items/xerewards.c @@ -29,6 +29,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include #include +#include /* util includes */ #include @@ -59,7 +60,7 @@ use_skillpotion(struct unit *u, const struct item_type *itype, int amount, } ADDMSG(&u->faction->msgs, msg_message("skillpotion_use", "unit", u)); - res_changeitem(u, itype->rtype, -amount); + change_resource(u, itype->rtype, -amount); return 0; } @@ -81,7 +82,7 @@ use_manacrystal(struct unit *u, const struct item_type *itype, int amount, ADDMSG(&u->faction->msgs, msg_message("manacrystal_use", "unit aura", u, sp)); - res_changeitem(u, itype->rtype, -amount); + change_resource(u, itype->rtype, -amount); return 0; } diff --git a/src/kernel.vcxproj b/src/kernel.vcxproj index 78a213902..24d6df48b 100644 --- a/src/kernel.vcxproj +++ b/src/kernel.vcxproj @@ -117,6 +117,7 @@ + diff --git a/src/kernel.vcxproj.filters b/src/kernel.vcxproj.filters index 906d6566d..c75975ed2 100644 --- a/src/kernel.vcxproj.filters +++ b/src/kernel.vcxproj.filters @@ -322,6 +322,9 @@ kernel + + kernel + diff --git a/src/kernel/item.c b/src/kernel/item.c index e9473ff10..c2ba35c65 100644 --- a/src/kernel/item.c +++ b/src/kernel/item.c @@ -96,7 +96,7 @@ static int res_changepeasants(unit * u, const resource_type * rtype, int delta) return u->region->land->peasants; } -int res_changeitem(unit * u, const resource_type * rtype, int delta) +static int res_changeitem(unit * u, const resource_type * rtype, int delta) { int num; if (rtype == oldresourcetype[R_STONE] && u->race == new_race[RC_STONEGOLEM] diff --git a/src/kernel/item.h b/src/kernel/item.h index f470381a7..7ff3b9454 100644 --- a/src/kernel/item.h +++ b/src/kernel/item.h @@ -343,7 +343,6 @@ extern "C" { int get_money(const struct unit *); int set_money(struct unit *, int); int change_money(struct unit *, int); - int res_changeitem(struct unit *u, const resource_type * rtype, int delta); extern struct attrib_type at_showitem; /* show this potion's description */ diff --git a/src/kernel/magic.c b/src/kernel/magic.c index fff5008e3..4e57bf5be 100644 --- a/src/kernel/magic.c +++ b/src/kernel/magic.c @@ -693,8 +693,9 @@ int change_spellpoints(unit * u, int mp) int sp; m = get_mage(u); - if (!m) + if (!m) { return 0; + } /* verhindere negative Magiepunkte */ sp = MAX(m->spellpoints + mp, 0); diff --git a/src/kernel/pool.c b/src/kernel/pool.c index 997bb3b30..b150f9f9f 100644 --- a/src/kernel/pool.c +++ b/src/kernel/pool.c @@ -41,12 +41,19 @@ int get_resource(const unit * u, const resource_type * rtype) { const item_type *itype = resource2item(rtype); + assert(rtype); if (rtype->uget) { /* this resource is probably special */ int i = rtype->uget(u, rtype); if (i >= 0) return i; } + else if (rtype->uchange) { + /* this resource is probably special */ + int i = rtype->uchange((unit *)u, rtype, 0); + if (i >= 0) + return i; + } if (itype != NULL) { if (itype == olditemtype[R_STONE] && (u->race->flags & RCF_STONEGOLEM)) { return u->number * GOLEM_STONE; diff --git a/src/kernel/pool_test.c b/src/kernel/pool_test.c new file mode 100644 index 000000000..28d2a827a --- /dev/null +++ b/src/kernel/pool_test.c @@ -0,0 +1,43 @@ +#include + +#include "pool.h" +#include "unit.h" +#include "item.h" +#include "region.h" +#include +#include + +void test_change_resource(CuTest * tc) +{ + struct unit * u; + struct faction * f; + struct region * r; + const char * names[] = { "money", "aura", "permaura", "horse", "hp", 0 }; + int i; + + test_cleanup(); + test_create_world(); + skill_enabled[SK_MAGIC] = 1; + + r = findregion(0, 0); + f = test_create_faction(0); + u = test_create_unit(f, r); + CuAssertPtrNotNull(tc, u); + set_level(u, SK_MAGIC, 5); + create_mage(u, M_DRAIG); + + for (i=0;names[i];++i) { + const struct resource_type *rtype = rt_find(names[i]); + int have = get_resource(u, rtype); + CuAssertIntEquals(tc, have+1, change_resource(u, rtype, 1)); + CuAssertIntEquals(tc, have+1, get_resource(u, rtype)); + } +} + +CuSuite *get_pool_suite(void) +{ + CuSuite *suite = CuSuiteNew(); +/* SUITE_ADD_TEST(suite, test_pool); */ + SUITE_ADD_TEST(suite, test_change_resource); + return suite; +} diff --git a/src/tests.c b/src/tests.c index e2ef1df7c..4dcdaa1b3 100644 --- a/src/tests.c +++ b/src/tests.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -51,6 +52,7 @@ int RunAllTests(void) CuSuiteAddSuite(suite, get_functions_suite()); CuSuiteAddSuite(suite, get_umlaut_suite()); /* kernel */ + CuSuiteAddSuite(suite, get_pool_suite()); CuSuiteAddSuite(suite, get_curse_suite()); CuSuiteAddSuite(suite, get_equipment_suite()); CuSuiteAddSuite(suite, get_item_suite());