librualg 0.29.1

Collection of basic algorithms for everyday development
Documentation
extern crate librualg;

use librualg::*;
use librualg::segment_tree::{RmqMin, RmqMax};

#[test]
fn test_rsq() {
    let arr = [1, 2, 3, 4, 5];
    let tree = segment_tree::Rsq::new(&arr);

    assert_eq!(tree.query(0, 4).unwrap(), 15);
    assert_eq!(tree.query(1, 4).unwrap(), 14);
    assert_eq!(tree.query(4, 1).unwrap(), 14);
    assert_eq!(tree.query(3, 1).unwrap(), 9);
    assert_eq!(tree.query(4, 0).unwrap(), 15);
    assert_eq!(tree.query(3, 11), None);

    let arr: Vec<i32> = vec![];
    let tree = segment_tree::Rsq::new(&arr);
    assert_eq!(tree.query(0, 0), None);
}

#[test]
fn test_rmq_min() {
    let arr = [1, 2, 3, 4, 5];
    let tree = RmqMin::new(&arr);

    assert_eq!(tree.query(0, 4).unwrap(), 1);
    assert_eq!(tree.query(1, 4).unwrap(), 2);
    assert_eq!(tree.query(4, 1).unwrap(), 2);
    assert_eq!(tree.query(3, 1).unwrap(), 2);
    assert_eq!(tree.query(2, 2).unwrap(), 3);

    assert_eq!(tree.query(2, 7), None);
}

#[test]
fn test_rmq_max() {
    let arr = [1, 2, 3, 4, 5];
    let tree = RmqMax::new(&arr);

    assert_eq!(tree.query(0, 4).unwrap(), 5);
    assert_eq!(tree.query(1, 4).unwrap(), 5);
    assert_eq!(tree.query(4, 1).unwrap(), 5);
    assert_eq!(tree.query(3, 1).unwrap(), 4);
    assert_eq!(tree.query(2, 2).unwrap(), 3);

    assert_eq!(tree.query(2, 7), None);
}