Mercurial > public > mercurial-scm > hg
view rust/hg-core/src/testing.rs @ 44183:e52401a95b94
rust-nodemap: NodeMap trait with simplest implementation
We're defining here only a small part of the immutable
methods it will have at the end. This is so we can
focus in the following changesets on the needed abstractions
for a mutable append-only serializable version.
The first implementor exposes the actual lookup
algorithm in its simplest form. It will have to be expanded
to account for the missing methods, and the special cases
related to NULL_NODE.
Differential Revision: https://phab.mercurial-scm.org/D7791
author | Georges Racinet <georges.racinet@octobus.net> |
---|---|
date | Thu, 23 Jan 2020 17:18:13 +0100 |
parents | 168041fa6d5f |
children | 4c5f6e95df84 |
line wrap: on
line source
// 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]) } }