/******************************************************************************* * This file is part of the "Enduro2D" * For conditions of distribution and use, see copyright notice in LICENSE.md * Copyright (C) 2018-2019, by Matvey Cherevko (blackmatov@gmail.com) ******************************************************************************/ #include "_utils.hpp" using namespace e2d; namespace { using namespace e2d; class mul_module : public module { public: virtual u32 act(u32 v) const noexcept = 0; virtual u32 multiplier() const noexcept = 0; }; class mul_module_impl : public mul_module { public: mul_module_impl(u32 m) : m_(m) {} u32 act(u32 v) const noexcept { return v * m_; } u32 multiplier() const noexcept { return m_; } void multiplier(u32 v) noexcept { m_ = v; } private: u32 m_; }; class empty_module : public module { }; class empty_module_impl : public empty_module { }; } TEST_CASE("module") { { REQUIRE_FALSE(module::is_initialized()); REQUIRE_FALSE(module::is_initialized()); REQUIRE_THROWS_AS(module::instance(), module_not_initialized); REQUIRE_THROWS_AS(module::instance(), module_not_initialized); REQUIRE_NOTHROW(module::initialize(2)); REQUIRE_THROWS_AS(module::initialize(1), module_already_initialized); REQUIRE(module::is_initialized()); REQUIRE_FALSE(module::is_initialized()); REQUIRE_NOTHROW(module::instance()); REQUIRE_THROWS_AS(module::instance(), module_not_initialized); REQUIRE(module::instance().act(10) == 20); REQUIRE(module::instance().multiplier() == 2); REQUIRE_NOTHROW(module::shutdown()); REQUIRE_FALSE(module::is_initialized()); REQUIRE_FALSE(module::is_initialized()); REQUIRE_THROWS_AS(module::instance(), module_not_initialized); REQUIRE_THROWS_AS(module::instance(), module_not_initialized); } { REQUIRE_FALSE(modules::is_initialized()); REQUIRE_FALSE(modules::is_initialized()); REQUIRE_THROWS_AS(modules::instance(), module_not_initialized); REQUIRE_THROWS_AS(modules::instance(), module_not_initialized); REQUIRE_NOTHROW(modules::initialize(3)); REQUIRE(modules::is_initialized()); REQUIRE(modules::is_initialized()); REQUIRE_NOTHROW(modules::instance()); REQUIRE_NOTHROW(modules::instance()); REQUIRE(modules::instance().act(10) == 30); REQUIRE(modules::instance().act(20) == 60); REQUIRE(modules::instance().multiplier() == 3); REQUIRE(modules::instance().multiplier() == 3); REQUIRE_NOTHROW(modules::instance().multiplier(5)); REQUIRE(modules::instance().act(10) == 50); REQUIRE(modules::instance().act(20) == 100); REQUIRE(modules::instance().multiplier() == 5); REQUIRE(modules::instance().multiplier() == 5); REQUIRE_NOTHROW(modules::shutdown()); REQUIRE_FALSE(modules::is_initialized()); REQUIRE_FALSE(modules::is_initialized()); REQUIRE_THROWS_AS(modules::instance(), module_not_initialized); REQUIRE_THROWS_AS(modules::instance(), module_not_initialized); } { REQUIRE_FALSE(modules::is_initialized()); REQUIRE_FALSE(modules::is_initialized()); REQUIRE_FALSE(modules::is_initialized()); REQUIRE_NOTHROW(modules::initialize(3)); REQUIRE(modules::is_initialized()); REQUIRE_FALSE(modules::is_initialized()); REQUIRE_FALSE(modules::is_initialized()); REQUIRE_NOTHROW(modules::initialize()); REQUIRE(modules::is_initialized()); REQUIRE(modules::is_initialized()); REQUIRE(modules::is_initialized()); REQUIRE_NOTHROW(modules::shutdown()); REQUIRE_FALSE(modules::is_initialized()); REQUIRE_FALSE(modules::is_initialized()); REQUIRE_FALSE(modules::is_initialized()); } }