gst 0.1.3

Generalised Search Tree
Documentation
#![feature(test)]
extern crate rand;
extern crate test;
extern crate gst;
use gst::rtree::{RTree, Rect};
use rand::thread_rng;
use rand::distributions::{IndependentSample, Range};
use test::Bencher;

#[bench]
fn bench_rtree_inserts(b: &mut Bencher) {
    let mut rng = thread_rng();
    let mut rtree = RTree::new();
    let between = Range::new(0f32, 200f32);
    let vals = (0..100_000).map(|_| {
        let x = between.ind_sample(&mut rng);
        let y = between.ind_sample(&mut rng);
        (x, y)
    }).collect::<Vec<_>>();
    let mut vals_iter = vals.into_iter();
    let word = "Hello".to_string();
    b.iter(|| {
        let (x, y) = vals_iter.next().unwrap();
        rtree.insert(Rect::from_float(x, x, y, y), word.clone());
    });
}

#[bench]
fn bench_rtree_lookups_get_rect(b: &mut Bencher) {
    let mut rng = thread_rng();
    let mut rtree = RTree::new();
    let between = Range::new(-100f32, 100f32);
    (0..100_000).map(|i| {
        let x = between.ind_sample(&mut rng);
        let y = between.ind_sample(&mut rng);
        rtree.insert(Rect::from_float(x, x, y, y), format!("{}", i));
    }).collect::<Vec<_>>();

    let vals = (0..10_000).map(|_| {
        let x = between.ind_sample(&mut rng);
        let y = between.ind_sample(&mut rng);
        (x, y)
    }).collect::<Vec<_>>();
    let mut vals_iter = vals.into_iter().cycle();
    let mut last = vec![];
    b.iter(|| {
        let (x, y) = vals_iter.next().unwrap();
        last = rtree.get(&Rect::from_float(x-5., x+5., y-5., y+5.));
    });
}