hg/testing.rs
1// testing.rs
2//
3// Copyright 2018 Georges Racinet <georges.racinet@octobus.net>
4//
5// This software may be used and distributed according to the terms of the
6// GNU General Public License version 2 or any later version.
7
8use crate::{Graph, GraphError, Revision, NULL_REVISION};
9
10/// A stub `Graph`, same as the one from `test-ancestor.py`
11///
12/// o 13
13/// |
14/// | o 12
15/// | |
16/// | | o 11
17/// | | |\
18/// | | | | o 10
19/// | | | | |
20/// | o---+ | 9
21/// | | | | |
22/// o | | | | 8
23/// / / / /
24/// | | o | 7
25/// | | | |
26/// o---+ | 6
27/// / / /
28/// | | o 5
29/// | |/
30/// | o 4
31/// | |
32/// o | 3
33/// | |
34/// | o 2
35/// |/
36/// o 1
37/// |
38/// o 0
39#[derive(Clone, Debug)]
40pub struct SampleGraph;
41
42impl Graph for SampleGraph {
43 fn parents(&self, rev: Revision) -> Result<[Revision; 2], GraphError> {
44 match rev {
45 0 => Ok([NULL_REVISION, NULL_REVISION]),
46 1 => Ok([0, NULL_REVISION]),
47 2 => Ok([1, NULL_REVISION]),
48 3 => Ok([1, NULL_REVISION]),
49 4 => Ok([2, NULL_REVISION]),
50 5 => Ok([4, NULL_REVISION]),
51 6 => Ok([4, NULL_REVISION]),
52 7 => Ok([4, NULL_REVISION]),
53 8 => Ok([NULL_REVISION, NULL_REVISION]),
54 9 => Ok([6, 7]),
55 10 => Ok([5, NULL_REVISION]),
56 11 => Ok([3, 7]),
57 12 => Ok([9, NULL_REVISION]),
58 13 => Ok([8, NULL_REVISION]),
59 r => Err(GraphError::ParentOutOfRange(r)),
60 }
61 }
62}
63
64// A Graph represented by a vector whose indices are revisions
65// and values are parents of the revisions
66pub type VecGraph = Vec<[Revision; 2]>;
67
68impl Graph for VecGraph {
69 fn parents(&self, rev: Revision) -> Result<[Revision; 2], GraphError> {
70 Ok(self[rev as usize])
71 }
72}