70_collections.py 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828
  1. from collections import Counter, deque
  2. import random
  3. import pickle
  4. import gc
  5. import builtins
  6. q = deque()
  7. q.append(1)
  8. q.append(2)
  9. q.appendleft(3)
  10. q.append(4)
  11. assert len(q) == 4
  12. assert q == deque([3, 1, 2, 4])
  13. assert q.popleft() == 3
  14. assert q.pop() == 4
  15. assert len(q) == 2
  16. assert q == deque([1, 2])
  17. # ADDING TESTS FROM CPYTHON's test_deque.py file
  18. ############ TEST basics###############
  19. def assertEqual(a, b):
  20. assert a == b
  21. def assertNotEqual(a, b):
  22. assert a != b
  23. def printFailed(function_name, *args, **kwargs):
  24. print("X Failed Tests for {} for args: {} {}".format(str(function_name), str(args), str(kwargs)))
  25. BIG = 100000
  26. def fail():
  27. raise SyntaxError
  28. yield 1
  29. d = deque(range(-5125, -5000))
  30. # d.__init__(range(200)) # not supported
  31. d = deque(range(200))
  32. for i in range(200, 400):
  33. d.append(i)
  34. for i in reversed(range(-200, 0)):
  35. d.appendleft(i)
  36. assertEqual(list(d), list(range(-200, 400)))
  37. assertEqual(len(d), 600)
  38. left = [d.popleft() for i in range(250)]
  39. assertEqual(left, list(range(-200, 50)))
  40. assertEqual(list(d), list(range(50, 400)))
  41. right = [d.pop() for i in range(250)]
  42. right.reverse()
  43. assertEqual(right, list(range(150, 400)))
  44. assertEqual(list(d), list(range(50, 150)))
  45. ####### TEST maxlen###############
  46. try:
  47. dq = deque()
  48. dq.maxlen = -1
  49. printFailed("deque.maxlen", -1)
  50. exit(1)
  51. except AttributeError:
  52. pass
  53. try:
  54. dq = deque()
  55. dq.maxlen = -2
  56. printFailed("deque.maxlen", -2)
  57. exit(1)
  58. except AttributeError:
  59. pass
  60. it = iter(range(10))
  61. d = deque(it, maxlen=3)
  62. assertEqual(list(it), [])
  63. assertEqual(repr(d), 'deque([7, 8, 9], maxlen=3)')
  64. assertEqual(list(d), [7, 8, 9])
  65. assertEqual(d, deque(range(10), 3))
  66. d.append(10)
  67. assertEqual(list(d), [8, 9, 10])
  68. d.appendleft(7)
  69. assertEqual(list(d), [7, 8, 9])
  70. d.extend([10, 11])
  71. assertEqual(list(d), [9, 10, 11])
  72. d.extendleft([8, 7])
  73. assertEqual(list(d), [7, 8, 9])
  74. d = deque(range(200), maxlen=10)
  75. d.append(d)
  76. assertEqual(repr(d)[-30:], ', 198, 199, [...]], maxlen=10)')
  77. d = deque(range(10), maxlen=None)
  78. assertEqual(repr(d), 'deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])')
  79. ####### TEST maxlen = 0###############
  80. it = iter(range(100))
  81. deque(it, maxlen=0)
  82. assertEqual(list(it), [])
  83. it = iter(range(100))
  84. d = deque(maxlen=0)
  85. d.extend(it)
  86. assertEqual(list(it), [])
  87. it = iter(range(100))
  88. d = deque(maxlen=0)
  89. d.extendleft(it)
  90. assertEqual(list(it), [])
  91. ####### TEST maxlen attribute #############
  92. assertEqual(deque().maxlen, None)
  93. assertEqual(deque('abc').maxlen, None)
  94. assertEqual(deque('abc', maxlen=4).maxlen, 4)
  95. assertEqual(deque('abc', maxlen=2).maxlen, 2)
  96. assertEqual(deque('abc', maxlen=0).maxlen, 0)
  97. try:
  98. d = deque('abc')
  99. d.maxlen = 10
  100. printFailed("deque.maxlen", 10)
  101. exit(1)
  102. except AttributeError:
  103. pass
  104. ######### TEST count()#################
  105. for s in ('', 'abracadabra', 'simsalabim'*500+'abc'):
  106. s = list(s)
  107. d = deque(s)
  108. for letter in 'abcdefghijklmnopqrstuvwxyz':
  109. assertEqual(s.count(letter), d.count(letter))
  110. try:
  111. d.count()
  112. printFailed("deque.count")
  113. exit(1)
  114. except TypeError:
  115. pass
  116. try:
  117. d.count(1, 2)
  118. printFailed("deque.count", 1, 2)
  119. exit(1)
  120. except TypeError:
  121. pass
  122. class BadCompare:
  123. def __eq__(self, other):
  124. raise ArithmeticError
  125. d = deque([1, 2, BadCompare(), 3])
  126. try:
  127. d.count(2)
  128. printFailed("deque.count", 2)
  129. exit(1)
  130. except ArithmeticError:
  131. pass
  132. d = deque([1, 2, 3])
  133. try:
  134. d.count(BadCompare())
  135. printFailed("deque.count", "BadCompare()")
  136. exit(1)
  137. except ArithmeticError:
  138. pass
  139. class MutatingCompare:
  140. def __eq__(self, other):
  141. d.pop()
  142. return True
  143. m = MutatingCompare()
  144. d = deque([1, 2, 3, m, 4, 5])
  145. m.d = d
  146. try:
  147. d.count(3)
  148. printFailed("deque.count", "MutatingCompare()")
  149. exit(1)
  150. except RuntimeError:
  151. pass
  152. d = deque([None]*16)
  153. for i in range(len(d)):
  154. d.rotate(-1)
  155. d.rotate(1)
  156. assertEqual(d.count(1), 0)
  157. assertEqual(d.count(None), 16)
  158. #### TEST comparisons == #####
  159. d = deque('xabc')
  160. d.popleft()
  161. for e in [d, deque('abc'), deque('ab'), deque(), list(d)]:
  162. assertEqual(d == e, type(d) == type(e) and list(d) == list(e))
  163. assertEqual(d != e, not (type(d) == type(e) and list(d) == list(e)))
  164. args = map(deque, ('', 'a', 'b', 'ab', 'ba', 'abc', 'xba', 'xabc', 'cba'))
  165. for x in args:
  166. for y in args:
  167. assertEqual(x == y, list(x) == list(y))
  168. assertEqual(x != y, list(x) != list(y))
  169. # assertEqual(x < y, list(x) < list(y)) # not currently supported
  170. # assertEqual(x <= y, list(x) <= list(y)) # not currently supported
  171. # assertEqual(x > y, list(x) > list(y)) # not currently supported
  172. # assertEqual(x >= y, list(x) >= list(y)) # not currently supported
  173. ############### TEST contains()#################
  174. n = 200
  175. d = deque(range(n))
  176. for i in range(n):
  177. assertEqual(i in d, True)
  178. assertEqual((n+1) not in d, True)
  179. class MutateCmp:
  180. def __init__(self, deque, result):
  181. self.deque = deque
  182. self.result = result
  183. def __eq__(self, other):
  184. self.deque.clear()
  185. return self.result
  186. # # Test detection of mutation during iteration
  187. d = deque(range(n))
  188. d[n//2] = MutateCmp(d, False)
  189. try:
  190. n in d
  191. printFailed("deque.__contains__", n)
  192. exit(1)
  193. except RuntimeError:
  194. pass
  195. class BadCmp:
  196. def __eq__(self, other):
  197. raise RuntimeError
  198. # # Test detection of comparison exceptions
  199. d = deque(range(n))
  200. d[n//2] = BadCmp()
  201. try:
  202. n in d
  203. printFailed("deque.__contains__", n)
  204. exit(1)
  205. except RuntimeError:
  206. pass
  207. ##### test_contains_count_stop_crashes#####
  208. class A:
  209. def __eq__(self, other):
  210. d.clear()
  211. return NotImplemented
  212. d = deque([A(), A()])
  213. try:
  214. _ = 3 in d
  215. printFailed("deque.__contains__", 3)
  216. exit(1)
  217. except RuntimeError:
  218. pass
  219. d = deque([A(), A()])
  220. try:
  221. _ = d.count(3)
  222. printFailed("deque.count", 3)
  223. exit(1)
  224. except RuntimeError:
  225. pass
  226. ######## TEST extend()################
  227. d = deque('a')
  228. try:
  229. d.extend(1)
  230. printFailed("deque.extend", 1)
  231. exit(1)
  232. except TypeError:
  233. pass
  234. d.extend('bcd')
  235. assertEqual(list(d), list('abcd'))
  236. d.extend(d)
  237. assertEqual(list(d), list('abcdabcd'))
  238. ###### TEST extend_left() ################
  239. d = deque('a')
  240. try:
  241. d.extendleft(1)
  242. printFailed("deque.extendleft", 1)
  243. exit(1)
  244. except TypeError:
  245. pass
  246. d.extendleft('bcd')
  247. assertEqual(list(d), list(reversed('abcd')))
  248. d.extendleft(d)
  249. assertEqual(list(d), list('abcddcba'))
  250. d = deque()
  251. d.extendleft(range(1000))
  252. assertEqual(list(d), list(reversed(range(1000))))
  253. try:
  254. d.extendleft(fail())
  255. printFailed("deque.extendleft", fail())
  256. exit(1)
  257. except SyntaxError:
  258. pass
  259. ##### TEST get_item ################
  260. n = 200
  261. d = deque(range(n))
  262. l = list(range(n))
  263. for i in range(n):
  264. d.popleft()
  265. l.pop(0)
  266. if random.random() < 0.5:
  267. d.append(i)
  268. l.append(i)
  269. for j in range(1-len(l), len(l)):
  270. assert d[j] == l[j]
  271. d = deque('superman')
  272. assertEqual(d[0], 's')
  273. assertEqual(d[-1], 'n')
  274. d = deque()
  275. try:
  276. d.__getitem__(0)
  277. printFailed("deque.__getitem__", 0)
  278. exit(1)
  279. except IndexError:
  280. pass
  281. try:
  282. d.__getitem__(-1)
  283. printFailed("deque.__getitem__", -1)
  284. exit(1)
  285. except IndexError:
  286. pass
  287. ######### TEST index()###############
  288. for n in 1, 2, 30, 40, 200:
  289. d = deque(range(n))
  290. for i in range(n):
  291. assertEqual(d.index(i), i)
  292. try:
  293. d.index(n+1)
  294. printFailed("deque.index", n+1)
  295. exit(1)
  296. except ValueError:
  297. pass
  298. # Test detection of mutation during iteration
  299. d = deque(range(n))
  300. d[n//2] = MutateCmp(d, False)
  301. try:
  302. d.index(n)
  303. printFailed("deque.index", n)
  304. exit(1)
  305. except RuntimeError:
  306. pass
  307. # Test detection of comparison exceptions
  308. d = deque(range(n))
  309. d[n//2] = BadCmp()
  310. try:
  311. d.index(n)
  312. printFailed("deque.index", n)
  313. exit(1)
  314. except RuntimeError:
  315. pass
  316. # Test start and stop arguments behavior matches list.index()
  317. # COMMENT: Current List behavior doesn't support start and stop arguments, so this test is not supported
  318. # elements = 'ABCDEFGHI'
  319. # nonelement = 'Z'
  320. # d = deque(elements * 2)
  321. # s = list(elements * 2)
  322. # for start in range(-5 - len(s)*2, 5 + len(s) * 2):
  323. # for stop in range(-5 - len(s)*2, 5 + len(s) * 2):
  324. # for element in elements + 'Z':
  325. # try:
  326. # print(element, start, stop)
  327. # target = s.index(element, start, stop)
  328. # except ValueError:
  329. # try:
  330. # d.index(element, start, stop)
  331. # print("X Failed Tests!")
  332. # exit(1)
  333. # except ValueError:
  334. # continue
  335. # # with assertRaises(ValueError):
  336. # # d.index(element, start, stop)
  337. # assertEqual(d.index(element, start, stop), target)
  338. # Test large start argument
  339. d = deque(range(0, 10000, 10))
  340. for step in range(100):
  341. i = d.index(8500, 700)
  342. assertEqual(d[i], 8500)
  343. # Repeat test with a different internal offset
  344. d.rotate()
  345. ########### test_index_bug_24913#############
  346. d = deque('A' * 3)
  347. try:
  348. d.index('A', 1, 0)
  349. printFailed("deque.index", 'A', 1, 0)
  350. exit(1)
  351. except ValueError:
  352. pass
  353. ########### test_insert#############
  354. # Test to make sure insert behaves like lists
  355. elements = 'ABCDEFGHI'
  356. for i in range(-5 - len(elements)*2, 5 + len(elements) * 2):
  357. d = deque('ABCDEFGHI')
  358. s = list('ABCDEFGHI')
  359. d.insert(i, 'Z')
  360. s.insert(i, 'Z')
  361. assertEqual(list(d), s)
  362. ########### test_insert_bug_26194#############
  363. data = 'ABC'
  364. d = deque(data, maxlen=len(data))
  365. try:
  366. d.insert(0, 'Z')
  367. printFailed("deque.insert", 0, 'Z')
  368. exit(1)
  369. except IndexError:
  370. pass
  371. elements = 'ABCDEFGHI'
  372. for i in range(-len(elements), len(elements)):
  373. d = deque(elements, maxlen=len(elements)+1)
  374. d.insert(i, 'Z')
  375. if i >= 0:
  376. assertEqual(d[i], 'Z')
  377. else:
  378. assertEqual(d[i-1], 'Z')
  379. ######### test set_item #############
  380. n = 200
  381. d = deque(range(n))
  382. for i in range(n):
  383. d[i] = 10 * i
  384. assertEqual(list(d), [10*i for i in range(n)])
  385. l = list(d)
  386. for i in range(1-n, 0, -1):
  387. d[i] = 7*i
  388. l[i] = 7*i
  389. assertEqual(list(d), l)
  390. ########## test del_item #############
  391. n = 500 # O(n**2) test, don't make this too big
  392. d = deque(range(n))
  393. try:
  394. d.__delitem__(-n-1)
  395. printFailed("deque.__delitem__", -n-1)
  396. exit(1)
  397. except IndexError:
  398. pass
  399. try:
  400. d.__delitem__(n)
  401. printFailed("deque.__delitem__", n)
  402. exit(1)
  403. except IndexError:
  404. pass
  405. for i in range(n):
  406. assertEqual(len(d), n-i)
  407. j = random.randint(0, len(d)-1)
  408. val = d[j]
  409. assertEqual(val in d, True)
  410. del d[j]
  411. assertEqual(val in d, False)
  412. assertEqual(len(d), 0)
  413. ######### test reverse()###############
  414. n = 500 # O(n**2) test, don't make this too big
  415. data = [random.random() for i in range(n)]
  416. for i in range(n):
  417. d = deque(data[:i])
  418. r = d.reverse()
  419. assertEqual(list(d), list(reversed(data[:i])))
  420. assertEqual(r, None)
  421. d.reverse()
  422. assertEqual(list(d), data[:i])
  423. try:
  424. d.reverse(1)
  425. printFailed("deque.reverse", 1)
  426. exit(1)
  427. except TypeError:
  428. pass
  429. ############ test rotate#############
  430. s = tuple('abcde')
  431. n = len(s)
  432. d = deque(s)
  433. d.rotate(1) # verify rot(1)
  434. assertEqual(''.join(d), 'eabcd')
  435. d = deque(s)
  436. d.rotate(-1) # verify rot(-1)
  437. assertEqual(''.join(d), 'bcdea')
  438. d.rotate() # check default to 1
  439. assertEqual(tuple(d), s)
  440. for i in range(n*3):
  441. d = deque(s)
  442. e = deque(d)
  443. d.rotate(i) # check vs. rot(1) n times
  444. for j in range(i):
  445. e.rotate(1)
  446. assertEqual(tuple(d), tuple(e))
  447. d.rotate(-i) # check that it works in reverse
  448. assertEqual(tuple(d), s)
  449. e.rotate(n-i) # check that it wraps forward
  450. assertEqual(tuple(e), s)
  451. for i in range(n*3):
  452. d = deque(s)
  453. e = deque(d)
  454. d.rotate(-i)
  455. for j in range(i):
  456. e.rotate(-1) # check vs. rot(-1) n times
  457. assertEqual(tuple(d), tuple(e))
  458. d.rotate(i) # check that it works in reverse
  459. assertEqual(tuple(d), s)
  460. e.rotate(i-n) # check that it wraps backaround
  461. assertEqual(tuple(e), s)
  462. d = deque(s)
  463. e = deque(s)
  464. e.rotate(BIG+17) # verify on long series of rotates
  465. dr = d.rotate
  466. for i in range(BIG+17):
  467. dr()
  468. assertEqual(tuple(d), tuple(e))
  469. try:
  470. d.rotate(1, 2)
  471. printFailed("deque.rotate", 1, 2)
  472. exit(1)
  473. except TypeError:
  474. pass
  475. try:
  476. d.rotate(1, 10)
  477. printFailed("deque.rotate", 1, 10)
  478. exit(1)
  479. except TypeError:
  480. pass
  481. d = deque()
  482. d.rotate() # rotate an empty deque
  483. assertEqual(d, deque())
  484. ########## test len#############
  485. d = deque('ab')
  486. assertEqual(len(d), 2)
  487. d.popleft()
  488. assertEqual(len(d), 1)
  489. d.pop()
  490. assertEqual(len(d), 0)
  491. try:
  492. d.pop()
  493. printFailed("deque.pop")
  494. exit(1)
  495. except IndexError:
  496. pass
  497. assertEqual(len(d), 0)
  498. d.append('c')
  499. assertEqual(len(d), 1)
  500. d.appendleft('d')
  501. assertEqual(len(d), 2)
  502. d.clear()
  503. assertEqual(len(d), 0)
  504. ############## test underflow#############
  505. d = deque()
  506. try:
  507. d.pop()
  508. printFailed("deque.pop")
  509. exit(1)
  510. except IndexError:
  511. pass
  512. try:
  513. d.popleft()
  514. printFailed("deque.popleft")
  515. exit(1)
  516. except IndexError:
  517. pass
  518. ############## test clear#############
  519. d = deque(range(100))
  520. assertEqual(len(d), 100)
  521. d.clear()
  522. assertEqual(len(d), 0)
  523. assertEqual(list(d), [])
  524. d.clear() # clear an empty deque
  525. assertEqual(list(d), [])
  526. ############# test remove#############
  527. d = deque('abcdefghcij')
  528. d.remove('c')
  529. assertEqual(d, deque('abdefghcij'))
  530. d.remove('c')
  531. assertEqual(d, deque('abdefghij'))
  532. try:
  533. d.remove('c')
  534. printFailed("deque.remove", "c")
  535. exit(1)
  536. except ValueError:
  537. pass
  538. assertEqual(d, deque('abdefghij'))
  539. # Handle comparison errors
  540. d = deque(['a', 'b', BadCmp(), 'c'])
  541. e = deque(d)
  542. try:
  543. d.remove('c')
  544. printFailed("deque.remove", "c")
  545. exit(1)
  546. except RuntimeError:
  547. pass
  548. for x, y in zip(d, e):
  549. # verify that original order and values are retained.
  550. assertEqual(x is y, True)
  551. # Handle evil mutator
  552. for match in (True, False):
  553. d = deque(['ab'])
  554. d.extend([MutateCmp(d, match), 'c'])
  555. try:
  556. d.remove('c')
  557. printFailed("deque.remove", "c")
  558. exit(1)
  559. except IndexError:
  560. pass
  561. assertEqual(d, deque())
  562. ########### test repr#############
  563. d = deque(range(200))
  564. e = eval(repr(d))
  565. assertEqual(list(d), list(e))
  566. d.append(d)
  567. assertEqual(repr(d)[-20:], '7, 198, 199, [...]])')
  568. ######### test init #############
  569. try:
  570. deque('abc', 2, 3)
  571. printFailed("deque", 'abc', 2, 3)
  572. exit(1)
  573. except TypeError:
  574. pass
  575. try:
  576. deque(1)
  577. printFailed("deque", 1)
  578. exit(1)
  579. except TypeError:
  580. pass
  581. ######### test hash #############
  582. try:
  583. hash(deque('abcd'))
  584. except TypeError:
  585. pass
  586. ###### test long steady state queue pop left ########
  587. for size in (0, 1, 2, 100, 1000):
  588. d = deque(range(size))
  589. append, pop = d.append, d.popleft
  590. for i in range(size, BIG):
  591. append(i)
  592. x = pop()
  593. if x != i - size:
  594. assertEqual(x, i-size)
  595. assertEqual(list(d), list(range(BIG-size, BIG)))
  596. ######## test long steady state queue pop right ########
  597. for size in (0, 1, 2, 100, 1000):
  598. d = deque(reversed(range(size)))
  599. append, pop = d.appendleft, d.pop
  600. for i in range(size, BIG):
  601. append(i)
  602. x = pop()
  603. if x != i - size:
  604. assertEqual(x, i-size)
  605. assertEqual(list(reversed(list(d))),
  606. list(range(BIG-size, BIG)))
  607. ###### test big queue popleft ########
  608. d = deque()
  609. append, pop = d.append, d.popleft
  610. for i in range(BIG):
  611. append(i)
  612. for i in range(BIG):
  613. x = pop()
  614. if x != i:
  615. assertEqual(x, i)
  616. ###### test big queue pop right ########
  617. d = deque()
  618. append, pop = d.appendleft, d.pop
  619. for i in range(BIG):
  620. append(i)
  621. for i in range(BIG):
  622. x = pop()
  623. if x != i:
  624. assertEqual(x, i)
  625. ####### test big stack right########
  626. d = deque()
  627. append, pop = d.append, d.pop
  628. for i in range(BIG):
  629. append(i)
  630. for i in reversed(range(BIG)):
  631. x = pop()
  632. if x != i:
  633. assertEqual(x, i)
  634. assertEqual(len(d), 0)
  635. ##### test big stack left ########
  636. d = deque()
  637. append, pop = d.appendleft, d.popleft
  638. for i in range(BIG):
  639. append(i)
  640. for i in reversed(range(BIG)):
  641. x = pop()
  642. if x != i:
  643. assertEqual(x, i)
  644. assertEqual(len(d), 0)
  645. ##### test roundtrip iter init ########
  646. d = deque(range(200))
  647. e = deque(d)
  648. assertNotEqual(id(d), id(e))
  649. assertEqual(list(d), list(e))
  650. ########## test pickle #############
  651. for d in deque(range(200)), deque(range(200), 100):
  652. for i in range(5 + 1):
  653. s = pickle.dumps(d)
  654. e = pickle.loads(s)
  655. assertNotEqual(id(e), id(d))
  656. assertEqual(list(e), list(d))
  657. assertEqual(e.maxlen, d.maxlen)
  658. ######## test pickle recursive ########
  659. # the following doesn't work because the pickle module doesn't
  660. # for d in deque('abc'), deque('abc', 3):
  661. # d.append(d)
  662. # for i in range(5 + 1):
  663. # e = pickle.loads(pickle.dumps(d))
  664. # assertNotEqual(id(e), id(d))
  665. # assertEqual(id(e[-1]), id(e))
  666. # assertEqual(e.maxlen, d.maxlen)
  667. ### test copy ########
  668. mut = [10]
  669. d = deque([mut])
  670. e = d.copy()
  671. assertEqual(list(d), list(e))
  672. mut[0] = 11
  673. assertNotEqual(id(d), id(e))
  674. assertEqual(list(d), list(e))
  675. ### test reversed#$####
  676. for s in ('abcd', range(2000)):
  677. assertEqual(list(reversed(deque(s))), list(reversed(s)))
  678. # probably not supported
  679. # klass = type(reversed(deque()))
  680. # for s in ('abcd', range(2000)):
  681. # assertEqual(list(klass(deque(s))), list(reversed(s)))
  682. d = deque()
  683. for i in range(100):
  684. d.append(1)
  685. gc.collect()