Documentation
#![feature(test)]

extern crate suffix;
extern crate test;

use suffix::SuffixTable;
use test::Bencher;

#[bench]
fn naive_small(b: &mut Bencher) {
    let s = "mississippi";
    b.iter(|| {
        SuffixTable::new_naive(s);
    })
}

#[bench]
fn sais_small(b: &mut Bencher) {
    let s = "mississippi";
    b.iter(|| {
        SuffixTable::new(s);
    })
}

#[bench]
fn naive_dna_small(b: &mut Bencher) {
    let s = include_str!("AP009048_10000.fasta");
    b.iter(|| {
        SuffixTable::new_naive(s);
    })
}

#[bench]
fn sais_dna_small(b: &mut Bencher) {
    let s = include_str!("AP009048_10000.fasta");
    b.iter(|| {
        SuffixTable::new(s);
    })
}

#[bench]
fn naive_dna_medium(b: &mut Bencher) {
    let s = include_str!("AP009048_100000.fasta");
    b.iter(|| {
        SuffixTable::new_naive(s);
    })
}

#[bench]
fn sais_dna_medium(b: &mut Bencher) {
    let s = include_str!("AP009048_100000.fasta");
    b.iter(|| {
        SuffixTable::new(s);
    })
}

#[bench]
fn search_scan_not_exists(b: &mut Bencher) {
    let s = include_str!("AP009048_100000.fasta");
    b.iter(|| {
        s.contains("H");
    });
}

#[bench]
fn search_suffix_not_exists(b: &mut Bencher) {
    let s = include_str!("AP009048_100000.fasta");
    let st = SuffixTable::new(s);
    b.iter(|| {
        st.positions("H");
    });
}

#[bench]
fn search_suffix_not_exists_contains(b: &mut Bencher) {
    let s = include_str!("AP009048_100000.fasta");
    let st = SuffixTable::new(s);
    b.iter(|| {
        st.contains("H");
    });
}

#[bench]
fn search_scan_exists_one(b: &mut Bencher) {
    let s = include_str!("AP009048_100000.fasta");
    b.iter(|| {
        s.contains("C");
    });
}

#[bench]
fn search_suffix_exists_one(b: &mut Bencher) {
    let s = include_str!("AP009048_100000.fasta");
    let st = SuffixTable::new(s);
    b.iter(|| {
        st.positions("C");
    });
}

#[bench]
fn search_suffix_exists_one_contains(b: &mut Bencher) {
    let s = include_str!("AP009048_100000.fasta");
    let st = SuffixTable::new(s);
    b.iter(|| {
        st.contains("C");
    });
}

#[bench]
fn search_scan_exists_many(b: &mut Bencher) {
    let s = include_str!("AP009048_100000.fasta");
    b.iter(|| {
        s.contains("ACTTACGTGTCTGC");
    });
}

#[bench]
fn search_suffix_exists_many(b: &mut Bencher) {
    let s = include_str!("AP009048_100000.fasta");
    let st = SuffixTable::new(s);
    b.iter(|| {
        st.positions("ACTTACGTGTCTGC");
    });
}

#[bench]
fn search_suffix_exists_many_contains(b: &mut Bencher) {
    let s = include_str!("AP009048_100000.fasta");
    let st = SuffixTable::new(s);
    b.iter(|| {
        st.contains("ACTTACGTGTCTGC");
    });
}