PageRenderTime 42ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/pypy/interpreter/pyparser/test/expressions.py

https://bitbucket.org/dac_io/pypy
Python | 510 lines | 497 code | 4 blank | 9 comment | 54 complexity | a6c4672ed14e40571540fab20dbb0c1f MD5 | raw file
  1. """
  2. list of tested expressions / suites (used by test_parser and test_astbuilder)
  3. """
  4. constants = [
  5. "0",
  6. "7",
  7. "-3",
  8. "053",
  9. "0x18",
  10. "14L",
  11. "1.0",
  12. "3.9",
  13. "-3.6",
  14. "1.8e19",
  15. "90000000000000",
  16. "90000000000000.",
  17. "3j"
  18. ]
  19. expressions = [
  20. "x = a + 1",
  21. "x = 1 - a",
  22. "x = a * b",
  23. "x = a ** 2",
  24. "x = a / b",
  25. "x = a & b",
  26. "x = a | b",
  27. "x = a ^ b",
  28. "x = a // b",
  29. "x = a * b + 1",
  30. "x = a + 1 * b",
  31. "x = a * b / c",
  32. "x = a * (1 + c)",
  33. "x, y, z = 1, 2, 3",
  34. "x = 'a' 'b' 'c'",
  35. "del foo",
  36. "del foo[bar]",
  37. "del foo.bar",
  38. "l[0]",
  39. "k[v,]",
  40. "m[a,b]",
  41. "a.b.c[d]",
  42. "file('some.txt').read()",
  43. "a[0].read()",
  44. "a[1:1].read()",
  45. "f('foo')('bar')('spam')",
  46. "f('foo')('bar')('spam').read()[0]",
  47. "a.b[0][0]",
  48. "a.b[0][:]",
  49. "a.b[0][::]",
  50. "a.b[0][0].pop()[0].push('bar')('baz').spam",
  51. "a.b[0].read()[1][2].foo().spam()[0].bar",
  52. "a**2",
  53. "a**2**2",
  54. "a.b[0]**2",
  55. "a.b[0].read()[1][2].foo().spam()[0].bar ** 2",
  56. "l[start:end] = l2",
  57. "l[::] = l2",
  58. "a = `s`",
  59. "a = `1 + 2 + f(3, 4)`",
  60. "[a, b] = c",
  61. "(a, b) = c",
  62. "[a, (b,c), d] = e",
  63. "a, (b, c), d = e",
  64. ]
  65. # We do not export the following tests because we would have to implement 2.5
  66. # features in the stable compiler (other than just building the AST).
  67. expressions_inbetweenversions = expressions + [
  68. "1 if True else 2",
  69. "1 if False else 2",
  70. ]
  71. funccalls = [
  72. "l = func()",
  73. "l = func(10)",
  74. "l = func(10, 12, a, b=c, *args)",
  75. "l = func(10, 12, a, b=c, **kwargs)",
  76. "l = func(10, 12, a, b=c, *args, **kwargs)",
  77. "l = func(10, 12, a, b=c)",
  78. "e = l.pop(3)",
  79. "e = k.l.pop(3)",
  80. "simplefilter('ignore', category=PendingDeprecationWarning, append=1)",
  81. """methodmap = dict(subdirs=phase4,
  82. same_files=phase3, diff_files=phase3, funny_files=phase3,
  83. common_dirs = phase2, common_files=phase2, common_funny=phase2,
  84. common=phase1, left_only=phase1, right_only=phase1,
  85. left_list=phase0, right_list=phase0)""",
  86. "odata = b2a_qp(data, quotetabs = quotetabs, header = header)",
  87. ]
  88. listmakers = [
  89. "l = []",
  90. "l = [1, 2, 3]",
  91. "l = [i for i in range(10)]",
  92. "l = [i for i in range(10) if i%2 == 0]",
  93. "l = [i for i in range(10) if i%2 == 0 or i%2 == 1]", # <--
  94. "l = [i for i in range(10) if i%2 == 0 and i%2 == 1]",
  95. "l = [i for j in range(10) for i in range(j)]",
  96. "l = [i for j in range(10) for i in range(j) if j%2 == 0]",
  97. "l = [i for j in range(10) for i in range(j) if j%2 == 0 and i%2 == 0]",
  98. "l = [(a, b) for (a,b,c) in l2]",
  99. "l = [{a:b} for (a,b,c) in l2]",
  100. "l = [i for j in k if j%2 == 0 if j*2 < 20 for i in j if i%2==0]",
  101. ]
  102. genexps = [
  103. "l = (i for i in j)",
  104. "l = (i for i in j if i%2 == 0)",
  105. "l = (i for j in k for i in j)",
  106. "l = (i for j in k for i in j if j%2==0)",
  107. "l = (i for j in k if j%2 == 0 if j*2 < 20 for i in j if i%2==0)",
  108. "l = (i for i in [ j*2 for j in range(10) ] )",
  109. "l = [i for i in ( j*2 for j in range(10) ) ]",
  110. "l = (i for i in [ j*2 for j in ( k*3 for k in range(10) ) ] )",
  111. "l = [i for j in ( j*2 for j in [ k*3 for k in range(10) ] ) ]",
  112. "l = f(i for i in j)",
  113. ]
  114. dictmakers = [
  115. "l = {a : b, 'c' : 0}",
  116. "l = {}",
  117. ]
  118. backtrackings = [
  119. "f = lambda x: x+1",
  120. "f = lambda x,y: x+y",
  121. "f = lambda x,y=1,z=t: x+y",
  122. "f = lambda x,y=1,z=t,*args,**kwargs: x+y",
  123. "f = lambda x,y=1,z=t,*args: x+y",
  124. "f = lambda x,y=1,z=t,**kwargs: x+y",
  125. "f = lambda: 1",
  126. "f = lambda *args: 1",
  127. "f = lambda **kwargs: 1",
  128. ]
  129. comparisons = [
  130. "a < b",
  131. "a > b",
  132. "a not in b",
  133. "a is not b",
  134. "a in b",
  135. "a is b",
  136. "3 < x < 5",
  137. "(3 < x) < 5",
  138. "a < b < c < d",
  139. "(a < b) < (c < d)",
  140. "a < (b < c) < d",
  141. ]
  142. multiexpr = [
  143. 'a = b; c = d;',
  144. 'a = b = c = d',
  145. ]
  146. attraccess = [
  147. 'a.b = 2',
  148. 'x = a.b',
  149. ]
  150. slices = [
  151. "l[:]",
  152. "l[::]",
  153. "l[1:2]",
  154. "l[1:]",
  155. "l[:2]",
  156. "l[1::]",
  157. "l[:1:]",
  158. "l[::1]",
  159. "l[1:2:]",
  160. "l[:1:2]",
  161. "l[1::2]",
  162. "l[0:1:2]",
  163. "a.b.l[:]",
  164. "a.b.l[1:2]",
  165. "a.b.l[1:]",
  166. "a.b.l[:2]",
  167. "a.b.l[0:1:2]",
  168. "a[1:2:3, 100]",
  169. "a[:2:3, 100]",
  170. "a[1::3, 100,]",
  171. "a[1:2:, 100]",
  172. "a[1:2, 100]",
  173. "a[1:, 100,]",
  174. "a[:2, 100]",
  175. "a[:, 100]",
  176. "a[100, 1:2:3,]",
  177. "a[100, :2:3]",
  178. "a[100, 1::3]",
  179. "a[100, 1:2:,]",
  180. "a[100, 1:2]",
  181. "a[100, 1:]",
  182. "a[100, :2,]",
  183. "a[100, :]",
  184. ]
  185. imports = [
  186. 'import os',
  187. 'import sys, os',
  188. 'import os.path',
  189. 'import os.path, sys',
  190. 'import sys, os.path as osp',
  191. 'import os.path as osp',
  192. 'import os.path as osp, sys as _sys',
  193. 'import a.b.c.d',
  194. 'import a.b.c.d as abcd',
  195. 'from os import path',
  196. 'from os import path, system',
  197. ]
  198. imports_newstyle = [
  199. 'from os import path, system',
  200. 'from os import path as P, system as S',
  201. 'from os import (path as P, system as S,)',
  202. 'from os import *',
  203. ]
  204. if_stmts = [
  205. "if a == 1: a+= 2",
  206. """if a == 1:
  207. a += 2
  208. elif a == 2:
  209. a += 3
  210. else:
  211. a += 4
  212. """,
  213. "if a and not b == c: pass",
  214. "if a and not not not b == c: pass",
  215. "if 0: print 'foo'"
  216. ]
  217. asserts = [
  218. 'assert False',
  219. 'assert a == 1',
  220. 'assert a == 1 and b == 2',
  221. 'assert a == 1 and b == 2, "assertion failed"',
  222. ]
  223. execs = [
  224. 'exec a',
  225. 'exec "a=b+3"',
  226. 'exec a in f()',
  227. 'exec a in f(), g()',
  228. ]
  229. prints = [
  230. 'print',
  231. 'print a',
  232. 'print a,',
  233. 'print a, b',
  234. 'print a, "b", c',
  235. 'print >> err',
  236. 'print >> err, "error"',
  237. 'print >> err, "error",',
  238. 'print >> err, "error", a',
  239. ]
  240. globs = [
  241. 'global a',
  242. 'global a,b,c',
  243. ]
  244. raises_ = [ # NB. 'raises' creates a name conflict with py.test magic
  245. 'raise',
  246. 'raise ValueError',
  247. 'raise ValueError("error")',
  248. 'raise ValueError, "error"',
  249. 'raise ValueError, "error", foo',
  250. ]
  251. tryexcepts = [
  252. """try:
  253. a
  254. b
  255. except:
  256. pass
  257. """,
  258. """try:
  259. a
  260. b
  261. except NameError:
  262. pass
  263. """,
  264. """try:
  265. a
  266. b
  267. except NameError, err:
  268. pass
  269. """,
  270. """try:
  271. a
  272. b
  273. except (NameError, ValueError):
  274. pass
  275. """,
  276. """try:
  277. a
  278. b
  279. except (NameError, ValueError), err:
  280. pass
  281. """,
  282. """try:
  283. a
  284. except NameError, err:
  285. pass
  286. except ValueError, err:
  287. pass
  288. """,
  289. """def f():
  290. try:
  291. a
  292. except NameError, err:
  293. a = 1
  294. b = 2
  295. except ValueError, err:
  296. a = 2
  297. return a
  298. """
  299. """try:
  300. a
  301. except NameError, err:
  302. a = 1
  303. except ValueError, err:
  304. a = 2
  305. else:
  306. a += 3
  307. """,
  308. """try:
  309. a
  310. finally:
  311. b
  312. """,
  313. """def f():
  314. try:
  315. return a
  316. finally:
  317. a = 3
  318. return 1
  319. """,
  320. ]
  321. one_stmt_funcdefs = [
  322. "def f(): return 1",
  323. "def f(x): return x+1",
  324. "def f(x,y): return x+y",
  325. "def f(x,y=1,z=t): return x+y",
  326. "def f(x,y=1,z=t,*args,**kwargs): return x+y",
  327. "def f(x,y=1,z=t,*args): return x+y",
  328. "def f(x,y=1,z=t,**kwargs): return x+y",
  329. "def f(*args): return 1",
  330. "def f(**kwargs): return 1",
  331. "def f(t=()): pass",
  332. "def f(a, b, (c, d), e): pass",
  333. "def f(a, b, (c, (d, e), f, (g, h))): pass",
  334. "def f(a, b, (c, (d, e), f, (g, h)), i): pass",
  335. "def f((a)): pass",
  336. ]
  337. one_stmt_classdefs = [
  338. "class Pdb(bdb.Bdb, cmd.Cmd): pass",
  339. "class A: pass",
  340. ]
  341. docstrings = [
  342. '''def foo(): return 1''',
  343. '''class Foo: pass''',
  344. '''class Foo: "foo"''',
  345. '''def foo():
  346. """foo docstring"""
  347. return 1
  348. ''',
  349. '''def foo():
  350. """foo docstring"""
  351. a = 1
  352. """bar"""
  353. return a
  354. ''',
  355. '''def foo():
  356. """doc"""; print 1
  357. a=1
  358. ''',
  359. '''"""Docstring""";print 1''',
  360. ]
  361. returns = [
  362. 'def f(): return',
  363. 'def f(): return 1',
  364. 'def f(): return a.b',
  365. 'def f(): return a',
  366. 'def f(): return a,b,c,d',
  367. #'return (a,b,c,d)', --- this one makes no sense, as far as I can tell
  368. ]
  369. augassigns = [
  370. 'a=1;a+=2',
  371. 'a=1;a-=2',
  372. 'a=1;a*=2',
  373. 'a=1;a/=2',
  374. 'a=1;a//=2',
  375. 'a=1;a%=2',
  376. 'a=1;a**=2',
  377. 'a=1;a>>=2',
  378. 'a=1;a<<=2',
  379. 'a=1;a&=2',
  380. 'a=1;a^=2',
  381. 'a=1;a|=2',
  382. 'a=A();a.x+=2',
  383. 'a=A();a.x-=2',
  384. 'a=A();a.x*=2',
  385. 'a=A();a.x/=2',
  386. 'a=A();a.x//=2',
  387. 'a=A();a.x%=2',
  388. 'a=A();a.x**=2',
  389. 'a=A();a.x>>=2',
  390. 'a=A();a.x<<=2',
  391. 'a=A();a.x&=2',
  392. 'a=A();a.x^=2',
  393. 'a=A();a.x|=2',
  394. 'a=A();a[0]+=2',
  395. 'a=A();a[0]-=2',
  396. 'a=A();a[0]*=2',
  397. 'a=A();a[0]/=2',
  398. 'a=A();a[0]//=2',
  399. 'a=A();a[0]%=2',
  400. 'a=A();a[0]**=2',
  401. 'a=A();a[0]>>=2',
  402. 'a=A();a[0]<<=2',
  403. 'a=A();a[0]&=2',
  404. 'a=A();a[0]^=2',
  405. 'a=A();a[0]|=2',
  406. 'a=A();a[0:2]+=2',
  407. 'a=A();a[0:2]-=2',
  408. 'a=A();a[0:2]*=2',
  409. 'a=A();a[0:2]/=2',
  410. 'a=A();a[0:2]//=2',
  411. 'a=A();a[0:2]%=2',
  412. 'a=A();a[0:2]**=2',
  413. 'a=A();a[0:2]>>=2',
  414. 'a=A();a[0:2]<<=2',
  415. 'a=A();a[0:2]&=2',
  416. 'a=A();a[0:2]^=2',
  417. 'a=A();a[0:2]|=2',
  418. ]
  419. PY23_TESTS = [
  420. constants,
  421. expressions,
  422. augassigns,
  423. comparisons,
  424. funccalls,
  425. backtrackings,
  426. listmakers, # ERRORS
  427. dictmakers,
  428. multiexpr,
  429. attraccess,
  430. slices,
  431. imports,
  432. execs,
  433. prints,
  434. globs,
  435. raises_,
  436. ]
  437. OPTIONAL_TESTS = [
  438. # expressions_inbetweenversions,
  439. genexps,
  440. imports_newstyle,
  441. asserts,
  442. ]
  443. TESTS = PY23_TESTS + OPTIONAL_TESTS
  444. ## TESTS = [
  445. ## ["l = [i for i in range(10) if i%2 == 0 or i%2 == 1]"],
  446. ## ]
  447. CHANGES_25_INPUTS = [
  448. ["class A(): pass"],
  449. ["def f(): x = yield 3"]
  450. ]
  451. EXEC_INPUTS = [
  452. one_stmt_classdefs,
  453. one_stmt_funcdefs,
  454. if_stmts,
  455. tryexcepts,
  456. docstrings,
  457. returns,
  458. ]
  459. SINGLE_INPUTS = [
  460. one_stmt_funcdefs,
  461. ['\t # hello\n',
  462. 'print 6*7',
  463. 'if 1: x\n',
  464. 'x = 5',
  465. 'x = 5 ',
  466. '''"""Docstring""";print 1''',
  467. '''"Docstring"''',
  468. '''"Docstring" "\\x00"''',
  469. ]
  470. ]