view rust/hg-core/src/testing.rs @ 46243:63c923fd7fa8

setup: when possible, build and bundle man pages This makes it so the manual pages are built as part of the Python build, and includes them in any wheel generated. This should make Python wheels a much more useful and complete way of distributing Mercurial binaries. Differential Revision: https://phab.mercurial-scm.org/D9640
author Dan Villiom Podlaski Christiansen <danchr@gmail.com>
date Mon, 21 Dec 2020 15:50:01 +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])
    }
}