Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/windirstat/mft.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorOmer Ben-Amram <omerbenamram@gmail.com>2019-05-15 23:40:41 +0300
committerOmer Ben-Amram <omerbenamram@gmail.com>2019-05-15 23:40:41 +0300
commit04258b6e4890d504fecd78acabf1ebfa68b1167c (patch)
tree6f8330da1d7be6267aec818fdf85fa7da49a1c31 /src
parent7f3aeea178b23d46fbc47e8af50623559d16c25e (diff)
added benchmark
Diffstat (limited to 'src')
-rw-r--r--src/benches/benchmark.rs19
-rw-r--r--src/mft.rs25
2 files changed, 41 insertions, 3 deletions
diff --git a/src/benches/benchmark.rs b/src/benches/benchmark.rs
index ce8532e..e2d0fee 100644
--- a/src/benches/benchmark.rs
+++ b/src/benches/benchmark.rs
@@ -3,7 +3,7 @@ extern crate criterion;
extern crate mft;
use criterion::Criterion;
-use mft::MftParser;
+use mft::{MftEntry, MftParser};
fn process_1000_mft_records(sample: &[u8]) {
let mut parser = MftParser::from_buffer(sample.to_vec()).unwrap();
@@ -16,6 +16,21 @@ fn process_1000_mft_records(sample: &[u8]) {
}
}
+fn get_full_path(sample: &[u8]) {
+ let mut parser = MftParser::from_buffer(sample.to_vec()).unwrap();
+
+ let mut paths = Vec::with_capacity(100);
+ let entries: Vec<MftEntry> = parser
+ .iter_entries()
+ .take(100)
+ .filter_map(Result::ok)
+ .collect();
+
+ for entry in entries {
+ paths.push(parser.get_full_path_for_entry(&entry));
+ }
+}
+
fn criterion_benchmark(c: &mut Criterion) {
let sample = include_bytes!("../../samples/MFT");
@@ -23,6 +38,8 @@ fn criterion_benchmark(c: &mut Criterion) {
c.bench_function("read 1000 records", move |b| {
b.iter(|| process_1000_mft_records(sample))
});
+
+ c.bench_function("get_full_path", move |b| b.iter(|| get_full_path(sample)));
}
criterion_group!(benches, criterion_benchmark);
diff --git a/src/mft.rs b/src/mft.rs
index 88635bb..4fd69a6 100644
--- a/src/mft.rs
+++ b/src/mft.rs
@@ -127,6 +127,7 @@ impl<T: ReadSeek> MftParser<T> {
}
} else {
let root = PathBuf::from(filename_header.name);
+
self.entries_cache
.insert(entry.header.entry_reference.entry, root.clone());
return Ok(Some(root));
@@ -141,8 +142,7 @@ impl<T: ReadSeek> MftParser<T> {
#[cfg(test)]
mod tests {
use crate::tests::fixtures::mft_sample;
- use crate::MftParser;
- use std::path::PathBuf;
+ use crate::{MftEntry, MftParser};
// entrypoint for clion profiler.
#[test]
@@ -160,6 +160,27 @@ mod tests {
}
#[test]
+ fn test_get_full_path() {
+ let sample = mft_sample();
+ let mut parser = MftParser::from_path(sample).unwrap();
+
+ let mut paths = Vec::with_capacity(1000);
+ let entries: Vec<MftEntry> = parser
+ .iter_entries()
+ .take(1000)
+ .filter_map(Result::ok)
+ .collect();
+
+ for entry in entries {
+ if let Some(path) = parser.get_full_path_for_entry(&entry).unwrap() {
+ paths.push(path)
+ }
+ }
+
+ assert_eq!(paths.len(), 988);
+ }
+
+ #[test]
fn test_get_full_name() {
let sample = mft_sample();
let mut parser = MftParser::from_path(sample).unwrap();