Mercurial > hg
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]) + } +}