diff options
Diffstat (limited to 'src/lib/netlist/tests/test_pmfp.cpp')
-rw-r--r-- | src/lib/netlist/tests/test_pmfp.cpp | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/src/lib/netlist/tests/test_pmfp.cpp b/src/lib/netlist/tests/test_pmfp.cpp new file mode 100644 index 00000000000..c6c9bf70daa --- /dev/null +++ b/src/lib/netlist/tests/test_pmfp.cpp @@ -0,0 +1,77 @@ +// license:BSD-3-Clause +// copyright-holders:Couriersud + +/// +/// \file test_pmfp.cpp +/// +/// tests for `plib::pmfp` class +/// + +#include "plib/ptests.h" + +#include "plib/pexception.h" +#include "plib/ppmf.h" + +#include <memory> +#include <utility> + +/// `plib::late_pmfp<plib::pmfp<void, pstring>> a(&nld_7493::printer);` +/// // Store the a object somewhere +/// +/// // After full construction ... +/// +/// ``` +/// auto dele = a(this); +/// dele(pstring("Hello World!")); +/// ``` + +class test_late_pmfp : public plib::testing::Test +{ +protected: + class late_pmfp_object + { + public: + void ap(int &r) { r = ax; } + int ax; + }; + +}; + +PTEST_F(test_late_pmfp, late_pmfp) +{ +#if !PPMF_USE_MAME_DELEGATES + plib::late_pmfp<plib::pmfp<void (int &)>> late(&late_pmfp_object::ap); + + late_pmfp_object a; + a.ax = 1; + auto mfp(late(&a)); + int r(0); + mfp(r); + PEXPECT_TRUE(r == 1); +#endif +} + +PTEST(test_compile, compile) +{ +#if !PPMF_USE_MAME_DELEGATES + plib::pmfp_base<plib::ppmf_type::PMF, void(int)> mfp_PPMF_TYPE_PMF; + plib::pmfp_base<plib::ppmf_type::INTERNAL_ITANIUM, void(int)> mfp_PPMF_TYPE_INTERNAL_ITANIUM; + plib::pmfp_base<plib::ppmf_type::INTERNAL_ARM, void(int)> mfp_PPMF_TYPE_INTERNAL_ARM; + plib::pmfp_base<plib::ppmf_type::INTERNAL_MSC, void(int)> mfp_PPMF_TYPE_INTERNAL_MSC; + PEXPECT_TRUE(mfp_PPMF_TYPE_PMF.isnull()); + PEXPECT_TRUE(mfp_PPMF_TYPE_INTERNAL_ITANIUM.isnull()); + PEXPECT_TRUE(mfp_PPMF_TYPE_INTERNAL_ARM.isnull()); + PEXPECT_TRUE(mfp_PPMF_TYPE_INTERNAL_MSC.isnull()); +#endif + // FIXME: clang on linux seems to support GNUC_PMF_CONV - test needed + // Need to check for clang-cl here. +#if defined(__GNUC__) && !defined(__clang__) && !defined(__NVCC__) + plib::pmfp_base<plib::ppmf_type::GNUC_PMF_CONV, void(int)> mfp_PPMF_TYPE_GNUC_PMF_CONV; + PEXPECT_TRUE(mfp_PPMF_TYPE_GNUC_PMF_CONV.isnull()); +#else + PEXPECT_NE("ppmf_type::GNUC_PMF_CONV not supported on this build", ""); +#endif +#if defined(__EMSCRIPTEN__) + PEXPECT_EQ(int(plib::ppmf_internal_selector::value), int(plib::ppmf_type::INTERNAL_ARM)); +#endif +} |