From d403afc7fca764f581a21c3bb54ab4d5130ac371 Mon Sep 17 00:00:00 2001 From: CTD Date: Mon, 12 Jan 2015 16:57:05 +0100 Subject: [PATCH] Einfacher Test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plus Bugfix für Gebäude ohne Improvement, damit diese auch die gleiche Funktionalität aus der XML nutzen können. --- src/battle.test.c | 205 ++++++++++++++++++++++++------------------ src/kernel/building.c | 2 +- 2 files changed, 118 insertions(+), 89 deletions(-) diff --git a/src/battle.test.c b/src/battle.test.c index d288b2661..e72a9d5ac 100644 --- a/src/battle.test.c +++ b/src/battle.test.c @@ -63,125 +63,154 @@ static int add_two(building * b, unit * u, building_bonus bonus) { static void test_defenders_get_building_bonus(CuTest * tc) { - unit *du, *au; - region *r; - building * bld; - fighter *df, *af; - battle *b; - side *ds, *as; - int diff; - troop dt, at; - building_type * btype; + unit *du, *au; + region *r; + building * bld; + fighter *df, *af; + battle *b; + side *ds, *as; + int diff; + troop dt, at; + building_type * btype; - test_cleanup(); - test_create_world(); - r = findregion(0, 0); - btype = bt_get_or_create("castle"); - btype->protection = &add_two; - bld = test_create_building(r, btype); - bld->size = 10; + test_cleanup(); + test_create_world(); + r = findregion(0, 0); + btype = bt_get_or_create("castle"); + btype->protection = &add_two; + bld = test_create_building(r, btype); + bld->size = 10; - du = test_create_unit(test_create_faction(rc_find("human")), r); - au = test_create_unit(test_create_faction(rc_find("human")), r); - u_set_building(du, bld); + du = test_create_unit(test_create_faction(rc_find("human")), r); + au = test_create_unit(test_create_faction(rc_find("human")), r); + u_set_building(du, bld); - b = make_battle(r); - ds = make_side(b, du->faction, 0, 0, 0); - df = make_fighter(b, du, ds, false); - as = make_side(b, au->faction, 0, 0, 0); - af = make_fighter(b, au, as, true); + b = make_battle(r); + ds = make_side(b, du->faction, 0, 0, 0); + df = make_fighter(b, du, ds, false); + as = make_side(b, au->faction, 0, 0, 0); + af = make_fighter(b, au, as, true); - CuAssertPtrEquals(tc, bld, df->building); - CuAssertPtrEquals(tc, 0, af->building); + CuAssertPtrEquals(tc, bld, df->building); + CuAssertPtrEquals(tc, 0, af->building); - dt.fighter = df; - dt.index = 0; - at.fighter = af; - at.index = 0; + dt.fighter = df; + dt.index = 0; + at.fighter = af; + at.index = 0; - diff = skilldiff(at, dt, 0); - CuAssertIntEquals(tc, -2, diff); + diff = skilldiff(at, dt, 0); + CuAssertIntEquals(tc, -2, diff); - diff = skilldiff(dt, at, 0); - CuAssertIntEquals(tc, 0, diff); + diff = skilldiff(dt, at, 0); + CuAssertIntEquals(tc, 0, diff); free_battle(b); test_cleanup(); } static void test_attackers_get_no_building_bonus(CuTest * tc) { - unit *au; - region *r; - building * bld; - fighter *af; - battle *b; - side *as; - building_type * btype; + unit *au; + region *r; + building * bld; + fighter *af; + battle *b; + side *as; + building_type * btype; - test_cleanup(); - test_create_world(); - r = findregion(0, 0); - btype = bt_get_or_create("castle"); - btype->protection = &add_two; - bld = test_create_building(r, btype); - bld->size = 10; + test_cleanup(); + test_create_world(); + r = findregion(0, 0); + btype = bt_get_or_create("castle"); + btype->protection = &add_two; + bld = test_create_building(r, btype); + bld->size = 10; - au = test_create_unit(test_create_faction(rc_find("human")), r); - u_set_building(au, bld); + au = test_create_unit(test_create_faction(rc_find("human")), r); + u_set_building(au, bld); - b = make_battle(r); - as = make_side(b, au->faction, 0, 0, 0); - af = make_fighter(b, au, as, true); + b = make_battle(r); + as = make_side(b, au->faction, 0, 0, 0); + af = make_fighter(b, au, as, true); - CuAssertPtrEquals(tc, 0, af->building); + CuAssertPtrEquals(tc, 0, af->building); free_battle(b); test_cleanup(); } static void test_building_bonus_respects_size(CuTest * tc) { - unit *au, *du; - region *r; - building * bld; - fighter *af, *df; - battle *b; - side *as; - building_type * btype; - faction * f; + unit *au, *du; + region *r; + building * bld; + fighter *af, *df; + battle *b; + side *as; + building_type * btype; + faction * f; - test_cleanup(); - test_create_world(); - r = findregion(0, 0); - btype = bt_get_or_create("castle"); - btype->protection = &add_two; - bld = test_create_building(r, btype); - bld->size = 10; + test_cleanup(); + test_create_world(); + r = findregion(0, 0); + btype = bt_get_or_create("castle"); + btype->protection = &add_two; + bld = test_create_building(r, btype); + bld->size = 10; - f = test_create_faction(rc_find("human")); - au = test_create_unit(f, r); - scale_number(au, 9); - u_set_building(au, bld); - du = test_create_unit(f, r); - u_set_building(du, bld); - scale_number(du, 2); + f = test_create_faction(rc_find("human")); + au = test_create_unit(f, r); + scale_number(au, 9); + u_set_building(au, bld); + du = test_create_unit(f, r); + u_set_building(du, bld); + scale_number(du, 2); - b = make_battle(r); - as = make_side(b, au->faction, 0, 0, 0); - af = make_fighter(b, au, as, false); - df = make_fighter(b, du, as, false); + b = make_battle(r); + as = make_side(b, au->faction, 0, 0, 0); + af = make_fighter(b, au, as, false); + df = make_fighter(b, du, as, false); - CuAssertPtrEquals(tc, bld, af->building); - CuAssertPtrEquals(tc, 0, df->building); + CuAssertPtrEquals(tc, bld, af->building); + CuAssertPtrEquals(tc, 0, df->building); free_battle(b); test_cleanup(); } +static void test_building_defence_bonus(CuTest * tc) +{ + unit *au; + region *r; + building * bld; + building_type * btype; + faction * f; + int def; + test_cleanup(); + test_create_world(); + r = findregion(0, 0); + register_buildings(); + btype = bt_get_or_create("castle"); + btype->protection = get_function("building_protection"); + btype->construction->defense_bonus = 3; + bld = test_create_building(r, btype); + bld->size = 1; + + f = test_create_faction(rc_find("human")); + au = test_create_unit(f, r); + scale_number(au, 1); + u_set_building(au, bld); + + def = btype->protection(bld, au, DEFENSE_BONUS); + CuAssertIntEquals(tc, 3, def); + test_cleanup(); +} + CuSuite *get_battle_suite(void) { - CuSuite *suite = CuSuiteNew(); - SUITE_ADD_TEST(suite, test_make_fighter); - SUITE_ADD_TEST(suite, test_defenders_get_building_bonus); - SUITE_ADD_TEST(suite, test_attackers_get_no_building_bonus); - SUITE_ADD_TEST(suite, test_building_bonus_respects_size); - return suite; + CuSuite *suite = CuSuiteNew(); + SUITE_ADD_TEST(suite, test_make_fighter); + SUITE_ADD_TEST(suite, test_defenders_get_building_bonus); + SUITE_ADD_TEST(suite, test_attackers_get_no_building_bonus); + SUITE_ADD_TEST(suite, test_building_bonus_respects_size); + SUITE_ADD_TEST(suite, test_building_defence_bonus); + return suite; } diff --git a/src/kernel/building.c b/src/kernel/building.c index 722b5d994..f74976661 100644 --- a/src/kernel/building.c +++ b/src/kernel/building.c @@ -322,7 +322,7 @@ static int building_protection(building * b, unit * u, building_bonus bonus) int i = 0; int bsize = buildingeffsize(b, false); const construction *cons = b->type->construction; - if (!cons || !cons->improvement) { + if (!cons) { return 0; }