#![cfg(feature = "geospatial")]
use assert_approx_eq::assert_approx_eq;
use redis::geo::{Coord, RadiusOptions, RadiusOrder, RadiusSearchResult, Unit};
use redis::{Commands, RedisResult};
mod support;
use crate::support::*;
const PALERMO: (&str, &str, &str) = ("13.361389", "38.115556", "Palermo");
const CATANIA: (&str, &str, &str) = ("15.087269", "37.502669", "Catania");
const AGRIGENTO: (&str, &str, &str) = ("13.5833332", "37.316667", "Agrigento");
#[test]
fn test_geoadd_single_tuple() {
let ctx = TestContext::new();
let mut con = ctx.connection();
assert_eq!(con.geo_add("my_gis", PALERMO), Ok(1));
}
#[test]
fn test_geoadd_multiple_tuples() {
let ctx = TestContext::new();
let mut con = ctx.connection();
assert_eq!(con.geo_add("my_gis", &[PALERMO, CATANIA]), Ok(2));
}
#[test]
fn test_geodist_existing_members() {
let ctx = TestContext::new();
let mut con = ctx.connection();
assert_eq!(con.geo_add("my_gis", &[PALERMO, CATANIA]), Ok(2));
let dist: f64 = con
.geo_dist("my_gis", PALERMO.2, CATANIA.2, Unit::Kilometers)
.unwrap();
assert_approx_eq!(dist, 166.2742, 0.001);
}
#[test]
fn test_geodist_support_option() {
let ctx = TestContext::new();
let mut con = ctx.connection();
assert_eq!(con.geo_add("my_gis", &[PALERMO, CATANIA]), Ok(2));
// We should be able to extract the value as an Option<_>, so we can detect
// if a member is missing
let result: RedisResult