Files
Omino/test/native/test_tama/test_tama.cpp
T

204 lines
6.6 KiB
C++

#include <unity.h>
#include "TamaLogic.h"
void setUp() {}
void tearDown() {}
// Helper: build a minimal BuddyState for updateTama calls
static BuddyState makeBuddy(uint32_t revertAt = 0, Mood m = MOOD_NORMAL) {
BuddyState b{};
b.revertAt = revertAt;
b.mood = m;
return b;
}
// ── initTama ──────────────────────────────────────────────────────────────
void test_initTama_sets_initial_values() {
TamaState t{};
initTama(t, 0);
TEST_ASSERT_EQUAL(10, t.hunger);
TEST_ASSERT_EQUAL(80, t.happiness);
TEST_ASSERT_EQUAL(90, t.hygiene);
}
void test_initTama_sets_tick_timestamps() {
TamaState t{};
initTama(t, 1000);
TEST_ASSERT_EQUAL(1000u + 120000u, t.nextHungerTick);
TEST_ASSERT_EQUAL(1000u + 180000u, t.nextHappyTick);
TEST_ASSERT_EQUAL(1000u + 240000u, t.nextHygieneTick);
}
// ── updateTama ticks ──────────────────────────────────────────────────────
void test_updateTama_increments_hunger_on_tick() {
TamaState t{};
initTama(t, 0); // nextHungerTick = 120000
BuddyState b = makeBuddy();
updateTama(t, b, 120000);
TEST_ASSERT_EQUAL(11, t.hunger);
}
void test_updateTama_does_not_increment_hunger_before_tick() {
TamaState t{};
initTama(t, 0);
BuddyState b = makeBuddy();
updateTama(t, b, 119999);
TEST_ASSERT_EQUAL(10, t.hunger);
}
void test_updateTama_caps_hunger_at_100() {
TamaState t{};
initTama(t, 0);
t.hunger = 100;
BuddyState b = makeBuddy();
updateTama(t, b, 120000);
TEST_ASSERT_EQUAL(100, t.hunger);
}
void test_updateTama_decrements_happiness_on_tick() {
TamaState t{};
initTama(t, 0); // nextHappyTick = 180000
BuddyState b = makeBuddy();
updateTama(t, b, 180000);
TEST_ASSERT_EQUAL(79, t.happiness);
}
void test_updateTama_caps_happiness_at_zero() {
TamaState t{};
initTama(t, 0);
t.happiness = 0;
BuddyState b = makeBuddy();
updateTama(t, b, 180000);
TEST_ASSERT_EQUAL(0, t.happiness);
}
void test_updateTama_decrements_hygiene_on_tick() {
TamaState t{};
initTama(t, 0); // nextHygieneTick = 240000
BuddyState b = makeBuddy();
updateTama(t, b, 240000);
TEST_ASSERT_EQUAL(89, t.hygiene);
}
// ── updateTama mood returns ───────────────────────────────────────────────
void test_updateTama_returns_hungry_when_hunger_high() {
TamaState t{};
initTama(t, 0);
t.hunger = 80;
t.nextHungerTick = 999999; // prevent tick
BuddyState b = makeBuddy();
TEST_ASSERT_EQUAL(MOOD_HUNGRY, updateTama(t, b, 0));
}
void test_updateTama_returns_dirty_when_hygiene_low() {
TamaState t{};
initTama(t, 0);
t.hygiene = 20;
t.nextHygieneTick = 999999;
BuddyState b = makeBuddy();
TEST_ASSERT_EQUAL(MOOD_DIRTY, updateTama(t, b, 0));
}
void test_updateTama_returns_playful_when_happiness_low() {
TamaState t{};
initTama(t, 0);
t.happiness = 20;
t.nextHappyTick = 999999;
BuddyState b = makeBuddy();
TEST_ASSERT_EQUAL(MOOD_PLAYFUL, updateTama(t, b, 0));
}
void test_updateTama_no_override_when_revertAt_set() {
TamaState t{};
initTama(t, 0);
t.hunger = 90;
t.nextHungerTick = 999999;
BuddyState b = makeBuddy(5000); // revertAt != 0 → guard blocks
TEST_ASSERT_EQUAL(MOOD_NORMAL, updateTama(t, b, 0));
}
void test_updateTama_returns_normal_when_needs_ok() {
TamaState t{};
initTama(t, 0); // hunger=10, happy=80, hygiene=90 — all fine
t.nextHungerTick = t.nextHappyTick = t.nextHygieneTick = 999999;
BuddyState b = makeBuddy();
TEST_ASSERT_EQUAL(MOOD_NORMAL, updateTama(t, b, 0));
}
// ── tamaFeed ──────────────────────────────────────────────────────────────
void test_tamaFeed_reduces_hunger_by_30() {
TamaState t{};
t.hunger = 50;
tamaFeed(t);
TEST_ASSERT_EQUAL(20, t.hunger);
}
void test_tamaFeed_floors_hunger_at_zero() {
TamaState t{};
t.hunger = 10;
tamaFeed(t);
TEST_ASSERT_EQUAL(0, t.hunger);
}
// ── tamaPlay ──────────────────────────────────────────────────────────────
void test_tamaPlay_increases_happiness_by_25() {
TamaState t{};
t.happiness = 50;
tamaPlay(t);
TEST_ASSERT_EQUAL(75, t.happiness);
}
void test_tamaPlay_caps_happiness_at_100() {
TamaState t{};
t.happiness = 90;
tamaPlay(t);
TEST_ASSERT_EQUAL(100, t.happiness);
}
// ── tamaClean ─────────────────────────────────────────────────────────────
void test_tamaClean_increases_hygiene_by_40() {
TamaState t{};
t.hygiene = 50;
tamaClean(t);
TEST_ASSERT_EQUAL(90, t.hygiene);
}
void test_tamaClean_caps_hygiene_at_100() {
TamaState t{};
t.hygiene = 80;
tamaClean(t);
TEST_ASSERT_EQUAL(100, t.hygiene);
}
// ── main ──────────────────────────────────────────────────────────────────
int main() {
UNITY_BEGIN();
RUN_TEST(test_initTama_sets_initial_values);
RUN_TEST(test_initTama_sets_tick_timestamps);
RUN_TEST(test_updateTama_increments_hunger_on_tick);
RUN_TEST(test_updateTama_does_not_increment_hunger_before_tick);
RUN_TEST(test_updateTama_caps_hunger_at_100);
RUN_TEST(test_updateTama_decrements_happiness_on_tick);
RUN_TEST(test_updateTama_caps_happiness_at_zero);
RUN_TEST(test_updateTama_decrements_hygiene_on_tick);
RUN_TEST(test_updateTama_returns_hungry_when_hunger_high);
RUN_TEST(test_updateTama_returns_dirty_when_hygiene_low);
RUN_TEST(test_updateTama_returns_playful_when_happiness_low);
RUN_TEST(test_updateTama_no_override_when_revertAt_set);
RUN_TEST(test_updateTama_returns_normal_when_needs_ok);
RUN_TEST(test_tamaFeed_reduces_hunger_by_30);
RUN_TEST(test_tamaFeed_floors_hunger_at_zero);
RUN_TEST(test_tamaPlay_increases_happiness_by_25);
RUN_TEST(test_tamaPlay_caps_happiness_at_100);
RUN_TEST(test_tamaClean_increases_hygiene_by_40);
RUN_TEST(test_tamaClean_caps_hygiene_at_100);
return UNITY_END();
}