test_cythonmagic.py
70 lines
| 1.6 KiB
| text/x-python
|
PythonLexer
Brian Granger
|
r7035 | # -*- coding: utf-8 -*- | ||
"""Tests for the Cython magics extension.""" | ||||
import os | ||||
import nose.tools as nt | ||||
Fernando Perez
|
r7425 | from IPython.testing import decorators as dec | ||
Brian Granger
|
r7102 | from IPython.utils import py3compat | ||
Brian Granger
|
r7035 | |||
Brian Granger
|
r7102 | code = py3compat.str_to_unicode("""def f(x): | ||
Brian Granger
|
r7035 | return 2*x | ||
Brian Granger
|
r7102 | """) | ||
Brian Granger
|
r7035 | |||
try: | ||||
import Cython | ||||
except: | ||||
Brian Granger
|
r7036 | __test__ = False | ||
Fernando Perez
|
r7420 | ip = get_ipython() | ||
Brian Granger
|
r7036 | def setup(): | ||
ip.extension_manager.load_extension('cythonmagic') | ||||
Fernando Perez
|
r7420 | |||
Brian Granger
|
r7036 | def test_cython_inline(): | ||
ip.ex('a=10; b=20') | ||||
result = ip.run_cell_magic('cython_inline','','return a+b') | ||||
Bradley M. Froehle
|
r7875 | nt.assert_equal(result, 30) | ||
Brian Granger
|
r7036 | |||
Fernando Perez
|
r7420 | |||
Paul Ivanov
|
r11854 | @dec.skip_win32 | ||
Brian Granger
|
r7036 | def test_cython_pyximport(): | ||
module_name = '_test_cython_pyximport' | ||||
ip.run_cell_magic('cython_pyximport', module_name, code) | ||||
ip.ex('g = f(10)') | ||||
Bradley M. Froehle
|
r7875 | nt.assert_equal(ip.user_ns['g'], 20.0) | ||
Julian Taylor
|
r9993 | ip.run_cell_magic('cython_pyximport', module_name, code) | ||
ip.ex('h = f(-10)') | ||||
nt.assert_equal(ip.user_ns['h'], -20.0) | ||||
Brian Granger
|
r7036 | try: | ||
os.remove(module_name+'.pyx') | ||||
except OSError: | ||||
pass | ||||
Fernando Perez
|
r7420 | |||
Brian Granger
|
r7036 | def test_cython(): | ||
ip.run_cell_magic('cython', '', code) | ||||
ip.ex('g = f(10)') | ||||
Bradley M. Froehle
|
r7875 | nt.assert_equal(ip.user_ns['g'], 20.0) | ||
Brian Granger
|
r7035 | |||
Fernando Perez
|
r7425 | |||
Cyrille Rossant
|
r12647 | def test_cython_name(): | ||
# The Cython module named 'mymodule' defines the function f. | ||||
ip.run_cell_magic('cython', '--name=mymodule', code) | ||||
# This module can now be imported in the interactive namespace. | ||||
ip.ex('import mymodule; g = mymodule.f(10)') | ||||
nt.assert_equal(ip.user_ns['g'], 20.0) | ||||
Fernando Perez
|
r7425 | @dec.skip_win32 | ||
Fernando Perez
|
r7420 | def test_extlibs(): | ||
code = py3compat.str_to_unicode(""" | ||||
from libc.math cimport sin | ||||
x = sin(0.0) | ||||
""") | ||||
ip.user_ns['x'] = 1 | ||||
ip.run_cell_magic('cython', '-l m', code) | ||||
Bradley M. Froehle
|
r7875 | nt.assert_equal(ip.user_ns['x'], 0) | ||
Fernando Perez
|
r7420 | |||