2446 lines
70 KiB
Python
2446 lines
70 KiB
Python
#! python
|
|
|
|
# Copyright (c) 2023 PaddlePaddle Authors. All Rights Reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
import importlib
|
|
import os
|
|
import sys
|
|
import tempfile
|
|
import unittest
|
|
|
|
import xdoctest
|
|
from sampcd_processor import Xdoctester
|
|
from sampcd_processor_utils import (
|
|
TestResult as _TestResult, # for pytest
|
|
get_api_md5,
|
|
get_incrementapi,
|
|
get_test_results,
|
|
)
|
|
|
|
from paddle.base import core
|
|
|
|
|
|
def _clear_environ():
|
|
for k in {'CPU', 'GPU', 'XPU', 'DISTRIBUTED'}:
|
|
if k in os.environ:
|
|
del os.environ[k]
|
|
|
|
|
|
class TestTestResult(unittest.TestCase):
|
|
def test_good_result(self):
|
|
r = _TestResult(name='good', passed=True)
|
|
self.assertTrue(r.passed)
|
|
self.assertFalse(r.failed)
|
|
|
|
r = _TestResult(name='good', passed=True, failed=False)
|
|
self.assertTrue(r.passed)
|
|
self.assertFalse(r.failed)
|
|
|
|
r = _TestResult(name='good', passed=False, failed=True)
|
|
self.assertFalse(r.passed)
|
|
self.assertTrue(r.failed)
|
|
|
|
r = _TestResult(name='good', passed=True, nocode=False, time=10)
|
|
self.assertTrue(r.passed)
|
|
self.assertFalse(r.nocode)
|
|
|
|
r = _TestResult(
|
|
name='good',
|
|
passed=True,
|
|
timeout=False,
|
|
time=10,
|
|
test_msg='ok',
|
|
extra_info=None,
|
|
)
|
|
self.assertTrue(r.passed)
|
|
self.assertFalse(r.timeout)
|
|
|
|
def test_bad_result(self):
|
|
# more than one True result
|
|
r = _TestResult(name='bad', passed=True, failed=True)
|
|
self.assertTrue(r.passed)
|
|
self.assertTrue(r.failed)
|
|
|
|
# default result is Fail for True
|
|
r = _TestResult(name='bad')
|
|
self.assertFalse(r.passed)
|
|
self.assertTrue(r.failed)
|
|
|
|
# bad arg
|
|
with self.assertRaises(KeyError):
|
|
r = _TestResult(name='good', passed=True, bad=True)
|
|
|
|
|
|
class TestSpecFile(unittest.TestCase):
|
|
def setUp(self):
|
|
self.temp_dir = tempfile.TemporaryDirectory()
|
|
self.api_dev_spec_filename = os.path.join(
|
|
self.temp_dir.name, 'API_DEV.spec'
|
|
)
|
|
self.api_pr_spec_filename = os.path.join(
|
|
self.temp_dir.name, 'API_PR.spec'
|
|
)
|
|
self.api_diff_spec_filename = os.path.join(
|
|
self.temp_dir.name, 'dev_pr_diff_api.spec'
|
|
)
|
|
self.init_file()
|
|
|
|
def tearDown(self):
|
|
self.temp_dir.cleanup()
|
|
|
|
def init_file(self):
|
|
raise NotImplementedError
|
|
|
|
|
|
class TestGetApiMd5(TestSpecFile):
|
|
def init_file(self):
|
|
with open(self.api_pr_spec_filename, 'w') as f:
|
|
f.write(
|
|
"\n".join(
|
|
[
|
|
"""paddle.one_plus_one (ArgSpec(args=[], varargs=None, keywords=None, defaults=(,)), ('document', 'ff0f188c95030158cc6398d2a6c55one'))""",
|
|
"""paddle.two_plus_two (ArgSpec(args=[], varargs=None, keywords=None, defaults=(,)), ('document', 'ff0f188c95030158cc6398d2a6c55two'))""",
|
|
"""paddle.three_plus_three (ArgSpec(args=[], varargs=None, keywords=None, defaults=(,)), ('document', 'ff0f188c95030158cc6398d2a6cthree'))""",
|
|
"""paddle.four_plus_four (paddle.four_plus_four, ('document', 'ff0f188c95030158cc6398d2a6c5four'))""",
|
|
"""paddle.five_plus_five (ArgSpec(), ('document', 'ff0f188c95030158cc6398d2a6c5five'))""",
|
|
]
|
|
)
|
|
)
|
|
|
|
def test_get_api_md5(self):
|
|
res = get_api_md5(self.api_pr_spec_filename)
|
|
self.assertEqual(
|
|
"ArgSpec(args=[], varargs=None, keywords=None, defaults=(,)), ff0f188c95030158cc6398d2a6c55one",
|
|
res['paddle.one_plus_one'],
|
|
)
|
|
self.assertEqual(
|
|
"ArgSpec(args=[], varargs=None, keywords=None, defaults=(,)), ff0f188c95030158cc6398d2a6c55two",
|
|
res['paddle.two_plus_two'],
|
|
)
|
|
self.assertEqual(
|
|
"ArgSpec(args=[], varargs=None, keywords=None, defaults=(,)), ff0f188c95030158cc6398d2a6cthree",
|
|
res['paddle.three_plus_three'],
|
|
)
|
|
self.assertEqual(
|
|
"ff0f188c95030158cc6398d2a6c5four", res['paddle.four_plus_four']
|
|
)
|
|
self.assertEqual(
|
|
"ArgSpec(), ff0f188c95030158cc6398d2a6c5five",
|
|
res['paddle.five_plus_five'],
|
|
)
|
|
|
|
|
|
class TestGetIncrementApi(TestSpecFile):
|
|
def init_file(self):
|
|
with open(self.api_pr_spec_filename, 'w') as f:
|
|
f.write(
|
|
"\n".join(
|
|
[
|
|
"""paddle.one_plus_one (ArgSpec(args=[], varargs=None, keywords=None, defaults=(,)), ('document', 'ff0f188c95030158cc6398d2a6c55one'))""",
|
|
"""paddle.two_plus_two (ArgSpec(args=[], varargs=None, keywords=None, defaults=(,)), ('document', 'ff0f188c95030158cc6398d2a6c55two'))""",
|
|
"""paddle.three_plus_three (ArgSpec(args=[], varargs=None, keywords=None, defaults=(,)), ('document', 'ff0f188c95030158cc6398d2a6cthree'))""",
|
|
"""paddle.four_plus_four (paddle.four_plus_four, ('document', 'ff0f188c95030158cc6398d2a6c5four'))""",
|
|
]
|
|
)
|
|
)
|
|
|
|
with open(self.api_dev_spec_filename, 'w') as f:
|
|
f.write(
|
|
"\n".join(
|
|
[
|
|
"""paddle.one_plus_one (ArgSpec(args=[], varargs=None, keywords=None, defaults=(,)), ('document', 'ff0f188c95030158cc6398d2a6c55one'))""",
|
|
]
|
|
)
|
|
)
|
|
|
|
def test_get_incrementapi(self):
|
|
get_incrementapi(
|
|
api_dev_spec_fn=self.api_dev_spec_filename,
|
|
api_pr_spec_fn=self.api_pr_spec_filename,
|
|
api_diff_spec_fn=self.api_diff_spec_filename,
|
|
)
|
|
with open(self.api_diff_spec_filename, 'r') as f:
|
|
lines = f.readlines()
|
|
self.assertCountEqual(
|
|
[
|
|
"paddle.two_plus_two\n",
|
|
"paddle.three_plus_three\n",
|
|
"paddle.four_plus_four\n",
|
|
],
|
|
lines,
|
|
)
|
|
|
|
|
|
class TestXdoctester(unittest.TestCase):
|
|
def setUp(self):
|
|
self.maxDiff = None
|
|
|
|
def test_init(self):
|
|
doctester = Xdoctester()
|
|
self.assertEqual(doctester.debug, False)
|
|
self.assertEqual(doctester.style, 'freeform')
|
|
self.assertEqual(doctester.target, 'codeblock')
|
|
self.assertEqual(doctester.mode, 'native')
|
|
|
|
doctester = Xdoctester(analysis='static')
|
|
self.assertEqual(doctester.config['analysis'], 'static')
|
|
|
|
def test_convert_directive(self):
|
|
doctester = Xdoctester()
|
|
docstring_input = "# doctest: -SKIP\n"
|
|
docstring_output = doctester.convert_directive(docstring_input)
|
|
docstring_target = "# xdoctest: -SKIP\n"
|
|
self.assertEqual(docstring_output, docstring_target)
|
|
|
|
docstring_input = '# doctest: +SKIP("skip this test...")\n'
|
|
docstring_output = doctester.convert_directive(docstring_input)
|
|
docstring_target = '# xdoctest: +SKIP("skip this test...")\n'
|
|
self.assertEqual(docstring_output, docstring_target)
|
|
|
|
docstring_input = """
|
|
placeholder
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-0
|
|
|
|
this is some blabla...
|
|
|
|
>>> # doctest: +SKIP('skip')
|
|
>>> print(1+1)
|
|
2
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> # doctest: -REQUIRES(env:GPU)
|
|
>>> print(1-1)
|
|
0
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-2
|
|
|
|
this is some blabla...
|
|
|
|
>>> # doctest: +REQUIRES(env:GPU, env:XPU, env: DISTRIBUTED)
|
|
>>> print(1-1)
|
|
0
|
|
"""
|
|
docstring_output = doctester.convert_directive(docstring_input)
|
|
docstring_target = """
|
|
placeholder
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-0
|
|
|
|
this is some blabla...
|
|
|
|
>>> # xdoctest: +SKIP('skip')
|
|
>>> print(1+1)
|
|
2
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> # xdoctest: -REQUIRES(env:GPU)
|
|
>>> print(1-1)
|
|
0
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-2
|
|
|
|
this is some blabla...
|
|
|
|
>>> # xdoctest: +REQUIRES(env:GPU, env:XPU, env: DISTRIBUTED)
|
|
>>> print(1-1)
|
|
0
|
|
"""
|
|
self.assertEqual(docstring_output, docstring_target)
|
|
|
|
def test_prepare(self):
|
|
doctester = Xdoctester()
|
|
|
|
_clear_environ()
|
|
test_capacity = {'cpu'}
|
|
doctester.prepare(test_capacity)
|
|
self.assertTrue(os.environ['CPU'])
|
|
self.assertFalse(os.environ.get('GPU'))
|
|
|
|
_clear_environ()
|
|
test_capacity = {'cpu', 'gpu'}
|
|
doctester.prepare(test_capacity)
|
|
self.assertTrue(os.environ['CPU'])
|
|
self.assertTrue(os.environ['GPU'])
|
|
self.assertFalse(os.environ.get('XPU'))
|
|
|
|
_clear_environ()
|
|
|
|
|
|
class TestGetTestResults(unittest.TestCase):
|
|
def test_global_exec(self):
|
|
_clear_environ()
|
|
|
|
# test set_default_dtype
|
|
docstrings_to_test = {
|
|
'before_set_default': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> import paddle
|
|
>>> a = paddle.to_tensor(.2)
|
|
>>> print(a)
|
|
Tensor(shape=[], dtype=float32, place=Place(cpu), stop_gradient=True,
|
|
0.20000000)
|
|
""",
|
|
'set_default': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> import paddle
|
|
>>> paddle.set_default_dtype('float64')
|
|
>>> a = paddle.to_tensor(.2)
|
|
>>> print(a)
|
|
Tensor(shape=[], dtype=float64, place=Place(cpu), stop_gradient=True,
|
|
0.20000000)
|
|
""",
|
|
'after_set_default': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> import paddle
|
|
>>> a = paddle.to_tensor(.2)
|
|
>>> print(a)
|
|
Tensor(shape=[], dtype=float32, place=Place(cpu), stop_gradient=True,
|
|
0.20000000)
|
|
""",
|
|
}
|
|
|
|
# test old global_exec
|
|
test_capacity = {'cpu'}
|
|
doctester = Xdoctester(
|
|
style='freeform',
|
|
target='codeblock',
|
|
global_exec=r"\n".join(
|
|
[
|
|
"import paddle",
|
|
"paddle.device.set_device('cpu')",
|
|
]
|
|
),
|
|
)
|
|
doctester.prepare(test_capacity)
|
|
|
|
test_results = get_test_results(doctester, docstrings_to_test)
|
|
self.assertEqual(len(test_results), 3)
|
|
|
|
tr_0, tr_1, tr_2 = test_results
|
|
|
|
self.assertIn('before_set_default', tr_0.name)
|
|
self.assertTrue(tr_0.passed)
|
|
|
|
self.assertIn('set_default', tr_1.name)
|
|
self.assertTrue(tr_1.passed)
|
|
|
|
# tr_2 is passed, because of multiprocessing
|
|
self.assertIn('after_set_default', tr_2.name)
|
|
self.assertTrue(tr_2.passed)
|
|
|
|
# test new default global_exec
|
|
doctester = Xdoctester(
|
|
style='freeform',
|
|
target='codeblock',
|
|
)
|
|
doctester.prepare(test_capacity)
|
|
|
|
test_results = get_test_results(doctester, docstrings_to_test)
|
|
self.assertEqual(len(test_results), 3)
|
|
|
|
tr_0, tr_1, tr_2 = test_results
|
|
|
|
self.assertIn('before_set_default', tr_0.name)
|
|
self.assertTrue(tr_0.passed)
|
|
|
|
self.assertIn('set_default', tr_1.name)
|
|
self.assertTrue(tr_1.passed)
|
|
|
|
self.assertIn('after_set_default', tr_2.name)
|
|
self.assertTrue(tr_2.passed)
|
|
|
|
# test disable static
|
|
docstrings_to_test = {
|
|
'before_enable_static': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> import paddle
|
|
>>> print(paddle.in_dynamic_mode())
|
|
True
|
|
""",
|
|
'enable_static': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> import paddle
|
|
>>> paddle.enable_static()
|
|
>>> print(paddle.in_dynamic_mode())
|
|
False
|
|
""",
|
|
'after_enable_static': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> import paddle
|
|
>>> print(paddle.in_dynamic_mode())
|
|
True
|
|
""",
|
|
}
|
|
|
|
# test old global_exec
|
|
test_capacity = {'cpu'}
|
|
doctester = Xdoctester(
|
|
style='freeform',
|
|
target='codeblock',
|
|
global_exec=r"\n".join(
|
|
[
|
|
"import paddle",
|
|
"paddle.device.set_device('cpu')",
|
|
]
|
|
),
|
|
)
|
|
doctester.prepare(test_capacity)
|
|
|
|
test_results = get_test_results(doctester, docstrings_to_test)
|
|
self.assertEqual(len(test_results), 3)
|
|
|
|
tr_0, tr_1, tr_2 = test_results
|
|
|
|
self.assertIn('before_enable_static', tr_0.name)
|
|
self.assertTrue(tr_0.passed)
|
|
|
|
self.assertIn('enable_static', tr_1.name)
|
|
self.assertTrue(tr_1.passed)
|
|
|
|
# tr_2 is passed, because of multiprocessing
|
|
self.assertIn('after_enable_static', tr_2.name)
|
|
self.assertTrue(tr_2.passed)
|
|
|
|
# test new default global_exec
|
|
doctester = Xdoctester(
|
|
style='freeform',
|
|
target='codeblock',
|
|
)
|
|
doctester.prepare(test_capacity)
|
|
|
|
test_results = get_test_results(doctester, docstrings_to_test)
|
|
self.assertEqual(len(test_results), 3)
|
|
|
|
tr_0, tr_1, tr_2 = test_results
|
|
|
|
self.assertIn('before_enable_static', tr_0.name)
|
|
self.assertTrue(tr_0.passed)
|
|
|
|
self.assertIn('enable_static', tr_1.name)
|
|
self.assertTrue(tr_1.passed)
|
|
|
|
self.assertIn('after_enable_static', tr_2.name)
|
|
self.assertTrue(tr_2.passed)
|
|
|
|
@unittest.skipIf(
|
|
not core.is_compiled_with_cuda() or core.is_compiled_with_rocm(),
|
|
"core is not compiled with CUDA",
|
|
)
|
|
def test_patch_xdoctest_place(self):
|
|
# test patch tensor place
|
|
_clear_environ()
|
|
|
|
test_capacity = {'cpu'}
|
|
doctester = Xdoctester(style='freeform', target='codeblock')
|
|
doctester.prepare(test_capacity)
|
|
|
|
docstrings_to_test = {
|
|
'gpu_to_gpu': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> import paddle
|
|
>>> paddle.device.set_device('gpu')
|
|
>>> a = paddle.to_tensor(.2)
|
|
>>> # Tensor(shape=[], dtype=float32, place=Place(gpu:0), stop_gradient=True, 0.20000000)
|
|
>>> print(a)
|
|
Tensor(shape=[], dtype=float32, place=Place(gpu:0), stop_gradient=True,
|
|
0.20000000)
|
|
|
|
""",
|
|
'cpu_to_cpu': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> import paddle
|
|
>>> paddle.device.set_device('cpu')
|
|
>>> a = paddle.to_tensor(.2)
|
|
>>> # Tensor(shape=[], dtype=float32, place=Place(cpu), stop_gradient=True, 0.20000000)
|
|
>>> print(a)
|
|
Tensor(shape=[], dtype=float32, place=Place(cpu), stop_gradient=True,
|
|
0.20000000)
|
|
|
|
""",
|
|
'gpu_to_cpu': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> import paddle
|
|
>>> paddle.device.set_device('gpu')
|
|
>>> a = paddle.to_tensor(.2)
|
|
>>> # Tensor(shape=[], dtype=float32, place=Place(gpu:0), stop_gradient=True, 0.20000000)
|
|
>>> print(a)
|
|
Tensor(shape=[], dtype=float32, place=Place(cpu), stop_gradient=True,
|
|
0.20000000)
|
|
|
|
""",
|
|
'cpu_to_gpu': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> import paddle
|
|
>>> paddle.device.set_device('cpu')
|
|
>>> a = paddle.to_tensor(.2)
|
|
>>> # Tensor(shape=[], dtype=float32, place=Place(cpu), stop_gradient=True, 0.20000000)
|
|
>>> print(a)
|
|
Tensor(shape=[], dtype=float32, place=Place(gpu:0), stop_gradient=True,
|
|
0.20000000)
|
|
""",
|
|
'gpu_to_cpu_array': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> import paddle
|
|
>>> paddle.device.set_device('gpu')
|
|
>>> a = paddle.to_tensor([[1,2,3], [2,3,4], [3,4,5]])
|
|
>>> # Tensor(shape=[3, 3], dtype=int64, place=Place(gpu:0), stop_gradient=True,
|
|
>>> # [[1, 2, 3],
|
|
>>> # [2, 3, 4],
|
|
>>> # [3, 4, 5]])
|
|
>>> print(a)
|
|
Tensor(shape=[3, 3], dtype=int64, place=Place(cpu), stop_gradient=True,
|
|
[[1, 2, 3],
|
|
[2, 3, 4],
|
|
[3, 4, 5]])
|
|
""",
|
|
'cpu_to_gpu_array': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> import paddle
|
|
>>> paddle.device.set_device('cpu')
|
|
>>> a = paddle.to_tensor([[1,2,3], [2,3,4], [3,4,5]])
|
|
>>> # Tensor(shape=[3, 3], dtype=int64, place=Place(cpu), stop_gradient=True,
|
|
>>> # [[1, 2, 3],
|
|
>>> # [2, 3, 4],
|
|
>>> # [3, 4, 5]])
|
|
>>> print(a)
|
|
Tensor(shape=[3, 3], dtype=int64, place=Place(gpu:0), stop_gradient=True,
|
|
[[1, 2, 3],
|
|
[2, 3, 4],
|
|
[3, 4, 5]])
|
|
""",
|
|
}
|
|
|
|
test_results = get_test_results(doctester, docstrings_to_test)
|
|
self.assertEqual(len(test_results), 6)
|
|
|
|
tr_0, tr_1, tr_2, tr_3, tr_4, tr_5 = test_results
|
|
|
|
self.assertIn('gpu_to_gpu', tr_0.name)
|
|
self.assertTrue(tr_0.passed)
|
|
|
|
self.assertIn('cpu_to_cpu', tr_1.name)
|
|
self.assertTrue(tr_1.passed)
|
|
|
|
self.assertIn('gpu_to_cpu', tr_2.name)
|
|
self.assertTrue(tr_2.passed)
|
|
|
|
self.assertIn('cpu_to_gpu', tr_3.name)
|
|
self.assertTrue(tr_3.passed)
|
|
|
|
self.assertIn('gpu_to_cpu_array', tr_4.name)
|
|
self.assertTrue(tr_4.passed)
|
|
|
|
self.assertIn('cpu_to_gpu_array', tr_5.name)
|
|
self.assertTrue(tr_5.passed)
|
|
|
|
# reload xdoctest.checker
|
|
importlib.reload(xdoctest.checker)
|
|
|
|
_clear_environ()
|
|
|
|
test_capacity = {'cpu'}
|
|
doctester = Xdoctester(
|
|
style='freeform', target='codeblock', patch_tensor_place=False
|
|
)
|
|
doctester.prepare(test_capacity)
|
|
|
|
test_results = get_test_results(doctester, docstrings_to_test)
|
|
self.assertEqual(len(test_results), 6)
|
|
|
|
tr_0, tr_1, tr_2, tr_3, tr_4, tr_5 = test_results
|
|
|
|
self.assertIn('gpu_to_gpu', tr_0.name)
|
|
self.assertTrue(tr_0.passed)
|
|
|
|
self.assertIn('cpu_to_cpu', tr_1.name)
|
|
self.assertTrue(tr_1.passed)
|
|
|
|
self.assertIn('gpu_to_cpu', tr_2.name)
|
|
self.assertFalse(tr_2.passed)
|
|
|
|
self.assertIn('cpu_to_gpu', tr_3.name)
|
|
self.assertFalse(tr_3.passed)
|
|
|
|
self.assertIn('gpu_to_cpu_array', tr_4.name)
|
|
self.assertFalse(tr_4.passed)
|
|
|
|
self.assertIn('cpu_to_gpu_array', tr_5.name)
|
|
self.assertFalse(tr_5.passed)
|
|
|
|
@unittest.skipIf(
|
|
not core.is_compiled_with_cuda() or core.is_compiled_with_rocm(),
|
|
"core is not compiled with CUDA",
|
|
)
|
|
def test_patch_xdoctest_float(self):
|
|
# test patch float precision
|
|
# reload xdoctest.checker
|
|
importlib.reload(xdoctest.checker)
|
|
|
|
_clear_environ()
|
|
|
|
test_capacity = {'cpu'}
|
|
doctester = Xdoctester(style='freeform', target='codeblock')
|
|
doctester.prepare(test_capacity)
|
|
|
|
docstrings_to_test = {
|
|
'gpu_to_gpu': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> import paddle
|
|
>>> paddle.device.set_device('gpu')
|
|
>>> a = paddle.to_tensor(.123456789)
|
|
>>> print(a)
|
|
Tensor(shape=[], dtype=float32, place=Place(gpu:0), stop_gradient=True,
|
|
0.123456780)
|
|
|
|
""",
|
|
'cpu_to_cpu': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> import paddle
|
|
>>> paddle.device.set_device('cpu')
|
|
>>> a = paddle.to_tensor(.123456789)
|
|
>>> print(a)
|
|
Tensor(shape=[], dtype=float32, place=Place(cpu), stop_gradient=True,
|
|
0.123456780)
|
|
|
|
""",
|
|
'gpu_to_cpu': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> import paddle
|
|
>>> paddle.device.set_device('gpu')
|
|
>>> a = paddle.to_tensor(.123456789)
|
|
>>> print(a)
|
|
Tensor(shape=[], dtype=float32, place=Place(cpu), stop_gradient=True,
|
|
0.123456780)
|
|
|
|
""",
|
|
'cpu_to_gpu': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> import paddle
|
|
>>> paddle.device.set_device('cpu')
|
|
>>> a = paddle.to_tensor(.123456789)
|
|
>>> print(a)
|
|
Tensor(shape=[], dtype=float32, place=Place(gpu:0), stop_gradient=True,
|
|
0.123456780)
|
|
""",
|
|
'gpu_to_cpu_array': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> import paddle
|
|
>>> paddle.device.set_device('gpu')
|
|
>>> a = paddle.to_tensor([[1.123456789 ,2,3], [2,3,4], [3,4,5]])
|
|
>>> print(a)
|
|
Tensor(shape=[3, 3], dtype=float32, place=Place(cpu), stop_gradient=True,
|
|
[[1.123456780, 2., 3.],
|
|
[2., 3., 4.],
|
|
[3., 4., 5.]])
|
|
""",
|
|
'cpu_to_gpu_array': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> import paddle
|
|
>>> paddle.device.set_device('cpu')
|
|
>>> a = paddle.to_tensor([[1.123456789,2,3], [2,3,4], [3,4,5]])
|
|
>>> print(a)
|
|
Tensor(shape=[3, 3], dtype=float32, place=Place(gpu:0), stop_gradient=True,
|
|
[[1.123456780, 2., 3.],
|
|
[2., 3., 4.],
|
|
[3., 4., 5.]])
|
|
""",
|
|
'mass_array': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> import paddle
|
|
>>> paddle.device.set_device('gpu')
|
|
>>> a = paddle.to_tensor(
|
|
... [[1.123456780, 2., -3, .3],
|
|
... [2, 3, +4., 1.2+10.34e-5j],
|
|
... [3, 5.e-3, 1e2, 3e-8]]
|
|
... )
|
|
>>> # Tensor(shape=[3, 4], dtype=complex64, place=Place(gpu:0), stop_gradient=True,
|
|
>>> # [[ (1.1234568357467651+0j) ,
|
|
>>> # (2+0j) ,
|
|
>>> # (-3+0j) ,
|
|
>>> # (0.30000001192092896+0j) ],
|
|
>>> # [ (2+0j) ,
|
|
>>> # (3+0j) ,
|
|
>>> # (4+0j) ,
|
|
>>> # (1.2000000476837158+0.00010340000153519213j)],
|
|
>>> # [ (3+0j) ,
|
|
>>> # (0.004999999888241291+0j) ,
|
|
>>> # (100+0j) ,
|
|
>>> # (2.999999892949745e-08+0j) ]])
|
|
>>> print(a)
|
|
Tensor(shape=[3, 4], dtype=complex64, place=Place(AAA), stop_gradient=True,
|
|
[[ (1.123456+0j),
|
|
(2+0j),
|
|
(-3+0j),
|
|
(0.3+0j)],
|
|
[ (2+0j),
|
|
(3+0j),
|
|
(4+0j),
|
|
(1.2+0.00010340j)],
|
|
[ (3+0j),
|
|
(0.00499999+0j),
|
|
(100+0j),
|
|
(2.999999e-08+0j)]])
|
|
""",
|
|
'float_array': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> import paddle
|
|
>>> paddle.device.set_device('cpu')
|
|
>>> x = [[2, 3, 4], [7, 8, 9]]
|
|
>>> x = paddle.to_tensor(x, dtype='float32')
|
|
>>> print(paddle.log(x))
|
|
Tensor(shape=[2, 3], dtype=float32, place=Place(cpu), stop_gradient=True,
|
|
[[0.69314718, 1.09861231, 1.38629436],
|
|
[1.94591010, 2.07944155, 2.19722462]])
|
|
|
|
""",
|
|
'float_array_diff': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> import paddle
|
|
>>> paddle.device.set_device('cpu')
|
|
>>> x = [[2, 3, 4], [7, 8, 9]]
|
|
>>> x = paddle.to_tensor(x, dtype='float32')
|
|
>>> print(paddle.log(x))
|
|
Tensor(shape=[2, 3], dtype=float32, place=Place(cpu), stop_gradient=True,
|
|
[[0.69314712, 1.09861221, 1.386294],
|
|
[1.94591032, 2.07944156, 2.1972246]])
|
|
|
|
""",
|
|
'float_begin': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> print(7.0)
|
|
7.
|
|
|
|
""",
|
|
'float_begin_long': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> print(7.0000023)
|
|
7.0000024
|
|
|
|
""",
|
|
'float_begin_more': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> print(7.0, 5., 6.123456)
|
|
7.0 5.0 6.123457
|
|
|
|
""",
|
|
'float_begin_more_diff': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> print(7.0, 5., 6.123456)
|
|
7.0 5.0 6.123457
|
|
|
|
""",
|
|
'float_begin_more_brief': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> print(7.0, 5., 6.123456)
|
|
7. 5. 6.123457
|
|
|
|
""",
|
|
'float_begin_fail': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> print(7.0100023)
|
|
7.0000024
|
|
|
|
""",
|
|
}
|
|
|
|
test_results = get_test_results(doctester, docstrings_to_test)
|
|
self.assertEqual(len(test_results), 15)
|
|
|
|
(
|
|
tr_0,
|
|
tr_1,
|
|
tr_2,
|
|
tr_3,
|
|
tr_4,
|
|
tr_5,
|
|
tr_6,
|
|
tr_7,
|
|
tr_8,
|
|
tr_9,
|
|
tr_10,
|
|
tr_11,
|
|
tr_12,
|
|
tr_13,
|
|
tr_14,
|
|
) = test_results
|
|
|
|
self.assertIn('gpu_to_gpu', tr_0.name)
|
|
self.assertTrue(tr_0.passed)
|
|
|
|
self.assertIn('cpu_to_cpu', tr_1.name)
|
|
self.assertTrue(tr_1.passed)
|
|
|
|
self.assertIn('gpu_to_cpu', tr_2.name)
|
|
self.assertTrue(tr_2.passed)
|
|
|
|
self.assertIn('cpu_to_gpu', tr_3.name)
|
|
self.assertTrue(tr_3.passed)
|
|
|
|
self.assertIn('gpu_to_cpu_array', tr_4.name)
|
|
self.assertTrue(tr_4.passed)
|
|
|
|
self.assertIn('cpu_to_gpu_array', tr_5.name)
|
|
self.assertTrue(tr_5.passed)
|
|
|
|
self.assertIn('mass_array', tr_6.name)
|
|
self.assertTrue(tr_6.passed)
|
|
|
|
self.assertIn('float_array', tr_7.name)
|
|
self.assertTrue(tr_7.passed)
|
|
|
|
self.assertIn('float_array_diff', tr_8.name)
|
|
self.assertTrue(tr_8.passed)
|
|
|
|
self.assertIn('float_begin', tr_9.name)
|
|
self.assertTrue(tr_9.passed)
|
|
|
|
self.assertIn('float_begin_long', tr_10.name)
|
|
self.assertTrue(tr_10.passed)
|
|
|
|
self.assertIn('float_begin_more', tr_11.name)
|
|
self.assertTrue(tr_11.passed)
|
|
|
|
self.assertIn('float_begin_more_diff', tr_12.name)
|
|
self.assertTrue(tr_12.passed)
|
|
|
|
self.assertIn('float_begin_more_brief', tr_13.name)
|
|
self.assertTrue(tr_13.passed)
|
|
|
|
self.assertIn('float_begin_fail', tr_14.name)
|
|
self.assertFalse(tr_14.passed)
|
|
|
|
# reload xdoctest.checker
|
|
importlib.reload(xdoctest.checker)
|
|
|
|
_clear_environ()
|
|
|
|
test_capacity = {'cpu'}
|
|
doctester = Xdoctester(
|
|
style='freeform', target='codeblock', patch_float_precision=None
|
|
)
|
|
doctester.prepare(test_capacity)
|
|
|
|
test_results = get_test_results(doctester, docstrings_to_test)
|
|
self.assertEqual(len(test_results), 15)
|
|
|
|
(
|
|
tr_0,
|
|
tr_1,
|
|
tr_2,
|
|
tr_3,
|
|
tr_4,
|
|
tr_5,
|
|
tr_6,
|
|
tr_7,
|
|
tr_8,
|
|
tr_9,
|
|
tr_10,
|
|
tr_11,
|
|
tr_12,
|
|
tr_13,
|
|
tr_14,
|
|
) = test_results
|
|
|
|
self.assertIn('gpu_to_gpu', tr_0.name)
|
|
self.assertFalse(tr_0.passed)
|
|
|
|
self.assertIn('cpu_to_cpu', tr_1.name)
|
|
self.assertFalse(tr_1.passed)
|
|
|
|
self.assertIn('gpu_to_cpu', tr_2.name)
|
|
self.assertFalse(tr_2.passed)
|
|
|
|
self.assertIn('cpu_to_gpu', tr_3.name)
|
|
self.assertFalse(tr_3.passed)
|
|
|
|
self.assertIn('gpu_to_cpu_array', tr_4.name)
|
|
self.assertFalse(tr_4.passed)
|
|
|
|
self.assertIn('cpu_to_gpu_array', tr_5.name)
|
|
self.assertFalse(tr_5.passed)
|
|
|
|
self.assertIn('mass_array', tr_6.name)
|
|
self.assertFalse(tr_6.passed)
|
|
|
|
self.assertIn('float_array', tr_7.name)
|
|
self.assertTrue(tr_7.passed)
|
|
|
|
self.assertIn('float_array_diff', tr_8.name)
|
|
self.assertFalse(tr_8.passed)
|
|
|
|
self.assertIn('float_begin', tr_9.name)
|
|
self.assertFalse(tr_9.passed)
|
|
|
|
self.assertIn('float_begin_long', tr_10.name)
|
|
self.assertFalse(tr_10.passed)
|
|
|
|
self.assertIn('float_begin_more', tr_11.name)
|
|
self.assertFalse(tr_11.passed)
|
|
|
|
self.assertIn('float_begin_more_diff', tr_12.name)
|
|
self.assertFalse(tr_12.passed)
|
|
|
|
self.assertIn('float_begin_more_brief', tr_13.name)
|
|
self.assertFalse(tr_13.passed)
|
|
|
|
self.assertIn('float_begin_fail', tr_14.name)
|
|
self.assertFalse(tr_14.passed)
|
|
|
|
def test_run_cpu(self):
|
|
_clear_environ()
|
|
|
|
test_capacity = {'cpu'}
|
|
doctester = Xdoctester(style='freeform', target='codeblock')
|
|
doctester.prepare(test_capacity)
|
|
|
|
docstrings_to_test = {
|
|
'one_plus_one': """
|
|
placeholder
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-0
|
|
|
|
this is some blabla...
|
|
|
|
>>> # doctest: +SKIP('skip')
|
|
>>> print(1+1)
|
|
2
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> # doctest: +REQUIRES(env:CPU)
|
|
>>> print(1-1)
|
|
0
|
|
""",
|
|
'one_minus_one': """
|
|
placeholder
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-0
|
|
|
|
this is some blabla...
|
|
|
|
>>> print(1+1)
|
|
2
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> # doctest: +REQUIRES(env:GPU)
|
|
>>> print(1-1)
|
|
0
|
|
""",
|
|
}
|
|
|
|
test_results = get_test_results(doctester, docstrings_to_test)
|
|
self.assertEqual(len(test_results), 4)
|
|
|
|
tr_0, tr_1, tr_2, tr_3 = test_results
|
|
|
|
self.assertIn('one_plus_one', tr_0.name)
|
|
self.assertIn('code-example-0', tr_0.name)
|
|
self.assertFalse(tr_0.nocode)
|
|
self.assertFalse(tr_0.passed)
|
|
self.assertTrue(tr_0.skipped)
|
|
self.assertFalse(tr_0.failed)
|
|
|
|
self.assertIn('one_plus_one', tr_1.name)
|
|
self.assertIn('code-example-1', tr_1.name)
|
|
self.assertFalse(tr_1.nocode)
|
|
self.assertTrue(tr_1.passed)
|
|
self.assertFalse(tr_1.skipped)
|
|
self.assertFalse(tr_1.failed)
|
|
|
|
self.assertIn('one_minus_one', tr_2.name)
|
|
self.assertIn('code-example-0', tr_2.name)
|
|
self.assertFalse(tr_2.nocode)
|
|
self.assertTrue(tr_2.passed)
|
|
self.assertFalse(tr_2.skipped)
|
|
self.assertFalse(tr_2.failed)
|
|
|
|
self.assertIn('one_minus_one', tr_3.name)
|
|
self.assertIn('code-example-1', tr_3.name)
|
|
self.assertFalse(tr_3.nocode)
|
|
self.assertFalse(tr_3.passed)
|
|
self.assertTrue(tr_3.skipped)
|
|
self.assertFalse(tr_3.failed)
|
|
|
|
def test_run_gpu(self):
|
|
_clear_environ()
|
|
|
|
test_capacity = {'cpu', 'gpu'}
|
|
doctester = Xdoctester(style='freeform', target='codeblock')
|
|
doctester.prepare(test_capacity)
|
|
|
|
docstrings_to_test = {
|
|
'one_plus_one': """
|
|
placeholder
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-0
|
|
|
|
this is some blabla...
|
|
|
|
>>> # doctest: +REQUIRES(env: GPU)
|
|
>>> print(1+1)
|
|
2
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> # doctest: +REQUIRES(env:XPU)
|
|
>>> print(1-1)
|
|
0
|
|
""",
|
|
'one_minus_one': """
|
|
placeholder
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-0
|
|
|
|
this is some blabla...
|
|
|
|
>>> print(1-1)
|
|
2
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> # doctest: +REQUIRES(env:GPU, env: XPU)
|
|
>>> print(1-1)
|
|
0
|
|
""",
|
|
}
|
|
|
|
test_results = get_test_results(doctester, docstrings_to_test)
|
|
self.assertEqual(len(test_results), 4)
|
|
|
|
tr_0, tr_1, tr_2, tr_3 = test_results
|
|
|
|
self.assertIn('one_plus_one', tr_0.name)
|
|
self.assertIn('code-example-0', tr_0.name)
|
|
self.assertFalse(tr_0.nocode)
|
|
self.assertTrue(tr_0.passed)
|
|
self.assertFalse(tr_0.skipped)
|
|
self.assertFalse(tr_0.failed)
|
|
|
|
self.assertIn('one_plus_one', tr_1.name)
|
|
self.assertIn('code-example-1', tr_1.name)
|
|
self.assertFalse(tr_1.nocode)
|
|
self.assertFalse(tr_1.passed)
|
|
self.assertTrue(tr_1.skipped)
|
|
self.assertFalse(tr_1.failed)
|
|
|
|
self.assertIn('one_minus_one', tr_2.name)
|
|
self.assertIn('code-example-0', tr_2.name)
|
|
self.assertFalse(tr_2.nocode)
|
|
self.assertFalse(tr_2.passed)
|
|
self.assertFalse(tr_2.skipped)
|
|
self.assertTrue(tr_2.failed)
|
|
|
|
self.assertIn('one_minus_one', tr_3.name)
|
|
self.assertIn('code-example-1', tr_3.name)
|
|
self.assertFalse(tr_3.nocode)
|
|
self.assertFalse(tr_3.passed)
|
|
self.assertTrue(tr_3.skipped)
|
|
self.assertFalse(tr_3.failed)
|
|
|
|
def test_run_xpu_distributed(self):
|
|
_clear_environ()
|
|
|
|
test_capacity = {'cpu', 'xpu'}
|
|
doctester = Xdoctester(style='freeform', target='codeblock')
|
|
doctester.prepare(test_capacity)
|
|
|
|
docstrings_to_test = {
|
|
'one_plus_one': """
|
|
placeholder
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-0
|
|
|
|
this is some blabla...
|
|
|
|
>>> # doctest: +REQUIRES(env: GPU)
|
|
>>> print(1+1)
|
|
2
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> # doctest: +REQUIRES(env:XPU)
|
|
>>> print(1-1)
|
|
0
|
|
""",
|
|
'one_minus_one': """
|
|
placeholder
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-0
|
|
|
|
this is some blabla...
|
|
|
|
>>> print(1-1)
|
|
2
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> # doctest: +REQUIRES(env:CPU, env: XPU)
|
|
>>> print(1-1)
|
|
0
|
|
""",
|
|
}
|
|
|
|
test_results = get_test_results(doctester, docstrings_to_test)
|
|
self.assertEqual(len(test_results), 4)
|
|
|
|
tr_0, tr_1, tr_2, tr_3 = test_results
|
|
|
|
self.assertIn('one_plus_one', tr_0.name)
|
|
self.assertIn('code-example-0', tr_0.name)
|
|
self.assertFalse(tr_0.nocode)
|
|
self.assertFalse(tr_0.passed)
|
|
self.assertTrue(tr_0.skipped)
|
|
self.assertFalse(tr_0.failed)
|
|
|
|
self.assertIn('one_plus_one', tr_1.name)
|
|
self.assertIn('code-example-1', tr_1.name)
|
|
self.assertFalse(tr_1.nocode)
|
|
self.assertTrue(tr_1.passed)
|
|
self.assertFalse(tr_1.skipped)
|
|
self.assertFalse(tr_1.failed)
|
|
|
|
self.assertIn('one_minus_one', tr_2.name)
|
|
self.assertIn('code-example-0', tr_2.name)
|
|
self.assertFalse(tr_2.nocode)
|
|
self.assertFalse(tr_2.passed)
|
|
self.assertFalse(tr_2.skipped)
|
|
self.assertTrue(tr_2.failed)
|
|
|
|
self.assertIn('one_minus_one', tr_3.name)
|
|
self.assertIn('code-example-1', tr_3.name)
|
|
self.assertFalse(tr_3.nocode)
|
|
self.assertTrue(tr_3.passed)
|
|
self.assertFalse(tr_3.skipped)
|
|
self.assertFalse(tr_3.failed)
|
|
|
|
def test_style_google(self):
|
|
_clear_environ()
|
|
|
|
test_capacity = {'cpu'}
|
|
doctester = Xdoctester(style='google', target='docstring')
|
|
doctester.prepare(test_capacity)
|
|
|
|
docstrings_to_test = {
|
|
'one_plus_one': """
|
|
placeholder
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-0
|
|
|
|
this is some blabla...
|
|
|
|
>>> # doctest: +SKIP('skip')
|
|
>>> print(1+1)
|
|
2
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> # doctest: +REQUIRES(env:CPU)
|
|
>>> print(1-1)
|
|
0
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-2
|
|
|
|
>>> print(1+2)
|
|
3
|
|
""",
|
|
'one_minus_one': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> # doctest: +REQUIRES(env:GPU)
|
|
>>> print(1-1)
|
|
0
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-2
|
|
|
|
>>> print(1+1)
|
|
3
|
|
""",
|
|
}
|
|
|
|
test_results = get_test_results(doctester, docstrings_to_test)
|
|
self.assertEqual(len(test_results), 4)
|
|
|
|
tr_0, tr_1, tr_2, tr_3 = test_results
|
|
|
|
self.assertIn('one_plus_one', tr_0.name)
|
|
self.assertNotIn('code-example-1', tr_0.name)
|
|
self.assertFalse(tr_0.nocode)
|
|
self.assertTrue(tr_0.passed)
|
|
self.assertFalse(tr_0.skipped)
|
|
self.assertFalse(tr_0.failed)
|
|
|
|
self.assertIn('one_plus_one', tr_1.name)
|
|
self.assertNotIn('code-example-2', tr_1.name)
|
|
self.assertFalse(tr_1.nocode)
|
|
self.assertTrue(tr_1.passed)
|
|
self.assertFalse(tr_1.skipped)
|
|
self.assertFalse(tr_1.failed)
|
|
|
|
self.assertIn('one_minus_one', tr_2.name)
|
|
self.assertNotIn('code-example-1', tr_2.name)
|
|
self.assertFalse(tr_2.nocode)
|
|
self.assertFalse(tr_2.passed)
|
|
self.assertTrue(tr_2.skipped)
|
|
self.assertFalse(tr_2.failed)
|
|
|
|
self.assertIn('one_minus_one', tr_3.name)
|
|
self.assertNotIn('code-example-2', tr_3.name)
|
|
self.assertFalse(tr_3.nocode)
|
|
self.assertFalse(tr_3.passed)
|
|
self.assertFalse(tr_3.skipped)
|
|
self.assertTrue(tr_3.failed)
|
|
|
|
_clear_environ()
|
|
|
|
test_capacity = {'cpu', 'gpu'}
|
|
doctester = Xdoctester(style='google', target='codeblock')
|
|
doctester.prepare(test_capacity)
|
|
|
|
test_results = get_test_results(doctester, docstrings_to_test)
|
|
self.assertEqual(len(test_results), 4)
|
|
|
|
tr_0, tr_1, tr_2, tr_3 = test_results
|
|
|
|
self.assertIn('one_plus_one', tr_0.name)
|
|
self.assertIn('code-example-1', tr_0.name)
|
|
self.assertFalse(tr_0.nocode)
|
|
self.assertTrue(tr_0.passed)
|
|
self.assertFalse(tr_0.skipped)
|
|
self.assertFalse(tr_0.failed)
|
|
|
|
self.assertIn('one_plus_one', tr_1.name)
|
|
self.assertIn('code-example-2', tr_1.name)
|
|
self.assertFalse(tr_1.nocode)
|
|
self.assertTrue(tr_1.passed)
|
|
self.assertFalse(tr_1.skipped)
|
|
self.assertFalse(tr_1.failed)
|
|
|
|
self.assertIn('one_minus_one', tr_2.name)
|
|
self.assertIn('code-example-1', tr_2.name)
|
|
self.assertFalse(tr_2.nocode)
|
|
self.assertTrue(tr_2.passed)
|
|
self.assertFalse(tr_2.skipped)
|
|
self.assertFalse(tr_2.failed)
|
|
|
|
self.assertIn('one_minus_one', tr_3.name)
|
|
self.assertIn('code-example-2', tr_3.name)
|
|
self.assertFalse(tr_3.nocode)
|
|
self.assertFalse(tr_3.passed)
|
|
self.assertFalse(tr_3.skipped)
|
|
self.assertTrue(tr_3.failed)
|
|
|
|
def test_style_freeform(self):
|
|
_clear_environ()
|
|
|
|
test_capacity = {'cpu'}
|
|
doctester = Xdoctester(style='freeform', target='docstring')
|
|
doctester.prepare(test_capacity)
|
|
|
|
docstrings_to_test = {
|
|
'one_plus_one': """
|
|
placeholder
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-0
|
|
|
|
this is some blabla...
|
|
|
|
>>> # doctest: +SKIP('skip')
|
|
>>> print(1+1)
|
|
2
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> # doctest: +REQUIRES(env:CPU)
|
|
>>> print(1-1)
|
|
0
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-2
|
|
|
|
>>> print(1+2)
|
|
3
|
|
""",
|
|
'one_minus_one': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> # doctest: +REQUIRES(env:CPU)
|
|
>>> print(1-1)
|
|
0
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-2
|
|
|
|
>>> print(1+1)
|
|
3
|
|
""",
|
|
}
|
|
|
|
test_results = get_test_results(doctester, docstrings_to_test)
|
|
self.assertEqual(len(test_results), 2)
|
|
|
|
tr_0, tr_1 = test_results
|
|
|
|
self.assertIn('one_plus_one', tr_0.name)
|
|
self.assertNotIn('code-example', tr_0.name)
|
|
self.assertFalse(tr_0.nocode)
|
|
self.assertFalse(tr_0.passed)
|
|
self.assertTrue(tr_0.skipped)
|
|
self.assertFalse(tr_0.failed)
|
|
|
|
self.assertIn('one_minus_one', tr_1.name)
|
|
self.assertNotIn('code-example', tr_1.name)
|
|
self.assertFalse(tr_1.nocode)
|
|
self.assertFalse(tr_1.passed)
|
|
self.assertFalse(tr_1.skipped)
|
|
self.assertTrue(tr_1.failed)
|
|
|
|
_clear_environ()
|
|
|
|
test_capacity = {'cpu', 'gpu'}
|
|
doctester = Xdoctester(style='freeform', target='codeblock')
|
|
doctester.prepare(test_capacity)
|
|
|
|
docstrings_to_test = {
|
|
'one_plus_one': """
|
|
placeholder
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-0
|
|
|
|
this is some blabla...
|
|
|
|
>>> # doctest: +SKIP('skip')
|
|
>>> print(1+1)
|
|
2
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> # doctest: +REQUIRES(env:CPU)
|
|
>>> for i in range(2):
|
|
... print(i)
|
|
0
|
|
1
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-2
|
|
|
|
>>> print(1+2)
|
|
3
|
|
""",
|
|
'one_minus_one': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> # doctest: +REQUIRES(env:CPU)
|
|
>>> print(1-1)
|
|
0
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-2
|
|
|
|
>>> print(1+1)
|
|
3
|
|
""",
|
|
}
|
|
|
|
test_results = get_test_results(doctester, docstrings_to_test)
|
|
self.assertEqual(len(test_results), 5)
|
|
|
|
tr_0, tr_1, tr_2, tr_3, tr_4 = test_results
|
|
|
|
self.assertIn('one_plus_one', tr_0.name)
|
|
self.assertIn('code-example-0', tr_0.name)
|
|
self.assertFalse(tr_0.nocode)
|
|
self.assertFalse(tr_0.passed)
|
|
self.assertTrue(tr_0.skipped)
|
|
self.assertFalse(tr_0.failed)
|
|
|
|
self.assertIn('one_plus_one', tr_1.name)
|
|
self.assertIn('code-example-1', tr_1.name)
|
|
self.assertFalse(tr_1.nocode)
|
|
self.assertTrue(tr_1.passed)
|
|
self.assertFalse(tr_1.skipped)
|
|
self.assertFalse(tr_1.failed)
|
|
|
|
self.assertIn('one_plus_one', tr_2.name)
|
|
self.assertIn('code-example-2', tr_2.name)
|
|
self.assertFalse(tr_2.nocode)
|
|
self.assertTrue(tr_2.passed)
|
|
self.assertFalse(tr_2.skipped)
|
|
self.assertFalse(tr_2.failed)
|
|
|
|
self.assertIn('one_minus_one', tr_3.name)
|
|
self.assertIn('code-example-1', tr_3.name)
|
|
self.assertFalse(tr_3.nocode)
|
|
self.assertTrue(tr_3.passed)
|
|
self.assertFalse(tr_3.skipped)
|
|
self.assertFalse(tr_3.failed)
|
|
|
|
self.assertIn('one_minus_one', tr_4.name)
|
|
self.assertIn('code-example-2', tr_4.name)
|
|
self.assertFalse(tr_4.nocode)
|
|
self.assertFalse(tr_4.passed)
|
|
self.assertFalse(tr_4.skipped)
|
|
self.assertTrue(tr_4.failed)
|
|
|
|
def test_no_code(self):
|
|
_clear_environ()
|
|
|
|
test_capacity = {'cpu'}
|
|
doctester = Xdoctester(style='google', target='docstring')
|
|
doctester.prepare(test_capacity)
|
|
|
|
docstrings_to_test = {
|
|
'one_plus_one': """
|
|
placeholder
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-0
|
|
|
|
this is some blabla...
|
|
|
|
>>> # doctest: +SKIP('skip')
|
|
>>> print(1+1)
|
|
2
|
|
""",
|
|
'one_minus_one': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
""",
|
|
}
|
|
|
|
test_results = get_test_results(doctester, docstrings_to_test)
|
|
self.assertEqual(len(test_results), 2)
|
|
|
|
tr_0, tr_1 = test_results
|
|
|
|
self.assertIn('one_plus_one', tr_0.name)
|
|
self.assertNotIn('code-example', tr_0.name)
|
|
self.assertTrue(tr_0.nocode)
|
|
self.assertFalse(tr_0.passed)
|
|
self.assertFalse(tr_0.skipped)
|
|
self.assertFalse(tr_0.failed)
|
|
|
|
self.assertIn('one_minus_one', tr_1.name)
|
|
self.assertNotIn('code-example', tr_1.name)
|
|
self.assertTrue(tr_1.nocode)
|
|
self.assertFalse(tr_1.passed)
|
|
self.assertFalse(tr_1.skipped)
|
|
self.assertFalse(tr_1.failed)
|
|
|
|
_clear_environ()
|
|
|
|
test_capacity = {'cpu'}
|
|
doctester = Xdoctester(style='google', target='codeblock')
|
|
doctester.prepare(test_capacity)
|
|
|
|
test_results = get_test_results(doctester, docstrings_to_test)
|
|
self.assertEqual(len(test_results), 0)
|
|
|
|
_clear_environ()
|
|
|
|
test_capacity = {'cpu'}
|
|
doctester = Xdoctester(style='freeform', target='docstring')
|
|
doctester.prepare(test_capacity)
|
|
|
|
test_results = get_test_results(doctester, docstrings_to_test)
|
|
self.assertEqual(len(test_results), 2)
|
|
|
|
tr_0, tr_1 = test_results
|
|
|
|
self.assertIn('one_plus_one', tr_0.name)
|
|
self.assertNotIn('code-example', tr_0.name)
|
|
self.assertFalse(tr_0.nocode)
|
|
self.assertFalse(tr_0.passed)
|
|
self.assertTrue(tr_0.skipped)
|
|
self.assertFalse(tr_0.failed)
|
|
|
|
self.assertIn('one_minus_one', tr_1.name)
|
|
self.assertNotIn('code-example', tr_1.name)
|
|
self.assertTrue(tr_1.nocode)
|
|
self.assertFalse(tr_1.passed)
|
|
self.assertFalse(tr_1.skipped)
|
|
self.assertFalse(tr_1.failed)
|
|
|
|
_clear_environ()
|
|
|
|
test_capacity = {'cpu'}
|
|
doctester = Xdoctester(style='freeform', target='codeblock')
|
|
doctester.prepare(test_capacity)
|
|
|
|
test_results = get_test_results(doctester, docstrings_to_test)
|
|
self.assertEqual(len(test_results), 1)
|
|
|
|
tr_0 = test_results[0]
|
|
|
|
self.assertIn('one_plus_one', tr_0.name)
|
|
self.assertIn('code-example', tr_0.name)
|
|
self.assertFalse(tr_0.nocode)
|
|
self.assertFalse(tr_0.passed)
|
|
self.assertTrue(tr_0.skipped)
|
|
self.assertFalse(tr_0.failed)
|
|
|
|
def test_multiprocessing_xdoctester(self):
|
|
docstrings_to_test = {
|
|
'static_0': """
|
|
this is docstring...
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
|
|
>>> import numpy as np
|
|
>>> import paddle
|
|
>>> paddle.enable_static()
|
|
>>> data = paddle.static.data(name='X', shape=[None, 2, 28, 28], dtype='float32')
|
|
""",
|
|
'static_1': """
|
|
this is docstring...
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
|
|
>>> import numpy as np
|
|
>>> import paddle
|
|
>>> paddle.enable_static()
|
|
>>> data = paddle.static.data(name='X', shape=[None, 1, 28, 28], dtype='float32')
|
|
|
|
""",
|
|
}
|
|
|
|
_clear_environ()
|
|
|
|
test_capacity = {'cpu'}
|
|
doctester = Xdoctester()
|
|
doctester.prepare(test_capacity)
|
|
|
|
test_results = get_test_results(doctester, docstrings_to_test)
|
|
self.assertEqual(len(test_results), 2)
|
|
|
|
tr_0, tr_1 = test_results
|
|
|
|
self.assertIn('static_0', tr_0.name)
|
|
self.assertTrue(tr_0.passed)
|
|
|
|
self.assertIn('static_1', tr_1.name)
|
|
self.assertTrue(tr_1.passed)
|
|
|
|
def test_timeout(self):
|
|
docstrings_to_test = {
|
|
'timeout_false': """
|
|
this is docstring...
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
|
|
>>> # doctest: +TIMEOUT(10)
|
|
>>> import time
|
|
>>> time.sleep(0.1)
|
|
""",
|
|
'timeout_true': """
|
|
this is docstring...
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
|
|
>>> # doctest: +TIMEOUT(10)
|
|
>>> import time
|
|
>>> time.sleep(15)
|
|
""",
|
|
'timeout_false_with_skip_0': """
|
|
this is docstring...
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
|
|
>>> # doctest: +TIMEOUT(10)
|
|
>>> # doctest: +SKIP('skip')
|
|
>>> import time
|
|
>>> time.sleep(0.1)
|
|
""",
|
|
'timeout_false_with_skip_1': """
|
|
this is docstring...
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
|
|
>>> # doctest: +SKIP('skip')
|
|
>>> # doctest: +TIMEOUT(10)
|
|
>>> import time
|
|
>>> time.sleep(0.1)
|
|
""",
|
|
'timeout_true_with_skip_0': """
|
|
this is docstring...
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
|
|
>>> # doctest: +TIMEOUT(10)
|
|
>>> # doctest: +SKIP('skip')
|
|
>>> import time
|
|
>>> time.sleep(15)
|
|
""",
|
|
'timeout_true_with_skip_1': """
|
|
this is docstring...
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
|
|
>>> # doctest: +SKIP('skip')
|
|
>>> # doctest: +TIMEOUT(10)
|
|
>>> import time
|
|
>>> time.sleep(15)
|
|
""",
|
|
'timeout_more_codes': """
|
|
this is docstring...
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
|
|
>>> # doctest: +TIMEOUT(10)
|
|
>>> import time
|
|
>>> time.sleep(0.1)
|
|
|
|
.. code-block:: pycon
|
|
|
|
>>> # doctest: +TIMEOUT(10)
|
|
>>> import time
|
|
>>> time.sleep(15)
|
|
|
|
""",
|
|
}
|
|
|
|
_clear_environ()
|
|
|
|
test_capacity = {'cpu'}
|
|
doctester = Xdoctester()
|
|
doctester.prepare(test_capacity)
|
|
|
|
test_results = get_test_results(doctester, docstrings_to_test)
|
|
self.assertEqual(len(test_results), 8)
|
|
|
|
tr_0, tr_1, tr_2, tr_3, tr_4, tr_5, tr_6, tr_7 = test_results
|
|
|
|
self.assertIn('timeout_false', tr_0.name)
|
|
self.assertTrue(tr_0.passed)
|
|
self.assertFalse(tr_0.timeout)
|
|
|
|
self.assertIn('timeout_true', tr_1.name)
|
|
self.assertFalse(tr_1.passed)
|
|
self.assertTrue(tr_1.timeout)
|
|
|
|
self.assertIn('timeout_false_with_skip_0', tr_2.name)
|
|
self.assertFalse(tr_2.passed)
|
|
self.assertFalse(tr_2.timeout)
|
|
self.assertTrue(tr_2.skipped)
|
|
|
|
self.assertIn('timeout_false_with_skip_1', tr_3.name)
|
|
self.assertFalse(tr_3.passed)
|
|
self.assertFalse(tr_3.timeout)
|
|
self.assertTrue(tr_3.skipped)
|
|
|
|
self.assertIn('timeout_true_with_skip_0', tr_4.name)
|
|
self.assertFalse(tr_4.passed)
|
|
self.assertFalse(tr_4.timeout)
|
|
self.assertTrue(tr_4.skipped)
|
|
|
|
self.assertIn('timeout_true_with_skip_1', tr_5.name)
|
|
self.assertFalse(tr_5.passed)
|
|
self.assertFalse(tr_5.timeout)
|
|
self.assertTrue(tr_5.skipped)
|
|
|
|
self.assertIn('timeout_more_codes', tr_6.name)
|
|
self.assertTrue(tr_6.passed)
|
|
self.assertFalse(tr_6.timeout)
|
|
|
|
self.assertIn('timeout_more_codes', tr_7.name)
|
|
self.assertFalse(tr_7.passed)
|
|
self.assertTrue(tr_7.timeout)
|
|
|
|
_clear_environ()
|
|
|
|
test_capacity = {'cpu'}
|
|
doctester = Xdoctester(use_multiprocessing=False)
|
|
doctester.prepare(test_capacity)
|
|
|
|
test_results = get_test_results(doctester, docstrings_to_test)
|
|
self.assertEqual(len(test_results), 8)
|
|
|
|
tr_0, tr_1, tr_2, tr_3, tr_4, tr_5, tr_6, tr_7 = test_results
|
|
|
|
self.assertIn('timeout_false', tr_0.name)
|
|
self.assertTrue(tr_0.passed)
|
|
self.assertFalse(tr_0.timeout)
|
|
|
|
self.assertIn('timeout_true', tr_1.name)
|
|
self.assertFalse(tr_1.passed)
|
|
self.assertTrue(tr_1.timeout)
|
|
|
|
self.assertIn('timeout_false_with_skip_0', tr_2.name)
|
|
self.assertFalse(tr_2.passed)
|
|
self.assertFalse(tr_2.timeout)
|
|
self.assertTrue(tr_2.skipped)
|
|
|
|
self.assertIn('timeout_false_with_skip_1', tr_3.name)
|
|
self.assertFalse(tr_3.passed)
|
|
self.assertFalse(tr_3.timeout)
|
|
self.assertTrue(tr_3.skipped)
|
|
|
|
self.assertIn('timeout_true_with_skip_0', tr_4.name)
|
|
self.assertFalse(tr_4.passed)
|
|
self.assertFalse(tr_4.timeout)
|
|
self.assertTrue(tr_4.skipped)
|
|
|
|
self.assertIn('timeout_true_with_skip_1', tr_5.name)
|
|
self.assertFalse(tr_5.passed)
|
|
self.assertFalse(tr_5.timeout)
|
|
self.assertTrue(tr_5.skipped)
|
|
|
|
self.assertIn('timeout_more_codes', tr_6.name)
|
|
self.assertTrue(tr_6.passed)
|
|
self.assertFalse(tr_6.timeout)
|
|
|
|
self.assertIn('timeout_more_codes', tr_7.name)
|
|
self.assertFalse(tr_7.passed)
|
|
self.assertTrue(tr_7.timeout)
|
|
|
|
def test_bad_statements(self):
|
|
docstrings_to_test = {
|
|
'good_fluid': """
|
|
this is docstring...
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
|
|
>>> import paddle.base
|
|
""",
|
|
'bad_fluid_from': """
|
|
this is docstring...
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
|
|
>>> import paddle
|
|
>>> from paddle import fluid
|
|
""",
|
|
'no_bad': """
|
|
this is docstring...
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
|
|
>>> # doctest: +SKIP('reason')
|
|
>>> import os
|
|
""",
|
|
'bad_fluid_good_skip': """
|
|
this is docstring...
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
|
|
>>> # doctest: +SKIP('reason')
|
|
>>> import os
|
|
>>> from paddle import fluid
|
|
""",
|
|
'bad_fluid_bad_skip': """
|
|
this is docstring...
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
|
|
>>> # doctest: +SKIP('reason')
|
|
>>> import os
|
|
>>> from paddle import fluid
|
|
>>> # doctest: +SKIP
|
|
>>> import sys
|
|
""",
|
|
'bad_skip_mix': """
|
|
this is docstring...
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
|
|
>>> # doctest: +SKIP('reason')
|
|
>>> import os
|
|
>>> # doctest: +SKIP
|
|
>>> import sys
|
|
""",
|
|
'bad_skip': """
|
|
this is docstring...
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
|
|
>>> # doctest: +SKIP
|
|
>>> import os
|
|
|
|
""",
|
|
'bad_skip_empty': """
|
|
this is docstring...
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
|
|
>>> import os
|
|
>>> # doctest: +SKIP()
|
|
>>> import sys
|
|
""",
|
|
'good_skip': """
|
|
this is docstring...
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
|
|
>>> import os
|
|
>>> # doctest: +SKIP('reason')
|
|
>>> import sys
|
|
>>> # doctest: -SKIP
|
|
>>> import math
|
|
""",
|
|
'comment_fluid': """
|
|
this is docstring...
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
|
|
>>> # import paddle.base
|
|
>>> import os
|
|
""",
|
|
'oneline_skip': """
|
|
this is docstring...
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
|
|
>>> import os # doctest: +SKIP
|
|
>>> import sys
|
|
""",
|
|
}
|
|
|
|
_clear_environ()
|
|
|
|
test_capacity = {'cpu'}
|
|
doctester = Xdoctester()
|
|
doctester.prepare(test_capacity)
|
|
|
|
test_results = get_test_results(doctester, docstrings_to_test)
|
|
self.assertEqual(len(test_results), 11)
|
|
|
|
(
|
|
tr_0,
|
|
tr_1,
|
|
tr_2,
|
|
tr_3,
|
|
tr_4,
|
|
tr_5,
|
|
tr_6,
|
|
tr_7,
|
|
tr_8,
|
|
tr_9,
|
|
tr_10,
|
|
) = test_results
|
|
|
|
self.assertIn('good_fluid', tr_0.name)
|
|
self.assertFalse(tr_0.badstatement)
|
|
self.assertTrue(tr_0.passed)
|
|
|
|
self.assertIn('bad_fluid_from', tr_1.name)
|
|
self.assertTrue(tr_1.badstatement)
|
|
self.assertFalse(tr_1.passed)
|
|
|
|
self.assertIn('no_bad', tr_2.name)
|
|
self.assertFalse(tr_2.badstatement)
|
|
self.assertFalse(tr_2.passed)
|
|
self.assertTrue(tr_2.skipped)
|
|
|
|
self.assertIn('bad_fluid_good_skip', tr_3.name)
|
|
self.assertTrue(tr_3.badstatement)
|
|
self.assertFalse(tr_3.passed)
|
|
|
|
self.assertIn('bad_fluid_bad_skip', tr_4.name)
|
|
self.assertTrue(tr_4.badstatement)
|
|
self.assertFalse(tr_4.passed)
|
|
|
|
self.assertIn('bad_skip_mix', tr_5.name)
|
|
self.assertTrue(tr_5.badstatement)
|
|
self.assertFalse(tr_5.passed)
|
|
|
|
self.assertIn('bad_skip', tr_6.name)
|
|
self.assertTrue(tr_6.badstatement)
|
|
self.assertFalse(tr_6.passed)
|
|
|
|
self.assertIn('bad_skip_empty', tr_7.name)
|
|
self.assertTrue(tr_7.badstatement)
|
|
self.assertFalse(tr_7.passed)
|
|
|
|
self.assertIn('good_skip', tr_8.name)
|
|
self.assertFalse(tr_8.badstatement)
|
|
self.assertTrue(tr_8.passed)
|
|
|
|
self.assertIn('comment_fluid', tr_9.name)
|
|
self.assertFalse(tr_9.badstatement)
|
|
self.assertTrue(tr_9.passed)
|
|
|
|
self.assertIn('oneline_skip', tr_10.name)
|
|
self.assertTrue(tr_10.badstatement)
|
|
self.assertFalse(tr_10.passed)
|
|
|
|
def test_bad_statements_req(self):
|
|
docstrings_to_test = {
|
|
'bad_required': """
|
|
this is docstring...
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
|
|
>>> import sys
|
|
>>> # required: GPU
|
|
>>> import os
|
|
""",
|
|
'bad_requires': """
|
|
this is docstring...
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
|
|
>>> import sys
|
|
>>> # requires: GPU
|
|
>>> import os
|
|
""",
|
|
'bad_require': """
|
|
this is docstring...
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
|
|
>>> import sys
|
|
>>> # require : GPU
|
|
>>> import os
|
|
""",
|
|
'bad_require_2': """
|
|
this is docstring...
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
|
|
>>> import sys
|
|
>>> # require: GPU, xpu
|
|
>>> import os
|
|
""",
|
|
'bad_req': """
|
|
this is docstring...
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
|
|
>>> import sys
|
|
>>> #require:gpu
|
|
>>> import os
|
|
""",
|
|
'ignore_req': """
|
|
this is docstring...
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
|
|
>>> import sys
|
|
>>> #require:
|
|
>>> import os
|
|
""",
|
|
'ignore_req_bad_req': """
|
|
this is docstring...
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
|
|
>>> import sys
|
|
>>> #require: xpu
|
|
>>> import os
|
|
>>> #require:
|
|
>>> import os
|
|
""",
|
|
}
|
|
|
|
_clear_environ()
|
|
|
|
test_capacity = {'cpu'}
|
|
doctester = Xdoctester()
|
|
doctester.prepare(test_capacity)
|
|
|
|
test_results = get_test_results(doctester, docstrings_to_test)
|
|
self.assertEqual(len(test_results), 7)
|
|
|
|
(
|
|
tr_0,
|
|
tr_1,
|
|
tr_2,
|
|
tr_3,
|
|
tr_4,
|
|
tr_5,
|
|
tr_6,
|
|
) = test_results
|
|
|
|
self.assertIn('bad_required', tr_0.name)
|
|
self.assertTrue(tr_0.badstatement)
|
|
self.assertFalse(tr_0.passed)
|
|
|
|
self.assertIn('bad_requires', tr_1.name)
|
|
self.assertTrue(tr_1.badstatement)
|
|
self.assertFalse(tr_1.passed)
|
|
|
|
self.assertIn('bad_require', tr_2.name)
|
|
self.assertTrue(tr_1.badstatement)
|
|
self.assertFalse(tr_1.passed)
|
|
|
|
self.assertIn('bad_require_2', tr_3.name)
|
|
self.assertTrue(tr_3.badstatement)
|
|
self.assertFalse(tr_3.passed)
|
|
|
|
self.assertIn('bad_req', tr_4.name)
|
|
self.assertTrue(tr_4.badstatement)
|
|
self.assertFalse(tr_4.passed)
|
|
|
|
self.assertIn('ignore_req', tr_5.name)
|
|
self.assertFalse(tr_5.badstatement)
|
|
self.assertTrue(tr_5.passed)
|
|
|
|
self.assertIn('ignore_req_bad_req', tr_6.name)
|
|
self.assertTrue(tr_6.badstatement)
|
|
self.assertFalse(tr_6.passed)
|
|
|
|
@unittest.skipIf(
|
|
not sys.platform.startswith('linux'),
|
|
"CI checks on linux, we only care this situation about multiprocessing!"
|
|
"Or pickle may fail.",
|
|
)
|
|
def test_single_process_directive(self):
|
|
_clear_environ()
|
|
|
|
# test set_default_dtype
|
|
docstrings_to_test = {
|
|
'no_solo': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> import multiprocessing
|
|
>>> p = multiprocessing.Process(
|
|
... target=lambda a, b: a + b,
|
|
... args=(
|
|
... 1,
|
|
... 2,
|
|
... ),
|
|
... )
|
|
>>> p.start()
|
|
>>> p.join()
|
|
""",
|
|
'has_solo': """
|
|
placeholder
|
|
|
|
Examples:
|
|
|
|
.. code-block:: pycon
|
|
:name: code-example-1
|
|
|
|
this is some blabla...
|
|
|
|
>>> # doctest: +SOLO('can not use add in multiprocess')
|
|
>>> import multiprocessing
|
|
>>> p = multiprocessing.Process(
|
|
... target=lambda a, b: a + b,
|
|
... args=(
|
|
... 1,
|
|
... 2,
|
|
... ),
|
|
... )
|
|
>>> p.start()
|
|
>>> p.join()
|
|
""",
|
|
}
|
|
|
|
# test old global_exec
|
|
test_capacity = {'cpu'}
|
|
doctester = Xdoctester()
|
|
doctester.prepare(test_capacity)
|
|
|
|
test_results = get_test_results(doctester, docstrings_to_test)
|
|
self.assertEqual(len(test_results), 2)
|
|
|
|
(tr_0, tr_1) = test_results
|
|
|
|
self.assertIn('no_solo', tr_0.name)
|
|
self.assertFalse(tr_0.passed)
|
|
|
|
self.assertIn('has_solo', tr_1.name)
|
|
self.assertTrue(tr_1.passed)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|