stringr 0.1.4

random string functions
Documentation
use criterion::{Criterion, criterion_group, criterion_main};
use std::{cmp, hint::black_box};

fn splitn(input: &str, n: usize) -> Vec<String> {
    if n == 0 {
        return vec![input.to_string()];
    }

    let size = input.len().div_ceil(n);
    let mut rtn = Vec::with_capacity(size);

    let mut i = 0;

    while i < input.len() {
        let true_len = cmp::min(n, input.len() - i);

        rtn.push(input[i..(i + true_len)].to_string());
        i += true_len;
    }

    rtn
}

fn splitn_byte(input: &str, n: usize) -> Vec<&str> {
    if n == 0 {
        return vec![input];
    }

    input
        .as_bytes()
        .chunks(n)
        .map(str::from_utf8)
        .collect::<Result<Vec<&str>, _>>()
        .unwrap()
}

fn criterion_benchmark(c: &mut Criterion) {
    let mut group = c.benchmark_group("splitn");
    group.bench_function("splitn AEFF??00FE 2", |b| {
        b.iter(|| splitn(black_box("AEFF??00FE"), black_box(2)))
    });
    group.bench_function("splitn_byte AEFF??00FE 2", |b| {
        b.iter(|| splitn_byte(black_box("AEFF??00FE"), black_box(2)))
    });
    group.finish();
}

criterion_group!(benches, criterion_benchmark);
criterion_main!(benches);