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')
-rwxr-xr-xsrc/lib/netlist/tests/test_pmfp.cpp71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/lib/netlist/tests/test_pmfp.cpp b/src/lib/netlist/tests/test_pmfp.cpp
new file mode 100755
index 00000000000..f8bdaa9c0ae
--- /dev/null
+++ b/src/lib/netlist/tests/test_pmfp.cpp
@@ -0,0 +1,71 @@
+// license:BSD-3-Clause
+// copyright-holders:Couriersud
+
+///
+/// \file test_pmfp.cpp
+///
+/// tests for plib::pmfp
+///
+
+#include "plib/ptests.h"
+
+#include "plib/pexception.h"
+#include "plib/ppmf.h"
+
+#include <utility>
+#include <memory>
+
+/// 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 Ta
+ {
+ public:
+ void ap(int &r) { r = ax; }
+ int ax;
+ };
+
+};
+
+PTEST_F(test_late_pmfp, late_pmfp)
+{
+ plib::late_pmfp<plib::pmfp<void (int &)>> late(&Ta::ap);
+
+ Ta a;
+ a.ax = 1;
+ auto mfp(late(&a));
+ int r(0);
+ mfp(r);
+ PEXPECT_TRUE(r == 1);
+}
+
+PTEST(test_compile, compile)
+{
+ plib::pmfp_base<PPMF_TYPE_PMF, void(int)> mfp_PPMF_TYPE_PMF;
+ plib::pmfp_base<PPMF_TYPE_INTERNAL_ITANIUM, void(int)> mfp_PPMF_TYPE_INTERNAL_ITANIUM;
+ plib::pmfp_base<PPMF_TYPE_INTERNAL_ARM, void(int)> mfp_PPMF_TYPE_INTERNAL_ARM;
+ plib::pmfp_base<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());
+
+#if defined(__GNUC__) && !defined(__clang__) && (NVCCBUILD == 0)
+ plib::pmfp_base<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(plib::ppmf_internal::value,PPMF_TYPE_INTERNAL_ARM);
+#endif
+}