From 58a69ea8688b4d1ec7c70caffaf30a608bccd4bc Mon Sep 17 00:00:00 2001 From: Daniel Schadt Date: Tue, 11 Aug 2026 16:07:39 +0200 Subject: add integration tests for the Rust side of things --- hittekaart/tests/generate.rs | 97 +++++++++++++++++++++++++++++++++ test-assets/Synthetic_BRouter_1.gpx.gz | Bin 0 -> 697 bytes 2 files changed, 97 insertions(+) create mode 100644 hittekaart/tests/generate.rs create mode 100644 test-assets/Synthetic_BRouter_1.gpx.gz diff --git a/hittekaart/tests/generate.rs b/hittekaart/tests/generate.rs new file mode 100644 index 0000000..3c80a11 --- /dev/null +++ b/hittekaart/tests/generate.rs @@ -0,0 +1,97 @@ +use std::{ + collections::hash_map::RandomState, + env, + error::Error, + fs, + hash::{BuildHasher, Hasher}, + path::PathBuf, +}; + +use hittekaart::{ + gpx, + renderer::{self, heatmap}, + storage::{self, Storage}, +}; + +const ZOOM: u32 = 10; + +fn prepare() -> heatmap::HeatCounter { + let track = gpx::extract_from_file("../test-assets/Synthetic_BRouter_1.gpx.gz", gpx::Compression::Gzip).unwrap(); + renderer::prepare( + &heatmap::Renderer, + ZOOM, + &[track], + || Ok(()), + ).unwrap() +} + +#[test] +fn test_osmand() { + let heat = prepare(); + let mut store = storage::OsmAnd::open(":memory:").unwrap(); + store.prepare().unwrap(); + store.prepare_zoom(ZOOM).unwrap(); + renderer::colorize( + &heatmap::Renderer, + heat, + |tile| { + store.store(ZOOM, tile.x, tile.y, &tile.data) + }, + ).unwrap(); + store.finish().unwrap(); +} + +#[test] +fn test_mbtiles() { + let heat = prepare(); + let mut store = storage::MbTiles::open(":memory:").unwrap() + .with_name("new name".into()) + .with_description(Some("new description".into())); + store.prepare().unwrap(); + store.prepare_zoom(ZOOM).unwrap(); + renderer::colorize( + &heatmap::Renderer, + heat, + |tile| { + store.store(ZOOM, tile.x, tile.y, &tile.data) + }, + ).unwrap(); + store.finish().unwrap(); +} + +// Zero dependency random number generator +fn rand() -> u64 { + RandomState::new().build_hasher().finish() +} + +fn run_folder(base: PathBuf) -> Result<(), Box> { + let heat = prepare(); + let mut store = storage::Folder::new(base); + store.prepare()?; + store.prepare_zoom(ZOOM)?; + renderer::colorize( + &heatmap::Renderer, + heat, + |tile| { + store.store(ZOOM, tile.x, tile.y, &tile.data) + }, + )?; + store.finish()?; + Ok(()) +} + +#[test] +fn test_folder() { + let mut tmp = env::temp_dir(); + tmp.push(&format!("hitte_test_{}", rand())); + + fs::create_dir(&tmp).unwrap(); + + let result = run_folder(tmp.clone()); + + fs::remove_dir_all(&tmp).unwrap(); + + if let Err(e) = result { + panic!("{}", e); + } +} diff --git a/test-assets/Synthetic_BRouter_1.gpx.gz b/test-assets/Synthetic_BRouter_1.gpx.gz new file mode 100644 index 0000000..e380fc7 Binary files /dev/null and b/test-assets/Synthetic_BRouter_1.gpx.gz differ -- cgit v1.2.3