|
Packit |
7a8e5e |
"""
|
|
Packit |
7a8e5e |
Pytest configuration and fixtures for the Numpy test suite.
|
|
Packit |
7a8e5e |
"""
|
|
Packit |
7a8e5e |
from __future__ import division, absolute_import, print_function
|
|
Packit |
7a8e5e |
|
|
Packit |
7a8e5e |
import warnings
|
|
Packit |
7a8e5e |
import pytest
|
|
Packit |
7a8e5e |
|
|
Packit |
7a8e5e |
from numpy.core.multiarray_tests import get_fpu_mode
|
|
Packit |
7a8e5e |
|
|
Packit |
7a8e5e |
|
|
Packit |
7a8e5e |
_old_fpu_mode = None
|
|
Packit |
7a8e5e |
_collect_results = {}
|
|
Packit |
7a8e5e |
|
|
Packit |
7a8e5e |
|
|
Packit |
7a8e5e |
@pytest.hookimpl()
|
|
Packit |
7a8e5e |
def pytest_itemcollected(item):
|
|
Packit |
7a8e5e |
"""
|
|
Packit |
7a8e5e |
Check FPU precision mode was not changed during test collection.
|
|
Packit |
7a8e5e |
|
|
Packit |
7a8e5e |
The clumsy way we do it here is mainly necessary because numpy
|
|
Packit |
7a8e5e |
still uses yield tests, which can execute code at test collection
|
|
Packit |
7a8e5e |
time.
|
|
Packit |
7a8e5e |
"""
|
|
Packit |
7a8e5e |
global _old_fpu_mode
|
|
Packit |
7a8e5e |
|
|
Packit |
7a8e5e |
mode = get_fpu_mode()
|
|
Packit |
7a8e5e |
|
|
Packit |
7a8e5e |
if _old_fpu_mode is None:
|
|
Packit |
7a8e5e |
_old_fpu_mode = mode
|
|
Packit |
7a8e5e |
elif mode != _old_fpu_mode:
|
|
Packit |
7a8e5e |
_collect_results[item] = (_old_fpu_mode, mode)
|
|
Packit |
7a8e5e |
_old_fpu_mode = mode
|
|
Packit |
7a8e5e |
|
|
Packit |
7a8e5e |
|
|
Packit |
7a8e5e |
@pytest.fixture(scope="function", autouse=True)
|
|
Packit |
7a8e5e |
def check_fpu_mode(request):
|
|
Packit |
7a8e5e |
"""
|
|
Packit |
7a8e5e |
Check FPU precision mode was not changed during the test.
|
|
Packit |
7a8e5e |
"""
|
|
Packit |
7a8e5e |
old_mode = get_fpu_mode()
|
|
Packit |
7a8e5e |
yield
|
|
Packit |
7a8e5e |
new_mode = get_fpu_mode()
|
|
Packit |
7a8e5e |
|
|
Packit |
7a8e5e |
if old_mode != new_mode:
|
|
Packit |
7a8e5e |
raise AssertionError("FPU precision mode changed from {0:#x} to {1:#x}"
|
|
Packit |
7a8e5e |
" during the test".format(old_mode, new_mode))
|
|
Packit |
7a8e5e |
|
|
Packit |
7a8e5e |
collect_result = _collect_results.get(request.node)
|
|
Packit |
7a8e5e |
if collect_result is not None:
|
|
Packit |
7a8e5e |
old_mode, new_mode = collect_result
|
|
Packit |
7a8e5e |
raise AssertionError("FPU precision mode changed from {0:#x} to {1:#x}"
|
|
Packit |
7a8e5e |
" when collecting the test".format(old_mode,
|
|
Packit |
7a8e5e |
new_mode))
|