#include #include #include "game/rituals.hpp" #include "algos/simplefsm.hpp" using namespace fuc2; namespace rituals_tests { void test_ritual_engine_basics() { ritual::Engine re("assets/rituals.json"); auto craft_state = re.start(); re.set_state(craft_state, "has_spikes", true); re.plan(craft_state); fmt::println("\n\n------------ TEST WILL DO PIERCE"); craft_state.dump(); CHECK(craft_state.will_do("pierce_type")); CHECK(craft_state.start != craft_state.original); craft_state.reset(); CHECK(craft_state.start == craft_state.original); re.set_state(craft_state, "has_magick", true); re.set_state(craft_state, "has_spikes", true); re.plan(craft_state); fmt::println("\n\n------------ TEST WILL DO MAGICK TOO"); craft_state.dump(); CHECK(craft_state.will_do("pierce_type")); craft_state.pop(); CHECK(craft_state.will_do("magick_type")); craft_state.reset(); re.set_state(craft_state, "has_magick", true); re.set_state(craft_state, "has_spikes", true); re.set_state(craft_state, "shiny_bauble", true); re.plan(craft_state); CHECK(craft_state.is_combined()); fmt::println("\n\n------------ TEST WILL DO DAMAGE BOOST"); craft_state.dump(); craft_state.reset(); re.set_state(craft_state, "has_magick", true); re.set_state(craft_state, "cursed_item", true); re.set_state(craft_state, "shiny_bauble", true); re.plan(craft_state); CHECK(craft_state.is_combined()); fmt::println("\n\n------------ TEST WILL DO LARGE DAMAGE BOOST"); craft_state.dump(); } void test_craft_state_can_be_finalized() { ritual::Engine re("assets/rituals.json"); auto craft_state = re.start(); re.set_state(craft_state, "has_magick", true); re.set_state(craft_state, "cursed_item", true); re.set_state(craft_state, "shiny_bauble", true); re.plan(craft_state); CHECK(craft_state.is_combined()); fmt::println("\n\n------------ CYCLES AVOIDED"); craft_state.dump(); auto ritual = re.finalize(craft_state); ritual.dump(); } void test_the_ritual_belt_works() { ritual::Belt the_belt; ritual::Engine re; auto craft_state = re.start(); re.set_state(craft_state, "has_magick", true); re.plan(craft_state); CHECK(craft_state.is_combined()); craft_state.dump(); { auto ritual = re.finalize(craft_state); the_belt.equip(0, ritual); CHECK(the_belt.has(0)); } { auto ritual = the_belt.get(0); ritual.dump(); } { the_belt.unequip(0); CHECK(!the_belt.has(0)); } craft_state.reset(); CHECK(craft_state.plan.script.size() == 0); CHECK(!craft_state.plan.complete); CHECK(craft_state.start == craft_state.original); CHECK(!craft_state.is_combined()); } void test_ritual_blanket_basic_operations() { ritual::Blanket blanket; ritual::Entity other = blanket.add("rusty_nails"); ritual::Entity ent = blanket.add("severed_finger"); auto& name = blanket.get(ent); CHECK(name == "severed_finger"); CHECK(blanket.has(ent)); blanket.remove(ent); CHECK(!blanket.has(ent)); CHECK(blanket.has(other)); CHECK(!blanket.is_selected(ent)); CHECK(!blanket.is_selected(other)); blanket.select(ent); CHECK(blanket.is_selected(ent)); CHECK(!blanket.is_selected(other)); blanket.deselect(ent); CHECK(!blanket.is_selected(ent)); blanket.select(ent); blanket.select(other); CHECK(blanket.is_selected(ent)); CHECK(blanket.is_selected(other)); blanket.reset(); CHECK(!blanket.is_selected(ent)); CHECK(!blanket.is_selected(other)); CHECK(blanket.selected.empty()); CHECK(blanket.selected.size() == 0); } fuc2::Set TESTS{ .name="rituals", .tests={ TEST(test_ritual_engine_basics), TEST(test_ritual_blanket_basic_operations), TEST(test_the_ritual_belt_works), TEST(test_craft_state_can_be_finalized), } }; }