diff --git a/src/study.test.c b/src/study.test.c index ecb7f37ad..1527b628d 100644 --- a/src/study.test.c +++ b/src/study.test.c @@ -305,7 +305,27 @@ static void test_study_cmd(CuTest *tc) { learn_reset(); CuAssertPtrEquals(tc, u, log_learners[0].u); CuAssertIntEquals(tc, SK_CROSSBOW, log_learners[0].sk); - CuAssertIntEquals(tc, 30, log_learners[0].days); + CuAssertIntEquals(tc, STUDYDAYS, log_learners[0].days); + test_cleanup(); +} + +static void test_study_cost(CuTest *tc) { + unit *u; + const struct item_type *itype; + test_cleanup(); + init_resources(); + itype = get_resourcetype(R_SILVER)->itype; + u = test_create_unit(test_create_faction(0), test_create_region(0, 0, 0)); + scale_number(u, 2); + u->thisorder = create_order(K_STUDY, u->faction->locale, "ALCHEMY"); + i_change(&u->items, itype, u->number * study_cost(u, SK_ALCHEMY)); + learn_inject(); + study_cmd(u, u->thisorder); + learn_reset(); + CuAssertPtrEquals(tc, u, log_learners[0].u); + CuAssertIntEquals(tc, SK_ALCHEMY, log_learners[0].sk); + CuAssertIntEquals(tc, STUDYDAYS*u->number, log_learners[0].days); + CuAssertIntEquals(tc, 0, i_get(u->items, itype)); test_cleanup(); } @@ -325,7 +345,27 @@ static void test_teach_cmd(CuTest *tc) { learn_reset(); CuAssertPtrEquals(tc, u, log_learners[0].u); CuAssertIntEquals(tc, SK_CROSSBOW, log_learners[0].sk); - CuAssertIntEquals(tc, 600, log_learners[0].days); + CuAssertIntEquals(tc, STUDYDAYS*2*u->number, log_learners[0].days); + test_cleanup(); +} + +static void test_teach_too_many(CuTest *tc) { + unit *u, *ut; + test_cleanup(); + init_resources(); + u = test_create_unit(test_create_faction(0), test_create_region(0, 0, 0)); + scale_number(u, 20); + u->thisorder = create_order(K_STUDY, u->faction->locale, "CROSSBOW"); + ut = test_create_unit(u->faction, u->region); + set_level(ut, SK_CROSSBOW, TEACHDIFFERENCE); + ut->thisorder = create_order(K_TEACH, u->faction->locale, itoa36(u->no)); + learn_inject(); + teach_cmd(ut, ut->thisorder); + study_cmd(u, u->thisorder); + learn_reset(); + CuAssertPtrEquals(tc, u, log_learners[0].u); + CuAssertIntEquals(tc, SK_CROSSBOW, log_learners[0].sk); + CuAssertIntEquals(tc, STUDYDAYS * 10 + STUDYDAYS * u->number, log_learners[0].days); test_cleanup(); } @@ -333,7 +373,9 @@ CuSuite *get_study_suite(void) { CuSuite *suite = CuSuiteNew(); SUITE_ADD_TEST(suite, test_study_cmd); + SUITE_ADD_TEST(suite, test_study_cost); SUITE_ADD_TEST(suite, test_teach_cmd); + SUITE_ADD_TEST(suite, test_teach_too_many); SUITE_ADD_TEST(suite, test_learn_skill_single); SUITE_ADD_TEST(suite, test_learn_skill_multi); SUITE_ADD_TEST(suite, test_study_no_teacher);