summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/tests/test_pmfp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/tests/test_pmfp.cpp')
-rw-r--r--src/lib/netlist/tests/test_pmfp.cpp77
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
+}