Mercurial > hg
annotate tests/test-rust-ancestor.py @ 41163:0101a35deae2
phabricator: warn if unable to amend, instead of aborting after posting
There was a divergence in behavior here between obsolete and strip based
amending. I first noticed the abort when testing outside of the test harness,
but then had trouble recreating it here after reverting the code changes. It
turns out, strip based amend was successfully amending the public commit after
it was posted! It looks like the protection is in the `commit --amend` command,
not in the underlying code that it calls.
I considered doing a preflight check and aborting. But the locks are only
acquired at the end, if amending, and this is too large a section of code to be
wrapped in a maybe-it's-held-or-not context manager for my tastes.
Additionally, some people do post-push reviews, and amending is the default
behavior, so they shouldn't see a misleading error message.
The lack of a 'Differential Revision' entry in the commit message breaks a
{phabreview} test, so it had to be partially conditionalized.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Sat, 05 Jan 2019 15:20:33 -0500 |
parents | b31a41f24864 |
children | 006c9ce486fa |
rev | line source |
---|---|
40968
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
1 from __future__ import absolute_import |
41053
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
2 import sys |
40968
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
3 import unittest |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
4 |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
5 try: |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
6 from mercurial import rustext |
41053
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
7 rustext.__name__ # trigger immediate actual import |
40968
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
8 except ImportError: |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
9 rustext = None |
41053
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
10 else: |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
11 # this would fail already without appropriate ancestor.__package__ |
41114
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
12 from mercurial.rustext.ancestor import ( |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
13 AncestorsIterator, |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
14 LazyAncestors |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
15 ) |
40968
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
16 |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
17 try: |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
18 from mercurial.cext import parsers as cparsers |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
19 except ImportError: |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
20 cparsers = None |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
21 |
41053
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
22 # picked from test-parse-index2, copied rather than imported |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
23 # so that it stays stable even if test-parse-index2 changes or disappears. |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
24 data_non_inlined = ( |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
25 b'\x00\x00\x00\x01\x00\x00\x00\x00\x00\x01D\x19' |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
26 b'\x00\x07e\x12\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff' |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
27 b'\xff\xff\xff\xff\xd1\xf4\xbb\xb0\xbe\xfc\x13\xbd\x8c\xd3\x9d' |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
28 b'\x0f\xcd\xd9;\x8c\x07\x8cJ/\x00\x00\x00\x00\x00\x00\x00\x00\x00' |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
29 b'\x00\x00\x00\x00\x00\x00\x01D\x19\x00\x00\x00\x00\x00\xdf\x00' |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
30 b'\x00\x01q\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\xff' |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
31 b'\xff\xff\xff\xc1\x12\xb9\x04\x96\xa4Z1t\x91\xdfsJ\x90\xf0\x9bh' |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
32 b'\x07l&\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
33 b'\x00\x01D\xf8\x00\x00\x00\x00\x01\x1b\x00\x00\x01\xb8\x00\x00' |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
34 b'\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\xff\xff\xff\xff\x02\n' |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
35 b'\x0e\xc6&\xa1\x92\xae6\x0b\x02i\xfe-\xe5\xbao\x05\xd1\xe7\x00' |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
36 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01F' |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
37 b'\x13\x00\x00\x00\x00\x01\xec\x00\x00\x03\x06\x00\x00\x00\x01' |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
38 b'\x00\x00\x00\x03\x00\x00\x00\x02\xff\xff\xff\xff\x12\xcb\xeby1' |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
39 b'\xb6\r\x98B\xcb\x07\xbd`\x8f\x92\xd9\xc4\x84\xbdK\x00\x00\x00' |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
40 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00' |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
41 ) |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
42 |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
43 |
40968
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
44 @unittest.skipIf(rustext is None or cparsers is None, |
41053
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
45 "rustext or the C Extension parsers module " |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
46 "ancestor relies on is not available") |
40968
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
47 class rustancestorstest(unittest.TestCase): |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
48 """Test the correctness of binding to Rust code. |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
49 |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
50 This test is merely for the binding to Rust itself: extraction of |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
51 Python variable, giving back the results etc. |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
52 |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
53 It is not meant to test the algorithmic correctness of the operations |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
54 on ancestors it provides. Hence the very simple embedded index data is |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
55 good enough. |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
56 |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
57 Algorithmic correctness is asserted by the Rust unit tests. |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
58 """ |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
59 |
41053
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
60 def parseindex(self): |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
61 return cparsers.parse_index2(data_non_inlined, False)[0] |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
62 |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
63 def testiteratorrevlist(self): |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
64 idx = self.parseindex() |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
65 # checking test assumption about the index binary data: |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
66 self.assertEqual({i: (r[5], r[6]) for i, r in enumerate(idx)}, |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
67 {0: (-1, -1), |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
68 1: (0, -1), |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
69 2: (1, -1), |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
70 3: (2, -1)}) |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
71 ait = AncestorsIterator(idx, [3], 0, True) |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
72 self.assertEqual([r for r in ait], [3, 2, 1, 0]) |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
73 |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
74 ait = AncestorsIterator(idx, [3], 0, False) |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
75 self.assertEqual([r for r in ait], [2, 1, 0]) |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
76 |
41114
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
77 def testlazyancestors(self): |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
78 idx = self.parseindex() |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
79 start_count = sys.getrefcount(idx) # should be 2 (see Python doc) |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
80 self.assertEqual({i: (r[5], r[6]) for i, r in enumerate(idx)}, |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
81 {0: (-1, -1), |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
82 1: (0, -1), |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
83 2: (1, -1), |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
84 3: (2, -1)}) |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
85 lazy = LazyAncestors(idx, [3], 0, True) |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
86 # we have two more references to the index: |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
87 # - in its inner iterator for __contains__ and __bool__ |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
88 # - in the LazyAncestors instance itself (to spawn new iterators) |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
89 self.assertEqual(sys.getrefcount(idx), start_count + 2) |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
90 |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
91 self.assertTrue(2 in lazy) |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
92 self.assertTrue(bool(lazy)) |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
93 self.assertEqual(list(lazy), [3, 2, 1, 0]) |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
94 # a second time to validate that we spawn new iterators |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
95 self.assertEqual(list(lazy), [3, 2, 1, 0]) |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
96 |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
97 # now let's watch the refcounts closer |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
98 ait = iter(lazy) |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
99 self.assertEqual(sys.getrefcount(idx), start_count + 3) |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
100 del ait |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
101 self.assertEqual(sys.getrefcount(idx), start_count + 2) |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
102 del lazy |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
103 self.assertEqual(sys.getrefcount(idx), start_count) |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
104 |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
105 # let's check bool for an empty one |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
106 self.assertFalse(LazyAncestors(idx, [0], 0, False)) |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
107 |
41053
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
108 def testrefcount(self): |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
109 idx = self.parseindex() |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
110 start_count = sys.getrefcount(idx) |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
111 |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
112 # refcount increases upon iterator init... |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
113 ait = AncestorsIterator(idx, [3], 0, True) |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
114 self.assertEqual(sys.getrefcount(idx), start_count + 1) |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
115 self.assertEqual(next(ait), 3) |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
116 |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
117 # and decreases once the iterator is removed |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
118 del ait |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
119 self.assertEqual(sys.getrefcount(idx), start_count) |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
120 |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
121 # and removing ref to the index after iterator init is no issue |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
122 ait = AncestorsIterator(idx, [3], 0, True) |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
123 del idx |
41114
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
124 self.assertEqual(list(ait), [3, 2, 1, 0]) |
40968
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
125 |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
126 def testgrapherror(self): |
41053
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
127 data = (data_non_inlined[:64 + 27] + |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
128 b'\xf2' + |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
129 data_non_inlined[64 + 28:]) |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
130 idx = cparsers.parse_index2(data, False)[0] |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
131 with self.assertRaises(rustext.GraphError) as arc: |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
132 AncestorsIterator(idx, [1], -1, False) |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
133 exc = arc.exception |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
134 self.assertIsInstance(exc, ValueError) |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
135 # rust-cpython issues appropriate str instances for Python 2 and 3 |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
136 self.assertEqual(exc.args, ('ParentOutOfRange', 1)) |
40968
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
137 |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
138 |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
139 if __name__ == '__main__': |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
140 import silenttestrunner |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
141 silenttestrunner.main(__name__) |