pub mod node;
pub mod tree;
pub fn sum<T: std::ops::Add<Output = T>>(a: T, b: T) -> T {
return a + b;
}
#[cfg(test)]
mod tests {
use super::tree::Tree;
#[test]
fn i64() {
let a: Vec<i64> = vec![1000000000, 5000000000, 3, 4, 5];
let tr = Tree::<i64>::new(&a, super::sum, 0);
assert_eq!(tr.get(0, 2), 6000000000_i64); }
#[test]
fn sum() {
let a = vec![1, 2, 3, 4, 5];
let mut tr = Tree::<i32>::new(&a, super::sum, 0);
assert_eq!(tr.get(0, 3), 6); tr.update(1, 4); assert_eq!(tr.get(0, 2), 5); }
#[test]
fn min() {
let a = vec![5, 4, 3, 2, 1];
let mut tr = Tree::<i32>::new(&a, std::cmp::min, 1000);
assert_eq!(tr.get(0, 3), 3); tr.update(1, -100); assert_eq!(tr.get(0, 4), -100); }
#[test]
fn max() {
let a = vec![1, 2, 3, 4, 5];
let mut tr = Tree::<i32>::new(&a, std::cmp::max, -1000);
assert_eq!(tr.get(0, 3), 3); tr.update(1, 100); assert_eq!(tr.get(1, 5), 100); }
}