test_ordereddict.py 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764
  1. # coding: utf-8
  2. from __future__ import print_function
  3. import sys
  4. import os
  5. import string
  6. import random
  7. import pytest
  8. py3 = sys.version_info >= (3,)
  9. if not py3:
  10. import cPickle
  11. from ruamel.ordereddict import ordereddict, sorteddict
  12. all_lowercase = 'abcdefghijklmnopqrstuvwxyz'
  13. all_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  14. class TestBase:
  15. def setup_method(self, method):
  16. self.x = ordereddict()
  17. self.x['a'] = 1
  18. self.x['b'] = 2
  19. self.x['c'] = 3
  20. self.x['d'] = 4
  21. self.z = ordereddict()
  22. for index, ch in enumerate(all_lowercase):
  23. self.z[ch] = index
  24. self.e = ordereddict()
  25. self.part = ordereddict((
  26. ('f', 5), ('g', 6), ('h', 7), ('i', 8), ('j', 9)))
  27. self.upperlower = ordereddict([('A', 1), ('a', 2), ('B', 4), ('b', 4)])
  28. class TestOrderedDict(TestBase):
  29. def setup_method(self, method):
  30. self.x = ordereddict()
  31. self.x['a'] = 1
  32. self.x['b'] = 2
  33. self.x['c'] = 3
  34. self.x['d'] = 4
  35. self.z = ordereddict()
  36. for index, ch in enumerate(all_lowercase):
  37. self.z[ch] = index
  38. self.e = ordereddict()
  39. self.part = ordereddict((
  40. ('f', 5), ('g', 6), ('h', 7), ('i', 8), ('j', 9)))
  41. self.upperlower = ordereddict([('A', 1), ('a', 2), ('B', 4), ('b', 4)])
  42. def test_od_setitems(self):
  43. r = self.z
  44. r.setitems([('f', 5), ('g', 6), ('h', 7), ('i', 8), ('j', 9)])
  45. assert r == self.part
  46. def test_sd_init_from_seq(self):
  47. r = sorteddict((('j', 9), ('g', 6), ('i', 8), ('h', 7), ('f', 5)))
  48. assert r == self.part
  49. def test_sd_setitems(self):
  50. r = sorteddict()
  51. r['b'] = 1
  52. r['c'] = 2
  53. r['d'] = 3
  54. r['f'] = 5
  55. r['g'] = 6
  56. r['h'] = 7
  57. r['i'] = 8
  58. r['a'] = 0
  59. r['j'] = 9
  60. r['l'] = 11
  61. r['k'] = 10
  62. r['m'] = 12
  63. r['n'] = 13
  64. r['o'] = 14
  65. r['p'] = 15
  66. r['q'] = 16
  67. r['s'] = 18
  68. r['v'] = 21
  69. r['w'] = 22
  70. r['x'] = 23
  71. r['y'] = 24
  72. r['z'] = 25
  73. r['e'] = 4
  74. r['r'] = 17
  75. r['t'] = 19
  76. r['u'] = 20
  77. assert r == self.z
  78. def test_len(self):
  79. assert len(self.z) == len(all_lowercase)
  80. assert len(self.e) == 0
  81. def test_brackets(self):
  82. assert self.x['b'] == 2
  83. def test_del(self):
  84. self.x['1234'] = 1234
  85. del self.x['1234']
  86. assert self.x.get('1234') is None
  87. def test_clear(self):
  88. x = ordereddict()
  89. x['a'] = 1
  90. x['b'] = 2
  91. x['c'] = 3
  92. x['d'] = 4
  93. assert len(x) == 4
  94. x.clear()
  95. assert len(x) == 0
  96. def test_copy(self):
  97. x = self.x.copy()
  98. assert len(x) == 4
  99. assert x['c'] == 3
  100. x['c'] = 4
  101. assert self.x['c'] == 3
  102. def test_sd_copy(self):
  103. x1 = sorteddict(self.z)
  104. x = x1.copy()
  105. assert len(x) == 26
  106. assert x['c'] == 2
  107. x['c'] = 4
  108. assert self.x['c'] == 3
  109. assert x['c'] == 4
  110. def test_sd_lower(self):
  111. r = sorteddict(self.upperlower)
  112. assert r != self.upperlower
  113. assert r.index('a') == 2
  114. rl = sorteddict(self.upperlower,
  115. key=str.lower if py3 else string.lower)
  116. assert rl == self.upperlower
  117. def test_in(self):
  118. assert 'c' in self.z
  119. def test_not_in(self):
  120. assert 'C' not in self.z
  121. def test_has_key(self):
  122. assert 'z' in self.z
  123. def test_items(self):
  124. "unlikely to function in a non-ordered dictionary"
  125. index = 0
  126. for index, y in enumerate(self.z.items()):
  127. assert all_lowercase[index] == y[0]
  128. assert index == y[1]
  129. def test_keys(self):
  130. "unlikely to function in a non-ordered dictionary"
  131. index = 0
  132. for y in self.z.keys():
  133. assert self.z[y] == index
  134. index += 1
  135. def test_update(self):
  136. y = ordereddict()
  137. y[1] = 'x'
  138. y['b'] = 'abc'
  139. y[3] = 'xx'
  140. y.update(self.x)
  141. assert len(y) == 6
  142. yval = [t for t in y.values()]
  143. xval = [t for t in self.x.values()]
  144. assert yval[1] == xval[1]
  145. assert yval[3] == xval[0]
  146. assert yval[4] == xval[2]
  147. assert yval[5] == xval[3]
  148. def test_sd_fromkeys(self):
  149. x = sorteddict.fromkeys([1, 2, 3, 4, 5, 6])
  150. assert len(x) == 6
  151. assert x[6] is None
  152. x = sorteddict.fromkeys((1, 2, 3, 4, 5), 'abc')
  153. assert len(x) == 5
  154. assert x[5] == 'abc'
  155. def test_fromkeys(self):
  156. x = ordereddict.fromkeys([1, 2, 3, 4, 5, 6])
  157. assert len(x) == 6
  158. assert x[6] is None
  159. x = ordereddict.fromkeys((1, 2, 3, 4, 5), 'abc')
  160. assert len(x) == 5
  161. assert x[5] == 'abc'
  162. for i, j in enumerate( x.keys() ):
  163. assert i + 1 == j
  164. def test_values(self):
  165. "unlikely to function in a non-ordered dictionary"
  166. index = 0
  167. for y in self.z.values():
  168. assert y == index
  169. index += 1
  170. def test_values_rev(self):
  171. index = 25
  172. if py3:
  173. for y in reversed(list(self.z.values())):
  174. assert y == index
  175. index -= 1
  176. else:
  177. for y in self.z.values(reverse=True):
  178. assert y == index
  179. index -= 1
  180. def test_get1(self):
  181. assert self.x.get('b') == 2
  182. def test_get2(self):
  183. assert self.x.get('A') is None
  184. def test_get3(self):
  185. assert self.x.get('A', 'abc') == 'abc'
  186. def test_dict3(self):
  187. assert self.x.get('B', 'hello') == "hello"
  188. def test_setdefault(self):
  189. y = self.x.copy()
  190. res = y.setdefault('c', 42)
  191. assert res == 3
  192. assert y['c'] == 3
  193. res = y.setdefault('ab', 42)
  194. assert res == 42
  195. assert y['ab'] == 42
  196. def test_pop(self):
  197. y = self.x.copy()
  198. assert y.pop('b') == 2
  199. assert y.pop('y', 42) == 42
  200. assert len(y) == 3
  201. with pytest.raises(KeyError):
  202. y.pop('x')
  203. def test_popitem(self):
  204. y = self.x.copy()
  205. assert y.popitem() == ('d', 4)
  206. assert y.popitem(1) == ('b', 2)
  207. assert y.popitem(-2) == ('a', 1)
  208. with pytest.raises(KeyError):
  209. y.popitem(1)
  210. ###################
  211. def test_deepcopy(self):
  212. import copy
  213. y = self.x.copy()
  214. z = self.x.copy()
  215. y['r'] = z
  216. dc = copy.deepcopy(y)
  217. assert y['r']['d'] == 4
  218. y['r']['d'] = 5
  219. assert y['r']['d'] == 5
  220. assert dc['r']['d'] == 4
  221. def test_init1(self):
  222. y = ordereddict(self.x)
  223. y['b'] = 42
  224. assert self.x['b'] == 2
  225. assert y['c'] == 3
  226. assert y['b'] == 42
  227. def test_init2(self):
  228. a = {'a': 1}
  229. with pytest.raises(TypeError):
  230. y = ordereddict(a)
  231. def test_init3(self):
  232. y = ordereddict([('a', 1), ('b', 2), ('c', 3), ('d', 4)])
  233. assert y == self.x
  234. def test_compare_wrong_order(self):
  235. y = ordereddict([('a', 1), ('b', 2), ('d', 4), ('c', 3)])
  236. assert y != self.x
  237. def test_compare_wrong_value(self):
  238. y = ordereddict([('a', 1), ('b', 2), ('c', 4), ('d', 3)])
  239. assert y != self.x
  240. def test_compare(self):
  241. y = ordereddict([('a', 1), ('b', 2), ('c', 3), ('d', 4)])
  242. assert y == self.x
  243. def test_index(self):
  244. assert self.x.index('c') == 2
  245. with pytest.raises(ValueError):
  246. self.x.index('1')
  247. ###################
  248. def test_dict4(self):
  249. self.walk('b', 2)
  250. def test_dict5(self):
  251. with pytest.raises(KeyError):
  252. self.walk('ba', 999)
  253. def walk(self, key, val):
  254. for y in self.x:
  255. if y == key:
  256. assert self.x[y] == val
  257. break
  258. else:
  259. raise KeyError
  260. def test_walk_ordereddict(self):
  261. index = 0
  262. for y in self.z:
  263. assert self.z[y] == index
  264. index += 1
  265. def test_repr(self):
  266. d = ordereddict()
  267. assert repr(d) == 'ordereddict([])'
  268. d['a'] = 1
  269. assert repr(d) == "ordereddict([('a', 1)])"
  270. d[2] = 'b'
  271. assert repr(d) == "ordereddict([('a', 1), (2, 'b')])"
  272. @pytest.mark.skipif(sys.version_info >= (3,),
  273. reason="broken")
  274. def test_insert_newitem(self):
  275. r = self.x.copy()
  276. r.insert(3, 'ca', 8)
  277. assert r.index('ca') == 3
  278. assert r.get('ca') == 8
  279. assert len(r) == 5
  280. @pytest.mark.skipif(sys.version_info >= (3,),
  281. reason="broken")
  282. def test_insert_existing_key_sameplace(self):
  283. r = self.z
  284. pos = r.index('k')
  285. r.insert(pos, 'k', 42)
  286. assert r.index('k') == pos
  287. assert r.get('k') == 42
  288. assert len(r) == len(all_lowercase)
  289. #@pytest.mark.skipif(sys.version_info >= (3,),
  290. # reason="broken")
  291. def test_reverse(self):
  292. r = self.z
  293. r.reverse()
  294. res = []
  295. for index, ch in enumerate(all_lowercase):
  296. assert r[ch] == index
  297. res.insert(0, ch)
  298. if py3:
  299. assert res == [x for x in r.keys()]
  300. else:
  301. assert res == r.keys()
  302. def test_consequitive_slice(self):
  303. r = self.z
  304. assert r[5:10] == self.part
  305. assert r[-2:] == ordereddict([('y', 24), ('z', 25)])
  306. assert r[-4:-2] == ordereddict([('w', 22), ('x', 23)])
  307. assert r[:] == self.z
  308. def test_slice(self):
  309. r = self.z
  310. rp = self.part.copy()
  311. rp.reverse()
  312. assert r[9:4:-1] == rp
  313. assert r[5:25:5] == ordereddict(
  314. [('f', 5), ('k', 10), ('p', 15), ('u', 20)])
  315. def test_del_consequitive_slice(self):
  316. r = self.z
  317. del r[3:24]
  318. assert r == ordereddict(
  319. [('a', 0), ('b', 1), ('c', 2), ('y', 24), ('z', 25)])
  320. def test_del_non_consequitive_slice(self):
  321. r = self.z
  322. del r[4:24:2]
  323. t = ordereddict()
  324. for index, ch in enumerate(all_lowercase):
  325. if ch not in 'abcdfhjlnprtvxyz':
  326. continue
  327. t[ch] = index
  328. # print(r)
  329. # print(t)
  330. assert r == t
  331. def test_sd_slice(self):
  332. r = sorteddict(self.z)
  333. # print(r)
  334. y = r[3:6]
  335. # print(y)
  336. assert y['d'] == 3
  337. assert y['e'] == 4
  338. assert y['f'] == 5
  339. def test_sd_del_consequitive_slice(self):
  340. r = sorteddict(self.z)
  341. with pytest.raises(TypeError):
  342. del r[3:24]
  343. def test_sd_del_non_consequitive_slice(self):
  344. r = sorteddict(self.z)
  345. with pytest.raises(TypeError):
  346. del r[4:24:2]
  347. def test_del_rev_non_consequitive_slice(self):
  348. r = self.z
  349. del r[22:3:-2]
  350. t = ordereddict()
  351. for index, ch in enumerate(all_lowercase):
  352. if ch not in 'abcdfhjlnprtvxyz':
  353. continue
  354. t[ch] = index
  355. # print(r)
  356. # print(t)
  357. assert r == t
  358. def test_rename(self):
  359. if py3:
  360. print(type(self.x))
  361. self.x.rename('c', 'caaa')
  362. assert self.x == ordereddict(
  363. [('a', 1), ('b', 2), ('caaa', 3), ('d', 4)])
  364. def test_sd_rename(self):
  365. x = sorteddict(self.x)
  366. with pytest.raises(TypeError):
  367. x.rename('c', 'caaa')
  368. def test_setvalues(self):
  369. r1 = self.z[:5]
  370. r2 = self.z[:5]
  371. for k in r1:
  372. r1[k] = r1[k] + 100
  373. r2.setvalues([100, 101, 102, 103, 104])
  374. assert r1 == r2
  375. with pytest.raises(ValueError):
  376. r2.setvalues([100, 101, 102, 103])
  377. with pytest.raises(ValueError):
  378. r2.setvalues([100, 101, 102, 103, 104, 105])
  379. # we don't know length upfront
  380. r2.setvalues((x for x in [100, 101, 102, 103, 104]))
  381. with pytest.raises(ValueError):
  382. r2.setvalues((x for x in [100, 101, 102, 103]))
  383. with pytest.raises(ValueError):
  384. r2.setvalues((x for x in [100, 101, 102, 103, 104, 105]))
  385. def test_setkeys(self):
  386. self.x[42] = 'abc'
  387. r1 = self.x.copy()
  388. r2 = ordereddict(
  389. [('d', 4), ('c', 3), ('a', 1), (42, 'abc'), ('b', 2), ])
  390. r1.setkeys(('d', 'c', 'a', 42, 'b',))
  391. assert r1 == r2
  392. with pytest.raises(KeyError):
  393. r1.setkeys(('d', 'e', 'a', 42, 'b',))
  394. with pytest.raises(KeyError):
  395. r1.setkeys(('d', 42, 'a', 42, 'b',))
  396. with pytest.raises(ValueError):
  397. r1.setkeys(('d', 'c', 'a', 42, 'b', 'a',))
  398. with pytest.raises(ValueError):
  399. r1.setkeys(('g', 'c', 'a', 42,))
  400. def test_sd_setkeys(self):
  401. x = sorteddict.fromkeys((1, 2, 3, 4, 5), 'abc')
  402. with pytest.raises(TypeError):
  403. x.setkeys((5, 3, 1, 2, 4,))
  404. def test_setitems(self):
  405. r = self.z
  406. r.setitems([('f', 5), ('g', 6), ('h', 7), ('i', 8), ('j', 9)])
  407. assert r == self.part
  408. @pytest.mark.skipif(sys.version_info >= (3,),
  409. reason="broken")
  410. def test_pickle(self):
  411. if py3:
  412. return
  413. fname = 'tmpdata.pkl'
  414. r = self.z.copy()
  415. r[(1, 2)] = self.x
  416. fp = open(fname, 'wb')
  417. cPickle.dump(r, fp)
  418. fp.close()
  419. s = cPickle.load(open(fname, 'rb'))
  420. assert s == r
  421. os.remove(fname)
  422. @pytest.mark.skipif(sys.version_info >= (3,),
  423. reason="broken")
  424. def test_pickle_kvio(self):
  425. fname = 'tmpdata.pkl'
  426. r = ordereddict(self.z, kvio=True)
  427. fp = open(fname, 'wb')
  428. cPickle.dump(r, fp)
  429. fp.close()
  430. s = cPickle.load(open(fname, 'rb'))
  431. assert s == r
  432. r['k'] = 42
  433. s['k'] = 42
  434. assert s == r
  435. os.remove(fname)
  436. @pytest.mark.skipif(sys.version_info >= (3,),
  437. reason="broken")
  438. def test_sd_pickle(self):
  439. fname = 'tmpdata.pkl'
  440. r = sorteddict(self.z)
  441. fp = open(fname, 'wb')
  442. cPickle.dump(r, fp)
  443. fp.close()
  444. s = cPickle.load(open(fname, 'rb'))
  445. assert s == r
  446. s['k'] = 10
  447. assert s == self.z
  448. os.remove(fname)
  449. def test_kvio1(self):
  450. r = ordereddict(kvio=True)
  451. r.update(self.x)
  452. r['b'] = 42
  453. assert r == ordereddict([('a', 1), ('c', 3), ('d', 4), ('b', 42)])
  454. def test_kvio2(self):
  455. r = ordereddict(kvio=True)
  456. r.update(self.x)
  457. r['b'] = 2
  458. assert r != self.x
  459. r.update([('c', 3), ('d', 4)])
  460. assert r == self.x
  461. def test_kvio_copy(self):
  462. r = ordereddict(kvio=True)
  463. r.update(self.x)
  464. r['b'] = 2
  465. r1 = r.copy()
  466. assert r1 != self.x
  467. r1.update([('c', 3), ('d', 4)])
  468. assert r1 == self.x
  469. @pytest.mark.skipif(sys.version_info >= (3,),
  470. reason="broken")
  471. def test_relax(self):
  472. nd = dict(z=1, y=2, w=3, v=4, x=5)
  473. with pytest.raises(TypeError):
  474. r = ordereddict(nd)
  475. r = ordereddict(nd, relax=True)
  476. assert nd.keys() == r.keys()
  477. assert nd.values() == r.values()
  478. @pytest.mark.skipif(sys.version_info >= (3,),
  479. reason="broken")
  480. def test_relax_class(self):
  481. class relaxed_ordereddict(ordereddict):
  482. def __init__(self, *args, **kw):
  483. kw['relax'] = True
  484. ordereddict.__init__(self, *args, **kw)
  485. nd = dict(z=1, y=2, w=3, v=4, x=5)
  486. r = relaxed_ordereddict(nd)
  487. assert nd.keys() == r.keys()
  488. assert nd.values() == r.values()
  489. @pytest.mark.skipif(sys.version_info >= (3,),
  490. reason="broken")
  491. def test_relax_update(self):
  492. d = ordereddict()
  493. nd = dict(z=1, y=2, w=3, v=4, x=5)
  494. with pytest.raises(TypeError):
  495. d.update(nd)
  496. d.update(nd, relax=True)
  497. assert len(d) == 5
  498. def _test_order(self):
  499. nd = dict(z=1, y=2, w=3, v=4, x=5)
  500. r = ordereddict(nd, key=True)
  501. assert nd.keys() == r.keys()
  502. assert nd.values() == r.values()
  503. @pytest.mark.skipif(sys.version_info >= (3,),
  504. reason="broken")
  505. def test_subclass_sorted(self): # found thanks to Sam Pointon
  506. class SD(sorteddict):
  507. pass
  508. s = SD({0: 'foo', 2: 'bar'})
  509. s[1] = 'abc'
  510. # print(s.items())
  511. assert s.items() == [(0, 'foo'), (1, 'abc'), (2, 'bar')]
  512. def test_subclass_sorted_repr(self): # found thanks to Sam Pointon
  513. class SD(sorteddict):
  514. pass
  515. s = SD({0: 'foo', 2: 'bar'})
  516. x = repr(s)
  517. assert x == "sorteddict([(0, 'foo'), (2, 'bar')])"
  518. def test_deepcopy2(self): # found thanks to Alexandre Andrade
  519. import copy
  520. import gc
  521. d = ordereddict([(1, 2)])
  522. gc.collect()
  523. none_refcount = sys.getrefcount(None)
  524. if py3:
  525. for i in range(10):
  526. copy.deepcopy(d)
  527. gc.collect()
  528. else:
  529. for i in xrange(10):
  530. copy.deepcopy(d)
  531. gc.collect()
  532. assert none_refcount == sys.getrefcount(None)
  533. #############################
  534. def _test_alloc_many(self):
  535. res = []
  536. times = 1000
  537. while times > 0:
  538. times -= 1
  539. td = ordereddict()
  540. count = 100000
  541. while count > 0:
  542. td['ab%08d' % count] = dict(abcdef='%09d' % (count))
  543. count -= 1
  544. count = 100000
  545. while count > 0:
  546. del td['ab%08d' % count]
  547. count -= 1
  548. res.append(td)
  549. @pytest.mark.skipif(sys.version_info >= (3,),
  550. reason="broken")
  551. class TestInsertDelete(TestBase):
  552. def test_insert_existing_key_before(self):
  553. r = self.z
  554. pos = r.index('k')
  555. r.insert(pos-3, 'k', 42)
  556. assert r.index('k') == pos - 3
  557. assert r.get('k') == 42
  558. assert len(r) == len(all_lowercase)
  559. def test_insert_existing_key_after(self):
  560. r = self.z
  561. pos = r.index('k')
  562. r.insert(pos+3, 'k', 42)
  563. assert r.index('k') == pos + 3
  564. assert r.get('k') == 42
  565. assert len(r) == len(all_lowercase)
  566. def test_insert_existing_non_last_key_beyond(self):
  567. r = self.z
  568. pos = r.index('y')
  569. pos += 1
  570. r.insert(pos, 'y', 42)
  571. assert r.index('y') == pos
  572. assert r.get('y') == 42
  573. assert len(r) == len(all_lowercase)
  574. def test_insert_existing_last_key_at_end(self):
  575. r = self.z
  576. pos = r.index('z')
  577. r.insert(pos, 'z', 42)
  578. assert r.index('z') == pos
  579. assert r.get('z') == 42
  580. assert len(r) == len(all_lowercase)
  581. def test_insert_existing_last_key_beyond_end(self):
  582. r = self.z
  583. pos = r.index('z')
  584. r.insert(pos + 1, 'z', 42)
  585. assert r.index('z') == pos
  586. assert r.get('z') == 42
  587. assert len(r) == len(all_lowercase)
  588. def test_insert_range(self):
  589. r = ordereddict()
  590. r['c'] = 3
  591. r.insert(0, 'b', 2)
  592. r.insert(-10, 'a', 1)
  593. r.insert(3, 'd', 4)
  594. r.insert(10, 'e', 5)
  595. self.x['e'] = 5
  596. assert r == self.x
  597. # this failed
  598. def _test_multiple_inserts_then_deletes(self):
  599. d = ordereddict()
  600. for i in range(1, 6):
  601. d.insert(i-1, i, 'a')
  602. for i in range(1, 6):
  603. del d[i]
  604. d.insert(0, 0, 'will this crash?')
  605. #print d.items()
  606. # this failed
  607. def _test_repeated_add_delete(self):
  608. d = ordereddict()
  609. for el in range(0, 9):
  610. d[el] = el
  611. del d[el]
  612. @pytest.mark.skipif(sys.version_info >= (3,),
  613. reason="broken")
  614. class TestSlice(TestBase):
  615. def test_ass_non_consequitive_slice_wrong_size(self):
  616. r = self.z
  617. with pytest.raises(ValueError):
  618. r[10:20:2] = ordereddict([(1, 0), (2, 1), (3, 2), ])
  619. def test_ass_non_consequitive_slice_wrong_type(self):
  620. r = self.z
  621. with pytest.raises(TypeError):
  622. r[10:20:2] = dict([(1, 0), (2, 1), (3, 2), (4, 24), (5, 25)])
  623. def test_ass_non_consequitive_slice(self):
  624. r = self.z
  625. r[10:15:2] = ordereddict([(1, 0), (2, 1), (3, 2), ])
  626. #print(r[9:16])
  627. #print(ordereddict([('j', 9), (1, 0), ('l', 11), (2, 1),
  628. # ('n', 13), (3, 2), ('p', 15)]))
  629. assert r[9:16] == ordereddict([('j', 9), (1, 0), ('l', 11), (2, 1),
  630. ('n', 13), (3, 2), ('p', 15)])
  631. def test_sd_ass_non_consequitive_slice(self):
  632. r = sorteddict(self.z)
  633. with pytest.raises(TypeError):
  634. r[10:15:2] = ordereddict([(1, 0), (2, 1), (3, 2), ])
  635. def test_ass_reverse_non_consequitive_slice(self):
  636. r = self.z
  637. r[14:9:-2] = ordereddict([(3, 2), (2, 1), (1, 0), ])
  638. assert len(r) == 26
  639. #print(r[9:16])
  640. #print(ordereddict([('j', 9), (1, 0), ('l', 11), (2, 1),
  641. # ('n', 13), (3, 2), ('p', 15)]))
  642. assert r[9:16] == ordereddict([('j', 9), (1, 0), ('l', 11), (2, 1),
  643. ('n', 13), (3, 2), ('p', 15)])
  644. def test_ass_consequitive_slice_wrong_size(self):
  645. r = self.z
  646. with pytest.raises(ValueError):
  647. r[10:15] = ordereddict([(1, 0), (2, 1), (3, 2), ])
  648. def test_ass_consequitive_slice_wrong_type(self):
  649. r = self.z
  650. with pytest.raises(TypeError):
  651. r[10:15] = dict([(1, 0), (2, 1), (3, 2), (4, 24), (5, 25)])
  652. def test_ass_consequitive_slice(self):
  653. r = self.z
  654. r[10:15] = ordereddict([(1, 0), (2, 1), (3, 2), (4, 24), (5, 25)])
  655. assert r[9:16] == ordereddict([('j', 9), (1, 0), (2, 1), (3, 2),
  656. (4, 24), (5, 25), ('p', 15)])
  657. def test_sd_ass_consequitive_slice(self):
  658. r = sorteddict(self.z)
  659. with pytest.raises(TypeError):
  660. r[10:15] = ordereddict([(1, 0), (2, 1), (3, 2), (4, 24), (5, 25)])