Mercurial > hg
annotate tests/test-rust-ancestor.py @ 41194:4c5864dad8b0
tags: join string that's unnecessarily split across lines
Differential Revision: https://phab.mercurial-scm.org/D5574
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Fri, 11 Jan 2019 13:12:19 -0800 |
parents | 006c9ce486fa |
children | 5257e6299d4c |
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, |
41188
006c9ce486fa
rust-cpython: bindings for MissingAncestors
Georges Racinet <georges.racinet@octobus.net>
parents:
41114
diff
changeset
|
14 LazyAncestors, |
006c9ce486fa
rust-cpython: bindings for MissingAncestors
Georges Racinet <georges.racinet@octobus.net>
parents:
41114
diff
changeset
|
15 MissingAncestors, |
41114
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
16 ) |
40968
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
17 |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
18 try: |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
19 from mercurial.cext import parsers as cparsers |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
20 except ImportError: |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
21 cparsers = None |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
22 |
41053
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
23 # picked from test-parse-index2, copied rather than imported |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
24 # 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
|
25 data_non_inlined = ( |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
26 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
|
27 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
|
28 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
|
29 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
|
30 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
|
31 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
|
32 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
|
33 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
|
34 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
|
35 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
|
36 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
|
37 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
|
38 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
|
39 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
|
40 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
|
41 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
|
42 ) |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
43 |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
44 |
40968
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
45 @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
|
46 "rustext or the C Extension parsers module " |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
47 "ancestor relies on is not available") |
40968
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
48 class rustancestorstest(unittest.TestCase): |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
49 """Test the correctness of binding to Rust code. |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
50 |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
51 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
|
52 Python variable, giving back the results etc. |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
53 |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
54 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
|
55 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
|
56 good enough. |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
57 |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
58 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
|
59 """ |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
60 |
41053
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
61 def parseindex(self): |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
62 return cparsers.parse_index2(data_non_inlined, False)[0] |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
63 |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
64 def testiteratorrevlist(self): |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
65 idx = self.parseindex() |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
66 # checking test assumption about the index binary data: |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
67 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
|
68 {0: (-1, -1), |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
69 1: (0, -1), |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
70 2: (1, -1), |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
71 3: (2, -1)}) |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
72 ait = AncestorsIterator(idx, [3], 0, True) |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
73 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
|
74 |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
75 ait = AncestorsIterator(idx, [3], 0, False) |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
76 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
|
77 |
41114
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
78 def testlazyancestors(self): |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
79 idx = self.parseindex() |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
80 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
|
81 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
|
82 {0: (-1, -1), |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
83 1: (0, -1), |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
84 2: (1, -1), |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
85 3: (2, -1)}) |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
86 lazy = LazyAncestors(idx, [3], 0, True) |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
87 # we have two more references to the index: |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
88 # - in its inner iterator for __contains__ and __bool__ |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
89 # - in the LazyAncestors instance itself (to spawn new iterators) |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
90 self.assertEqual(sys.getrefcount(idx), start_count + 2) |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
91 |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
92 self.assertTrue(2 in lazy) |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
93 self.assertTrue(bool(lazy)) |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
94 self.assertEqual(list(lazy), [3, 2, 1, 0]) |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
95 # 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
|
96 self.assertEqual(list(lazy), [3, 2, 1, 0]) |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
97 |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
98 # now let's watch the refcounts closer |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
99 ait = iter(lazy) |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
100 self.assertEqual(sys.getrefcount(idx), start_count + 3) |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
101 del ait |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
102 self.assertEqual(sys.getrefcount(idx), start_count + 2) |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
103 del lazy |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
104 self.assertEqual(sys.getrefcount(idx), start_count) |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
105 |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
106 # let's check bool for an empty one |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
107 self.assertFalse(LazyAncestors(idx, [0], 0, False)) |
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
108 |
41188
006c9ce486fa
rust-cpython: bindings for MissingAncestors
Georges Racinet <georges.racinet@octobus.net>
parents:
41114
diff
changeset
|
109 def testmissingancestors(self): |
006c9ce486fa
rust-cpython: bindings for MissingAncestors
Georges Racinet <georges.racinet@octobus.net>
parents:
41114
diff
changeset
|
110 idx = self.parseindex() |
006c9ce486fa
rust-cpython: bindings for MissingAncestors
Georges Racinet <georges.racinet@octobus.net>
parents:
41114
diff
changeset
|
111 missanc = MissingAncestors(idx, [1]) |
006c9ce486fa
rust-cpython: bindings for MissingAncestors
Georges Racinet <georges.racinet@octobus.net>
parents:
41114
diff
changeset
|
112 self.assertTrue(missanc.hasbases()) |
006c9ce486fa
rust-cpython: bindings for MissingAncestors
Georges Racinet <georges.racinet@octobus.net>
parents:
41114
diff
changeset
|
113 self.assertEqual(missanc.missingancestors([3]), [2, 3]) |
006c9ce486fa
rust-cpython: bindings for MissingAncestors
Georges Racinet <georges.racinet@octobus.net>
parents:
41114
diff
changeset
|
114 missanc.addbases({2}) |
006c9ce486fa
rust-cpython: bindings for MissingAncestors
Georges Racinet <georges.racinet@octobus.net>
parents:
41114
diff
changeset
|
115 self.assertEqual(set(missanc.bases()), {1, 2}) |
006c9ce486fa
rust-cpython: bindings for MissingAncestors
Georges Racinet <georges.racinet@octobus.net>
parents:
41114
diff
changeset
|
116 self.assertEqual(missanc.missingancestors([3]), [3]) |
006c9ce486fa
rust-cpython: bindings for MissingAncestors
Georges Racinet <georges.racinet@octobus.net>
parents:
41114
diff
changeset
|
117 |
006c9ce486fa
rust-cpython: bindings for MissingAncestors
Georges Racinet <georges.racinet@octobus.net>
parents:
41114
diff
changeset
|
118 def testmissingancestorsremove(self): |
006c9ce486fa
rust-cpython: bindings for MissingAncestors
Georges Racinet <georges.racinet@octobus.net>
parents:
41114
diff
changeset
|
119 idx = self.parseindex() |
006c9ce486fa
rust-cpython: bindings for MissingAncestors
Georges Racinet <georges.racinet@octobus.net>
parents:
41114
diff
changeset
|
120 missanc = MissingAncestors(idx, [1]) |
006c9ce486fa
rust-cpython: bindings for MissingAncestors
Georges Racinet <georges.racinet@octobus.net>
parents:
41114
diff
changeset
|
121 revs = {0, 1, 2, 3} |
006c9ce486fa
rust-cpython: bindings for MissingAncestors
Georges Racinet <georges.racinet@octobus.net>
parents:
41114
diff
changeset
|
122 missanc.removeancestorsfrom(revs) |
006c9ce486fa
rust-cpython: bindings for MissingAncestors
Georges Racinet <georges.racinet@octobus.net>
parents:
41114
diff
changeset
|
123 self.assertEqual(revs, {2, 3}) |
006c9ce486fa
rust-cpython: bindings for MissingAncestors
Georges Racinet <georges.racinet@octobus.net>
parents:
41114
diff
changeset
|
124 |
41053
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
125 def testrefcount(self): |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
126 idx = self.parseindex() |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
127 start_count = sys.getrefcount(idx) |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
128 |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
129 # refcount increases upon iterator init... |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
130 ait = AncestorsIterator(idx, [3], 0, True) |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
131 self.assertEqual(sys.getrefcount(idx), start_count + 1) |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
132 self.assertEqual(next(ait), 3) |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
133 |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
134 # and decreases once the iterator is removed |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
135 del ait |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
136 self.assertEqual(sys.getrefcount(idx), start_count) |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
137 |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
138 # 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
|
139 ait = AncestorsIterator(idx, [3], 0, True) |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
140 del idx |
41114
b31a41f24864
rust-cpython: binding for LazyAncestors
Georges Racinet <gracinet@anybox.fr>
parents:
41053
diff
changeset
|
141 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
|
142 |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
143 def testgrapherror(self): |
41053
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
144 data = (data_non_inlined[:64 + 27] + |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
145 b'\xf2' + |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
146 data_non_inlined[64 + 28:]) |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
147 idx = cparsers.parse_index2(data, False)[0] |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
148 with self.assertRaises(rustext.GraphError) as arc: |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
149 AncestorsIterator(idx, [1], -1, False) |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
150 exc = arc.exception |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
151 self.assertIsInstance(exc, ValueError) |
d9f439fcdb4c
rust-cpython: binding for AncestorsIterator
Georges Racinet <gracinet@anybox.fr>
parents:
40968
diff
changeset
|
152 # 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
|
153 self.assertEqual(exc.args, ('ParentOutOfRange', 1)) |
40968
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
154 |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
155 |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
156 if __name__ == '__main__': |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
157 import silenttestrunner |
74f41329bf55
rust-cpython: testing the bindings from Python
Georges Racinet <gracinet@anybox.fr>
parents:
diff
changeset
|
158 silenttestrunner.main(__name__) |