versatiles_core 4.2.0

A toolbox for converting, checking and serving map tiles in various formats.
Documentation
use criterion::{BatchSize, Criterion, criterion_group, criterion_main};
use std::{hint::black_box, io::Cursor};
use versatiles_core::byte_iterator::ByteIterator;

const DATA_SIZE: usize = 100 * 1024 * 1024;
const BATCH_SIZE: BatchSize = BatchSize::NumIterations(1);

fn bench_advance(c: &mut Criterion) {
	c.bench_function("ByteIterator advance", |b| {
		let reader = Cursor::new(vec![b'a'; DATA_SIZE]);
		b.iter_batched(
			|| ByteIterator::from_reader(reader.clone(), false),
			|mut byte_iter| {
				for _ in 0..DATA_SIZE {
					byte_iter.advance();
					black_box(());
				}
			},
			BATCH_SIZE,
		);
	});
}

fn bench_consume(c: &mut Criterion) {
	c.bench_function("ByteIterator consume", |b| {
		let reader = Cursor::new(vec![b'a'; DATA_SIZE]);
		b.iter_batched(
			|| ByteIterator::from_reader(reader.clone(), false),
			|mut byte_iter| {
				for _ in 0..DATA_SIZE {
					black_box(byte_iter.consume());
				}
			},
			BATCH_SIZE,
		);
	});
}

fn bench_skip_whitespace(c: &mut Criterion) {
	c.bench_function("ByteIterator skip_whitespace", |b| {
		let data = [vec![b' '; DATA_SIZE], vec![b'A'; 64]].concat();
		let reader = Cursor::new(data);
		b.iter_batched(
			|| ByteIterator::from_reader(reader.clone(), false),
			|mut byte_iter| {
				byte_iter.skip_whitespace();
				black_box(());
			},
			BATCH_SIZE,
		);
	});
}

fn bench_into_string(c: &mut Criterion) {
	c.bench_function("ByteIterator into_string", |b| {
		let reader = Cursor::new(vec![b'a'; DATA_SIZE]);
		b.iter_batched(
			|| ByteIterator::from_reader(reader.clone(), false),
			|byte_iter| black_box(byte_iter.into_string()),
			BATCH_SIZE,
		);
	});

	c.bench_function("ByteIterator [debug].into_string", |b| {
		let reader = Cursor::new(vec![b'a'; DATA_SIZE]);
		b.iter_batched(
			|| ByteIterator::from_reader(reader.clone(), true),
			|byte_iter| black_box(byte_iter.into_string()),
			BATCH_SIZE,
		);
	});
}

criterion_group!(
	name = benches;
	config = Criterion::default().significance_level(0.1).sample_size(10);
	targets =  bench_advance, bench_consume, bench_skip_whitespace, bench_into_string
);
criterion_main!(benches);