FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

Tests C11, C++17 and C++20 by vstinner · Pull Request #167 · python/pythoncapi-compat · GitHub

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension .c  (1) .py  (2) All 2 file types selected
Only manifest files
Viewed files
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Unified
Split
Hide whitespace
Diff view
Unified
Split
Hide whitespace
57 changes: 34 additions & 23 deletions tests/setup.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,7 @@
'-Wformat-nonliteral',
'-Wformat-security',
))
CFLAGS = COMMON_FLAGS + [
# Use C99 for pythoncapi_compat.c which initializes PyModuleDef with a
# mixture of designated and non-designated initializers
'-std=c99',
]
CFLAGS = COMMON_FLAGS
else:
# C compiler flags for MSVC
COMMON_FLAGS.extend((
Expand All @@ -54,6 +50,27 @@
CFLAGS = list(COMMON_FLAGS)
CXXFLAGS = list(COMMON_FLAGS)

if not MSVC:
C_VERSIONS = ('c99', 'c11')
else:
# MSVC doesn't support /std:c99 flag
C_VERSIONS = ('c11',)

if not MSVC:
CXX_VERSIONS = [
('test_pythoncapi_compat_cpp03ext', ['-std=c++03']),
('test_pythoncapi_compat_cpp11ext', ['-std=c++11']),
('test_pythoncapi_compat_cpp14ext', ['-std=c++14']),
('test_pythoncapi_compat_cpp17ext', ['-std=c++17']),
('test_pythoncapi_compat_cpp20ext', ['-std=c++20']),
]
else:
# MSVC doesn't support /std:c++11
CXX_VERSIONS = [
('test_pythoncapi_compat_cppext', None),
('test_pythoncapi_compat_cpp14ext', ['/std:c++14', '/Zc:__cplusplus']),
]


def main():
# gh-105776: When "gcc -std=11" is used as the C++ compiler, -std=c11
Expand All @@ -75,27 +92,21 @@ def main():
os.environ['CC'] = cmd

# C extension
c_ext = Extension(
'test_pythoncapi_compat_cext',
sources=['test_pythoncapi_compat_cext.c'],
extra_compile_args=CFLAGS)
extensions = [c_ext]
extensions = []
for std in C_VERSIONS:
if not MSVC:
cflags = CFLAGS + ['-std=%s' % std]
else:
cflags = CFLAGS + ['/std:%s' % std]
c_ext = Extension(
'test_pythoncapi_compat_cext_%s' % std,
sources=['test_pythoncapi_compat_cext.c'],
extra_compile_args=cflags)
extensions.append(c_ext)

if TEST_CXX:
# C++ extension

# MSVC has /std flag but doesn't support /std:c++11
if not MSVC:
versions = [
('test_pythoncapi_compat_cpp03ext', ['-std=c++03']),
('test_pythoncapi_compat_cpp11ext', ['-std=c++11']),
]
else:
versions = [
('test_pythoncapi_compat_cppext', None),
('test_pythoncapi_compat_cpp14ext', ['/std:c++14', '/Zc:__cplusplus']),
]
for name, std_flags in versions:
for name, std_flags in CXX_VERSIONS:
flags = list(CXXFLAGS)
if std_flags is not None:
flags.extend(std_flags)
Expand Down
51 changes: 28 additions & 23 deletions tests/test_pythoncapi_compat.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
Expand Up @@ -32,19 +32,29 @@
# Windows uses MSVC compiler
MSVC = (os.name == "nt")

TESTS = [
("test_pythoncapi_compat_cext", "C"),
]
# C++ is only supported on Python 3.6 and newer
TEST_CXX = (sys.version_info >= (3, 6))

if not MSVC:
TESTS.extend((
C_TESTS = [
("test_pythoncapi_compat_cext_c99", "C99"),
("test_pythoncapi_compat_cext_c11", "C11"),
]
CXX_TESTS = [
("test_pythoncapi_compat_cpp03ext", "C++03"),
("test_pythoncapi_compat_cpp11ext", "C++11"),
))
("test_pythoncapi_compat_cpp14ext", "C++14"),
("test_pythoncapi_compat_cpp17ext", "C++17"),
("test_pythoncapi_compat_cpp20ext", "C++20"),
]
else:
TESTS.extend((
C_TESTS = [
("test_pythoncapi_compat_cext_c11", "C11"),
]
CXX_TESTS = [
("test_pythoncapi_compat_cppext", "C++"),
("test_pythoncapi_compat_cpp14ext", "C++14"),
))
]


VERBOSE = False
Expand Down Expand Up @@ -84,9 +94,12 @@ def import_tests(module_name):

if not pythonpath:
raise Exception("Failed to find the build directory")
sys.path.append(pythonpath)

return __import__(module_name)
old_sys_path = list(sys.path)
try:
sys.path.append(pythonpath)
return __import__(module_name)
finally:
sys.path[:] = old_sys_path


def _run_tests(tests, verbose):
Expand Down Expand Up @@ -155,18 +168,7 @@ def run_tests(module_name, lang):
title = "Test %s (%s)" % (module_name, lang)
display_title(title)

try:
testmod = import_tests(module_name)
except ImportError:
# The C extension must always be available
if lang == "C":
raise

if VERBOSE:
print("%s: skip %s, missing %s extension"
% (python_version(), lang, module_name))
print()
return
testmod = import_tests(module_name)

if VERBOSE:
empty_line = False
Expand Down Expand Up @@ -226,7 +228,10 @@ def main():

build_ext()

for module_name, lang in TESTS:
tests = list(C_TESTS)
if TEST_CXX:
tests += CXX_TESTS
for module_name, lang in tests:
run_tests(module_name, lang)


Expand Down
14 changes: 12 additions & 2 deletions tests/test_pythoncapi_compat_cext.c
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,24 @@
# define PYTHON3 1
#endif

#if defined(__cplusplus) && __cplusplus >= 201402
#if defined(__cplusplus) && __cplusplus >= 202002L
# define MODULE_NAME test_pythoncapi_compat_cpp20ext
#elif defined(__cplusplus) && __cplusplus >= 201703L
# define MODULE_NAME test_pythoncapi_compat_cpp17ext
#elif defined(__cplusplus) && __cplusplus >= 201402L
# define MODULE_NAME test_pythoncapi_compat_cpp14ext
#elif defined(__cplusplus) && __cplusplus >= 201103
#elif defined(__cplusplus) && __cplusplus >= 201103L
# define MODULE_NAME test_pythoncapi_compat_cpp11ext
#elif defined(__cplusplus) && !defined(_MSC_VER)
# define MODULE_NAME test_pythoncapi_compat_cpp03ext
#elif defined(__cplusplus)
# define MODULE_NAME test_pythoncapi_compat_cppext
#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 202311L
# define MODULE_NAME test_pythoncapi_compat_cext_c23
#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
# define MODULE_NAME test_pythoncapi_compat_cext_c11
#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
# define MODULE_NAME test_pythoncapi_compat_cext_c99
#else
# define MODULE_NAME test_pythoncapi_compat_cext
#endif
Expand Down
Loading

Back | FazBrowse Home | New Git URL