summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_code.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_code.py')
-rw-r--r--Lib/test/test_code.py230
1 files changed, 0 insertions, 230 deletions
diff --git a/Lib/test/test_code.py b/Lib/test/test_code.py
index 1b6dfe7..7cf09ee 100644
--- a/Lib/test/test_code.py
+++ b/Lib/test/test_code.py
@@ -777,236 +777,6 @@ class CodeTest(unittest.TestCase):
kinds = _testinternalcapi.get_co_localskinds(func.__code__)
self.assertEqual(kinds, expected)
- @unittest.skipIf(_testinternalcapi is None, "missing _testinternalcapi")
- def test_var_counts(self):
- self.maxDiff = None
- def new_var_counts(*,
- posonly=0,
- posorkw=0,
- kwonly=0,
- varargs=0,
- varkwargs=0,
- purelocals=0,
- argcells=0,
- othercells=0,
- freevars=0,
- globalvars=0,
- attrs=0,
- unknown=0,
- ):
- nargvars = posonly + posorkw + kwonly + varargs + varkwargs
- nlocals = nargvars + purelocals + othercells
- if isinstance(globalvars, int):
- globalvars = {
- 'total': globalvars,
- 'numglobal': 0,
- 'numbuiltin': 0,
- 'numunknown': globalvars,
- }
- else:
- g_numunknown = 0
- if isinstance(globalvars, dict):
- numglobal = globalvars['numglobal']
- numbuiltin = globalvars['numbuiltin']
- size = 2
- if 'numunknown' in globalvars:
- g_numunknown = globalvars['numunknown']
- size += 1
- assert len(globalvars) == size, globalvars
- else:
- assert not isinstance(globalvars, str), repr(globalvars)
- try:
- numglobal, numbuiltin = globalvars
- except ValueError:
- numglobal, numbuiltin, g_numunknown = globalvars
- globalvars = {
- 'total': numglobal + numbuiltin + g_numunknown,
- 'numglobal': numglobal,
- 'numbuiltin': numbuiltin,
- 'numunknown': g_numunknown,
- }
- unbound = globalvars['total'] + attrs + unknown
- return {
- 'total': nlocals + freevars + unbound,
- 'locals': {
- 'total': nlocals,
- 'args': {
- 'total': nargvars,
- 'numposonly': posonly,
- 'numposorkw': posorkw,
- 'numkwonly': kwonly,
- 'varargs': varargs,
- 'varkwargs': varkwargs,
- },
- 'numpure': purelocals,
- 'cells': {
- 'total': argcells + othercells,
- 'numargs': argcells,
- 'numothers': othercells,
- },
- 'hidden': {
- 'total': 0,
- 'numpure': 0,
- 'numcells': 0,
- },
- },
- 'numfree': freevars,
- 'unbound': {
- 'total': unbound,
- 'globals': globalvars,
- 'numattrs': attrs,
- 'numunknown': unknown,
- },
- }
-
- import test._code_definitions as defs
- funcs = {
- defs.spam_minimal: new_var_counts(),
- defs.spam_full: new_var_counts(
- posonly=2,
- posorkw=2,
- kwonly=2,
- varargs=1,
- varkwargs=1,
- purelocals=4,
- globalvars=3,
- attrs=1,
- ),
- defs.spam: new_var_counts(
- posorkw=1,
- ),
- defs.spam_N: new_var_counts(
- posorkw=1,
- purelocals=1,
- ),
- defs.spam_C: new_var_counts(
- posorkw=1,
- purelocals=1,
- argcells=1,
- othercells=1,
- ),
- defs.spam_NN: new_var_counts(
- posorkw=1,
- purelocals=1,
- ),
- defs.spam_NC: new_var_counts(
- posorkw=1,
- purelocals=1,
- argcells=1,
- othercells=1,
- ),
- defs.spam_CN: new_var_counts(
- posorkw=1,
- purelocals=1,
- argcells=1,
- othercells=1,
- ),
- defs.spam_CC: new_var_counts(
- posorkw=1,
- purelocals=1,
- argcells=1,
- othercells=1,
- ),
- defs.eggs_nested: new_var_counts(
- posorkw=1,
- ),
- defs.eggs_closure: new_var_counts(
- posorkw=1,
- freevars=2,
- ),
- defs.eggs_nested_N: new_var_counts(
- posorkw=1,
- purelocals=1,
- ),
- defs.eggs_nested_C: new_var_counts(
- posorkw=1,
- purelocals=1,
- argcells=1,
- freevars=2,
- ),
- defs.eggs_closure_N: new_var_counts(
- posorkw=1,
- purelocals=1,
- freevars=2,
- ),
- defs.eggs_closure_C: new_var_counts(
- posorkw=1,
- purelocals=1,
- argcells=1,
- othercells=1,
- freevars=2,
- ),
- defs.ham_nested: new_var_counts(
- posorkw=1,
- ),
- defs.ham_closure: new_var_counts(
- posorkw=1,
- freevars=3,
- ),
- defs.ham_C_nested: new_var_counts(
- posorkw=1,
- ),
- defs.ham_C_closure: new_var_counts(
- posorkw=1,
- freevars=4,
- ),
- }
- assert len(funcs) == len(defs.FUNCTIONS), (len(funcs), len(defs.FUNCTIONS))
- for func in defs.FUNCTIONS:
- with self.subTest(func):
- expected = funcs[func]
- counts = _testinternalcapi.get_code_var_counts(func.__code__)
- self.assertEqual(counts, expected)
-
- def func_with_globals_and_builtins():
- mod1 = _testinternalcapi
- mod2 = dis
- mods = (mod1, mod2)
- checks = tuple(callable(m) for m in mods)
- return callable(mod2), tuple(mods), list(mods), checks
-
- func = func_with_globals_and_builtins
- with self.subTest(f'{func} code'):
- expected = new_var_counts(
- purelocals=4,
- globalvars=5,
- )
- counts = _testinternalcapi.get_code_var_counts(func.__code__)
- self.assertEqual(counts, expected)
-
- with self.subTest(f'{func} with own globals and builtins'):
- expected = new_var_counts(
- purelocals=4,
- globalvars=(2, 3),
- )
- counts = _testinternalcapi.get_code_var_counts(func)
- self.assertEqual(counts, expected)
-
- with self.subTest(f'{func} without globals'):
- expected = new_var_counts(
- purelocals=4,
- globalvars=(0, 3, 2),
- )
- counts = _testinternalcapi.get_code_var_counts(func, globalsns={})
- self.assertEqual(counts, expected)
-
- with self.subTest(f'{func} without both'):
- expected = new_var_counts(
- purelocals=4,
- globalvars=5,
- )
- counts = _testinternalcapi.get_code_var_counts(func, globalsns={},
- builtinsns={})
- self.assertEqual(counts, expected)
-
- with self.subTest(f'{func} without builtins'):
- expected = new_var_counts(
- purelocals=4,
- globalvars=(2, 0, 3),
- )
- counts = _testinternalcapi.get_code_var_counts(func, builtinsns={})
- self.assertEqual(counts, expected)
-
def isinterned(s):
return s is sys.intern(('_' + s + '_')[1:-1])