pub use rapidgeo_distance::LngLat;
#[cfg(feature = "batch")]
pub mod batch;
mod decode;
mod encode;
mod error;
mod simplify;
pub use decode::*;
pub use encode::*;
pub use error::*;
pub use simplify::*;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_simple_encode_decode() {
let coords = vec![
LngLat::new_deg(-120.2, 38.5),
LngLat::new_deg(-120.95, 35.6),
LngLat::new_deg(-126.453, 43.252),
];
let encoded = encode(&coords, 5).unwrap();
let decoded = decode(&encoded, 5).unwrap();
assert_eq!(coords.len(), decoded.len());
for (original, decoded_coord) in coords.iter().zip(decoded.iter()) {
assert!((original.lng_deg - decoded_coord.lng_deg).abs() < 0.00001);
assert!((original.lat_deg - decoded_coord.lat_deg).abs() < 0.00001);
}
}
#[test]
fn test_precision_6() {
let coords = vec![
LngLat::new_deg(-122.483696, 37.833818),
LngLat::new_deg(-122.483482, 37.833174),
];
let encoded = encode(&coords, 6).unwrap();
let decoded = decode(&encoded, 6).unwrap();
assert_eq!(coords.len(), decoded.len());
for (original, decoded_coord) in coords.iter().zip(decoded.iter()) {
assert!((original.lng_deg - decoded_coord.lng_deg).abs() < 0.000001);
assert!((original.lat_deg - decoded_coord.lat_deg).abs() < 0.000001);
}
}
#[test]
fn test_empty_coords() {
let coords: Vec<LngLat> = vec![];
let encoded = encode(&coords, 5).unwrap();
assert_eq!(encoded, "");
let decoded = decode("", 5).unwrap();
assert_eq!(decoded.len(), 0);
}
#[test]
fn test_single_coordinate() {
let coords = vec![LngLat::new_deg(-122.4194, 37.7749)];
let encoded = encode(&coords, 5).unwrap();
let decoded = decode(&encoded, 5).unwrap();
assert_eq!(decoded.len(), 1);
assert!((coords[0].lng_deg - decoded[0].lng_deg).abs() < 0.00001);
assert!((coords[0].lat_deg - decoded[0].lat_deg).abs() < 0.00001);
}
#[test]
fn test_known_vectors() {
let coords = vec![
LngLat::new_deg(-120.2, 38.5),
LngLat::new_deg(-120.95, 40.7),
LngLat::new_deg(-126.453, 43.252),
];
let encoded = encode(&coords, 5).unwrap();
assert_eq!(encoded, "_p~iF~ps|U_ulLnnqC_mqNvxq`@");
let decoded = decode("_p~iF~ps|U_ulLnnqC_mqNvxq`@", 5).unwrap();
assert_eq!(decoded.len(), 3);
for (original, decoded_coord) in coords.iter().zip(decoded.iter()) {
assert!((original.lng_deg - decoded_coord.lng_deg).abs() < 0.00001);
assert!((original.lat_deg - decoded_coord.lat_deg).abs() < 0.00001);
}
}
}