diff rust/hg-core/src/testing.rs @ 41241:168041fa6d5f

rust: factorized testing Graphs it will useful to use these outside of `ancestors`, too. Differential Revision: https://phab.mercurial-scm.org/D5579
author Georges Racinet <georges.racinet@octobus.net>
date Mon, 14 Jan 2019 20:42:25 +0100
parents
children 4c5f6e95df84
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/hg-core/src/testing.rs	Mon Jan 14 20:42:25 2019 +0100
@@ -0,0 +1,72 @@
+// testing.rs
+//
+// Copyright 2018 Georges Racinet <georges.racinet@octobus.net>
+//
+// This software may be used and distributed according to the terms of the
+// GNU General Public License version 2 or any later version.
+
+use crate::{Graph, GraphError, Revision, NULL_REVISION};
+
+/// A stub `Graph`, same as the one from `test-ancestor.py`
+///
+/// o  13
+/// |
+/// | o  12
+/// | |
+/// | | o    11
+/// | | |\
+/// | | | | o  10
+/// | | | | |
+/// | o---+ |  9
+/// | | | | |
+/// o | | | |  8
+///  / / / /
+/// | | o |  7
+/// | | | |
+/// o---+ |  6
+///  / / /
+/// | | o  5
+/// | |/
+/// | o  4
+/// | |
+/// o |  3
+/// | |
+/// | o  2
+/// |/
+/// o  1
+/// |
+/// o  0
+#[derive(Clone, Debug)]
+pub struct SampleGraph;
+
+impl Graph for SampleGraph {
+    fn parents(&self, rev: Revision) -> Result<[Revision; 2], GraphError> {
+        match rev {
+            0 => Ok([NULL_REVISION, NULL_REVISION]),
+            1 => Ok([0, NULL_REVISION]),
+            2 => Ok([1, NULL_REVISION]),
+            3 => Ok([1, NULL_REVISION]),
+            4 => Ok([2, NULL_REVISION]),
+            5 => Ok([4, NULL_REVISION]),
+            6 => Ok([4, NULL_REVISION]),
+            7 => Ok([4, NULL_REVISION]),
+            8 => Ok([NULL_REVISION, NULL_REVISION]),
+            9 => Ok([6, 7]),
+            10 => Ok([5, NULL_REVISION]),
+            11 => Ok([3, 7]),
+            12 => Ok([9, NULL_REVISION]),
+            13 => Ok([8, NULL_REVISION]),
+            r => Err(GraphError::ParentOutOfRange(r)),
+        }
+    }
+}
+
+// A Graph represented by a vector whose indices are revisions
+// and values are parents of the revisions
+pub type VecGraph = Vec<[Revision; 2]>;
+
+impl Graph for VecGraph {
+    fn parents(&self, rev: Revision) -> Result<[Revision; 2], GraphError> {
+        Ok(self[rev as usize])
+    }
+}