File: lib.rs

package info (click to toggle)
rust-bk-tree 0.5.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 204 kB
  • sloc: makefile: 2
file content (77 lines) | stat: -rwxr-xr-x 1,822 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#![feature(test)] extern crate test;
extern crate bk_tree;
extern crate rand;

use bk_tree::BKTree;
use bk_tree::metrics::Levenshtein;
use test::Bencher;
use rand::{thread_rng, Rng};

fn make_words<R: Rng>(rng: &mut R, n: i32) -> Vec<String> {
    let mut words: Vec<String> = Vec::new();
    for _ in 1..n {
        let l = rng.gen_range(4, 12);
        let s: String = rng.gen_ascii_chars().take(l).collect();
        words.push(s);
    }
    words
}

#[bench]
fn bench_find_exact(b: &mut Bencher) {
    let mut tree: BKTree<String> = BKTree::new(Levenshtein);
    let words = make_words(&mut thread_rng(), 1000);
    let word = words.last().unwrap().clone();
    tree.extend(words);

    b.iter(|| {
        tree.find_exact(&word)
    });
}

#[bench]
fn bench_find_tol_one(b: &mut Bencher) {
    let mut tree: BKTree<String> = BKTree::new(Levenshtein);
    let words = make_words(&mut thread_rng(), 1000);
    let word = words.last().unwrap().clone();
    tree.extend(words);

    b.iter(|| {
        tree.find(&word, 1)
    });
}


#[bench]
fn bench_find_tol_two(b: &mut Bencher) {
    let mut tree: BKTree<String> = BKTree::new(Levenshtein);
    let words = make_words(&mut thread_rng(), 1000);
    let word = words.last().unwrap().clone();
    tree.extend(words);

    b.iter(|| {
        tree.find(&word, 2)
    });
}

#[bench]
fn bench_add(b: &mut Bencher) {
    let words = make_words(&mut thread_rng(), 1000);

    b.iter(move || {
        let mut tree: BKTree<String> = BKTree::new(Levenshtein);
        for word in words.clone() {
            tree.add(word);
        }
    });
}

#[bench]
fn bench_extend(b: &mut Bencher) {
    let words = make_words(&mut thread_rng(), 1000);

    b.iter(move || {
        let mut tree: BKTree<String> = BKTree::new(Levenshtein);
        tree.extend(words.clone());
    });
}