diff --git a/tests/cucumber.rs b/tests/cucumber.rs index d62f8c7b2..b6921b55c 100644 --- a/tests/cucumber.rs +++ b/tests/cucumber.rs @@ -1,21 +1,21 @@ extern crate clap; +mod lexicographic_file_walker; mod osm; use core::panic; -use std::collections::{HashMap, HashSet, VecDeque}; -use std::error::Error; -use std::fs::{create_dir_all, DirEntry, File}; -use std::io::{self, Read, Write}; +use std::collections::{HashMap, HashSet}; +use std::fs::{create_dir_all, File}; +use std::io::{Read, Write}; use std::path::PathBuf; -use std::str::FromStr; -use std::{env, fmt, fs}; +use std::{env, fs}; use cheap_ruler::CheapRuler; -use clap::{Arg, Parser}; +use clap::Parser; use cucumber::{self, gherkin::Step, given, when, World}; use futures::{future, FutureExt}; use geo_types::{point, Point}; +use lexicographic_file_walker::LexicographicFileWalker; use osm::{OSMDb, OSMNode, OSMWay}; #[derive(Debug, Default, World)] @@ -235,57 +235,7 @@ fn get_file_as_byte_vec(path: &PathBuf) -> Vec { buffer } -// TODO: port into toolbox-rs -struct LexicographicFileWalker { - dirs: VecDeque, - files: VecDeque, -} - -impl LexicographicFileWalker { - pub fn new(path: &PathBuf) -> Self { - let mut dirs = VecDeque::new(); - - if path.is_dir() { - dirs.push_back(path.clone()); - } - - Self { - dirs, - files: VecDeque::new(), - } - } -} - -impl Iterator for LexicographicFileWalker { - type Item = PathBuf; - - fn next(&mut self) -> Option { - if self.dirs.is_empty() && self.files.is_empty() { - return None; - } - while self.files.is_empty() && !self.dirs.is_empty() { - assert!(!self.dirs.is_empty()); - let current_dir = self.dirs.pop_front().unwrap(); - let mut temp_dirs = Vec::new(); - - for entry in fs::read_dir(current_dir).unwrap() { - let entry = entry.unwrap(); - let path = entry.path(); - if path.is_dir() { - temp_dirs.push(path.clone()); - } else { - self.files.push_back(path.clone()); - } - } - self.files.make_contiguous().sort(); - temp_dirs.sort(); - self.dirs.extend(temp_dirs.into_iter()); - } - return self.files.pop_front(); - } -} - -#[derive( clap::ValueEnum, Clone, Default, Debug)] +#[derive(clap::ValueEnum, Clone, Default, Debug)] enum LoadMethod { Mmap, #[default] @@ -330,7 +280,6 @@ struct Args { p: RoutingAlgorithm, } - fn main() { let args = Args::parse(); println!("name: {:?}", args); diff --git a/tests/lexicographic_file_walker.rs b/tests/lexicographic_file_walker.rs new file mode 100644 index 000000000..c311b2456 --- /dev/null +++ b/tests/lexicographic_file_walker.rs @@ -0,0 +1,51 @@ +use std::{collections::VecDeque, fs, path::PathBuf}; + +// TODO: port into toolbox-rs +pub struct LexicographicFileWalker { + dirs: VecDeque, + files: VecDeque, +} + +impl LexicographicFileWalker { + pub fn new(path: &PathBuf) -> Self { + let mut dirs = VecDeque::new(); + + if path.is_dir() { + dirs.push_back(path.clone()); + } + + Self { + dirs, + files: VecDeque::new(), + } + } +} + +impl Iterator for LexicographicFileWalker { + type Item = PathBuf; + + fn next(&mut self) -> Option { + if self.dirs.is_empty() && self.files.is_empty() { + return None; + } + while self.files.is_empty() && !self.dirs.is_empty() { + assert!(!self.dirs.is_empty()); + let current_dir = self.dirs.pop_front().unwrap(); + let mut temp_dirs = Vec::new(); + + for entry in fs::read_dir(current_dir).unwrap() { + let entry = entry.unwrap(); + let path = entry.path(); + if path.is_dir() { + temp_dirs.push(path.clone()); + } else { + self.files.push_back(path.clone()); + } + } + self.files.make_contiguous().sort(); + temp_dirs.sort(); + self.dirs.extend(temp_dirs.into_iter()); + } + return self.files.pop_front(); + } +}