mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-11 08:03:55 +00:00
1bbaeb3462
* Adding dedicated test_const_name. Also exercises pybind11::detail::_ backward compatibility. See also: PR #3423 * Backing out tests involving int_to_str (requires C++17 or higher). * Suppressing clang-tidy errors. * Disabling test_const_name for MSVC 2015 due to bizarre failures. * Stacking @pytest.mark.parametrize (thanks to @skylion007 for pointing out).
71 lines
4.2 KiB
C++
71 lines
4.2 KiB
C++
// Copyright (c) 2021 The Pybind Development Team.
|
|
// All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
#include "pybind11_tests.h"
|
|
|
|
#if defined(_MSC_VER) && _MSC_VER < 1910
|
|
|
|
// MSVC 2015 fails in bizarre ways.
|
|
# define PYBIND11_SKIP_TEST_CONST_NAME
|
|
|
|
#else // Only test with MSVC 2017 or newer.
|
|
|
|
// IUT = Implementation Under Test
|
|
# define CONST_NAME_TESTS(TEST_FUNC, IUT) \
|
|
std::string TEST_FUNC(int selector) { \
|
|
switch (selector) { \
|
|
case 0: \
|
|
return IUT("").text; \
|
|
case 1: \
|
|
return IUT("A").text; \
|
|
case 2: \
|
|
return IUT("Bd").text; \
|
|
case 3: \
|
|
return IUT("Cef").text; \
|
|
case 4: \
|
|
return IUT<int>().text; /*NOLINT(bugprone-macro-parentheses)*/ \
|
|
case 5: \
|
|
return IUT<std::string>().text; /*NOLINT(bugprone-macro-parentheses)*/ \
|
|
case 6: \
|
|
return IUT<true>("T1", "T2").text; /*NOLINT(bugprone-macro-parentheses)*/ \
|
|
case 7: \
|
|
return IUT<false>("U1", "U2").text; /*NOLINT(bugprone-macro-parentheses)*/ \
|
|
case 8: \
|
|
/*NOLINTNEXTLINE(bugprone-macro-parentheses)*/ \
|
|
return IUT<true>(IUT("D1"), IUT("D2")).text; \
|
|
case 9: \
|
|
/*NOLINTNEXTLINE(bugprone-macro-parentheses)*/ \
|
|
return IUT<false>(IUT("E1"), IUT("E2")).text; \
|
|
case 10: \
|
|
return IUT("KeepAtEnd").text; \
|
|
default: \
|
|
break; \
|
|
} \
|
|
throw std::runtime_error("Invalid selector value."); \
|
|
}
|
|
|
|
CONST_NAME_TESTS(const_name_tests, py::detail::const_name)
|
|
|
|
# ifdef PYBIND11_DETAIL_UNDERSCORE_BACKWARD_COMPATIBILITY
|
|
CONST_NAME_TESTS(underscore_tests, py::detail::_)
|
|
# endif
|
|
|
|
#endif // MSVC >= 2017
|
|
|
|
TEST_SUBMODULE(const_name, m) {
|
|
#ifdef PYBIND11_SKIP_TEST_CONST_NAME
|
|
m.attr("const_name_tests") = "PYBIND11_SKIP_TEST_CONST_NAME";
|
|
#else
|
|
m.def("const_name_tests", const_name_tests);
|
|
#endif
|
|
|
|
#ifdef PYBIND11_SKIP_TEST_CONST_NAME
|
|
m.attr("underscore_tests") = "PYBIND11_SKIP_TEST_CONST_NAME";
|
|
#elif defined(PYBIND11_DETAIL_UNDERSCORE_BACKWARD_COMPATIBILITY)
|
|
m.def("underscore_tests", underscore_tests);
|
|
#else
|
|
m.attr("underscore_tests") = "PYBIND11_DETAIL_UNDERSCORE_BACKWARD_COMPATIBILITY not defined.";
|
|
#endif
|
|
}
|