diff tests/test-rust-revlog.py @ 52786:4e34e8fd46d4

rust-pyo3-revlog: nodemap based index methods They are rather straightforward, except for `_index_get_rev` that takes care of not initializing a nodetree on some conditions. In `_index_partialmatch`, we solve the todo that was in the `hg-cpython`, since we introduced the `py_node_for_rev` helper earlier. The new test method in `test-rust-revlog.py` provides comparison with the `hg-cpython` implementation of `InnerRevlog`.
author Georges Racinet <georges.racinet@cloudcrane.io>
date Wed, 25 Dec 2024 16:16:22 +0100
parents 07740bd86fd9
children e5f89bd1a5ee
line wrap: on
line diff
--- a/tests/test-rust-revlog.py	Wed Dec 25 11:58:56 2024 +0100
+++ b/tests/test-rust-revlog.py	Wed Dec 25 16:16:22 2024 +0100
@@ -4,6 +4,7 @@
     bin as node_bin,
     hex,
 )
+from mercurial import error
 
 try:
     from mercurial import rustext
@@ -25,6 +26,25 @@
 
     node_hex0 = b'd1f4bbb0befc13bd8cd39d0fcdd93b8c078c4a2f'
     node0 = node_bin(node_hex0)
+    bogus_node_hex = b'cafe' * 10
+    bogus_node = node_bin(bogus_node_hex)
+
+    def test_index_nodemap(self):
+        idx = self.parserustindex()
+        self.assertTrue(idx.has_node(self.node0))
+        self.assertFalse(idx.has_node(self.bogus_node))
+
+        self.assertEqual(idx.get_rev(self.node0), 0)
+        self.assertEqual(idx.get_rev(self.node0), 0)
+
+        self.assertEqual(idx.rev(self.node0), 0)
+        with self.assertRaises(error.RevlogError) as exc_info:
+            idx.rev(self.bogus_node)
+        self.assertEqual(exc_info.exception.args, (None,))
+
+        self.assertEqual(idx.partialmatch(self.node_hex0[:3]), self.node0)
+        self.assertIsNone(idx.partialmatch(self.bogus_node_hex[:3]))
+        self.assertEqual(idx.shortest(self.node0), 1)
 
 
 # Conditional skipping done by the base class