Mercurial > public > mercurial-scm > hg-stable
annotate tests/test-rust-revlog.py @ 53040:cdd7bf612c7b stable tip
bundle-spec: properly format boolean parameter (issue6960)
This was breaking automatic clone bundle generation. This changeset fixes it and
add a test to catch it in the future.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Tue, 11 Mar 2025 02:29:42 +0100 |
parents | 3fcd86374074 |
children |
rev | line source |
---|---|
52796
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
1 import struct |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
2 |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
3 from mercurial.node import ( |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
4 bin as node_bin, |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
5 hex, |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
6 ) |
52799
4e34e8fd46d4
rust-pyo3-revlog: nodemap based index methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52796
diff
changeset
|
7 from mercurial import error |
52796
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
8 |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
9 try: |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
10 from mercurial import rustext |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
11 |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
12 rustext.__name__ # trigger immediate actual import |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
13 except ImportError: |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
14 rustext = None |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
15 else: |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
16 # this would fail already without appropriate ancestor.__package__ |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
17 from mercurial.rustext.ancestor import LazyAncestors |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
18 |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
19 from mercurial.testing import revlog as revlogtesting |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
20 |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
21 header = struct.unpack(">I", revlogtesting.data_non_inlined[:4])[0] |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
22 |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
23 |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
24 class RustInnerRevlogTestMixin: |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
25 """Common tests for both Rust Python bindings.""" |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
26 |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
27 node_hex0 = b'd1f4bbb0befc13bd8cd39d0fcdd93b8c078c4a2f' |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
28 node0 = node_bin(node_hex0) |
52799
4e34e8fd46d4
rust-pyo3-revlog: nodemap based index methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52796
diff
changeset
|
29 bogus_node_hex = b'cafe' * 10 |
4e34e8fd46d4
rust-pyo3-revlog: nodemap based index methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52796
diff
changeset
|
30 bogus_node = node_bin(bogus_node_hex) |
52802
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
31 node_hex2 = b"020a0ec626a192ae360b0269fe2de5ba6f05d1e7" |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
32 node2 = node_bin(node_hex2) |
52799
4e34e8fd46d4
rust-pyo3-revlog: nodemap based index methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52796
diff
changeset
|
33 |
4e34e8fd46d4
rust-pyo3-revlog: nodemap based index methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52796
diff
changeset
|
34 def test_index_nodemap(self): |
4e34e8fd46d4
rust-pyo3-revlog: nodemap based index methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52796
diff
changeset
|
35 idx = self.parserustindex() |
4e34e8fd46d4
rust-pyo3-revlog: nodemap based index methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52796
diff
changeset
|
36 self.assertTrue(idx.has_node(self.node0)) |
4e34e8fd46d4
rust-pyo3-revlog: nodemap based index methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52796
diff
changeset
|
37 self.assertFalse(idx.has_node(self.bogus_node)) |
4e34e8fd46d4
rust-pyo3-revlog: nodemap based index methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52796
diff
changeset
|
38 |
4e34e8fd46d4
rust-pyo3-revlog: nodemap based index methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52796
diff
changeset
|
39 self.assertEqual(idx.get_rev(self.node0), 0) |
4e34e8fd46d4
rust-pyo3-revlog: nodemap based index methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52796
diff
changeset
|
40 self.assertEqual(idx.get_rev(self.node0), 0) |
4e34e8fd46d4
rust-pyo3-revlog: nodemap based index methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52796
diff
changeset
|
41 |
4e34e8fd46d4
rust-pyo3-revlog: nodemap based index methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52796
diff
changeset
|
42 self.assertEqual(idx.rev(self.node0), 0) |
4e34e8fd46d4
rust-pyo3-revlog: nodemap based index methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52796
diff
changeset
|
43 with self.assertRaises(error.RevlogError) as exc_info: |
4e34e8fd46d4
rust-pyo3-revlog: nodemap based index methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52796
diff
changeset
|
44 idx.rev(self.bogus_node) |
4e34e8fd46d4
rust-pyo3-revlog: nodemap based index methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52796
diff
changeset
|
45 self.assertEqual(exc_info.exception.args, (None,)) |
4e34e8fd46d4
rust-pyo3-revlog: nodemap based index methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52796
diff
changeset
|
46 |
4e34e8fd46d4
rust-pyo3-revlog: nodemap based index methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52796
diff
changeset
|
47 self.assertEqual(idx.partialmatch(self.node_hex0[:3]), self.node0) |
4e34e8fd46d4
rust-pyo3-revlog: nodemap based index methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52796
diff
changeset
|
48 self.assertIsNone(idx.partialmatch(self.bogus_node_hex[:3])) |
4e34e8fd46d4
rust-pyo3-revlog: nodemap based index methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52796
diff
changeset
|
49 self.assertEqual(idx.shortest(self.node0), 1) |
52796
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
50 |
52800
e5f89bd1a5ee
rust-pyo3-revlog: _index___len__
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52799
diff
changeset
|
51 def test_len(self): |
e5f89bd1a5ee
rust-pyo3-revlog: _index___len__
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52799
diff
changeset
|
52 idx = self.parserustindex() |
e5f89bd1a5ee
rust-pyo3-revlog: _index___len__
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52799
diff
changeset
|
53 self.assertEqual(len(idx), 4) |
e5f89bd1a5ee
rust-pyo3-revlog: _index___len__
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52799
diff
changeset
|
54 |
52804
0ac956db7ea7
rust-pyo3-index: __getitem__
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52802
diff
changeset
|
55 def test_getitem(self): |
0ac956db7ea7
rust-pyo3-index: __getitem__
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52802
diff
changeset
|
56 idx = self.parserustindex() |
0ac956db7ea7
rust-pyo3-index: __getitem__
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52802
diff
changeset
|
57 as_tuple = (0, 82969, 484626, 0, 0, -1, -1, self.node0, 0, 0, 2, 2, -1) |
0ac956db7ea7
rust-pyo3-index: __getitem__
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52802
diff
changeset
|
58 self.assertEqual(idx[0], as_tuple) |
0ac956db7ea7
rust-pyo3-index: __getitem__
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52802
diff
changeset
|
59 self.assertEqual(idx[self.node0], 0) |
0ac956db7ea7
rust-pyo3-index: __getitem__
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52802
diff
changeset
|
60 |
52808
adf91dfe6c04
rust-pyo3-index: _index_headrevs
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52806
diff
changeset
|
61 def test_heads(self): |
adf91dfe6c04
rust-pyo3-index: _index_headrevs
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52806
diff
changeset
|
62 idx = self.parserustindex() |
adf91dfe6c04
rust-pyo3-index: _index_headrevs
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52806
diff
changeset
|
63 self.assertEqual(idx.headrevs(), [3]) |
adf91dfe6c04
rust-pyo3-index: _index_headrevs
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52806
diff
changeset
|
64 |
52802
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
65 def test_index_append(self): |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
66 idx = self.parserustindex(data=b'') |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
67 self.assertEqual(len(idx), 0) |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
68 self.assertIsNone(idx.get_rev(self.node0)) |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
69 |
52804
0ac956db7ea7
rust-pyo3-index: __getitem__
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52802
diff
changeset
|
70 non_empty_index = self.parserustindex() |
0ac956db7ea7
rust-pyo3-index: __getitem__
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52802
diff
changeset
|
71 idx.append(non_empty_index[0]) |
52802
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
72 self.assertEqual(len(idx), 1) |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
73 self.assertEqual(idx.get_rev(self.node0), 0) |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
74 |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
75 def test_index_delitem_single(self): |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
76 idx = self.parserustindex() |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
77 del idx[2] |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
78 self.assertEqual(len(idx), 2) |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
79 |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
80 # the nodetree is consistent |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
81 self.assertEqual(idx.get_rev(self.node0), 0) |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
82 self.assertIsNone(idx.get_rev(self.node2)) |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
83 |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
84 # not an error and does nothing |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
85 del idx[-1] |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
86 self.assertEqual(len(idx), 2) |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
87 |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
88 for bogus in (-2, 17): |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
89 try: |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
90 del idx[bogus] |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
91 except ValueError as exc: |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
92 # this underlines that we should do better with this message |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
93 assert exc.args[0] == ( |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
94 f"Inconsistency: Revision {bogus} found in nodemap " |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
95 "is not in revlog index" |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
96 ) |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
97 else: |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
98 raise AssertionError( |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
99 f"an exception was expected for `del idx[{bogus}]`" |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
100 ) |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
101 |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
102 def test_index_delitem_slice(self): |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
103 idx = self.parserustindex() |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
104 del idx[2:3] |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
105 self.assertEqual(len(idx), 2) |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
106 |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
107 # not an error and not equivalent to `del idx[0::]` but to |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
108 # `del idx[-1]` instead and thus does nothing. |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
109 del idx[-1::] |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
110 self.assertEqual(len(idx), 2) |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
111 |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
112 for start, stop in ( |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
113 (-2, None), |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
114 (17, None), |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
115 ): |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
116 try: |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
117 del idx[start:stop] |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
118 except ValueError as exc: |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
119 # this underlines that we should do better with this message |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
120 assert exc.args[0] == ( |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
121 f"Inconsistency: Revision {start} found in nodemap " |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
122 "is not in revlog index" |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
123 ) |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
124 else: |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
125 raise AssertionError( |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
126 f"an exception was expected for `del idx[{start}:{stop}]`" |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
127 ) |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
128 |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
129 # although the upper bound is way too big, this is not an error: |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
130 del idx[0::17] |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
131 self.assertEqual(len(idx), 0) |
34f44aa5e844
rust-pyo3-index: first mutating methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52800
diff
changeset
|
132 |
52805
acae91fad6be
rust-pyo3-revlog: standalone NodeTree class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52804
diff
changeset
|
133 def test_standalone_nodetree(self): |
acae91fad6be
rust-pyo3-revlog: standalone NodeTree class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52804
diff
changeset
|
134 idx = self.parserustindex() |
acae91fad6be
rust-pyo3-revlog: standalone NodeTree class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52804
diff
changeset
|
135 nt = self.nodetree(idx) |
acae91fad6be
rust-pyo3-revlog: standalone NodeTree class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52804
diff
changeset
|
136 for i in range(4): |
acae91fad6be
rust-pyo3-revlog: standalone NodeTree class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52804
diff
changeset
|
137 nt.insert(i) |
acae91fad6be
rust-pyo3-revlog: standalone NodeTree class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52804
diff
changeset
|
138 |
acae91fad6be
rust-pyo3-revlog: standalone NodeTree class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52804
diff
changeset
|
139 # invalidation is upon mutation *of the index* |
acae91fad6be
rust-pyo3-revlog: standalone NodeTree class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52804
diff
changeset
|
140 self.assertFalse(nt.is_invalidated()) |
acae91fad6be
rust-pyo3-revlog: standalone NodeTree class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52804
diff
changeset
|
141 |
acae91fad6be
rust-pyo3-revlog: standalone NodeTree class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52804
diff
changeset
|
142 bin_nodes = [entry[7] for entry in idx] |
acae91fad6be
rust-pyo3-revlog: standalone NodeTree class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52804
diff
changeset
|
143 hex_nodes = [hex(n) for n in bin_nodes] |
acae91fad6be
rust-pyo3-revlog: standalone NodeTree class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52804
diff
changeset
|
144 |
acae91fad6be
rust-pyo3-revlog: standalone NodeTree class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52804
diff
changeset
|
145 for i, node in enumerate(hex_nodes): |
acae91fad6be
rust-pyo3-revlog: standalone NodeTree class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52804
diff
changeset
|
146 self.assertEqual(nt.prefix_rev_lookup(node), i) |
acae91fad6be
rust-pyo3-revlog: standalone NodeTree class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52804
diff
changeset
|
147 self.assertEqual(nt.prefix_rev_lookup(node[:5]), i) |
acae91fad6be
rust-pyo3-revlog: standalone NodeTree class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52804
diff
changeset
|
148 |
acae91fad6be
rust-pyo3-revlog: standalone NodeTree class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52804
diff
changeset
|
149 # all 4 revisions in idx (standard data set) have different |
acae91fad6be
rust-pyo3-revlog: standalone NodeTree class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52804
diff
changeset
|
150 # first nybbles in their Node IDs, |
acae91fad6be
rust-pyo3-revlog: standalone NodeTree class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52804
diff
changeset
|
151 # hence `nt.shortest()` should return 1 for them, except when |
acae91fad6be
rust-pyo3-revlog: standalone NodeTree class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52804
diff
changeset
|
152 # the leading nybble is 0 (ambiguity with NULL_NODE) |
acae91fad6be
rust-pyo3-revlog: standalone NodeTree class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52804
diff
changeset
|
153 for i, (bin_node, hex_node) in enumerate(zip(bin_nodes, hex_nodes)): |
acae91fad6be
rust-pyo3-revlog: standalone NodeTree class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52804
diff
changeset
|
154 shortest = nt.shortest(bin_node) |
acae91fad6be
rust-pyo3-revlog: standalone NodeTree class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52804
diff
changeset
|
155 expected = 2 if hex_node[0] == ord('0') else 1 |
acae91fad6be
rust-pyo3-revlog: standalone NodeTree class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52804
diff
changeset
|
156 self.assertEqual(shortest, expected) |
acae91fad6be
rust-pyo3-revlog: standalone NodeTree class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52804
diff
changeset
|
157 self.assertEqual(nt.prefix_rev_lookup(hex_node[:shortest]), i) |
acae91fad6be
rust-pyo3-revlog: standalone NodeTree class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52804
diff
changeset
|
158 |
acae91fad6be
rust-pyo3-revlog: standalone NodeTree class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52804
diff
changeset
|
159 # test invalidation (generation poisoning) detection |
acae91fad6be
rust-pyo3-revlog: standalone NodeTree class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52804
diff
changeset
|
160 del idx[3] |
acae91fad6be
rust-pyo3-revlog: standalone NodeTree class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52804
diff
changeset
|
161 self.assertTrue(nt.is_invalidated()) |
acae91fad6be
rust-pyo3-revlog: standalone NodeTree class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52804
diff
changeset
|
162 |
52806
6a70e4931773
rust-pyo3-revlog: ReadingContextManager
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52805
diff
changeset
|
163 def test_reading_context_manager(self): |
6a70e4931773
rust-pyo3-revlog: ReadingContextManager
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52805
diff
changeset
|
164 irl = self.make_inner_revlog() |
6a70e4931773
rust-pyo3-revlog: ReadingContextManager
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52805
diff
changeset
|
165 try: |
6a70e4931773
rust-pyo3-revlog: ReadingContextManager
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52805
diff
changeset
|
166 with irl.reading(): |
6a70e4931773
rust-pyo3-revlog: ReadingContextManager
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52805
diff
changeset
|
167 # not much to do yet |
6a70e4931773
rust-pyo3-revlog: ReadingContextManager
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52805
diff
changeset
|
168 pass |
6a70e4931773
rust-pyo3-revlog: ReadingContextManager
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52805
diff
changeset
|
169 except error.RevlogError as exc: |
6a70e4931773
rust-pyo3-revlog: ReadingContextManager
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52805
diff
changeset
|
170 # well our data file does not even exist |
6a70e4931773
rust-pyo3-revlog: ReadingContextManager
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52805
diff
changeset
|
171 self.assertTrue(b"when reading Just a path/test.d" in exc.args[0]) |
6a70e4931773
rust-pyo3-revlog: ReadingContextManager
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52805
diff
changeset
|
172 |
52796
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
173 |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
174 # Conditional skipping done by the base class |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
175 class RustInnerRevlogTest( |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
176 revlogtesting.RustRevlogBasedTestBase, RustInnerRevlogTestMixin |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
177 ): |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
178 """For reference""" |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
179 |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
180 def test_ancestors(self): |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
181 rustidx = self.parserustindex() |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
182 lazy = LazyAncestors(rustidx, [3], 0, True) |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
183 # we have two more references to the index: |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
184 # - in its inner iterator for __contains__ and __bool__ |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
185 # - in the LazyAncestors instance itself (to spawn new iterators) |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
186 self.assertTrue(2 in lazy) |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
187 self.assertTrue(bool(lazy)) |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
188 self.assertEqual(list(lazy), [3, 2, 1, 0]) |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
189 # a second time to validate that we spawn new iterators |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
190 self.assertEqual(list(lazy), [3, 2, 1, 0]) |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
191 |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
192 # let's check bool for an empty one |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
193 self.assertFalse(LazyAncestors(rustidx, [0], 0, False)) |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
194 |
52827
3fcd86374074
rust-pyo3-revlog: canonical_index_file property
Rapha?l Gom?s <rgomes@octobus.net>
parents:
52808
diff
changeset
|
195 def test_canonical_index_file(self): |
3fcd86374074
rust-pyo3-revlog: canonical_index_file property
Rapha?l Gom?s <rgomes@octobus.net>
parents:
52808
diff
changeset
|
196 irl = self.make_inner_revlog() |
3fcd86374074
rust-pyo3-revlog: canonical_index_file property
Rapha?l Gom?s <rgomes@octobus.net>
parents:
52808
diff
changeset
|
197 self.assertEqual(irl.canonical_index_file, b'test.i') |
3fcd86374074
rust-pyo3-revlog: canonical_index_file property
Rapha?l Gom?s <rgomes@octobus.net>
parents:
52808
diff
changeset
|
198 |
52796
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
199 |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
200 # Conditional skipping done by the base class |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
201 class PyO3InnerRevlogTest( |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
202 revlogtesting.PyO3RevlogBasedTestBase, RustInnerRevlogTestMixin |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
203 ): |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
204 """Testing new PyO3 bindings, by comparison with rust-cpython bindings.""" |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
205 |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
206 |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
207 if __name__ == '__main__': |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
208 import silenttestrunner |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
209 |
07740bd86fd9
rust-pyo3: reviving test-rust-revlog.py
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
210 silenttestrunner.main(__name__) |