mirror of
https://codeberg.org/icewind/sourcenav.git
synced 2026-06-03 18:24:10 +02:00
basic benchmark
This commit is contained in:
parent
1607b851c5
commit
d3765674d4
3 changed files with 29 additions and 6 deletions
20
benches/bench.rs
Normal file
20
benches/bench.rs
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
#![feature(test)]
|
||||||
|
|
||||||
|
extern crate test;
|
||||||
|
|
||||||
|
use std::fs;
|
||||||
|
|
||||||
|
use bitbuffer::{BitReadBuffer, BitReadStream, LittleEndian};
|
||||||
|
use sourcenav::get_area_tree;
|
||||||
|
use std::fs::read;
|
||||||
|
use test::Bencher;
|
||||||
|
|
||||||
|
#[bench]
|
||||||
|
fn bench_badwater(b: &mut Bencher) {
|
||||||
|
let file = read("data/pl_badwater.nav").unwrap();
|
||||||
|
let data = BitReadStream::new(BitReadBuffer::new(file, LittleEndian));
|
||||||
|
|
||||||
|
b.iter(|| {
|
||||||
|
test::black_box(get_area_tree(data.clone()));
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
@ -6,6 +6,7 @@ pub use crate::navmesh::{
|
||||||
use crate::parser::read_areas;
|
use crate::parser::read_areas;
|
||||||
pub use crate::parser::{NavArea, ParseError};
|
pub use crate::parser::{NavArea, ParseError};
|
||||||
use aabb_quadtree::{ItemId, QuadTree};
|
use aabb_quadtree::{ItemId, QuadTree};
|
||||||
|
use bitbuffer::{BitReadStream, LittleEndian};
|
||||||
use euclid::{TypedPoint2D, TypedRect, TypedSize2D};
|
use euclid::{TypedPoint2D, TypedRect, TypedSize2D};
|
||||||
|
|
||||||
mod navmesh;
|
mod navmesh;
|
||||||
|
|
@ -29,8 +30,8 @@ pub struct NavTree(QuadTree<NavArea, HammerUnit, [(ItemId, Rect); 4]>);
|
||||||
/// # Ok(())
|
/// # Ok(())
|
||||||
/// # }
|
/// # }
|
||||||
/// ```
|
/// ```
|
||||||
pub fn get_area_tree(data: Vec<u8>) -> Result<NavTree, ParseError> {
|
pub fn get_area_tree(data: impl Into<BitReadStream<LittleEndian>>) -> Result<NavTree, ParseError> {
|
||||||
let areas = read_areas(data)?;
|
let areas = read_areas(data.into())?;
|
||||||
|
|
||||||
let (min_x, min_y, max_x, max_y) = areas.iter().fold(
|
let (min_x, min_y, max_x, max_y) = areas.iter().fold(
|
||||||
(f32::MAX, f32::MAX, f32::MIN, f32::MIN),
|
(f32::MAX, f32::MAX, f32::MIN, f32::MIN),
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
pub use crate::navmesh::NavArea;
|
pub use crate::navmesh::NavArea;
|
||||||
use bitbuffer::{BitReadBuffer, BitReadStream, LittleEndian};
|
use bitbuffer::{BitReadStream, LittleEndian};
|
||||||
use err_derive::Error;
|
use err_derive::Error;
|
||||||
|
|
||||||
/// Errors that can occur when parsing the binary nav file
|
/// Errors that can occur when parsing the binary nav file
|
||||||
|
|
@ -19,8 +19,9 @@ pub enum ParseError {
|
||||||
UnsupportedVersion(u32),
|
UnsupportedVersion(u32),
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn read_areas(data: Vec<u8>) -> Result<Vec<NavArea>, ParseError> {
|
pub(crate) fn read_areas(
|
||||||
let mut data = BitReadStream::new(BitReadBuffer::new(data, LittleEndian));
|
mut data: BitReadStream<LittleEndian>,
|
||||||
|
) -> Result<Vec<NavArea>, ParseError> {
|
||||||
let magic = data.read()?;
|
let magic = data.read()?;
|
||||||
if magic != 0xFEED_FACE {
|
if magic != 0xFEED_FACE {
|
||||||
return Err(ParseError::InvalidMagicNumber(magic));
|
return Err(ParseError::InvalidMagicNumber(magic));
|
||||||
|
|
@ -146,6 +147,7 @@ pub(crate) fn read_areas(data: Vec<u8>) -> Result<Vec<NavArea>, ParseError> {
|
||||||
#[test]
|
#[test]
|
||||||
fn test() {
|
fn test() {
|
||||||
let file = std::fs::read("data/pl_badwater.nav").unwrap();
|
let file = std::fs::read("data/pl_badwater.nav").unwrap();
|
||||||
let areas = read_areas(file).unwrap();
|
let data = BitReadStream::new(bitbuffer::BitReadBuffer::new(file, LittleEndian));
|
||||||
|
let areas = read_areas(data).unwrap();
|
||||||
assert_eq!(1930, areas.len());
|
assert_eq!(1930, areas.len());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue