晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
| DIR:/opt/imunify360/venv/lib/python3.11/site-packages/simplejson/tests/ |
| Current File : //opt/imunify360/venv/lib/python3.11/site-packages/simplejson/tests/test_subinterpreters.py |
"""Tests that verify the C extension works in subinterpreters.
Subinterpreters became usable for third-party C extensions in
Python 3.12 (PEP 684). On 3.13+ the extension uses per-module state
and heap types so that each interpreter gets its own copy.
"""
import sys
import unittest
from unittest import TestCase
from simplejson.tests._helpers import skip_if_speedups_missing
@unittest.skipIf(sys.version_info < (3, 12),
"subinterpreters require Python 3.12+")
class TestSubinterpreters(TestCase):
"""Test that the C extension can be loaded in subinterpreters."""
def _run_in_subinterp(self, code):
"""Helper to run code in a fresh subinterpreter."""
try:
import _interpreters
except ImportError:
raise unittest.SkipTest("_interpreters not available")
interp = _interpreters.create()
try:
_interpreters.run_string(interp, code)
finally:
_interpreters.destroy(interp)
@skip_if_speedups_missing
def test_import_in_subinterpreter(self):
"""Verify _speedups can be imported in a subinterpreter."""
self._run_in_subinterp(
"import simplejson; simplejson.dumps({'a': 1})")
@skip_if_speedups_missing
def test_encode_in_subinterpreter(self):
"""Verify encoding works correctly in a subinterpreter."""
self._run_in_subinterp("""
import simplejson
assert simplejson.dumps(None) == 'null'
assert simplejson.dumps(True) == 'true'
assert simplejson.dumps(False) == 'false'
assert simplejson.dumps(42) == '42'
assert simplejson.dumps(3.14) == '3.14'
assert simplejson.dumps("hello") == '"hello"'
assert simplejson.dumps([1, 2, 3]) == '[1, 2, 3]'
assert simplejson.dumps({"a": 1}, sort_keys=True) == '{"a": 1}'
""")
@skip_if_speedups_missing
def test_decode_in_subinterpreter(self):
"""Verify decoding works correctly in a subinterpreter."""
self._run_in_subinterp("""
import simplejson
assert simplejson.loads('null') is None
assert simplejson.loads('true') is True
assert simplejson.loads('42') == 42
assert simplejson.loads('"hello"') == 'hello'
assert simplejson.loads('[1, 2, 3]') == [1, 2, 3]
assert simplejson.loads('{"a": 1}') == {"a": 1}
""")
@skip_if_speedups_missing
def test_multiple_subinterpreters(self):
"""Verify multiple subinterpreters can use simplejson concurrently."""
try:
import _interpreters
except ImportError:
raise unittest.SkipTest("_interpreters not available")
interps = [_interpreters.create() for _ in range(3)]
try:
for i, interp in enumerate(interps):
_interpreters.run_string(interp, """
import simplejson
result = simplejson.dumps({"interp": %d})
assert '"interp": %d' in result
""" % (i, i))
finally:
for interp in interps:
_interpreters.destroy(interp)
@skip_if_speedups_missing
def test_subinterpreter_state_independent(self):
"""Verify destroying one subinterpreter doesn't affect another."""
try:
import _interpreters
except ImportError:
raise unittest.SkipTest("_interpreters not available")
interp1 = _interpreters.create()
interp2 = _interpreters.create()
try:
# Both interpreters load and use simplejson
_interpreters.run_string(interp1,
"import simplejson; simplejson.dumps([1])")
_interpreters.run_string(interp2,
"import simplejson; simplejson.dumps([2])")
# Destroy the first interpreter
_interpreters.destroy(interp1)
interp1 = None
# Second interpreter must still work correctly
_interpreters.run_string(interp2, """
import simplejson
assert simplejson.dumps({"still": "works"}) == '{"still": "works"}'
assert simplejson.loads('{"still": "works"}') == {"still": "works"}
""")
finally:
if interp1 is not None:
_interpreters.destroy(interp1)
_interpreters.destroy(interp2)
@skip_if_speedups_missing
@unittest.skipIf(sys.version_info < (3, 13),
"heap types require Python 3.13+")
def test_subinterpreter_heap_types(self):
"""Verify types are heap types inside subinterpreters."""
self._run_in_subinterp("""
from simplejson._speedups import make_scanner, make_encoder
# Py_TPFLAGS_HEAPTYPE = 1 << 9
assert make_scanner.__flags__ & (1 << 9), "Scanner should be heap type"
assert make_encoder.__flags__ & (1 << 9), "Encoder should be heap type"
""")
|