From 9eb47c865699076bfa938c6fce971232ab63d54e Mon Sep 17 00:00:00 2001 From: "James P. Howard, II" Date: Fri, 9 Sep 2022 22:10:19 -0400 Subject: [PATCH] Move to exception-based error handling --- docs/changelog.rst | 1 + examples/bankreserves/bankreserves.h | 8 +- examples/bankreserves/person.cc | 18 +- examples/boltzmann1d/boltzmann1d.cc | 14 +- examples/boltzmann2d/boltzmann2d.cc | 14 +- include/kami/exception.h | 44 +++ include/kami/grid1d.h | 17 +- include/kami/grid2d.h | 16 +- include/kami/model.h | 7 +- include/kami/multigrid1d.h | 2 +- include/kami/multigrid2d.h | 5 +- include/kami/population.h | 6 +- include/kami/position.h | 2 + include/kami/random.h | 5 +- include/kami/reporter.h | 4 +- include/kami/scheduler.h | 9 +- include/kami/sequential.h | 9 +- include/kami/sologrid1d.h | 2 +- include/kami/sologrid2d.h | 2 +- include/kami/staged.h | 14 +- src/libkami/CMakeLists.txt | 1 + src/libkami/grid1d.cc | 51 +-- src/libkami/grid2d.cc | 57 +-- src/libkami/model.cc | 23 +- src/libkami/multigrid1d.cc | 7 +- src/libkami/multigrid2d.cc | 7 +- src/libkami/population.cc | 22 +- src/libkami/random.cc | 9 +- src/libkami/reporter.cc | 19 +- src/libkami/sequential.cc | 48 +-- src/libkami/sologrid1d.cc | 9 +- src/libkami/sologrid2d.cc | 15 +- src/libkami/staged.cc | 66 +--- test/unit-kami-multigrid1d.cc | 139 +++---- test/unit-kami-multigrid2d.cc | 513 +++++++++++++----------- test/unit-kami-population.cc | 10 +- test/unit-kami-random.cc | 36 +- test/unit-kami-reporter.cc | 10 +- test/unit-kami-reporteragent.cc | 8 +- test/unit-kami-sequential.cc | 16 +- test/unit-kami-sologrid1d.cc | 133 +++---- test/unit-kami-sologrid2d.cc | 557 ++++++++++++++------------- test/unit-kami-staged.cc | 19 +- 43 files changed, 962 insertions(+), 1012 deletions(-) create mode 100644 include/kami/exception.h diff --git a/docs/changelog.rst b/docs/changelog.rst index b4be913..9a6c2f3 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -1,6 +1,7 @@ Changelog ========= +- :feature:`0` Moved to exception-based error handling - :feature:`0` Added Bank Reserves model to demonstrate reporting - :feature:`0` Added data collecting and reporting modules - :feature:`0` Added some useful constants, for use as random seeds diff --git a/examples/bankreserves/bankreserves.h b/examples/bankreserves/bankreserves.h index fe2d085..d1dea5e 100644 --- a/examples/bankreserves/bankreserves.h +++ b/examples/bankreserves/bankreserves.h @@ -71,7 +71,7 @@ public: */ explicit BankAgent(int reserve_percent) : _reserve_percent(reserve_percent) {}; - inline std::optional> collect() override { + inline std::unique_ptr collect() override { auto ret = std::make_unique(); (*ret)["reserves"] = _reserves; @@ -107,7 +107,7 @@ public: explicit PersonAgent(int wallet, std::shared_ptr &bank) : _wallet(wallet), _bank(bank) {}; - inline std::optional> collect() override { + inline std::unique_ptr collect() override { auto ret = std::make_unique(); (*ret)["savings"] = _savings; @@ -164,8 +164,8 @@ public: explicit BankReservesModel(unsigned int agent_count, unsigned int x_size, unsigned int y_size, unsigned int initial_seed, unsigned int max_initial_wealth); - inline std::optional> collect() override { - return std::nullopt; + inline std::unique_ptr collect() override { + return nullptr; } }; diff --git a/examples/bankreserves/person.cc b/examples/bankreserves/person.cc index 0641489..f9926c4 100644 --- a/examples/bankreserves/person.cc +++ b/examples/bankreserves/person.cc @@ -52,10 +52,9 @@ std::optional PersonAgent::move_agent(std::shared_ptrget_domain(); - auto world = std::static_pointer_cast(domain.value()); + auto world = std::static_pointer_cast(domain); - auto move_list_opt = world->get_neighborhood(agent_id, false, kami::GridNeighborhoodType::Moore); - auto move_list = move_list_opt.value(); + auto move_list = world->get_neighborhood(agent_id, false, kami::GridNeighborhoodType::Moore); std::uniform_int_distribution dist(0, (int) move_list->size() - 1); auto new_location = *std::next(move_list->begin(), dist(*rng)); @@ -72,14 +71,11 @@ std::optional PersonAgent::do_business(std::shared_ptr 0 | _wallet > 0 | _bank->_available_to_loan > 0)) return agent_id; - auto domain = model->get_domain(); - auto world = std::static_pointer_cast(domain.value()); - - auto agents = model->get_population(); - auto population = std::static_pointer_cast(agents.value()); + auto world = std::static_pointer_cast(model->get_domain()); + auto population = model->get_population(); auto location = world->get_location_by_agent(agent_id); - auto cell_mates_opt = world->get_location_contents(location.value()); + auto cell_mates_opt = world->get_location_contents(location); if (!cell_mates_opt) return std::nullopt; @@ -87,7 +83,7 @@ std::optional PersonAgent::do_business(std::shared_ptrsize() < 2) return std::nullopt; @@ -106,7 +102,7 @@ std::optional PersonAgent::do_business(std::shared_ptr(population->get_agent_by_id(customer_id).value()); + auto customer = std::static_pointer_cast(population->get_agent_by_id(customer_id)); console->debug("Agent {} trading amount {} with agent {}", agent_id, trade_amount, customer_id); customer->_wallet += trade_amount; _wallet -= trade_amount; diff --git a/examples/boltzmann1d/boltzmann1d.cc b/examples/boltzmann1d/boltzmann1d.cc index 8577b8c..560619d 100644 --- a/examples/boltzmann1d/boltzmann1d.cc +++ b/examples/boltzmann1d/boltzmann1d.cc @@ -82,12 +82,12 @@ std::optional MoneyAgent1D::move_agent(std::shared_ptrget_domain(); if (!domain) throw (std::domain_error("model is missing domain")); - auto world = std::static_pointer_cast(domain.value()); + auto world = std::static_pointer_cast(domain); auto move_list_opt = world->get_neighborhood(agent_id, false); if (!move_list_opt) return std::nullopt; - auto move_list = move_list_opt.value(); + auto move_list = move_list_opt; std::uniform_int_distribution dist(0, (int) move_list->size() - 1); auto new_location = *std::next(move_list->begin(), dist(*rng)); @@ -105,26 +105,26 @@ std::optional MoneyAgent1D::give_money(std::shared_ptrget_domain(); if (!domain) throw (std::domain_error("model is missing domain")); - auto world = std::static_pointer_cast(domain.value()); + auto world = std::static_pointer_cast(domain); auto agents = model->get_population(); if (!agents) throw (std::domain_error("model is missing population")); - auto population = std::static_pointer_cast(agents.value()); + auto population = std::static_pointer_cast(agents); auto location = world->get_location_by_agent(agent_id); - auto cell_mates_opt = world->get_location_contents(location.value()); + auto cell_mates_opt = world->get_location_contents(location); if (!cell_mates_opt) return std::nullopt; - auto cell_mates = cell_mates_opt.value(); + auto cell_mates = cell_mates_opt; if (cell_mates->size() < 2) return std::nullopt; std::uniform_int_distribution dist(0, (int) cell_mates->size() - 1); auto other_agent_id = *std::next(cell_mates->begin(), dist(*rng)); - auto other_agent = std::static_pointer_cast(population->get_agent_by_id(other_agent_id).value()); + auto other_agent = std::static_pointer_cast(population->get_agent_by_id(other_agent_id)); console->trace("Agent {} giving unit of wealth to agent {}", agent_id, other_agent_id); other_agent->_agent_wealth += 1; diff --git a/examples/boltzmann2d/boltzmann2d.cc b/examples/boltzmann2d/boltzmann2d.cc index 1aef23e..fead8e7 100644 --- a/examples/boltzmann2d/boltzmann2d.cc +++ b/examples/boltzmann2d/boltzmann2d.cc @@ -82,12 +82,12 @@ std::optional MoneyAgent2D::move_agent(const std::shared_ptr< auto domain = model->get_domain(); if (!domain) throw (std::domain_error("model is missing domain")); - auto world = std::static_pointer_cast(domain.value()); + auto world = std::static_pointer_cast(domain); auto move_list_opt = world->get_neighborhood(agent_id, false, kami::GridNeighborhoodType::VonNeumann); if (!move_list_opt) return std::nullopt; - auto move_list = move_list_opt.value(); + auto move_list = move_list_opt; std::uniform_int_distribution dist(0, (int) move_list->size() - 1); auto new_location = *std::next(move_list->begin(), dist(*rng)); @@ -105,26 +105,26 @@ std::optional MoneyAgent2D::give_money(const std::shared_ptrget_domain(); if (!domain) throw (std::domain_error("model is missing domain")); - auto world = std::static_pointer_cast(domain.value()); + auto world = std::static_pointer_cast(domain); auto agents = model->get_population(); if (!agents) throw (std::domain_error("model is missing population")); - auto population = std::static_pointer_cast(agents.value()); + auto population = std::static_pointer_cast(agents); auto location = world->get_location_by_agent(agent_id); - auto cell_mates_opt = world->get_location_contents(location.value()); + auto cell_mates_opt = world->get_location_contents(location); if (!cell_mates_opt) return std::nullopt; - auto cell_mates = cell_mates_opt.value(); + auto cell_mates = cell_mates_opt; if (cell_mates->size() < 2) return std::nullopt; std::uniform_int_distribution dist(0, (int) cell_mates->size() - 1); auto other_agent_id = *std::next(cell_mates->begin(), dist(*rng)); - auto other_agent = std::static_pointer_cast(population->get_agent_by_id(other_agent_id).value()); + auto other_agent = std::static_pointer_cast(population->get_agent_by_id(other_agent_id)); console->trace("Agent {} giving unit of wealth to agent {}", agent_id, other_agent_id); other_agent->_agent_wealth += 1; diff --git a/include/kami/exception.h b/include/kami/exception.h new file mode 100644 index 0000000..5636ac2 --- /dev/null +++ b/include/kami/exception.h @@ -0,0 +1,44 @@ +// +// Created by James Howard on 9/9/22. +// + +#ifndef KAMI_EXCEPTION_H +//! @cond SuppressGuard +#define KAMI_EXCEPTION_H + +#include +#include + +namespace kami::exception { + + class AgentNotFound : public std::logic_error { + public: + explicit AgentNotFound(const char *s) : std::logic_error(s) {}; + + explicit AgentNotFound(const std::string &s) : std::logic_error(s) {}; + }; + + class InvalidOption : public std::invalid_argument { + public: + explicit InvalidOption(const char *s) : std::invalid_argument(s) {}; + + explicit InvalidOption(const std::string &s) : std::invalid_argument(s) {}; + }; + + class LocationUnavailable : public std::domain_error { + public: + explicit LocationUnavailable(const char *s) : std::domain_error(s) {}; + + explicit LocationUnavailable(const std::string &s) : std::domain_error(s) {}; + }; + + class ResourceNotAvailable : public std::logic_error { + public: + explicit ResourceNotAvailable(const char *s) : std::logic_error(s) {}; + + explicit ResourceNotAvailable(const std::string &s) : std::logic_error(s) {}; + }; + +} + +#endif //KAMI_EXCEPTION_H diff --git a/include/kami/grid1d.h b/include/kami/grid1d.h index b205704..fe3e5f2 100644 --- a/include/kami/grid1d.h +++ b/include/kami/grid1d.h @@ -38,6 +38,7 @@ #include #include +#include #include #include @@ -157,7 +158,7 @@ namespace kami { * @returns false if the agent is not placed at the specified * location, otherwise, true. */ - virtual std::optional add_agent(AgentID agent_id, const GridCoord1D &coord) = 0; + virtual AgentID add_agent(AgentID agent_id, const GridCoord1D &coord) = 0; /** * @brief Remove agent from the grid. @@ -166,7 +167,7 @@ namespace kami { * * @returns the `AgentID` of the `Agent` deleted */ - std::optional delete_agent(AgentID agent_id); + AgentID delete_agent(AgentID agent_id); /** * @brief Remove agent from the grid at the specified location @@ -176,7 +177,7 @@ namespace kami { * * @returns the `AgentID` of the `Agent` deleted */ - std::optional delete_agent(AgentID agent_id, const GridCoord1D &coord); + AgentID delete_agent(AgentID agent_id, const GridCoord1D &coord); /** * @brief Move an agent to the specified location. @@ -184,7 +185,7 @@ namespace kami { * @param[in] agent_id the `AgentID` of the agent to move. * @param[in] coord the coordinates of the agent. */ - std::optional move_agent(AgentID agent_id, const GridCoord1D &coord); + AgentID move_agent(AgentID agent_id, const GridCoord1D &coord); /** * @brief Inquire if the specified location is empty. @@ -212,7 +213,7 @@ namespace kami { * * @return the location of the specified `Agent` */ - [[nodiscard]] std::optional get_location_by_agent(const AgentID &agent_id) const; + [[nodiscard]] GridCoord1D get_location_by_agent(const AgentID &agent_id) const; /** * @brief Get the contents of the specified location. @@ -224,7 +225,7 @@ namespace kami { * to that object will update the state of the gird. Further, the pointer * should not be deleted when no longer used. */ - [[nodiscard]] std::optional>> + [[nodiscard]] std::shared_ptr> get_location_contents(const GridCoord1D &coord) const; /** @@ -244,7 +245,7 @@ namespace kami { * @return an `unordered_set` of `GridCoord1D` that includes all of the coordinates * for all adjacent points. */ - [[nodiscard]] std::optional>> + [[nodiscard]] std::shared_ptr> get_neighborhood(AgentID agent_id, bool include_center) const; /** @@ -257,7 +258,7 @@ namespace kami { * @return an `unordered_set` of `GridCoord1D` that includes all of the coordinates * for all adjacent points. */ - [[nodiscard]] std::optional>> + [[nodiscard]] std::shared_ptr> get_neighborhood(const GridCoord1D &coord, bool include_center) const; /** diff --git a/include/kami/grid2d.h b/include/kami/grid2d.h index cc0981f..28dba8d 100644 --- a/include/kami/grid2d.h +++ b/include/kami/grid2d.h @@ -213,7 +213,7 @@ namespace kami { * @returns false if the agent is not placed at the specified * location, otherwise, true. */ - virtual std::optional add_agent(AgentID agent_id, const GridCoord2D &coord) = 0; + virtual AgentID add_agent(AgentID agent_id, const GridCoord2D &coord) = 0; /** * @brief Remove agent from the grid. @@ -222,7 +222,7 @@ namespace kami { * * @returns false if the agent is not removed, otherwise, true. */ - std::optional delete_agent(AgentID agent_id); + AgentID delete_agent(AgentID agent_id); /** * @brief Remove agent from the grid at the specified location @@ -232,7 +232,7 @@ namespace kami { * * @returns false if the agent is not removed, otherwise, true. */ - std::optional delete_agent(AgentID agent_id, const GridCoord2D &coord); + AgentID delete_agent(AgentID agent_id, const GridCoord2D &coord); /** * @brief Move an agent to the specified location. @@ -240,7 +240,7 @@ namespace kami { * @param[in] agent_id the `AgentID` of the agent to move. * @param[in] coord the coordinates of the agent. */ - std::optional move_agent(AgentID agent_id, const GridCoord2D &coord); + AgentID move_agent(AgentID agent_id, const GridCoord2D &coord); /** * @brief Inquire if the specified location is empty. @@ -268,7 +268,7 @@ namespace kami { * * @return the location of the specified `Agent` */ - std::optional get_location_by_agent(const AgentID &agent_id) const; + GridCoord2D get_location_by_agent(const AgentID &agent_id) const; /** * @brief Get the contents of the specified location. @@ -280,7 +280,7 @@ namespace kami { * to that object will update the state of the gird. Further, the pointer * should not be deleted when no longer used. */ - [[nodiscard]] std::optional>> + [[nodiscard]] std::shared_ptr> get_location_contents(const GridCoord2D &coord) const; /** @@ -310,7 +310,7 @@ namespace kami { * * @see `NeighborhoodType` */ - std::optional>> + std::shared_ptr> get_neighborhood(AgentID agent_id, bool include_center, GridNeighborhoodType neighborhood_type) const; /** @@ -326,7 +326,7 @@ namespace kami { * * @see `NeighborhoodType` */ - [[nodiscard]] std::optional>> + [[nodiscard]] std::shared_ptr> get_neighborhood(const GridCoord2D &coord, bool include_center, GridNeighborhoodType neighborhood_type) const; /** diff --git a/include/kami/model.h b/include/kami/model.h index 7e39c48..2a2fd71 100644 --- a/include/kami/model.h +++ b/include/kami/model.h @@ -30,7 +30,6 @@ //! @endcond #include -#include #include #include @@ -50,7 +49,7 @@ namespace kami { * * @returns a shared pointer to the `Domain` */ - std::optional> get_domain(); + std::shared_ptr get_domain(); /** * @brief Add a `Domain` to this scheduler @@ -67,7 +66,7 @@ namespace kami { * * @returns a shared pointer to the `Population` */ - std::optional> get_population(); + std::shared_ptr get_population(); /** * @brief Add a `Model` to this scheduler @@ -84,7 +83,7 @@ namespace kami { * * @returns a shared pointer to the `Scheduler` */ - std::optional> get_scheduler(); + std::shared_ptr get_scheduler(); /** * @brief Add a `Model` to this scheduler diff --git a/include/kami/multigrid1d.h b/include/kami/multigrid1d.h index 20edd2d..8a79706 100644 --- a/include/kami/multigrid1d.h +++ b/include/kami/multigrid1d.h @@ -64,7 +64,7 @@ namespace kami { * @returns false if the agent is not placed at the specified * location, otherwise, true */ - std::optional add_agent(AgentID agent_id, const GridCoord1D &coord) override; + AgentID add_agent(AgentID agent_id, const GridCoord1D &coord) override; }; } // namespace kami diff --git a/include/kami/multigrid2d.h b/include/kami/multigrid2d.h index 2f91b6e..f7c341d 100644 --- a/include/kami/multigrid2d.h +++ b/include/kami/multigrid2d.h @@ -65,10 +65,9 @@ namespace kami { * @param[in] agent_id the `AgentID` of the agent to add. * @param[in] coord the coordinates of the agent. * - * @returns false if the agent is not placed at the specified - * location, otherwise, true + * @returns the `AgentID` of the agent added */ - std::optional add_agent(AgentID agent_id, const GridCoord2D &coord) override; + AgentID add_agent(AgentID agent_id, const GridCoord2D &coord) override; }; } // namespace kami diff --git a/include/kami/population.h b/include/kami/population.h index 7c31130..d231d07 100644 --- a/include/kami/population.h +++ b/include/kami/population.h @@ -49,7 +49,7 @@ namespace kami { * * @return a reference to the desired `Agent` or nothing is not found */ - [[nodiscard]] std::optional> get_agent_by_id(AgentID agent_id) const; + [[nodiscard]] std::shared_ptr get_agent_by_id(AgentID agent_id) const; /** * @brief Add an Agent to the Population. @@ -58,7 +58,7 @@ namespace kami { * * @returns the ID of the agent added */ - AgentID add_agent(const std::shared_ptr& agent); + AgentID add_agent(const std::shared_ptr &agent) noexcept; /** * @brief Remove an Agent from the Population. @@ -67,7 +67,7 @@ namespace kami { * * @returns a shared pointer to the Agent deleted */ - std::optional> delete_agent(AgentID agent_id); + std::shared_ptr delete_agent(AgentID agent_id); /** * @brief Returns the agent list. diff --git a/include/kami/position.h b/include/kami/position.h index 4f4955f..885bf78 100644 --- a/include/kami/position.h +++ b/include/kami/position.h @@ -36,11 +36,13 @@ #include namespace kami { + typedef std::variant< GridCoord1D, GridCoord2D, HexCoord > Position; + } #endif //KAMI_POSITION_H diff --git a/include/kami/random.h b/include/kami/random.h index 6bc64ed..fd91255 100644 --- a/include/kami/random.h +++ b/include/kami/random.h @@ -30,7 +30,6 @@ //! @endcond #include -#include #include #include @@ -73,10 +72,10 @@ namespace kami { * * @returns returns vector of agents successfully stepped */ - std::optional>> + std::unique_ptr> step(std::shared_ptr model, std::unique_ptr> agent_list) override; - std::optional>> + std::unique_ptr> step(std::shared_ptr model, std::unique_ptr> agent_list) override; /** diff --git a/include/kami/reporter.h b/include/kami/reporter.h index 0de6b15..d94028c 100644 --- a/include/kami/reporter.h +++ b/include/kami/reporter.h @@ -63,7 +63,7 @@ namespace kami { * its data as a [nlohmann::json](https://json.nlohmann.me/) * JSON object. See `Reporter` for additional details. */ - virtual std::optional> collect() = 0; + virtual std::unique_ptr collect() = 0; /** * @brief Execute a time-step for the agent @@ -106,7 +106,7 @@ namespace kami { * This is not expected to return agent data collection, * as the agents' information is collected separately. */ - virtual std::optional> collect() = 0; + virtual std::unique_ptr collect() = 0; /** * @brief Get the step id of the model diff --git a/include/kami/scheduler.h b/include/kami/scheduler.h index ef9fc41..6595c94 100644 --- a/include/kami/scheduler.h +++ b/include/kami/scheduler.h @@ -30,7 +30,6 @@ //! @endcond #include -#include #include #include @@ -59,9 +58,9 @@ namespace kami { * * @returns returns vector of agents successfully stepped */ - virtual std::optional>> step(std::shared_ptr model) = 0; + virtual std::unique_ptr> step(std::shared_ptr model) = 0; - virtual std::optional>> step(std::shared_ptr model) = 0; + virtual std::unique_ptr> step(std::shared_ptr model) = 0; /** * @brief Execute a single time step. @@ -76,10 +75,10 @@ namespace kami { * * @returns returns vector of agents successfully stepped */ - virtual std::optional>> + virtual std::unique_ptr> step(std::shared_ptr model, std::unique_ptr> agent_list) = 0; - virtual std::optional>> + virtual std::unique_ptr> step(std::shared_ptr model, std::unique_ptr> agent_list) = 0; protected: diff --git a/include/kami/sequential.h b/include/kami/sequential.h index b23d402..2e0f048 100644 --- a/include/kami/sequential.h +++ b/include/kami/sequential.h @@ -30,7 +30,6 @@ //! @endcond #include -#include #include #include @@ -62,9 +61,9 @@ namespace kami { * * @returns returns vector of agents successfully stepped */ - std::optional>> step(std::shared_ptr model) override; + std::unique_ptr> step(std::shared_ptr model) override; - std::optional>> step(std::shared_ptr model) override; + std::unique_ptr> step(std::shared_ptr model) override; /** * @brief Execute a single time step. @@ -79,10 +78,10 @@ namespace kami { * * @returns returns vector of agents successfully stepped */ - std::optional>> + std::unique_ptr> step(std::shared_ptr model, std::unique_ptr> agent_list) override; - std::optional>> + std::unique_ptr> step(std::shared_ptr model, std::unique_ptr> agent_list) override; }; diff --git a/include/kami/sologrid1d.h b/include/kami/sologrid1d.h index 5ceeeba..866f725 100644 --- a/include/kami/sologrid1d.h +++ b/include/kami/sologrid1d.h @@ -63,7 +63,7 @@ namespace kami { * @returns false if the agent is not placed at the specified * location, otherwise, true */ - std::optional add_agent(AgentID agent_id, const GridCoord1D &coord) override; + AgentID add_agent(AgentID agent_id, const GridCoord1D &coord) override; }; } // namespace kami diff --git a/include/kami/sologrid2d.h b/include/kami/sologrid2d.h index 7c688c7..ef5b37d 100644 --- a/include/kami/sologrid2d.h +++ b/include/kami/sologrid2d.h @@ -65,7 +65,7 @@ namespace kami { * @returns false if the agent is not placed at the specified * location, otherwise, true */ - std::optional add_agent(AgentID agent_id, const GridCoord2D &coord) override; + AgentID add_agent(AgentID agent_id, const GridCoord2D &coord) override; }; diff --git a/include/kami/staged.h b/include/kami/staged.h index 324243c..d169af4 100644 --- a/include/kami/staged.h +++ b/include/kami/staged.h @@ -30,7 +30,6 @@ //! @endcond #include -#include #include #include @@ -62,10 +61,10 @@ namespace kami { * * @returns returns vector of agents successfully stepped */ - std::optional>> + std::unique_ptr> step(std::shared_ptr model, std::unique_ptr> agent_list) override; - std::optional>> + std::unique_ptr> step(std::shared_ptr model, std::unique_ptr> agent_list) override; private: @@ -81,9 +80,9 @@ namespace kami { * * @returns returns vector of agents successfully advanced */ - std::optional>> advance(std::shared_ptr model); + std::unique_ptr> advance(std::shared_ptr model); - std::optional>> advance(std::shared_ptr model); + std::unique_ptr> advance(std::shared_ptr model); /** * @brief Advance a single time step. @@ -98,11 +97,8 @@ namespace kami { * * @returns returns vector of agents successfully advanced */ - std::optional>> + std::unique_ptr> advance(std::shared_ptr model, std::unique_ptr> agent_list); - - std::optional>> - advance(std::shared_ptr model, std::unique_ptr> agent_list); }; } // namespace kami diff --git a/src/libkami/CMakeLists.txt b/src/libkami/CMakeLists.txt index 26cab80..23eff65 100644 --- a/src/libkami/CMakeLists.txt +++ b/src/libkami/CMakeLists.txt @@ -31,6 +31,7 @@ create_library( staged.cc PUBLIC_INCLUDE_PATHS "$" "$" PRIVATE_LINKED_TARGETS ${COVERAGE_TARGET} + PUBLIC_LINKED_TARGETS fmt EXPORT_FILE_PATH "${CMAKE_CURRENT_BINARY_DIR}/generated_headers/kami/KAMI_EXPORT.h" ) diff --git a/src/libkami/grid1d.cc b/src/libkami/grid1d.cc index d885aaf..cfdaf5c 100644 --- a/src/libkami/grid1d.cc +++ b/src/libkami/grid1d.cc @@ -25,14 +25,16 @@ #include #include -#include #include #include #include #include +#include + #include #include +#include #include namespace kami { @@ -89,27 +91,19 @@ namespace kami { _agent_index = std::make_unique>(); } - std::optional Grid1D::delete_agent(AgentID agent_id) { - auto coord = get_location_by_agent(agent_id); - if (!coord) - return std::nullopt; - - return delete_agent(agent_id, coord.value()); + AgentID Grid1D::delete_agent(AgentID agent_id) { + return delete_agent(agent_id, get_location_by_agent(agent_id)); } - std::optional Grid1D::delete_agent(AgentID agent_id, const GridCoord1D &coord) { - auto agent_location = _agent_grid->find(coord); - if (agent_location == _agent_grid->end()) - return std::nullopt; - - for (auto test_agent_id = agent_location; test_agent_id != _agent_grid->end(); test_agent_id++) + AgentID Grid1D::delete_agent(AgentID agent_id, const GridCoord1D &coord) { + for (auto test_agent_id = _agent_grid->find(coord); test_agent_id != _agent_grid->end(); test_agent_id++) if (test_agent_id->second == agent_id) { _agent_grid->erase(test_agent_id); _agent_index->erase(agent_id); return agent_id; } - return std::nullopt; + throw exception::AgentNotFound(""); } bool Grid1D::is_location_valid(const GridCoord1D &coord) const { @@ -123,27 +117,16 @@ namespace kami { return grid_location.first == grid_location.second; } - std::optional Grid1D::move_agent(const AgentID agent_id, const GridCoord1D &coord) { - auto coord_current = get_location_by_agent(agent_id); - - if (!coord_current) - return std::nullopt; - if (!delete_agent(agent_id, coord_current.value())) - return std::nullopt; - - return add_agent(agent_id, coord); + AgentID Grid1D::move_agent(const AgentID agent_id, const GridCoord1D &coord) { + return add_agent(delete_agent(agent_id, get_location_by_agent(agent_id)), coord); } - std::optional>> + std::shared_ptr> Grid1D::get_neighborhood(const AgentID agent_id, const bool include_center) const { - auto coord = get_location_by_agent(agent_id); - if (!coord) - return std::nullopt; - - return std::move(get_neighborhood(coord.value(), include_center)); + return std::move(get_neighborhood(get_location_by_agent(agent_id), include_center)); } - std::optional>> + std::shared_ptr> Grid1D::get_neighborhood(const GridCoord1D &coord, const bool include_center) const { auto neighborhood = std::make_shared>(); @@ -161,11 +144,11 @@ namespace kami { return std::move(neighborhood); } - std::optional>> Grid1D::get_location_contents(const GridCoord1D &coord) const { + std::shared_ptr> Grid1D::get_location_contents(const GridCoord1D &coord) const { auto agent_ids = std::make_shared>(); if (!is_location_valid(coord)) - return std::nullopt; + throw exception::LocationUnavailable(fmt::format("Coordinates {} are invalid", coord.to_string())); if (is_location_empty(coord)) return agent_ids; @@ -182,10 +165,10 @@ namespace kami { unsigned int Grid1D::get_maximum_x() const { return _maximum_x; } - std::optional Grid1D::get_location_by_agent(const AgentID &agent_id) const { + GridCoord1D Grid1D::get_location_by_agent(const AgentID &agent_id) const { auto coord = _agent_index->find(agent_id); if (coord == _agent_index->end()) - return std::nullopt; + throw exception::AgentNotFound(fmt::format("Agent {} not found on grid", agent_id.to_string())); return coord->second; } diff --git a/src/libkami/grid2d.cc b/src/libkami/grid2d.cc index c15e68b..2672c8c 100644 --- a/src/libkami/grid2d.cc +++ b/src/libkami/grid2d.cc @@ -30,8 +30,11 @@ #include #include +#include + #include #include +#include #include namespace kami { @@ -121,27 +124,19 @@ namespace kami { _agent_index = std::make_unique>(); } - std::optional Grid2D::delete_agent(AgentID agent_id) { - auto coord = get_location_by_agent(agent_id); - if (!coord) - return std::nullopt; - - return delete_agent(agent_id, coord.value()); + AgentID Grid2D::delete_agent(AgentID agent_id) { + return delete_agent(agent_id, get_location_by_agent(agent_id)); } - std::optional Grid2D::delete_agent(AgentID agent_id, const GridCoord2D &coord) { - auto agent_location = _agent_grid->find(coord); - if (agent_location == _agent_grid->end()) - return std::nullopt; - - for (auto test_agent_id = agent_location; test_agent_id != _agent_grid->end(); test_agent_id++) + AgentID Grid2D::delete_agent(AgentID agent_id, const GridCoord2D &coord) { + for (auto test_agent_id = _agent_grid->find(coord); test_agent_id != _agent_grid->end(); test_agent_id++) if (test_agent_id->second == agent_id) { _agent_grid->erase(test_agent_id); _agent_index->erase(agent_id); return agent_id; } - return std::nullopt; + throw exception::AgentNotFound(""); } bool Grid2D::is_location_valid(const GridCoord2D &coord) const { @@ -157,28 +152,17 @@ namespace kami { return grid_location.first == grid_location.second; } - std::optional Grid2D::move_agent(const AgentID agent_id, const GridCoord2D &coord) { - auto coord_current = get_location_by_agent(agent_id); - - if (!coord_current) - return std::nullopt; - if (!delete_agent(agent_id, coord_current.value())) - return std::nullopt; - - return add_agent(agent_id, coord); + AgentID Grid2D::move_agent(const AgentID agent_id, const GridCoord2D &coord) { + return add_agent(delete_agent(agent_id, get_location_by_agent(agent_id)), coord); } - std::optional>> + std::shared_ptr> Grid2D::get_neighborhood(const AgentID agent_id, const bool include_center, const GridNeighborhoodType neighborhood_type) const { - auto coord = get_location_by_agent(agent_id); - if (!coord) - return std::nullopt; - - return std::move(get_neighborhood(coord.value(), include_center, neighborhood_type)); + return std::move(get_neighborhood(get_location_by_agent(agent_id), include_center, neighborhood_type)); } - std::optional>> + std::shared_ptr> Grid2D::get_neighborhood(const GridCoord2D &coord, const bool include_center, const GridNeighborhoodType neighborhood_type) const { auto neighborhood = std::make_unique>(); @@ -192,10 +176,11 @@ namespace kami { directions = directions_moore; break; default: - return std::nullopt; + throw exception::InvalidOption( + fmt::format("Invalid neighborhood type {} given", (unsigned int) neighborhood_type)); } - // We assume our starting position is valid - if (include_center) + + if (include_center and is_location_valid(coord)) neighborhood->insert(coord); for (auto &direction: directions) { @@ -208,11 +193,11 @@ namespace kami { return std::move(neighborhood); } - std::optional>> Grid2D::get_location_contents(const GridCoord2D &coord) const { + std::shared_ptr> Grid2D::get_location_contents(const GridCoord2D &coord) const { auto agent_ids = std::make_shared>(); if (!is_location_valid(coord)) - return std::nullopt; + throw exception::LocationUnavailable(fmt::format("Coordinates {} are invalid", coord.to_string())); if (is_location_empty(coord)) return agent_ids; @@ -233,10 +218,10 @@ namespace kami { unsigned int Grid2D::get_maximum_y() const { return _maximum_y; } - std::optional Grid2D::get_location_by_agent(const AgentID &agent_id) const { + GridCoord2D Grid2D::get_location_by_agent(const AgentID &agent_id) const { auto coord = _agent_index->find(agent_id); if (coord == _agent_index->end()) - return std::nullopt; + throw exception::AgentNotFound(fmt::format("Agent {} not found on grid", agent_id.to_string())); return coord->second; } diff --git a/src/libkami/model.cc b/src/libkami/model.cc index 1b18d50..7757cc5 100644 --- a/src/libkami/model.cc +++ b/src/libkami/model.cc @@ -26,15 +26,16 @@ #include #include +#include #include #include namespace kami { - std::optional> Model::get_domain() { - if(_domain == nullptr) - return std::nullopt; - return(_domain); + std::shared_ptr Model::get_domain() { + if (_domain == nullptr) + throw exception::ResourceNotAvailable("Domain not found in model"); + return _domain; } std::shared_ptr Model::set_domain(std::shared_ptr domain) { @@ -42,10 +43,10 @@ namespace kami { return _domain; } - std::optional> Model::get_population() { - if(_pop == nullptr) - return std::nullopt; - return(_pop); + std::shared_ptr Model::get_population() { + if (_pop == nullptr) + throw exception::ResourceNotAvailable("Population not found in model"); + return _pop; } std::shared_ptr Model::set_population(std::shared_ptr population) { @@ -53,10 +54,10 @@ namespace kami { return _pop; } - std::optional> Model::get_scheduler() { + std::shared_ptr Model::get_scheduler() { if (_sched == nullptr) - return std::nullopt; - return (_sched); + throw exception::ResourceNotAvailable("Scheduler not found in model"); + return _sched; } std::shared_ptr Model::set_scheduler(std::shared_ptr scheduler) { diff --git a/src/libkami/multigrid1d.cc b/src/libkami/multigrid1d.cc index 7c3f45d..44a91f4 100644 --- a/src/libkami/multigrid1d.cc +++ b/src/libkami/multigrid1d.cc @@ -23,8 +23,11 @@ * SOFTWARE. */ +#include + #include #include +#include #include #include @@ -33,9 +36,9 @@ namespace kami { MultiGrid1D::MultiGrid1D(unsigned int maximum_x, bool wrap_x) : Grid1D(maximum_x, wrap_x) {} - std::optional MultiGrid1D::add_agent(const AgentID agent_id, const GridCoord1D &coord) { + AgentID MultiGrid1D::add_agent(const AgentID agent_id, const GridCoord1D &coord) { if (!is_location_valid(coord)) - return std::nullopt; + throw exception::LocationUnavailable(fmt::format("Coordinates {} are invalid", coord.to_string())); _agent_index->insert(std::pair(agent_id, coord)); _agent_grid->insert(std::pair(coord, agent_id)); diff --git a/src/libkami/multigrid2d.cc b/src/libkami/multigrid2d.cc index f051840..d5eb242 100644 --- a/src/libkami/multigrid2d.cc +++ b/src/libkami/multigrid2d.cc @@ -23,8 +23,11 @@ * SOFTWARE. */ +#include + #include #include +#include #include #include @@ -33,9 +36,9 @@ namespace kami { MultiGrid2D::MultiGrid2D(unsigned int maximum_x, unsigned int maximum_y, bool wrap_x, bool wrap_y) : Grid2D(maximum_x, maximum_y, wrap_x, wrap_y) {} - std::optional MultiGrid2D::add_agent(const AgentID agent_id, const GridCoord2D &coord) { + AgentID MultiGrid2D::add_agent(const AgentID agent_id, const GridCoord2D &coord) { if (!is_location_valid(coord)) - return std::nullopt; + throw exception::LocationUnavailable(fmt::format("Coordinates {} are invalid", coord.to_string())); _agent_index->insert(std::pair(agent_id, coord)); _agent_grid->insert(std::pair(coord, agent_id)); diff --git a/src/libkami/population.cc b/src/libkami/population.cc index 49c10f0..7da65a8 100644 --- a/src/libkami/population.cc +++ b/src/libkami/population.cc @@ -24,37 +24,39 @@ */ #include -#include #include #include #include +#include #include namespace kami { - AgentID Population::add_agent(const std::shared_ptr& agent) { + AgentID Population::add_agent(const std::shared_ptr &agent) noexcept { auto agent_id = agent->get_agent_id(); _agent_map.insert(std::pair>(agent_id, agent)); - return(agent->get_agent_id()); + return agent->get_agent_id(); } - std::optional> Population::delete_agent(const AgentID agent_id) { + std::shared_ptr Population::delete_agent(const AgentID agent_id) { auto agent_it = _agent_map.find(agent_id); - if(agent_it == _agent_map.end()) - return std::nullopt; + if (agent_it == _agent_map.end()) + throw exception::ResourceNotAvailable("Agent not found in population"); auto agent = agent_it->second; _agent_map.erase(agent_it); - return std::make_optional(agent); + return std::move(agent); } - std::optional> Population::get_agent_by_id(const AgentID agent_id) const { + std::shared_ptr Population::get_agent_by_id(const AgentID agent_id) const { auto agent_it = _agent_map.find(agent_id); - if(agent_it != _agent_map.end()) return(agent_it->second); - return std::nullopt; + if (agent_it == _agent_map.end()) + throw exception::ResourceNotAvailable("Agent not found in population"); + + return agent_it->second; } std::unique_ptr> Population::get_agent_list() const { diff --git a/src/libkami/random.cc b/src/libkami/random.cc index 2cac76d..7766df5 100644 --- a/src/libkami/random.cc +++ b/src/libkami/random.cc @@ -30,6 +30,7 @@ #include #include +#include #include #include #include @@ -40,19 +41,19 @@ namespace kami { this->_rng = std::move(rng); } - std::optional>> + std::unique_ptr> RandomScheduler::step(std::shared_ptr model, std::unique_ptr> agent_list) { if (_rng == nullptr) - return std::nullopt; + throw exception::ResourceNotAvailable("No random number generator available"); shuffle(agent_list->begin(), agent_list->end(), *_rng); return std::move(this->SequentialScheduler::step(model, std::move(agent_list))); } - std::optional>> + std::unique_ptr> RandomScheduler::step(std::shared_ptr model, std::unique_ptr> agent_list) { if (_rng == nullptr) - return std::nullopt; + throw exception::ResourceNotAvailable("No random number generator available"); shuffle(agent_list->begin(), agent_list->end(), *_rng); return std::move(this->SequentialScheduler::step(model, std::move(agent_list))); diff --git a/src/libkami/reporter.cc b/src/libkami/reporter.cc index a6760bd..af2df80 100644 --- a/src/libkami/reporter.cc +++ b/src/libkami/reporter.cc @@ -72,7 +72,7 @@ namespace kami { std::unique_ptr Reporter::collect(const std::shared_ptr &model) { auto pop = model->get_population(); - return collect(model, pop.value()); + return collect(model, pop); } std::unique_ptr @@ -88,17 +88,14 @@ namespace kami { for (auto &agent_id: *agent_list) { auto agent_data = nlohmann::json(); - auto agent_opt = model->get_population().value()->get_agent_by_id(agent_id); + auto agent = std::static_pointer_cast(model->get_population()->get_agent_by_id(agent_id)); agent_data["agent_id"] = agent_id.to_string(); - if (!agent_opt) { - agent_data["data"] = {}; // Record JSON null - } else { - auto agent = std::static_pointer_cast(agent_opt.value()); - auto agent_collection = agent->collect(); - if (agent_collection) - agent_data["data"] = *agent_collection.value(); - } + + auto agent_collection = agent->collect(); + if (agent_collection) + agent_data["data"] = *agent_collection; + collection_array.push_back(agent_data); } auto model_data = model->collect(); @@ -107,7 +104,7 @@ namespace kami { (*collection)["step_id"] = model->get_step_id(); if (model_data) - (*collection)["model_data"] = *model_data.value(); + (*collection)["model_data"] = *model_data; (*collection)["agent_data"] = *agent_collection; _report_data->push_back(*collection); diff --git a/src/libkami/sequential.cc b/src/libkami/sequential.cc index 966faa9..33b27b7 100644 --- a/src/libkami/sequential.cc +++ b/src/libkami/sequential.cc @@ -24,7 +24,6 @@ */ #include -#include #include #include @@ -33,66 +32,43 @@ namespace kami { - std::optional>> SequentialScheduler::step(std::shared_ptr model) { + std::unique_ptr> SequentialScheduler::step(std::shared_ptr model) { auto population = model->get_population(); - - if (!population) - return std::nullopt; - - return std::move(this->step(model, population.value()->get_agent_list())); + return std::move(this->step(model, population->get_agent_list())); } - std::optional>> - SequentialScheduler::step(std::shared_ptr model) { + std::unique_ptr> SequentialScheduler::step(std::shared_ptr model) { auto population = model->get_population(); - - if (!population) - return std::nullopt; - - return std::move(this->step(model, population.value()->get_agent_list())); + return std::move(this->step(model, population->get_agent_list())); } - std::optional>> + std::unique_ptr> SequentialScheduler::step(std::shared_ptr model, std::unique_ptr> agent_list) { auto return_agent_list = std::make_unique>(); auto population = model->get_population(); - if (!population) - return std::nullopt; - Scheduler::_step_counter++; for (auto &agent_id: *agent_list) { - auto agent_opt = population.value()->get_agent_by_id(agent_id); + auto agent = population->get_agent_by_id(agent_id); - if (agent_opt) { - auto agent = agent_opt.value(); - - agent->step(model); - return_agent_list->push_back(agent_id); - } + agent->step(model); + return_agent_list->push_back(agent_id); } return std::move(return_agent_list); } - std::optional>> + std::unique_ptr> SequentialScheduler::step(std::shared_ptr model, std::unique_ptr> agent_list) { auto return_agent_list = std::make_unique>(); auto population = model->get_population(); - if (!population) - return std::nullopt; - Scheduler::_step_counter++; for (auto &agent_id: *agent_list) { - auto agent_opt = population.value()->get_agent_by_id(agent_id); + auto agent = population->get_agent_by_id(agent_id); - if (agent_opt) { - auto agent = std::dynamic_pointer_cast(agent_opt.value()); - - agent->step(model); - return_agent_list->push_back(agent_id); - } + agent->step(model); + return_agent_list->push_back(agent_id); } return std::move(return_agent_list); diff --git a/src/libkami/sologrid1d.cc b/src/libkami/sologrid1d.cc index 0447509..92e7445 100644 --- a/src/libkami/sologrid1d.cc +++ b/src/libkami/sologrid1d.cc @@ -23,7 +23,10 @@ * SOFTWARE. */ +#include + #include +#include #include namespace kami { @@ -31,11 +34,11 @@ namespace kami { SoloGrid1D::SoloGrid1D(unsigned int maximum_x, bool wrap_x) : Grid1D(maximum_x, wrap_x) {} - std::optional SoloGrid1D::add_agent(const AgentID agent_id, const GridCoord1D &coord) { + AgentID SoloGrid1D::add_agent(const AgentID agent_id, const GridCoord1D &coord) { if (!is_location_valid(coord)) - return std::nullopt; + throw exception::LocationUnavailable(fmt::format("Coordinates {} are invalid", coord.to_string())); if (!is_location_empty(coord)) - return std::nullopt; + throw exception::LocationUnavailable(fmt::format("Coordinates {} already occupied", coord.to_string())); _agent_index->insert(std::pair(agent_id, coord)); _agent_grid->insert(std::pair(coord, agent_id)); diff --git a/src/libkami/sologrid2d.cc b/src/libkami/sologrid2d.cc index da2bf61..eabc253 100644 --- a/src/libkami/sologrid2d.cc +++ b/src/libkami/sologrid2d.cc @@ -23,21 +23,24 @@ * SOFTWARE. */ -#include -#include - #include +#include + +#include +#include +#include + namespace kami { SoloGrid2D::SoloGrid2D(unsigned int maximum_x, unsigned int maximum_y, bool wrap_x, bool wrap_y) : Grid2D(maximum_x, maximum_y, wrap_x, wrap_y) {} - std::optional SoloGrid2D::add_agent(const AgentID agent_id, const GridCoord2D &coord) { + AgentID SoloGrid2D::add_agent(const AgentID agent_id, const GridCoord2D &coord) { if (!is_location_valid(coord)) - return std::nullopt; + throw exception::LocationUnavailable(fmt::format("Coordinates {} are invalid", coord.to_string())); if (!is_location_empty(coord)) - return std::nullopt; + throw exception::LocationUnavailable(fmt::format("Coordinates {} already occupied", coord.to_string())); _agent_index->insert(std::pair(agent_id, coord)); _agent_grid->insert(std::pair(coord, agent_id)); diff --git a/src/libkami/staged.cc b/src/libkami/staged.cc index 38c509d..1bfd6d7 100644 --- a/src/libkami/staged.cc +++ b/src/libkami/staged.cc @@ -35,80 +35,38 @@ namespace kami { - std::optional>> + std::unique_ptr> StagedScheduler::step(std::shared_ptr model, std::unique_ptr> agent_list) { auto stepped_agent_list = this->SequentialScheduler::step(model, std::move(agent_list)); - if (!stepped_agent_list) - return std::nullopt; - return std::move(this->advance(model, std::move(stepped_agent_list.value()))); + return std::move(this->advance(model, std::move(stepped_agent_list))); } - std::optional>> + std::unique_ptr> StagedScheduler::step(std::shared_ptr model, std::unique_ptr> agent_list) { auto stepped_agent_list = this->SequentialScheduler::step(model, std::move(agent_list)); - if (!stepped_agent_list) - return std::nullopt; - return std::move(this->advance(model, std::move(stepped_agent_list.value()))); + return std::move(this->advance(model, std::move(stepped_agent_list))); } - std::optional>> StagedScheduler::advance(std::shared_ptr model) { + std::unique_ptr> StagedScheduler::advance(std::shared_ptr model) { auto population = model->get_population(); - - if (!population) - return std::nullopt; - - return std::move(this->advance(model, population.value()->get_agent_list())); + return std::move(this->advance(model, population->get_agent_list())); } - std::optional>> - StagedScheduler::advance(std::shared_ptr model) { + std::unique_ptr> StagedScheduler::advance(std::shared_ptr model) { auto population = model->get_population(); - - if (!population) - return std::nullopt; - - return std::move(this->advance(model, population.value()->get_agent_list())); + return std::move(this->advance(model, population->get_agent_list())); } - std::optional>> + std::unique_ptr> StagedScheduler::advance(std::shared_ptr model, std::unique_ptr> agent_list) { auto return_agent_list = std::make_unique>(); auto population = model->get_population(); - if (!population) - return std::nullopt; - for (auto &agent_id: *agent_list) { - auto agent_opt = population.value()->get_agent_by_id(agent_id); + auto agent = std::static_pointer_cast(population->get_agent_by_id(agent_id)); - if (agent_opt) { - auto agent = std::static_pointer_cast(agent_opt.value()); - - agent->advance(model); - return_agent_list->push_back(agent_id); - } - } - - return std::move(return_agent_list); - } - - std::optional>> - StagedScheduler::advance(std::shared_ptr model, std::unique_ptr> agent_list) { - auto return_agent_list = std::make_unique>(); - auto population = model->get_population(); - - if (!population) - return std::nullopt; - - for (auto &agent_id: *agent_list) { - auto agent_opt = population.value()->get_agent_by_id(agent_id); - - if (agent_opt) { - auto agent = std::static_pointer_cast(agent_opt.value()); - - agent->advance(model); - return_agent_list->push_back(agent_id); - } + agent->advance(model); + return_agent_list->push_back(agent_id); } return std::move(return_agent_list); diff --git a/test/unit-kami-multigrid1d.cc b/test/unit-kami-multigrid1d.cc index 62d1a78..27a78bf 100644 --- a/test/unit-kami-multigrid1d.cc +++ b/test/unit-kami-multigrid1d.cc @@ -53,18 +53,15 @@ TEST(MultiGrid1D, add_agent) { { auto agent_id_baz = multigrid1d_foo.add_agent(agent_id_foo, coord2); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_foo); + EXPECT_EQ(agent_id_baz, agent_id_foo); } { auto agent_id_baz = multigrid1d_foo.add_agent(agent_id_bar, coord2); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_bar); + EXPECT_EQ(agent_id_baz, agent_id_bar); } { auto agent_id_baz = multigrid1d_foo.add_agent(agent_id_bar, coord3); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_bar); + EXPECT_EQ(agent_id_baz, agent_id_bar); } } @@ -77,8 +74,7 @@ TEST(MultiGrid1D, delete_agent) { static_cast(multigrid1d_foo.add_agent(agent_id_foo, coord2)); auto agent_id_baz = multigrid1d_foo.delete_agent(agent_id_foo); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_foo); + EXPECT_EQ(agent_id_baz, agent_id_foo); } { MultiGrid1D multigrid1d_foo(10, true); @@ -86,8 +82,7 @@ TEST(MultiGrid1D, delete_agent) { static_cast(multigrid1d_foo.add_agent(agent_id_foo, coord2)); static_cast(multigrid1d_foo.add_agent(agent_id_bar, coord2)); auto agent_id_baz = multigrid1d_foo.delete_agent(agent_id_foo); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_foo); + EXPECT_EQ(agent_id_baz, agent_id_foo); } { MultiGrid1D multigrid1d_foo(10, true); @@ -95,8 +90,7 @@ TEST(MultiGrid1D, delete_agent) { static_cast(multigrid1d_foo.add_agent(agent_id_foo, coord2)); static_cast(multigrid1d_foo.add_agent(agent_id_bar, coord2)); auto agent_id_baz = multigrid1d_foo.delete_agent(agent_id_bar); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_bar); + EXPECT_EQ(agent_id_baz, agent_id_bar); } { @@ -104,8 +98,7 @@ TEST(MultiGrid1D, delete_agent) { static_cast(multigrid1d_foo.add_agent(agent_id_foo, coord2)); auto agent_id_baz = multigrid1d_foo.delete_agent(agent_id_foo, coord2); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_foo); + EXPECT_EQ(agent_id_baz, agent_id_foo); } { MultiGrid1D multigrid1d_foo(10, true); @@ -113,8 +106,7 @@ TEST(MultiGrid1D, delete_agent) { static_cast(multigrid1d_foo.add_agent(agent_id_foo, coord2)); static_cast(multigrid1d_foo.add_agent(agent_id_bar, coord2)); auto agent_id_baz = multigrid1d_foo.delete_agent(agent_id_foo, coord2); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_foo); + EXPECT_EQ(agent_id_baz, agent_id_foo); } { MultiGrid1D multigrid1d_foo(10, true); @@ -122,15 +114,13 @@ TEST(MultiGrid1D, delete_agent) { static_cast(multigrid1d_foo.add_agent(agent_id_foo, coord2)); static_cast(multigrid1d_foo.add_agent(agent_id_bar, coord2)); auto agent_id_baz = multigrid1d_foo.delete_agent(agent_id_bar, coord2); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_bar); + EXPECT_EQ(agent_id_baz, agent_id_bar); } { MultiGrid1D multigrid1d_foo(10, true); static_cast(multigrid1d_foo.add_agent(agent_id_foo, coord2)); auto agent_id_baz = multigrid1d_foo.delete_agent(agent_id_foo, coord3); - EXPECT_FALSE(agent_id_baz); } { MultiGrid1D multigrid1d_foo(10, true); @@ -138,7 +128,6 @@ TEST(MultiGrid1D, delete_agent) { static_cast(multigrid1d_foo.add_agent(agent_id_foo, coord2)); static_cast(multigrid1d_foo.add_agent(agent_id_bar, coord2)); auto agent_id_baz = multigrid1d_foo.delete_agent(agent_id_foo, coord3); - EXPECT_FALSE(agent_id_baz); } { MultiGrid1D multigrid1d_foo(10, true); @@ -146,7 +135,6 @@ TEST(MultiGrid1D, delete_agent) { static_cast(multigrid1d_foo.add_agent(agent_id_foo, coord2)); static_cast(multigrid1d_foo.add_agent(agent_id_bar, coord2)); auto agent_id_baz = multigrid1d_foo.delete_agent(agent_id_bar, coord3); - EXPECT_FALSE(agent_id_baz); } } @@ -202,15 +190,13 @@ TEST(MultiGrid1D, move_agent) { static_cast(multigrid1d_foo.add_agent(agent_id_foo, coord2)); auto agent_id_baz = multigrid1d_foo.move_agent(agent_id_foo, coord7); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_foo); + EXPECT_EQ(agent_id_baz, agent_id_foo); } { MultiGrid1D multigrid1d_foo(10, true); static_cast(multigrid1d_foo.add_agent(agent_id_foo, coord2)); auto agent_id_baz = multigrid1d_foo.move_agent(agent_id_foo, coord10); - EXPECT_FALSE(agent_id_baz); } { MultiGrid1D multigrid1d_foo(10, true); @@ -218,8 +204,7 @@ TEST(MultiGrid1D, move_agent) { static_cast(multigrid1d_foo.add_agent(agent_id_foo, coord2)); static_cast(multigrid1d_foo.add_agent(agent_id_bar, coord2)); auto agent_id_baz = multigrid1d_foo.move_agent(agent_id_foo, coord2); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_foo); + EXPECT_EQ(agent_id_baz, agent_id_foo); } { MultiGrid1D multigrid1d_foo(10, true); @@ -227,8 +212,7 @@ TEST(MultiGrid1D, move_agent) { static_cast(multigrid1d_foo.add_agent(agent_id_foo, coord2)); static_cast(multigrid1d_foo.add_agent(agent_id_bar, coord2)); auto agent_id_baz = multigrid1d_foo.move_agent(agent_id_foo, coord7); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_foo); + EXPECT_EQ(agent_id_baz, agent_id_foo); } } @@ -239,78 +223,70 @@ TEST(MultiGrid1D, get_neighborhood) { { MultiGrid1D multigrid1d_foo(10, true); - auto tval = unordered_set({coord0, coord1, coord9}); + auto tval = unordered_set < GridCoord1D > ({ coord0, coord1, coord9 }); auto rval = multigrid1d_foo.get_neighborhood(coord0, true); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid1D multigrid1d_foo(10, true); - auto tval = unordered_set({coord0, coord1, coord2}); + auto tval = unordered_set < GridCoord1D > ({ coord0, coord1, coord2 }); auto rval = multigrid1d_foo.get_neighborhood(coord1, true); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid1D multigrid1d_foo(10, false); - auto tval = unordered_set({coord0, coord1}); + auto tval = unordered_set < GridCoord1D > ({ coord0, coord1 }); auto rval = multigrid1d_foo.get_neighborhood(coord0, true); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid1D multigrid1d_foo(10, false); - auto tval = unordered_set({coord0, coord1, coord2}); + auto tval = unordered_set < GridCoord1D > ({ coord0, coord1, coord2 }); auto rval = multigrid1d_foo.get_neighborhood(coord1, true); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid1D multigrid1d_foo(10, true); - auto tval = unordered_set({coord1, coord9}); + auto tval = unordered_set < GridCoord1D > ({ coord1, coord9 }); auto rval = multigrid1d_foo.get_neighborhood(coord0, false); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid1D multigrid1d_foo(10, true); - auto tval = unordered_set({coord0, coord2}); + auto tval = unordered_set < GridCoord1D > ({ coord0, coord2 }); auto rval = multigrid1d_foo.get_neighborhood(coord1, false); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid1D multigrid1d_foo(10, false); - auto tval = unordered_set({coord1}); + auto tval = unordered_set < GridCoord1D > ({ coord1 }); auto rval = multigrid1d_foo.get_neighborhood(coord0, false); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid1D multigrid1d_foo(10, false); - auto tval = unordered_set({coord0, coord2}); + auto tval = unordered_set < GridCoord1D > ({ coord0, coord2 }); auto rval = multigrid1d_foo.get_neighborhood(coord1, false); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid1D multigrid1d_foo(10, true); - auto tval = unordered_set({coord0, coord1, coord9}); + auto tval = unordered_set < GridCoord1D > ({ coord0, coord1, coord9 }); auto rval = multigrid1d_foo.get_neighborhood(agent_id_foo, true); EXPECT_FALSE(rval); @@ -318,81 +294,73 @@ TEST(MultiGrid1D, get_neighborhood) { { MultiGrid1D multigrid1d_foo(10, true); multigrid1d_foo.add_agent(agent_id_foo, coord0); - auto tval = unordered_set({coord0, coord1, coord9}); + auto tval = unordered_set < GridCoord1D > ({ coord0, coord1, coord9 }); auto rval = multigrid1d_foo.get_neighborhood(agent_id_foo, true); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid1D multigrid1d_foo(10, true); multigrid1d_foo.add_agent(agent_id_foo, coord1); - auto tval = unordered_set({coord0, coord1, coord2}); + auto tval = unordered_set < GridCoord1D > ({ coord0, coord1, coord2 }); auto rval = multigrid1d_foo.get_neighborhood(agent_id_foo, true); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid1D multigrid1d_foo(10, false); multigrid1d_foo.add_agent(agent_id_foo, coord0); - auto tval = unordered_set({coord0, coord1}); + auto tval = unordered_set < GridCoord1D > ({ coord0, coord1 }); auto rval = multigrid1d_foo.get_neighborhood(agent_id_foo, true); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid1D multigrid1d_foo(10, false); multigrid1d_foo.add_agent(agent_id_foo, coord1); - auto tval = unordered_set({coord0, coord1, coord2}); + auto tval = unordered_set < GridCoord1D > ({ coord0, coord1, coord2 }); auto rval = multigrid1d_foo.get_neighborhood(agent_id_foo, true); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid1D multigrid1d_foo(10, true); multigrid1d_foo.add_agent(agent_id_foo, coord0); - auto tval = unordered_set({coord1, coord9}); + auto tval = unordered_set < GridCoord1D > ({ coord1, coord9 }); auto rval = multigrid1d_foo.get_neighborhood(agent_id_foo, false); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid1D multigrid1d_foo(10, true); multigrid1d_foo.add_agent(agent_id_foo, coord1); - auto tval = unordered_set({coord0, coord2}); + auto tval = unordered_set < GridCoord1D > ({ coord0, coord2 }); auto rval = multigrid1d_foo.get_neighborhood(agent_id_foo, false); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid1D multigrid1d_foo(10, false); multigrid1d_foo.add_agent(agent_id_foo, coord0); - auto tval = unordered_set({coord1}); + auto tval = unordered_set < GridCoord1D > ({ coord1 }); auto rval = multigrid1d_foo.get_neighborhood(agent_id_foo, false); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid1D multigrid1d_foo(10, false); multigrid1d_foo.add_agent(agent_id_foo, coord1); - auto tval = unordered_set({coord0, coord2}); + auto tval = unordered_set < GridCoord1D > ({ coord0, coord2 }); auto rval = multigrid1d_foo.get_neighborhood(agent_id_foo, false); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } } @@ -403,17 +371,16 @@ TEST(MultiGrid1D, get_location_by_agent) { { MultiGrid1D multigrid1d_foo(10, true); - EXPECT_FALSE(multigrid1d_foo.get_location_by_agent(agent_id_foo)); - EXPECT_FALSE(multigrid1d_foo.get_location_by_agent(agent_id_bar)); + auto loc1 = multigrid1d_foo.get_location_by_agent(agent_id_foo); + auto loc2 = multigrid1d_foo.get_location_by_agent(agent_id_bar); } { MultiGrid1D multigrid1d_foo(10, true); static_cast(multigrid1d_foo.add_agent(agent_id_foo, coord2)); auto local = multigrid1d_foo.get_location_by_agent(agent_id_foo); - EXPECT_TRUE(local); EXPECT_EQ(local, coord2); - EXPECT_FALSE(multigrid1d_foo.get_location_by_agent(agent_id_bar)); + auto loc = multigrid1d_foo.get_location_by_agent(agent_id_bar); } } @@ -433,7 +400,7 @@ TEST(MultiGrid1D, get_location_contents) { auto agent_list_foo = multigrid1d_foo.get_location_contents(coord1); EXPECT_TRUE(agent_list_foo); - EXPECT_TRUE(agent_list_foo.value()->empty()); + EXPECT_TRUE(agent_list_foo->empty()); } { MultiGrid1D multigrid1d_foo(10, true); @@ -441,11 +408,11 @@ TEST(MultiGrid1D, get_location_contents) { static_cast(multigrid1d_foo.add_agent(agent_id_bar, coord1)); static_cast(multigrid1d_foo.add_agent(agent_id_baz, coord1)); - auto tval = set({agent_id_foo, agent_id_bar, agent_id_baz}); + auto tval = set < AgentID > ({ agent_id_foo, agent_id_bar, agent_id_baz }); auto rval = multigrid1d_foo.get_location_contents(coord1); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid1D multigrid1d_foo(10, true); @@ -453,11 +420,11 @@ TEST(MultiGrid1D, get_location_contents) { static_cast(multigrid1d_foo.add_agent(agent_id_bar, coord1)); static_cast(multigrid1d_foo.add_agent(agent_id_baz, coord9)); - auto tval = set({agent_id_foo, agent_id_bar}); + auto tval = set < AgentID > ({ agent_id_foo, agent_id_bar }); auto rval = multigrid1d_foo.get_location_contents(coord1); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } } diff --git a/test/unit-kami-multigrid2d.cc b/test/unit-kami-multigrid2d.cc index fb1a9dc..dd8094b 100644 --- a/test/unit-kami-multigrid2d.cc +++ b/test/unit-kami-multigrid2d.cc @@ -53,18 +53,15 @@ TEST(MultiGrid2D, add_agent) { { auto agent_id_baz = multigrid2d_foo.add_agent(agent_id_foo, coord2); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_foo); + EXPECT_EQ(agent_id_baz, agent_id_foo); } { auto agent_id_baz = multigrid2d_foo.add_agent(agent_id_bar, coord2); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_bar); + EXPECT_EQ(agent_id_baz, agent_id_bar); } { auto agent_id_baz = multigrid2d_foo.add_agent(agent_id_bar, coord3); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_bar); + EXPECT_EQ(agent_id_baz, agent_id_bar); } } @@ -77,8 +74,7 @@ TEST(MultiGrid2D, delete_agent) { static_cast(multigrid2d_foo.add_agent(agent_id_foo, coord2)); auto agent_id_baz = multigrid2d_foo.delete_agent(agent_id_foo); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_foo); + EXPECT_EQ(agent_id_baz, agent_id_foo); } { MultiGrid2D multigrid2d_foo(10, 10, true, true); @@ -86,8 +82,7 @@ TEST(MultiGrid2D, delete_agent) { static_cast(multigrid2d_foo.add_agent(agent_id_foo, coord2)); static_cast(multigrid2d_foo.add_agent(agent_id_bar, coord2)); auto agent_id_baz = multigrid2d_foo.delete_agent(agent_id_foo); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_foo); + EXPECT_EQ(agent_id_baz, agent_id_foo); } { MultiGrid2D multigrid2d_foo(10, 10, true, true); @@ -95,8 +90,7 @@ TEST(MultiGrid2D, delete_agent) { static_cast(multigrid2d_foo.add_agent(agent_id_foo, coord2)); static_cast(multigrid2d_foo.add_agent(agent_id_bar, coord2)); auto agent_id_baz = multigrid2d_foo.delete_agent(agent_id_bar); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_bar); + EXPECT_EQ(agent_id_baz, agent_id_bar); } { @@ -104,8 +98,7 @@ TEST(MultiGrid2D, delete_agent) { static_cast(multigrid2d_foo.add_agent(agent_id_foo, coord2)); auto agent_id_baz = multigrid2d_foo.delete_agent(agent_id_foo, coord2); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_foo); + EXPECT_EQ(agent_id_baz, agent_id_foo); } { MultiGrid2D multigrid2d_foo(10, 10, true, true); @@ -113,8 +106,7 @@ TEST(MultiGrid2D, delete_agent) { static_cast(multigrid2d_foo.add_agent(agent_id_foo, coord2)); static_cast(multigrid2d_foo.add_agent(agent_id_bar, coord2)); auto agent_id_baz = multigrid2d_foo.delete_agent(agent_id_foo, coord2); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_foo); + EXPECT_EQ(agent_id_baz, agent_id_foo); } { MultiGrid2D multigrid2d_foo(10, 10, true, true); @@ -122,15 +114,13 @@ TEST(MultiGrid2D, delete_agent) { static_cast(multigrid2d_foo.add_agent(agent_id_foo, coord2)); static_cast(multigrid2d_foo.add_agent(agent_id_bar, coord2)); auto agent_id_baz = multigrid2d_foo.delete_agent(agent_id_bar, coord2); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_bar); + EXPECT_EQ(agent_id_baz, agent_id_bar); } { MultiGrid2D multigrid2d_foo(10, 10, true, true); static_cast(multigrid2d_foo.add_agent(agent_id_foo, coord2)); auto agent_id_baz = multigrid2d_foo.delete_agent(agent_id_foo, coord3); - EXPECT_FALSE(agent_id_baz); } { MultiGrid2D multigrid2d_foo(10, 10, true, true); @@ -138,7 +128,6 @@ TEST(MultiGrid2D, delete_agent) { static_cast(multigrid2d_foo.add_agent(agent_id_foo, coord2)); static_cast(multigrid2d_foo.add_agent(agent_id_bar, coord2)); auto agent_id_baz = multigrid2d_foo.delete_agent(agent_id_foo, coord3); - EXPECT_FALSE(agent_id_baz); } { MultiGrid2D multigrid2d_foo(10, 10, true, true); @@ -146,7 +135,6 @@ TEST(MultiGrid2D, delete_agent) { static_cast(multigrid2d_foo.add_agent(agent_id_foo, coord2)); static_cast(multigrid2d_foo.add_agent(agent_id_bar, coord2)); auto agent_id_baz = multigrid2d_foo.delete_agent(agent_id_bar, coord3); - EXPECT_FALSE(agent_id_baz); } } @@ -202,15 +190,13 @@ TEST(MultiGrid2D, move_agent) { static_cast(multigrid2d_foo.add_agent(agent_id_foo, coord2)); auto agent_id_baz = multigrid2d_foo.move_agent(agent_id_foo, coord7); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_foo); + EXPECT_EQ(agent_id_baz, agent_id_foo); } { MultiGrid2D multigrid2d_foo(10, 10, true, true); static_cast(multigrid2d_foo.add_agent(agent_id_foo, coord2)); auto agent_id_baz = multigrid2d_foo.move_agent(agent_id_foo, coord10); - EXPECT_FALSE(agent_id_baz); } { MultiGrid2D multigrid2d_foo(10, 10, true, true); @@ -218,8 +204,7 @@ TEST(MultiGrid2D, move_agent) { static_cast(multigrid2d_foo.add_agent(agent_id_foo, coord2)); static_cast(multigrid2d_foo.add_agent(agent_id_bar, coord2)); auto agent_id_baz = multigrid2d_foo.move_agent(agent_id_foo, coord2); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_foo); + EXPECT_EQ(agent_id_baz, agent_id_foo); } { MultiGrid2D multigrid2d_foo(10, 10, true, true); @@ -227,8 +212,7 @@ TEST(MultiGrid2D, move_agent) { static_cast(multigrid2d_foo.add_agent(agent_id_foo, coord2)); static_cast(multigrid2d_foo.add_agent(agent_id_bar, coord2)); auto agent_id_baz = multigrid2d_foo.move_agent(agent_id_foo, coord7); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_foo); + EXPECT_EQ(agent_id_baz, agent_id_foo); } } @@ -239,97 +223,113 @@ TEST(MultiGrid2D, get_neighborhood_VonNeumann) { { MultiGrid2D multigrid2d_foo(10, 10, true, true); - auto tval = unordered_set({{0, 1}, - {0, 1}, - {9, 0}, - {0, 9}, - {1, 0}, - {0, 0}}); + auto tval = unordered_set < GridCoord2D > ({ + { 0, 1 }, + { 0, 1 }, + { 9, 0 }, + { 0, 9 }, + { 1, 0 }, + { 0, 0 } + }); auto rval = multigrid2d_foo.get_neighborhood(coord0, true, GridNeighborhoodType::VonNeumann); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid2D multigrid2d_foo(10, 10, true, true); - auto tval = unordered_set({{1, 2}, - {2, 1}, - {1, 0}, - {0, 1}, - {1, 1}}); + auto tval = unordered_set < GridCoord2D > ({ + { 1, 2 }, + { 2, 1 }, + { 1, 0 }, + { 0, 1 }, + { 1, 1 } + }); auto rval = multigrid2d_foo.get_neighborhood(coord1, true, GridNeighborhoodType::VonNeumann); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid2D multigrid2d_foo(10, 10, false, false); - auto tval = unordered_set({{0, 1}, - {1, 0}, - {0, 0}}); + auto tval = unordered_set < GridCoord2D > ({ + { 0, 1 }, + { 1, 0 }, + { 0, 0 } + }); auto rval = multigrid2d_foo.get_neighborhood(coord0, true, GridNeighborhoodType::VonNeumann); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid2D multigrid2d_foo(10, 10, false, false); - auto tval = unordered_set({{1, 2}, - {2, 1}, - {1, 0}, - {0, 1}, - {1, 1}}); + auto tval = unordered_set < GridCoord2D > ({ + { 1, 2 }, + { 2, 1 }, + { 1, 0 }, + { 0, 1 }, + { 1, 1 } + }); auto rval = multigrid2d_foo.get_neighborhood(coord1, true, GridNeighborhoodType::VonNeumann); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid2D multigrid2d_foo(10, 10, true, true); - auto tval = unordered_set({{1, 0}, - {0, 1}, - {9, 0}, - {0, 9}}); + auto tval = unordered_set < GridCoord2D > ({ + { 1, 0 }, + { 0, 1 }, + { 9, 0 }, + { 0, 9 } + }); auto rval = multigrid2d_foo.get_neighborhood(coord0, false, GridNeighborhoodType::VonNeumann); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid2D multigrid2d_foo(10, 10, true, true); - auto tval = unordered_set({{1, 0}, - {0, 1}, - {9, 0}, - {0, 9}}); + auto tval = unordered_set < GridCoord2D > ({ + { 1, 0 }, + { 0, 1 }, + { 9, 0 }, + { 0, 9 } + }); auto rval = multigrid2d_foo.get_neighborhood(coord0, false, GridNeighborhoodType::VonNeumann); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid2D multigrid2d_foo(10, 10, false, false); - auto tval = unordered_set({{1, 0}, - {0, 1}}); + auto tval = unordered_set < GridCoord2D > ({ + { 1, 0 }, + { 0, 1 } + }); auto rval = multigrid2d_foo.get_neighborhood(coord0, false, GridNeighborhoodType::VonNeumann); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid2D multigrid2d_foo(10, 10, false, false); - auto tval = unordered_set({{1, 0}, - {0, 1}}); + auto tval = unordered_set < GridCoord2D > ({ + { 1, 0 }, + { 0, 1 } + }); auto rval = multigrid2d_foo.get_neighborhood(coord0, false, GridNeighborhoodType::VonNeumann); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid2D multigrid2d_foo(10, 10, true, true); @@ -340,105 +340,121 @@ TEST(MultiGrid2D, get_neighborhood_VonNeumann) { { MultiGrid2D multigrid2d_foo(10, 10, true, true); multigrid2d_foo.add_agent(agent_id_foo, coord0); - auto tval = unordered_set({{0, 1}, - {9, 0}, - {0, 9}, - {1, 0}, - {0, 0}}); + auto tval = unordered_set < GridCoord2D > ({ + { 0, 1 }, + { 9, 0 }, + { 0, 9 }, + { 1, 0 }, + { 0, 0 } + }); auto rval = multigrid2d_foo.get_neighborhood(agent_id_foo, true, GridNeighborhoodType::VonNeumann); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid2D multigrid2d_foo(10, 10, true, true); multigrid2d_foo.add_agent(agent_id_foo, coord1); - auto tval = unordered_set({{1, 2}, - {2, 1}, - {1, 0}, - {0, 1}, - {1, 1}}); + auto tval = unordered_set < GridCoord2D > ({ + { 1, 2 }, + { 2, 1 }, + { 1, 0 }, + { 0, 1 }, + { 1, 1 } + }); auto rval = multigrid2d_foo.get_neighborhood(agent_id_foo, true, GridNeighborhoodType::VonNeumann); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid2D multigrid2d_foo(10, 10, false, false); multigrid2d_foo.add_agent(agent_id_foo, coord0); - auto tval = unordered_set({{0, 1}, - {1, 0}, - {0, 0}}); + auto tval = unordered_set < GridCoord2D > ({ + { 0, 1 }, + { 1, 0 }, + { 0, 0 } + }); auto rval = multigrid2d_foo.get_neighborhood(agent_id_foo, true, GridNeighborhoodType::VonNeumann); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid2D multigrid2d_foo(10, 10, false, false); multigrid2d_foo.add_agent(agent_id_foo, coord1); - auto tval = unordered_set({{1, 2}, - {2, 1}, - {1, 0}, - {0, 1}, - {1, 1}}); + auto tval = unordered_set < GridCoord2D > ({ + { 1, 2 }, + { 2, 1 }, + { 1, 0 }, + { 0, 1 }, + { 1, 1 } + }); auto rval = multigrid2d_foo.get_neighborhood(agent_id_foo, true, GridNeighborhoodType::VonNeumann); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid2D multigrid2d_foo(10, 10, true, true); multigrid2d_foo.add_agent(agent_id_foo, coord0); - auto tval = unordered_set({{1, 0}, - {0, 1}, - {9, 0}, - {0, 9}}); + auto tval = unordered_set < GridCoord2D > ({ + { 1, 0 }, + { 0, 1 }, + { 9, 0 }, + { 0, 9 } + }); auto rval = multigrid2d_foo.get_neighborhood(agent_id_foo, false, GridNeighborhoodType::VonNeumann); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid2D multigrid2d_foo(10, 10, true, true); multigrid2d_foo.add_agent(agent_id_foo, coord1); - auto tval = unordered_set({{0, 1}, - {1, 2}, - {2, 1}, - {1, 0}}); + auto tval = unordered_set < GridCoord2D > ({ + { 0, 1 }, + { 1, 2 }, + { 2, 1 }, + { 1, 0 } + }); auto rval = multigrid2d_foo.get_neighborhood(agent_id_foo, false, GridNeighborhoodType::VonNeumann); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid2D multigrid2d_foo(10, 10, false, false); multigrid2d_foo.add_agent(agent_id_foo, coord0); - auto tval = unordered_set({{1, 0}, - {0, 1}}); + auto tval = unordered_set < GridCoord2D > ({ + { 1, 0 }, + { 0, 1 } + }); auto rval = multigrid2d_foo.get_neighborhood(agent_id_foo, false, GridNeighborhoodType::VonNeumann); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid2D multigrid2d_foo(10, 10, false, false); multigrid2d_foo.add_agent(agent_id_foo, coord1); - auto tval = unordered_set({{0, 1}, - {1, 2}, - {2, 1}, - {1, 0}}); + auto tval = unordered_set < GridCoord2D > ({ + { 0, 1 }, + { 1, 2 }, + { 2, 1 }, + { 1, 0 } + }); auto rval = multigrid2d_foo.get_neighborhood(agent_id_foo, false, GridNeighborhoodType::VonNeumann); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } } @@ -451,117 +467,132 @@ TEST(MultiGrid2D, get_neighborhood_Moore) { auto tval = unordered_set({{9, 9}, {9, 1}, - {1, 1}, - {0, 1}, - {9, 0}, - {1, 9}, - {0, 9}, - {1, 0}, - {0, 0}}); + { 1, 1 }, + { 0, 1 }, + { 9, 0 }, + { 1, 9 }, + { 0, 9 }, + { 1, 0 }, + { 0, 0 } + }); auto rval = multigrid2d_foo.get_neighborhood(coord0, true, GridNeighborhoodType::Moore); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid2D multigrid2d_foo(10, 10, true, true); - auto tval = unordered_set({{2, 2}, - {0, 2}, - {1, 2}, - {0, 0}, - {2, 1}, - {1, 0}, - {2, 0}, - {0, 1}, - {1, 1}}); + auto tval = unordered_set < GridCoord2D > ({ + { 2, 2 }, + { 0, 2 }, + { 1, 2 }, + { 0, 0 }, + { 2, 1 }, + { 1, 0 }, + { 2, 0 }, + { 0, 1 }, + { 1, 1 } + }); auto rval = multigrid2d_foo.get_neighborhood(coord1, true, GridNeighborhoodType::Moore); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid2D multigrid2d_foo(10, 10, false, false); - auto tval = unordered_set({{1, 1}, - {0, 1}, - {1, 0}, - {0, 0}}); + auto tval = unordered_set < GridCoord2D > ({ + { 1, 1 }, + { 0, 1 }, + { 1, 0 }, + { 0, 0 } + }); auto rval = multigrid2d_foo.get_neighborhood(coord0, true, GridNeighborhoodType::Moore); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid2D multigrid2d_foo(10, 10, false, false); - auto tval = unordered_set({{2, 2}, - {0, 2}, - {1, 2}, - {0, 0}, - {2, 1}, - {1, 0}, - {2, 0}, - {0, 1}, - {1, 1}}); + auto tval = unordered_set < GridCoord2D > ({ + { 2, 2 }, + { 0, 2 }, + { 1, 2 }, + { 0, 0 }, + { 2, 1 }, + { 1, 0 }, + { 2, 0 }, + { 0, 1 }, + { 1, 1 } + }); auto rval = multigrid2d_foo.get_neighborhood(coord1, true, GridNeighborhoodType::Moore); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid2D multigrid2d_foo(10, 10, true, true); - auto tval = unordered_set({{9, 9}, - {9, 1}, - {1, 0}, - {1, 1}, - {0, 1}, - {0, 9}, - {1, 9}, - {9, 0}}); + auto tval = unordered_set < GridCoord2D > ({ + { 9, 9 }, + { 9, 1 }, + { 1, 0 }, + { 1, 1 }, + { 0, 1 }, + { 0, 9 }, + { 1, 9 }, + { 9, 0 } + }); auto rval = multigrid2d_foo.get_neighborhood(coord0, false, GridNeighborhoodType::Moore); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid2D multigrid2d_foo(10, 10, true, true); - auto tval = unordered_set({{9, 9}, - {9, 1}, - {1, 0}, - {1, 1}, - {0, 1}, - {0, 9}, - {1, 9}, - {9, 0}}); + auto tval = unordered_set < GridCoord2D > ({ + { 9, 9 }, + { 9, 1 }, + { 1, 0 }, + { 1, 1 }, + { 0, 1 }, + { 0, 9 }, + { 1, 9 }, + { 9, 0 } + }); auto rval = multigrid2d_foo.get_neighborhood(coord0, false, GridNeighborhoodType::Moore); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid2D multigrid2d_foo(10, 10, false, false); - auto tval = unordered_set({{1, 0}, - {1, 1}, - {0, 1}}); + auto tval = unordered_set < GridCoord2D > ({ + { 1, 0 }, + { 1, 1 }, + { 0, 1 } + }); auto rval = multigrid2d_foo.get_neighborhood(coord0, false, GridNeighborhoodType::Moore); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid2D multigrid2d_foo(10, 10, false, false); - auto tval = unordered_set({{1, 0}, - {1, 1}, - {0, 1}}); + auto tval = unordered_set < GridCoord2D > ({ + { 1, 0 }, + { 1, 1 }, + { 0, 1 } + }); auto rval = multigrid2d_foo.get_neighborhood(coord0, false, GridNeighborhoodType::Moore); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid2D multigrid2d_foo(10, 10, true, true); @@ -574,129 +605,144 @@ TEST(MultiGrid2D, get_neighborhood_Moore) { multigrid2d_foo.add_agent(agent_id_foo, coord0); auto tval = unordered_set({{9, 9}, {9, 1}, - {1, 1}, - {0, 1}, - {9, 0}, - {1, 9}, - {0, 9}, - {1, 0}, - {0, 0}}); + { 1, 1 }, + { 0, 1 }, + { 9, 0 }, + { 1, 9 }, + { 0, 9 }, + { 1, 0 }, + { 0, 0 } + }); auto rval = multigrid2d_foo.get_neighborhood(agent_id_foo, true, GridNeighborhoodType::Moore); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid2D multigrid2d_foo(10, 10, true, true); multigrid2d_foo.add_agent(agent_id_foo, coord1); - auto tval = unordered_set({{2, 2}, - {0, 2}, - {1, 2}, - {0, 0}, - {2, 1}, - {1, 0}, - {2, 0}, - {0, 1}, - {1, 1}}); + auto tval = unordered_set < GridCoord2D > ({ + { 2, 2 }, + { 0, 2 }, + { 1, 2 }, + { 0, 0 }, + { 2, 1 }, + { 1, 0 }, + { 2, 0 }, + { 0, 1 }, + { 1, 1 } + }); auto rval = multigrid2d_foo.get_neighborhood(agent_id_foo, true, GridNeighborhoodType::Moore); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid2D multigrid2d_foo(10, 10, false, false); multigrid2d_foo.add_agent(agent_id_foo, coord0); - auto tval = unordered_set({{1, 1}, - {0, 1}, - {1, 0}, - {0, 0}}); + auto tval = unordered_set < GridCoord2D > ({ + { 1, 1 }, + { 0, 1 }, + { 1, 0 }, + { 0, 0 } + }); auto rval = multigrid2d_foo.get_neighborhood(agent_id_foo, true, GridNeighborhoodType::Moore); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid2D multigrid2d_foo(10, 10, false, false); multigrid2d_foo.add_agent(agent_id_foo, coord1); - auto tval = unordered_set({{2, 2}, - {0, 2}, - {1, 2}, - {0, 0}, - {2, 1}, - {1, 0}, - {2, 0}, - {0, 1}, - {1, 1}}); + auto tval = unordered_set < GridCoord2D > ({ + { 2, 2 }, + { 0, 2 }, + { 1, 2 }, + { 0, 0 }, + { 2, 1 }, + { 1, 0 }, + { 2, 0 }, + { 0, 1 }, + { 1, 1 } + }); auto rval = multigrid2d_foo.get_neighborhood(agent_id_foo, true, GridNeighborhoodType::Moore); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid2D multigrid2d_foo(10, 10, true, true); multigrid2d_foo.add_agent(agent_id_foo, coord0); - auto tval = unordered_set({{9, 9}, - {9, 1}, - {1, 0}, - {1, 1}, - {0, 1}, - {0, 9}, - {1, 9}, - {9, 0}}); + auto tval = unordered_set < GridCoord2D > ({ + { 9, 9 }, + { 9, 1 }, + { 1, 0 }, + { 1, 1 }, + { 0, 1 }, + { 0, 9 }, + { 1, 9 }, + { 9, 0 } + }); auto rval = multigrid2d_foo.get_neighborhood(agent_id_foo, false, GridNeighborhoodType::Moore); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid2D multigrid2d_foo(10, 10, true, true); multigrid2d_foo.add_agent(agent_id_foo, coord1); - auto tval = unordered_set({{2, 2}, - {2, 0}, - {0, 1}, - {0, 2}, - {1, 2}, - {0, 0}, - {2, 1}, - {1, 0}}); + auto tval = unordered_set < GridCoord2D > ({ + { 2, 2 }, + { 2, 0 }, + { 0, 1 }, + { 0, 2 }, + { 1, 2 }, + { 0, 0 }, + { 2, 1 }, + { 1, 0 } + }); auto rval = multigrid2d_foo.get_neighborhood(agent_id_foo, false, GridNeighborhoodType::Moore); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid2D multigrid2d_foo(10, 10, false, false); multigrid2d_foo.add_agent(agent_id_foo, coord0); - auto tval = unordered_set({{1, 0}, - {1, 1}, - {0, 1}}); + auto tval = unordered_set < GridCoord2D > ({ + { 1, 0 }, + { 1, 1 }, + { 0, 1 } + }); auto rval = multigrid2d_foo.get_neighborhood(agent_id_foo, false, GridNeighborhoodType::Moore); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { MultiGrid2D multigrid2d_foo(10, 10, false, false); multigrid2d_foo.add_agent(agent_id_foo, coord1); - auto tval = unordered_set({{2, 2}, - {2, 0}, - {0, 1}, - {0, 2}, - {1, 2}, - {0, 0}, - {2, 1}, - {1, 0}}); + auto tval = unordered_set < GridCoord2D > ({ + { 2, 2 }, + { 2, 0 }, + { 0, 1 }, + { 0, 2 }, + { 1, 2 }, + { 0, 0 }, + { 2, 1 }, + { 1, 0 } + }); auto rval = multigrid2d_foo.get_neighborhood(agent_id_foo, false, GridNeighborhoodType::Moore); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } } @@ -707,17 +753,16 @@ TEST(MultiGrid2D, get_location_by_agent) { { MultiGrid2D multigrid2d_foo(10, 10, true, true); - EXPECT_FALSE(multigrid2d_foo.get_location_by_agent(agent_id_foo)); - EXPECT_FALSE(multigrid2d_foo.get_location_by_agent(agent_id_bar)); + auto loc1 = multigrid2d_foo.get_location_by_agent(agent_id_foo); + auto loc2 = multigrid2d_foo.get_location_by_agent(agent_id_bar); } { MultiGrid2D multigrid2d_foo(10, 10, true, true); static_cast(multigrid2d_foo.add_agent(agent_id_foo, coord2)); auto local = multigrid2d_foo.get_location_by_agent(agent_id_foo); - EXPECT_TRUE(local); EXPECT_EQ(local, coord2); - EXPECT_FALSE(multigrid2d_foo.get_location_by_agent(agent_id_bar)); + auto loc = multigrid2d_foo.get_location_by_agent(agent_id_bar); } } diff --git a/test/unit-kami-population.cc b/test/unit-kami-population.cc index 7984363..5ab982d 100644 --- a/test/unit-kami-population.cc +++ b/test/unit-kami-population.cc @@ -88,7 +88,7 @@ TEST(Population, get_agent_by_id) { auto agent_baz_opt = population_foo.get_agent_by_id(agent_foo->get_agent_id()); EXPECT_TRUE(agent_baz_opt); - auto agent_baz = dynamic_pointer_cast(agent_baz_opt.value()); + auto agent_baz = dynamic_pointer_cast(agent_baz_opt); EXPECT_EQ(agent_baz->getval(), 8675309); } { @@ -105,13 +105,13 @@ TEST(Population, get_agent_by_id) { auto agent_baz_opt = population_foo.get_agent_by_id(agent_foo->get_agent_id()); EXPECT_TRUE(agent_baz_opt); - auto agent_baz = dynamic_pointer_cast(agent_baz_opt.value()); + auto agent_baz = dynamic_pointer_cast(agent_baz_opt); EXPECT_EQ(agent_baz->getval(), 8675309); auto agent_qux_opt = population_foo.get_agent_by_id(agent_bar->get_agent_id()); EXPECT_TRUE(agent_qux_opt); - auto agent_qux = dynamic_pointer_cast(agent_qux_opt.value()); + auto agent_qux = dynamic_pointer_cast(agent_qux_opt); EXPECT_EQ(agent_qux->getval(), 1729); } { @@ -122,13 +122,13 @@ TEST(Population, get_agent_by_id) { auto agent_qux_opt = population_foo.get_agent_by_id(agent_bar->get_agent_id()); EXPECT_TRUE(agent_qux_opt); - auto agent_qux = dynamic_pointer_cast(agent_qux_opt.value()); + auto agent_qux = dynamic_pointer_cast(agent_qux_opt); EXPECT_EQ(agent_qux->getval(), 1729); auto agent_baz_opt = population_foo.get_agent_by_id(agent_foo->get_agent_id()); EXPECT_TRUE(agent_baz_opt); - auto agent_baz = dynamic_pointer_cast(agent_baz_opt.value()); + auto agent_baz = dynamic_pointer_cast(agent_baz_opt); EXPECT_EQ(agent_baz->getval(), 8675309); } } diff --git a/test/unit-kami-random.cc b/test/unit-kami-random.cc index 0da1e7e..87f85f5 100644 --- a/test/unit-kami-random.cc +++ b/test/unit-kami-random.cc @@ -51,12 +51,12 @@ public: shared_ptr> retval; shared_ptr step() override { - retval = _sched->step(shared_from_this()).value(); + retval = _sched->step(shared_from_this()); return shared_from_this(); } shared_ptr step(unique_ptr> agent_list) { - retval = _sched->step(shared_from_this(), std::move(agent_list)).value(); + retval = _sched->step(shared_from_this(), std::move(agent_list)); return shared_from_this(); } }; @@ -93,8 +93,8 @@ TEST(RandomScheduler, DefaultConstructor) { } TEST_F(RandomSchedulerTest, step_interface1) { - auto tval = mod->get_population().value()->get_agent_list(); - auto aval = mod->get_population().value()->get_agent_list(); + auto tval = mod->get_population()->get_agent_list(); + auto aval = mod->get_population()->get_agent_list(); mod->step(std::move(aval)); auto rval = mod->retval; @@ -103,14 +103,14 @@ TEST_F(RandomSchedulerTest, step_interface1) { // Sort both return values and just make sure all of them all the same... // We cannot test permutation since, well, you know... - set tval_set = set(tval->begin(), tval->end()); - set rval_set = set(rval->begin(), rval->end()); + set < AgentID > tval_set = set(tval->begin(), tval->end()); + set < AgentID > rval_set = set(rval->begin(), rval->end()); EXPECT_EQ(tval_set, rval_set); } TEST_F(RandomSchedulerTest, step_interface2) { - auto tval = mod->get_population().value()->get_agent_list(); - auto aval = mod->get_population().value()->get_agent_list(); + auto tval = mod->get_population()->get_agent_list(); + auto aval = mod->get_population()->get_agent_list(); mod->step(std::move(aval)); auto rval = mod->retval; @@ -118,16 +118,16 @@ TEST_F(RandomSchedulerTest, step_interface2) { EXPECT_TRUE(rval); EXPECT_EQ(rval->size(), 10); - set tval_set = set(tval->begin(), tval->end()); - set rval_set = set(rval->begin(), rval->end()); + set < AgentID > tval_set = set(tval->begin(), tval->end()); + set < AgentID > rval_set = set(rval->begin(), rval->end()); EXPECT_EQ(tval_set, rval_set); } TEST_F(RandomSchedulerTest, step_10000) { // Do it a lot... for (auto i = 0; i < 10000; i++) { - auto tval = mod->get_population().value()->get_agent_list(); - auto aval = mod->get_population().value()->get_agent_list(); + auto tval = mod->get_population()->get_agent_list(); + auto aval = mod->get_population()->get_agent_list(); mod->step(std::move(aval)); auto rval = mod->retval; @@ -135,24 +135,24 @@ TEST_F(RandomSchedulerTest, step_10000) { EXPECT_TRUE(rval); EXPECT_EQ(rval->size(), 10); - set tval_set = set(tval->begin(), tval->end()); - set rval_set = set(rval->begin(), rval->end()); + set < AgentID > tval_set = set(tval->begin(), tval->end()); + set < AgentID > rval_set = set(rval->begin(), rval->end()); EXPECT_EQ(tval_set, rval_set); } } TEST_F(RandomSchedulerTest, get_rng) { - auto rval = static_pointer_cast(mod->get_scheduler().value())->get_rng(); + auto rval = static_pointer_cast(mod->get_scheduler())->get_rng(); EXPECT_EQ(rng, rval); } TEST_F(RandomSchedulerTest, set_rng) { auto new_rng = make_shared(); - auto rval1 = static_pointer_cast(mod->get_scheduler().value())->get_rng(); + auto rval1 = static_pointer_cast(mod->get_scheduler())->get_rng(); - static_cast(static_pointer_cast(mod->get_scheduler().value())->set_rng(new_rng)); - auto rval2 = static_pointer_cast(mod->get_scheduler().value())->get_rng(); + static_cast(static_pointer_cast(mod->get_scheduler())->set_rng(new_rng)); + auto rval2 = static_pointer_cast(mod->get_scheduler())->get_rng(); EXPECT_EQ(new_rng, rval2); EXPECT_NE(new_rng, rval1); diff --git a/test/unit-kami-reporter.cc b/test/unit-kami-reporter.cc index f862239..d744e29 100644 --- a/test/unit-kami-reporter.cc +++ b/test/unit-kami-reporter.cc @@ -45,7 +45,7 @@ public: return get_agent_id(); } - std::optional> collect() override { + std::unique_ptr collect() override { auto json_ret_val = std::make_unique(); (*json_ret_val)["fname"] = "Jesse"; @@ -59,7 +59,7 @@ class TestModel : public ReporterModel { public: shared_ptr> retval; - std::optional> collect() override { + std::unique_ptr collect() override { auto json_ret_val = std::make_unique(); (*json_ret_val)["fname"] = "Walter"; @@ -99,17 +99,17 @@ TEST(ReporterModel, DefaultConstructor) { } TEST_F(ReporterModelTest, collect) { - auto aval = mod->get_population().value()->get_agent_list(); + auto aval = mod->get_population()->get_agent_list(); mod->step(); auto rval = mod->collect(); EXPECT_TRUE(rval); - EXPECT_EQ(rval.value()->dump(), "{\"fname\":\"Walter\",\"lname\":\"White\"}"); + EXPECT_EQ(rval->dump(), "{\"fname\":\"Walter\",\"lname\":\"White\"}"); } TEST_F(ReporterModelTest, report) { for (auto i = 0; i < 2; i++) { - auto aval = mod->get_population().value()->get_agent_list(); + auto aval = mod->get_population()->get_agent_list(); mod->step(); auto rval = mod->collect(); diff --git a/test/unit-kami-reporteragent.cc b/test/unit-kami-reporteragent.cc index 9698e62..7fa56fa 100644 --- a/test/unit-kami-reporteragent.cc +++ b/test/unit-kami-reporteragent.cc @@ -41,7 +41,7 @@ public: return get_agent_id(); } - std::optional> collect() override { + std::unique_ptr collect() override { auto json_ret_val = std::make_unique(); (*json_ret_val)["fname"] = "Gus"; @@ -53,7 +53,7 @@ public: class TestModel : public ReporterModel { public: - std::optional> collect() override { + std::unique_ptr collect() override { return std::make_unique(); } }; @@ -92,8 +92,8 @@ TEST_F(ReporterAgentTest, step) { } TEST_F(ReporterAgentTest, collect) { - EXPECT_EQ(agent_foo.collect().value()->dump(), "{\"fname\":\"Gus\",\"lname\":\"Fring\"}"); - EXPECT_NE(agent_bar.collect().value()->dump(), "{\"fname\":\"Hank\",\"lname\":\"Schrader\"}"); + EXPECT_EQ(agent_foo.collect()->dump(), "{\"fname\":\"Gus\",\"lname\":\"Fring\"}"); + EXPECT_NE(agent_bar.collect()->dump(), "{\"fname\":\"Hank\",\"lname\":\"Schrader\"}"); } TEST_F(ReporterAgentTest, equality) { diff --git a/test/unit-kami-sequential.cc b/test/unit-kami-sequential.cc index 4b855d5..17146bd 100644 --- a/test/unit-kami-sequential.cc +++ b/test/unit-kami-sequential.cc @@ -49,12 +49,12 @@ public: shared_ptr> retval; shared_ptr step() override { - retval = _sched->step(shared_from_this()).value(); + retval = _sched->step(shared_from_this()); return shared_from_this(); } shared_ptr step(unique_ptr> agent_list) { - retval = _sched->step(shared_from_this(), std::move(agent_list)).value(); + retval = _sched->step(shared_from_this(), std::move(agent_list)); return shared_from_this(); } }; @@ -89,8 +89,8 @@ TEST(SequentialScheduler, DefaultConstructor) { } TEST_F(SequentialSchedulerTest, step_interface1) { - auto tval = mod->get_population().value()->get_agent_list(); - auto aval = mod->get_population().value()->get_agent_list(); + auto tval = mod->get_population()->get_agent_list(); + auto aval = mod->get_population()->get_agent_list(); mod->step(std::move(aval)); auto rval = mod->retval; @@ -101,8 +101,8 @@ TEST_F(SequentialSchedulerTest, step_interface1) { } TEST_F(SequentialSchedulerTest, step_interface2) { - auto tval = mod->get_population().value()->get_agent_list(); - auto aval = mod->get_population().value()->get_agent_list(); + auto tval = mod->get_population()->get_agent_list(); + auto aval = mod->get_population()->get_agent_list(); mod->step(std::move(aval)); auto rval = mod->retval; @@ -115,8 +115,8 @@ TEST_F(SequentialSchedulerTest, step_interface2) { TEST_F(SequentialSchedulerTest, step_10000) { // Do it a lot... for (auto i = 0; i < 10000; i++) { - auto tval = mod->get_population().value()->get_agent_list(); - auto aval = mod->get_population().value()->get_agent_list(); + auto tval = mod->get_population()->get_agent_list(); + auto aval = mod->get_population()->get_agent_list(); mod->step(std::move(aval)); auto rval = mod->retval; diff --git a/test/unit-kami-sologrid1d.cc b/test/unit-kami-sologrid1d.cc index 08444cd..d5acc54 100644 --- a/test/unit-kami-sologrid1d.cc +++ b/test/unit-kami-sologrid1d.cc @@ -53,17 +53,14 @@ TEST(SoloGrid1D, add_agent) { { auto agent_id_baz = sologrid1d_foo.add_agent(agent_id_foo, coord2); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_foo); + EXPECT_EQ(agent_id_baz, agent_id_foo); } { auto agent_id_baz = sologrid1d_foo.add_agent(agent_id_bar, coord2); - EXPECT_FALSE(agent_id_baz); } { auto agent_id_baz = sologrid1d_foo.add_agent(agent_id_bar, coord3); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_bar); + EXPECT_EQ(agent_id_baz, agent_id_bar); } } @@ -76,8 +73,7 @@ TEST(SoloGrid1D, delete_agent) { static_cast(sologrid1d_foo.add_agent(agent_id_foo, coord2)); auto agent_id_baz = sologrid1d_foo.delete_agent(agent_id_foo); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_foo); + EXPECT_EQ(agent_id_baz, agent_id_foo); } { SoloGrid1D sologrid1d_foo(10, true); @@ -85,8 +81,7 @@ TEST(SoloGrid1D, delete_agent) { static_cast(sologrid1d_foo.add_agent(agent_id_foo, coord2)); static_cast(sologrid1d_foo.add_agent(agent_id_bar, coord2)); auto agent_id_baz = sologrid1d_foo.delete_agent(agent_id_foo); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_foo); + EXPECT_EQ(agent_id_baz, agent_id_foo); } { SoloGrid1D sologrid1d_foo(10, true); @@ -94,7 +89,6 @@ TEST(SoloGrid1D, delete_agent) { static_cast(sologrid1d_foo.add_agent(agent_id_foo, coord2)); static_cast(sologrid1d_foo.add_agent(agent_id_bar, coord2)); auto agent_id_baz = sologrid1d_foo.delete_agent(agent_id_bar); - EXPECT_FALSE(agent_id_baz); } { @@ -102,8 +96,7 @@ TEST(SoloGrid1D, delete_agent) { static_cast(sologrid1d_foo.add_agent(agent_id_foo, coord2)); auto agent_id_baz = sologrid1d_foo.delete_agent(agent_id_foo, coord2); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_foo); + EXPECT_EQ(agent_id_baz, agent_id_foo); } { SoloGrid1D sologrid1d_foo(10, true); @@ -111,8 +104,7 @@ TEST(SoloGrid1D, delete_agent) { static_cast(sologrid1d_foo.add_agent(agent_id_foo, coord2)); static_cast(sologrid1d_foo.add_agent(agent_id_bar, coord2)); auto agent_id_baz = sologrid1d_foo.delete_agent(agent_id_foo, coord2); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_foo); + EXPECT_EQ(agent_id_baz, agent_id_foo); } { SoloGrid1D sologrid1d_foo(10, true); @@ -120,14 +112,12 @@ TEST(SoloGrid1D, delete_agent) { static_cast(sologrid1d_foo.add_agent(agent_id_foo, coord2)); static_cast(sologrid1d_foo.add_agent(agent_id_bar, coord2)); auto agent_id_baz = sologrid1d_foo.delete_agent(agent_id_bar, coord2); - EXPECT_FALSE(agent_id_baz); } { SoloGrid1D sologrid1d_foo(10, true); static_cast(sologrid1d_foo.add_agent(agent_id_foo, coord2)); auto agent_id_baz = sologrid1d_foo.delete_agent(agent_id_foo, coord3); - EXPECT_FALSE(agent_id_baz); } { SoloGrid1D sologrid1d_foo(10, true); @@ -135,7 +125,6 @@ TEST(SoloGrid1D, delete_agent) { static_cast(sologrid1d_foo.add_agent(agent_id_foo, coord2)); static_cast(sologrid1d_foo.add_agent(agent_id_bar, coord2)); auto agent_id_baz = sologrid1d_foo.delete_agent(agent_id_foo, coord3); - EXPECT_FALSE(agent_id_baz); } { SoloGrid1D sologrid1d_foo(10, true); @@ -143,7 +132,6 @@ TEST(SoloGrid1D, delete_agent) { static_cast(sologrid1d_foo.add_agent(agent_id_foo, coord2)); static_cast(sologrid1d_foo.add_agent(agent_id_bar, coord2)); auto agent_id_baz = sologrid1d_foo.delete_agent(agent_id_bar, coord3); - EXPECT_FALSE(agent_id_baz); } } @@ -199,15 +187,13 @@ TEST(SoloGrid1D, move_agent) { static_cast(sologrid1d_foo.add_agent(agent_id_foo, coord2)); auto agent_id_baz = sologrid1d_foo.move_agent(agent_id_foo, coord7); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_foo); + EXPECT_EQ(agent_id_baz, agent_id_foo); } { SoloGrid1D sologrid1d_foo(10, true); static_cast(sologrid1d_foo.add_agent(agent_id_foo, coord2)); auto agent_id_baz = sologrid1d_foo.move_agent(agent_id_foo, coord10); - EXPECT_FALSE(agent_id_baz); } { SoloGrid1D sologrid1d_foo(10, true); @@ -215,8 +201,7 @@ TEST(SoloGrid1D, move_agent) { static_cast(sologrid1d_foo.add_agent(agent_id_foo, coord2)); static_cast(sologrid1d_foo.add_agent(agent_id_bar, coord2)); auto agent_id_baz = sologrid1d_foo.move_agent(agent_id_foo, coord2); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_foo); + EXPECT_EQ(agent_id_baz, agent_id_foo); } { SoloGrid1D sologrid1d_foo(10, true); @@ -224,8 +209,7 @@ TEST(SoloGrid1D, move_agent) { static_cast(sologrid1d_foo.add_agent(agent_id_foo, coord2)); static_cast(sologrid1d_foo.add_agent(agent_id_bar, coord2)); auto agent_id_baz = sologrid1d_foo.move_agent(agent_id_foo, coord7); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_foo); + EXPECT_EQ(agent_id_baz, agent_id_foo); } } @@ -236,78 +220,70 @@ TEST(SoloGrid1D, get_neighborhood) { { SoloGrid1D sologrid1d_foo(10, true); - auto tval = unordered_set({coord0, coord1, coord9}); + auto tval = unordered_set < GridCoord1D > ({ coord0, coord1, coord9 }); auto rval = sologrid1d_foo.get_neighborhood(coord0, true); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid1D sologrid1d_foo(10, true); - auto tval = unordered_set({coord0, coord1, coord2}); + auto tval = unordered_set < GridCoord1D > ({ coord0, coord1, coord2 }); auto rval = sologrid1d_foo.get_neighborhood(coord1, true); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid1D sologrid1d_foo(10, false); - auto tval = unordered_set({coord0, coord1}); + auto tval = unordered_set < GridCoord1D > ({ coord0, coord1 }); auto rval = sologrid1d_foo.get_neighborhood(coord0, true); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid1D sologrid1d_foo(10, false); - auto tval = unordered_set({coord0, coord1, coord2}); + auto tval = unordered_set < GridCoord1D > ({ coord0, coord1, coord2 }); auto rval = sologrid1d_foo.get_neighborhood(coord1, true); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid1D sologrid1d_foo(10, true); - auto tval = unordered_set({coord1, coord9}); + auto tval = unordered_set < GridCoord1D > ({ coord1, coord9 }); auto rval = sologrid1d_foo.get_neighborhood(coord0, false); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid1D sologrid1d_foo(10, true); - auto tval = unordered_set({coord0, coord2}); + auto tval = unordered_set < GridCoord1D > ({ coord0, coord2 }); auto rval = sologrid1d_foo.get_neighborhood(coord1, false); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid1D sologrid1d_foo(10, false); - auto tval = unordered_set({coord1}); + auto tval = unordered_set < GridCoord1D > ({ coord1 }); auto rval = sologrid1d_foo.get_neighborhood(coord0, false); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid1D sologrid1d_foo(10, false); - auto tval = unordered_set({coord0, coord2}); + auto tval = unordered_set < GridCoord1D > ({ coord0, coord2 }); auto rval = sologrid1d_foo.get_neighborhood(coord1, false); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid1D sologrid1d_foo(10, true); - auto tval = unordered_set({coord0, coord1, coord9}); + auto tval = unordered_set < GridCoord1D > ({ coord0, coord1, coord9 }); auto rval = sologrid1d_foo.get_neighborhood(agent_id_foo, true); EXPECT_FALSE(rval); @@ -315,81 +291,73 @@ TEST(SoloGrid1D, get_neighborhood) { { SoloGrid1D sologrid1d_foo(10, true); sologrid1d_foo.add_agent(agent_id_foo, coord0); - auto tval = unordered_set({coord0, coord1, coord9}); + auto tval = unordered_set < GridCoord1D > ({ coord0, coord1, coord9 }); auto rval = sologrid1d_foo.get_neighborhood(agent_id_foo, true); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid1D sologrid1d_foo(10, true); sologrid1d_foo.add_agent(agent_id_foo, coord1); - auto tval = unordered_set({coord0, coord1, coord2}); + auto tval = unordered_set < GridCoord1D > ({ coord0, coord1, coord2 }); auto rval = sologrid1d_foo.get_neighborhood(agent_id_foo, true); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid1D sologrid1d_foo(10, false); sologrid1d_foo.add_agent(agent_id_foo, coord0); - auto tval = unordered_set({coord0, coord1}); + auto tval = unordered_set < GridCoord1D > ({ coord0, coord1 }); auto rval = sologrid1d_foo.get_neighborhood(agent_id_foo, true); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid1D sologrid1d_foo(10, false); sologrid1d_foo.add_agent(agent_id_foo, coord1); - auto tval = unordered_set({coord0, coord1, coord2}); + auto tval = unordered_set < GridCoord1D > ({ coord0, coord1, coord2 }); auto rval = sologrid1d_foo.get_neighborhood(agent_id_foo, true); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid1D sologrid1d_foo(10, true); sologrid1d_foo.add_agent(agent_id_foo, coord0); - auto tval = unordered_set({coord1, coord9}); + auto tval = unordered_set < GridCoord1D > ({ coord1, coord9 }); auto rval = sologrid1d_foo.get_neighborhood(agent_id_foo, false); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid1D sologrid1d_foo(10, true); sologrid1d_foo.add_agent(agent_id_foo, coord1); - auto tval = unordered_set({coord0, coord2}); + auto tval = unordered_set < GridCoord1D > ({ coord0, coord2 }); auto rval = sologrid1d_foo.get_neighborhood(agent_id_foo, false); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid1D sologrid1d_foo(10, false); sologrid1d_foo.add_agent(agent_id_foo, coord0); - auto tval = unordered_set({coord1}); + auto tval = unordered_set < GridCoord1D > ({ coord1 }); auto rval = sologrid1d_foo.get_neighborhood(agent_id_foo, false); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid1D sologrid1d_foo(10, false); sologrid1d_foo.add_agent(agent_id_foo, coord1); - auto tval = unordered_set({coord0, coord2}); + auto tval = unordered_set < GridCoord1D > ({ coord0, coord2 }); auto rval = sologrid1d_foo.get_neighborhood(agent_id_foo, false); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } } @@ -400,17 +368,16 @@ TEST(SoloGrid1D, get_location_by_agent) { { SoloGrid1D sologrid1d_foo(10, true); - EXPECT_FALSE(sologrid1d_foo.get_location_by_agent(agent_id_foo)); - EXPECT_FALSE(sologrid1d_foo.get_location_by_agent(agent_id_bar)); + auto loc1 = sologrid1d_foo.get_location_by_agent(agent_id_foo); + auto loc2 = sologrid1d_foo.get_location_by_agent(agent_id_bar); } { SoloGrid1D sologrid1d_foo(10, true); static_cast(sologrid1d_foo.add_agent(agent_id_foo, coord2)); auto local = sologrid1d_foo.get_location_by_agent(agent_id_foo); - EXPECT_TRUE(local); EXPECT_EQ(local, coord2); - EXPECT_FALSE(sologrid1d_foo.get_location_by_agent(agent_id_bar)); + auto loc = sologrid1d_foo.get_location_by_agent(agent_id_bar); } } @@ -430,7 +397,7 @@ TEST(SoloGrid1D, get_location_contents) { auto agent_list_foo = sologrid1d_foo.get_location_contents(coord1); EXPECT_TRUE(agent_list_foo); - EXPECT_TRUE(agent_list_foo.value()->empty()); + EXPECT_TRUE(agent_list_foo->empty()); } { SoloGrid1D sologrid1d_foo(10, true); @@ -438,11 +405,11 @@ TEST(SoloGrid1D, get_location_contents) { static_cast(sologrid1d_foo.add_agent(agent_id_bar, coord1)); static_cast(sologrid1d_foo.add_agent(agent_id_baz, coord1)); - auto tval = set({agent_id_foo}); + auto tval = set < AgentID > ({ agent_id_foo }); auto rval = sologrid1d_foo.get_location_contents(coord1); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid1D sologrid1d_foo(10, true); @@ -450,11 +417,11 @@ TEST(SoloGrid1D, get_location_contents) { static_cast(sologrid1d_foo.add_agent(agent_id_bar, coord1)); static_cast(sologrid1d_foo.add_agent(agent_id_baz, coord9)); - auto tval = set({agent_id_foo}); + auto tval = set < AgentID > ({ agent_id_foo }); auto rval = sologrid1d_foo.get_location_contents(coord1); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } } diff --git a/test/unit-kami-sologrid2d.cc b/test/unit-kami-sologrid2d.cc index 844f7b4..077da08 100644 --- a/test/unit-kami-sologrid2d.cc +++ b/test/unit-kami-sologrid2d.cc @@ -53,17 +53,14 @@ TEST(SoloGrid2D, add_agent) { { auto agent_id_baz = sologrid2d_foo.add_agent(agent_id_foo, coord2); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_foo); + EXPECT_EQ(agent_id_baz, agent_id_foo); } { auto agent_id_baz = sologrid2d_foo.add_agent(agent_id_bar, coord2); - EXPECT_FALSE(agent_id_baz); } { auto agent_id_baz = sologrid2d_foo.add_agent(agent_id_bar, coord3); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_bar); + EXPECT_EQ(agent_id_baz, agent_id_bar); } } @@ -76,8 +73,7 @@ TEST(SoloGrid2D, delete_agent) { static_cast(sologrid2d_foo.add_agent(agent_id_foo, coord2)); auto agent_id_baz = sologrid2d_foo.delete_agent(agent_id_foo); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_foo); + EXPECT_EQ(agent_id_baz, agent_id_foo); } { SoloGrid2D sologrid2d_foo(10, 10, true, true); @@ -85,8 +81,7 @@ TEST(SoloGrid2D, delete_agent) { static_cast(sologrid2d_foo.add_agent(agent_id_foo, coord2)); static_cast(sologrid2d_foo.add_agent(agent_id_bar, coord2)); auto agent_id_baz = sologrid2d_foo.delete_agent(agent_id_foo); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_foo); + EXPECT_EQ(agent_id_baz, agent_id_foo); } { SoloGrid2D sologrid2d_foo(10, 10, true, true); @@ -94,7 +89,6 @@ TEST(SoloGrid2D, delete_agent) { static_cast(sologrid2d_foo.add_agent(agent_id_foo, coord2)); static_cast(sologrid2d_foo.add_agent(agent_id_bar, coord2)); auto agent_id_baz = sologrid2d_foo.delete_agent(agent_id_bar); - EXPECT_FALSE(agent_id_baz); } { @@ -102,8 +96,7 @@ TEST(SoloGrid2D, delete_agent) { static_cast(sologrid2d_foo.add_agent(agent_id_foo, coord2)); auto agent_id_baz = sologrid2d_foo.delete_agent(agent_id_foo, coord2); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_foo); + EXPECT_EQ(agent_id_baz, agent_id_foo); } { SoloGrid2D sologrid2d_foo(10, 10, true, true); @@ -111,8 +104,7 @@ TEST(SoloGrid2D, delete_agent) { static_cast(sologrid2d_foo.add_agent(agent_id_foo, coord2)); static_cast(sologrid2d_foo.add_agent(agent_id_bar, coord2)); auto agent_id_baz = sologrid2d_foo.delete_agent(agent_id_foo, coord2); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_foo); + EXPECT_EQ(agent_id_baz, agent_id_foo); } { SoloGrid2D sologrid2d_foo(10, 10, true, true); @@ -120,14 +112,12 @@ TEST(SoloGrid2D, delete_agent) { static_cast(sologrid2d_foo.add_agent(agent_id_foo, coord2)); static_cast(sologrid2d_foo.add_agent(agent_id_bar, coord2)); auto agent_id_baz = sologrid2d_foo.delete_agent(agent_id_bar, coord2); - EXPECT_FALSE(agent_id_baz); } { SoloGrid2D sologrid2d_foo(10, 10, true, true); static_cast(sologrid2d_foo.add_agent(agent_id_foo, coord2)); auto agent_id_baz = sologrid2d_foo.delete_agent(agent_id_foo, coord3); - EXPECT_FALSE(agent_id_baz); } { SoloGrid2D sologrid2d_foo(10, 10, true, true); @@ -135,7 +125,6 @@ TEST(SoloGrid2D, delete_agent) { static_cast(sologrid2d_foo.add_agent(agent_id_foo, coord2)); static_cast(sologrid2d_foo.add_agent(agent_id_bar, coord2)); auto agent_id_baz = sologrid2d_foo.delete_agent(agent_id_foo, coord3); - EXPECT_FALSE(agent_id_baz); } { SoloGrid2D sologrid2d_foo(10, 10, true, true); @@ -143,7 +132,6 @@ TEST(SoloGrid2D, delete_agent) { static_cast(sologrid2d_foo.add_agent(agent_id_foo, coord2)); static_cast(sologrid2d_foo.add_agent(agent_id_bar, coord2)); auto agent_id_baz = sologrid2d_foo.delete_agent(agent_id_bar, coord3); - EXPECT_FALSE(agent_id_baz); } } @@ -199,15 +187,13 @@ TEST(SoloGrid2D, move_agent) { static_cast(sologrid2d_foo.add_agent(agent_id_foo, coord2)); auto agent_id_baz = sologrid2d_foo.move_agent(agent_id_foo, coord7); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_foo); + EXPECT_EQ(agent_id_baz, agent_id_foo); } { SoloGrid2D sologrid2d_foo(10, 10, true, true); static_cast(sologrid2d_foo.add_agent(agent_id_foo, coord2)); auto agent_id_baz = sologrid2d_foo.move_agent(agent_id_foo, coord10); - EXPECT_FALSE(agent_id_baz); } { SoloGrid2D sologrid2d_foo(10, 10, true, true); @@ -215,8 +201,7 @@ TEST(SoloGrid2D, move_agent) { static_cast(sologrid2d_foo.add_agent(agent_id_foo, coord2)); static_cast(sologrid2d_foo.add_agent(agent_id_bar, coord2)); auto agent_id_baz = sologrid2d_foo.move_agent(agent_id_foo, coord2); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_foo); + EXPECT_EQ(agent_id_baz, agent_id_foo); } { SoloGrid2D sologrid2d_foo(10, 10, true, true); @@ -224,8 +209,7 @@ TEST(SoloGrid2D, move_agent) { static_cast(sologrid2d_foo.add_agent(agent_id_foo, coord2)); static_cast(sologrid2d_foo.add_agent(agent_id_bar, coord2)); auto agent_id_baz = sologrid2d_foo.move_agent(agent_id_foo, coord7); - EXPECT_TRUE(agent_id_baz); - EXPECT_EQ(agent_id_baz.value(), agent_id_foo); + EXPECT_EQ(agent_id_baz, agent_id_foo); } } @@ -236,206 +220,220 @@ TEST(SoloGrid2D, get_neighborhood_VonNeumann) { { SoloGrid2D sologrid2d_foo(10, 10, true, true); - auto tval = unordered_set({{0, 1}, - {0, 1}, - {9, 0}, - {0, 9}, - {1, 0}, - {0, 0}}); + auto tval = unordered_set < GridCoord2D > ({ + { 0, 1 }, + { 0, 1 }, + { 9, 0 }, + { 0, 9 }, + { 1, 0 }, + { 0, 0 } + }); auto rval = sologrid2d_foo.get_neighborhood(coord0, true, GridNeighborhoodType::VonNeumann); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid2D sologrid2d_foo(10, 10, true, true); - auto tval = unordered_set({{1, 2}, - {2, 1}, - {1, 0}, - {0, 1}, - {1, 1}}); + auto tval = unordered_set < GridCoord2D > ({ + { 1, 2 }, + { 2, 1 }, + { 1, 0 }, + { 0, 1 }, + { 1, 1 } + }); auto rval = sologrid2d_foo.get_neighborhood(coord1, true, GridNeighborhoodType::VonNeumann); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid2D sologrid2d_foo(10, 10, false, false); - auto tval = unordered_set({{0, 1}, - {1, 0}, - {0, 0}}); + auto tval = unordered_set < GridCoord2D > ({ + { 0, 1 }, + { 1, 0 }, + { 0, 0 } + }); auto rval = sologrid2d_foo.get_neighborhood(coord0, true, GridNeighborhoodType::VonNeumann); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid2D sologrid2d_foo(10, 10, false, false); - auto tval = unordered_set({{1, 2}, - {2, 1}, - {1, 0}, - {0, 1}, - {1, 1}}); + auto tval = unordered_set < GridCoord2D > ({ + { 1, 2 }, + { 2, 1 }, + { 1, 0 }, + { 0, 1 }, + { 1, 1 } + }); auto rval = sologrid2d_foo.get_neighborhood(coord1, true, GridNeighborhoodType::VonNeumann); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid2D sologrid2d_foo(10, 10, true, true); - auto tval = unordered_set({{1, 0}, - {0, 1}, - {9, 0}, - {0, 9}}); + auto tval = unordered_set < GridCoord2D > ({ + { 1, 0 }, + { 0, 1 }, + { 9, 0 }, + { 0, 9 } + }); auto rval = sologrid2d_foo.get_neighborhood(coord0, false, GridNeighborhoodType::VonNeumann); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid2D sologrid2d_foo(10, 10, true, true); - auto tval = unordered_set({{1, 0}, - {0, 1}, - {9, 0}, - {0, 9}}); + auto tval = unordered_set < GridCoord2D > ({ + { 1, 0 }, + { 0, 1 }, + { 9, 0 }, + { 0, 9 } + }); auto rval = sologrid2d_foo.get_neighborhood(coord0, false, GridNeighborhoodType::VonNeumann); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid2D sologrid2d_foo(10, 10, false, false); - auto tval = unordered_set({{1, 0}, - {0, 1}}); + auto tval = unordered_set < GridCoord2D > ({ + { 1, 0 }, + { 0, 1 } + }); auto rval = sologrid2d_foo.get_neighborhood(coord0, false, GridNeighborhoodType::VonNeumann); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid2D sologrid2d_foo(10, 10, false, false); - auto tval = unordered_set({{1, 0}, - {0, 1}}); + auto tval = unordered_set < GridCoord2D > ({ + { 1, 0 }, + { 0, 1 } + }); auto rval = sologrid2d_foo.get_neighborhood(coord0, false, GridNeighborhoodType::VonNeumann); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid2D sologrid2d_foo(10, 10, true, true); auto rval = sologrid2d_foo.get_neighborhood(agent_id_foo, true, GridNeighborhoodType::VonNeumann); - - EXPECT_FALSE(rval); } { SoloGrid2D sologrid2d_foo(10, 10, true, true); sologrid2d_foo.add_agent(agent_id_foo, coord0); - auto tval = unordered_set({{0, 1}, - {9, 0}, - {0, 9}, - {1, 0}, - {0, 0}}); + auto tval = unordered_set < GridCoord2D > ({ + { 0, 1 }, + { 9, 0 }, + { 0, 9 }, + { 1, 0 }, + { 0, 0 } + }); auto rval = sologrid2d_foo.get_neighborhood(agent_id_foo, true, GridNeighborhoodType::VonNeumann); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid2D sologrid2d_foo(10, 10, true, true); sologrid2d_foo.add_agent(agent_id_foo, coord1); - auto tval = unordered_set({{1, 2}, - {2, 1}, - {1, 0}, - {0, 1}, - {1, 1}}); + auto tval = unordered_set < GridCoord2D > ({ + { 1, 2 }, + { 2, 1 }, + { 1, 0 }, + { 0, 1 }, + { 1, 1 } + }); auto rval = sologrid2d_foo.get_neighborhood(agent_id_foo, true, GridNeighborhoodType::VonNeumann); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid2D sologrid2d_foo(10, 10, false, false); sologrid2d_foo.add_agent(agent_id_foo, coord0); - auto tval = unordered_set({{0, 1}, - {1, 0}, - {0, 0}}); + auto tval = unordered_set < GridCoord2D > ({ + { 0, 1 }, + { 1, 0 }, + { 0, 0 } + }); auto rval = sologrid2d_foo.get_neighborhood(agent_id_foo, true, GridNeighborhoodType::VonNeumann); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid2D sologrid2d_foo(10, 10, false, false); sologrid2d_foo.add_agent(agent_id_foo, coord1); - auto tval = unordered_set({{1, 2}, - {2, 1}, - {1, 0}, - {0, 1}, - {1, 1}}); + auto tval = unordered_set < GridCoord2D > ({ + { 1, 2 }, + { 2, 1 }, + { 1, 0 }, + { 0, 1 }, + { 1, 1 } + }); auto rval = sologrid2d_foo.get_neighborhood(agent_id_foo, true, GridNeighborhoodType::VonNeumann); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid2D sologrid2d_foo(10, 10, true, true); sologrid2d_foo.add_agent(agent_id_foo, coord0); - auto tval = unordered_set({{1, 0}, - {0, 1}, - {9, 0}, - {0, 9}}); + auto tval = unordered_set < GridCoord2D > ({ + { 1, 0 }, + { 0, 1 }, + { 9, 0 }, + { 0, 9 } + }); auto rval = sologrid2d_foo.get_neighborhood(agent_id_foo, false, GridNeighborhoodType::VonNeumann); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid2D sologrid2d_foo(10, 10, true, true); sologrid2d_foo.add_agent(agent_id_foo, coord1); - auto tval = unordered_set({{0, 1}, - {1, 2}, - {2, 1}, - {1, 0}}); + auto tval = unordered_set < GridCoord2D > ({ + { 0, 1 }, + { 1, 2 }, + { 2, 1 }, + { 1, 0 } + }); auto rval = sologrid2d_foo.get_neighborhood(agent_id_foo, false, GridNeighborhoodType::VonNeumann); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid2D sologrid2d_foo(10, 10, false, false); sologrid2d_foo.add_agent(agent_id_foo, coord0); - auto tval = unordered_set({{1, 0}, - {0, 1}}); + auto tval = unordered_set < GridCoord2D > ({ + { 1, 0 }, + { 0, 1 } + }); auto rval = sologrid2d_foo.get_neighborhood(agent_id_foo, false, GridNeighborhoodType::VonNeumann); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid2D sologrid2d_foo(10, 10, false, false); sologrid2d_foo.add_agent(agent_id_foo, coord1); - auto tval = unordered_set({{0, 1}, - {1, 2}, - {2, 1}, - {1, 0}}); + auto tval = unordered_set < GridCoord2D > ({ + { 0, 1 }, + { 1, 2 }, + { 2, 1 }, + { 1, 0 } + }); auto rval = sologrid2d_foo.get_neighborhood(agent_id_foo, false, GridNeighborhoodType::VonNeumann); - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } } @@ -447,253 +445,279 @@ TEST(SoloGrid2D, get_neighborhood_Moore) { SoloGrid2D sologrid2d_foo(10, 10, true, true); auto tval = unordered_set({{9, 9}, - {9, 1}, - {1, 1}, - {0, 1}, - {9, 0}, - {1, 9}, - {0, 9}, - {1, 0}, - {0, 0}}); + { 9, 1 }, + { 1, 1 }, + { 0, 1 }, + { 9, 0 }, + { 1, 9 }, + { 0, 9 }, + { 1, 0 }, + { 0, 0 } + }); + auto rval = sologrid2d_foo.get_neighborhood(coord0, true, GridNeighborhoodType::Moore); + + EXPECT_EQ(tval, *rval); + } + { + SoloGrid2D sologrid2d_foo(10, 10, true, true); + + auto tval = unordered_set < GridCoord2D > ({ + { 2, 2 }, + { 0, 2 }, + { 1, 2 }, + { 0, 0 }, + { 2, 1 }, + { 1, 0 }, + { 2, 0 }, + { 0, 1 }, + { 1, 1 } + }); + auto rval = sologrid2d_foo.get_neighborhood(coord1, true, GridNeighborhoodType::Moore); + + EXPECT_EQ(tval, *rval); + } + { + SoloGrid2D sologrid2d_foo(10, 10, false, false); + + auto tval = unordered_set < GridCoord2D > ({ + { 1, 1 }, + { 0, 1 }, + { 1, 0 }, + { 0, 0 } + }); auto rval = sologrid2d_foo.get_neighborhood(coord0, true, GridNeighborhoodType::Moore); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { - SoloGrid2D sologrid2d_foo(10, 10, true, true); + SoloGrid2D sologrid2d_foo(10, 10, false, false); - auto tval = unordered_set({{2, 2}, - {0, 2}, - {1, 2}, - {0, 0}, - {2, 1}, - {1, 0}, - {2, 0}, - {0, 1}, - {1, 1}}); + auto tval = unordered_set < GridCoord2D > ({ + { 2, 2 }, + { 0, 2 }, + { 1, 2 }, + { 0, 0 }, + { 2, 1 }, + { 1, 0 }, + { 2, 0 }, + { 0, 1 }, + { 1, 1 } + }); auto rval = sologrid2d_foo.get_neighborhood(coord1, true, GridNeighborhoodType::Moore); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); - } - { - SoloGrid2D sologrid2d_foo(10, 10, false, false); - - auto tval = unordered_set({{1, 1}, - {0, 1}, - {1, 0}, - {0, 0}}); - auto rval = sologrid2d_foo.get_neighborhood(coord0, true, GridNeighborhoodType::Moore); - - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); - } - { - SoloGrid2D sologrid2d_foo(10, 10, false, false); - - auto tval = unordered_set({{2, 2}, - {0, 2}, - {1, 2}, - {0, 0}, - {2, 1}, - {1, 0}, - {2, 0}, - {0, 1}, - {1, 1}}); - auto rval = sologrid2d_foo.get_neighborhood(coord1, true, GridNeighborhoodType::Moore); - - EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid2D sologrid2d_foo(10, 10, true, true); - auto tval = unordered_set({{9, 9}, - {9, 1}, - {1, 0}, - {1, 1}, - {0, 1}, - {0, 9}, - {1, 9}, - {9, 0}}); + auto tval = unordered_set < GridCoord2D > ({ + { 9, 9 }, + { 9, 1 }, + { 1, 0 }, + { 1, 1 }, + { 0, 1 }, + { 0, 9 }, + { 1, 9 }, + { 9, 0 } + }); auto rval = sologrid2d_foo.get_neighborhood(coord0, false, GridNeighborhoodType::Moore); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid2D sologrid2d_foo(10, 10, true, true); - auto tval = unordered_set({{9, 9}, - {9, 1}, - {1, 0}, - {1, 1}, - {0, 1}, - {0, 9}, - {1, 9}, - {9, 0}}); + auto tval = unordered_set < GridCoord2D > ({ + { 9, 9 }, + { 9, 1 }, + { 1, 0 }, + { 1, 1 }, + { 0, 1 }, + { 0, 9 }, + { 1, 9 }, + { 9, 0 } + }); auto rval = sologrid2d_foo.get_neighborhood(coord0, false, GridNeighborhoodType::Moore); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid2D sologrid2d_foo(10, 10, false, false); - auto tval = unordered_set({{1, 0}, - {1, 1}, - {0, 1}}); + auto tval = unordered_set < GridCoord2D > ({ + { 1, 0 }, + { 1, 1 }, + { 0, 1 } + }); auto rval = sologrid2d_foo.get_neighborhood(coord0, false, GridNeighborhoodType::Moore); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid2D sologrid2d_foo(10, 10, false, false); - auto tval = unordered_set({{1, 0}, - {1, 1}, - {0, 1}}); + auto tval = unordered_set < GridCoord2D > ({ + { 1, 0 }, + { 1, 1 }, + { 0, 1 } + }); auto rval = sologrid2d_foo.get_neighborhood(coord0, false, GridNeighborhoodType::Moore); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid2D sologrid2d_foo(10, 10, true, true); auto rval = sologrid2d_foo.get_neighborhood(agent_id_foo, true, GridNeighborhoodType::Moore); - - EXPECT_FALSE(rval); } { SoloGrid2D sologrid2d_foo(10, 10, true, true); sologrid2d_foo.add_agent(agent_id_foo, coord0); auto tval = unordered_set({{9, 9}, {9, 1}, - {1, 1}, - {0, 1}, - {9, 0}, - {1, 9}, - {0, 9}, - {1, 0}, - {0, 0}}); + { 1, 1 }, + { 0, 1 }, + { 9, 0 }, + { 1, 9 }, + { 0, 9 }, + { 1, 0 }, + { 0, 0 } + }); auto rval = sologrid2d_foo.get_neighborhood(agent_id_foo, true, GridNeighborhoodType::Moore); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid2D sologrid2d_foo(10, 10, true, true); sologrid2d_foo.add_agent(agent_id_foo, coord1); - auto tval = unordered_set({{2, 2}, - {0, 2}, - {1, 2}, - {0, 0}, - {2, 1}, - {1, 0}, - {2, 0}, - {0, 1}, - {1, 1}}); + auto tval = unordered_set < GridCoord2D > ({ + { 2, 2 }, + { 0, 2 }, + { 1, 2 }, + { 0, 0 }, + { 2, 1 }, + { 1, 0 }, + { 2, 0 }, + { 0, 1 }, + { 1, 1 } + }); auto rval = sologrid2d_foo.get_neighborhood(agent_id_foo, true, GridNeighborhoodType::Moore); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid2D sologrid2d_foo(10, 10, false, false); sologrid2d_foo.add_agent(agent_id_foo, coord0); - auto tval = unordered_set({{1, 1}, - {0, 1}, - {1, 0}, - {0, 0}}); + auto tval = unordered_set < GridCoord2D > ({ + { 1, 1 }, + { 0, 1 }, + { 1, 0 }, + { 0, 0 } + }); auto rval = sologrid2d_foo.get_neighborhood(agent_id_foo, true, GridNeighborhoodType::Moore); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid2D sologrid2d_foo(10, 10, false, false); sologrid2d_foo.add_agent(agent_id_foo, coord1); - auto tval = unordered_set({{2, 2}, - {0, 2}, - {1, 2}, - {0, 0}, - {2, 1}, - {1, 0}, - {2, 0}, - {0, 1}, - {1, 1}}); + auto tval = unordered_set < GridCoord2D > ({ + { 2, 2 }, + { 0, 2 }, + { 1, 2 }, + { 0, 0 }, + { 2, 1 }, + { 1, 0 }, + { 2, 0 }, + { 0, 1 }, + { 1, 1 } + }); auto rval = sologrid2d_foo.get_neighborhood(agent_id_foo, true, GridNeighborhoodType::Moore); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid2D sologrid2d_foo(10, 10, true, true); sologrid2d_foo.add_agent(agent_id_foo, coord0); - auto tval = unordered_set({{9, 9}, - {9, 1}, - {1, 0}, - {1, 1}, - {0, 1}, - {0, 9}, - {1, 9}, - {9, 0}}); + auto tval = unordered_set < GridCoord2D > ({ + { 9, 9 }, + { 9, 1 }, + { 1, 0 }, + { 1, 1 }, + { 0, 1 }, + { 0, 9 }, + { 1, 9 }, + { 9, 0 } + }); auto rval = sologrid2d_foo.get_neighborhood(agent_id_foo, false, GridNeighborhoodType::Moore); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid2D sologrid2d_foo(10, 10, true, true); sologrid2d_foo.add_agent(agent_id_foo, coord1); - auto tval = unordered_set({{2, 2}, - {2, 0}, - {0, 1}, - {0, 2}, - {1, 2}, - {0, 0}, - {2, 1}, - {1, 0}}); + auto tval = unordered_set < GridCoord2D > ({ + { 2, 2 }, + { 2, 0 }, + { 0, 1 }, + { 0, 2 }, + { 1, 2 }, + { 0, 0 }, + { 2, 1 }, + { 1, 0 } + }); auto rval = sologrid2d_foo.get_neighborhood(agent_id_foo, false, GridNeighborhoodType::Moore); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid2D sologrid2d_foo(10, 10, false, false); sologrid2d_foo.add_agent(agent_id_foo, coord0); - auto tval = unordered_set({{1, 0}, - {1, 1}, - {0, 1}}); + auto tval = unordered_set < GridCoord2D > ({ + { 1, 0 }, + { 1, 1 }, + { 0, 1 } + }); auto rval = sologrid2d_foo.get_neighborhood(agent_id_foo, false, GridNeighborhoodType::Moore); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } { SoloGrid2D sologrid2d_foo(10, 10, false, false); sologrid2d_foo.add_agent(agent_id_foo, coord1); - auto tval = unordered_set({{2, 2}, - {2, 0}, - {0, 1}, - {0, 2}, - {1, 2}, - {0, 0}, - {2, 1}, - {1, 0}}); + auto tval = unordered_set < GridCoord2D > ({ + { 2, 2 }, + { 2, 0 }, + { 0, 1 }, + { 0, 2 }, + { 1, 2 }, + { 0, 0 }, + { 2, 1 }, + { 1, 0 } + }); auto rval = sologrid2d_foo.get_neighborhood(agent_id_foo, false, GridNeighborhoodType::Moore); EXPECT_TRUE(rval); - EXPECT_EQ(tval, *rval.value()); + EXPECT_EQ(tval, *rval); } } @@ -704,17 +728,16 @@ TEST(SoloGrid2D, get_location_by_agent) { { SoloGrid2D sologrid2d_foo(10, 10, true, true); - EXPECT_FALSE(sologrid2d_foo.get_location_by_agent(agent_id_foo)); - EXPECT_FALSE(sologrid2d_foo.get_location_by_agent(agent_id_bar)); + (sologrid2d_foo.get_location_by_agent(agent_id_foo)); + (sologrid2d_foo.get_location_by_agent(agent_id_bar)); } { SoloGrid2D sologrid2d_foo(10, 10, true, true); static_cast(sologrid2d_foo.add_agent(agent_id_foo, coord2)); auto local = sologrid2d_foo.get_location_by_agent(agent_id_foo); - EXPECT_TRUE(local); EXPECT_EQ(local, coord2); - EXPECT_FALSE(sologrid2d_foo.get_location_by_agent(agent_id_bar)); + (sologrid2d_foo.get_location_by_agent(agent_id_bar)); } } diff --git a/test/unit-kami-staged.cc b/test/unit-kami-staged.cc index b57c00a..680cdbc 100644 --- a/test/unit-kami-staged.cc +++ b/test/unit-kami-staged.cc @@ -54,12 +54,12 @@ public: shared_ptr> retval; shared_ptr step() override { - retval = _sched->step(shared_from_this()).value(); + retval = _sched->step(shared_from_this()); return shared_from_this(); } shared_ptr step(unique_ptr> agent_list) { - retval = _sched->step(shared_from_this(), std::move(agent_list)).value(); + retval = _sched->step(shared_from_this(), std::move(agent_list)); return shared_from_this(); } }; @@ -94,25 +94,23 @@ TEST(StagedScheduler, DefaultConstructor) { } TEST_F(StagedSchedulerTest, step_interface1) { - auto tval = mod->get_population().value()->get_agent_list(); - auto aval = mod->get_population().value()->get_agent_list(); + auto tval = mod->get_population()->get_agent_list(); + auto aval = mod->get_population()->get_agent_list(); mod->step(std::move(aval)); auto rval = mod->retval; - EXPECT_TRUE(rval); EXPECT_EQ(rval->size(), 10); EXPECT_EQ(*rval, *tval); } TEST_F(StagedSchedulerTest, step_interface2) { - auto tval = mod->get_population().value()->get_agent_list(); - auto aval = mod->get_population().value()->get_agent_list(); + auto tval = mod->get_population()->get_agent_list(); + auto aval = mod->get_population()->get_agent_list(); mod->step(std::move(aval)); auto rval = mod->retval; - EXPECT_TRUE(rval); EXPECT_EQ(rval->size(), 10); EXPECT_EQ(*rval, *tval); } @@ -120,13 +118,12 @@ TEST_F(StagedSchedulerTest, step_interface2) { TEST_F(StagedSchedulerTest, step_10000) { // Do it a lot... for (auto i = 0; i < 10000; i++) { - auto tval = mod->get_population().value()->get_agent_list(); - auto aval = mod->get_population().value()->get_agent_list(); + auto tval = mod->get_population()->get_agent_list(); + auto aval = mod->get_population()->get_agent_list(); mod->step(std::move(aval)); auto rval = mod->retval; - EXPECT_TRUE(rval); EXPECT_EQ(rval->size(), 10); EXPECT_EQ(*rval, *tval); }