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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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__)