#ifdef TESTS_BUILD
#define CATCH_CONFIG_MAIN
#include "../../extern/catch.hpp"
#include "../../src/Library/Species/SpeciesLibrary.hpp"

TEST_CASE("Able to build and destroy empty library", "library") {
    auto lib = new PkmnLib::Library::SpeciesLibrary();
    delete lib;
}

TEST_CASE("Able to build, destroy and insert library", "library") {
    auto lib = new PkmnLib::Library::SpeciesLibrary();
    lib->Insert("foo"_cnc,
                new PkmnLib::Library::PokemonSpecies(
                    1, "foo"_cnc,
                    new PkmnLib::Library::PokemonForme(
                        "default"_cnc, 1.0f, 1.0f, 100, {0},
                        CreatureLib::Library::StatisticSet<uint16_t>(100, 100, 100, 100, 100, 100), {"testAbility"_cnc},
                        {"testHiddenAbility"_cnc}, new CreatureLib::Library::LearnableAttacks(100)),
                    0.5f, "testGrowthRate"_cnc, 100, 100));
    delete lib;
}

TEST_CASE("Able to insert and retrieve from library", "library") {
    auto lib = new PkmnLib::Library::SpeciesLibrary();
    lib->Insert("foo"_cnc,
                new PkmnLib::Library::PokemonSpecies(
                    1, "foo"_cnc,
                    new PkmnLib::Library::PokemonForme(
                        "default"_cnc, 1.0f, 1.0f, 100, {0},
                        CreatureLib::Library::StatisticSet<uint16_t>(100, 100, 100, 100, 100, 100), {"testAbility"_cnc},
                        {"testHiddenAbility"_cnc}, new CreatureLib::Library::LearnableAttacks(100)),
                    0.5f, "testGrowthRate"_cnc, 100, 100));
    auto val = lib->Get("foo"_cnc);
    REQUIRE(val->GetName() == "foo");
    delete lib;
}

#endif