#[derive(Debug,PartialEq)]
#[allow(dead_code)]
pub struct Coords {
latitude: f64,
longtitude: f64,
}
impl Coords {
pub fn new(latitude: f64, longtitude: f64) -> Result<Coords, String> {
if !Self::is_valid(latitude, longtitude) {
return Err("Invalid coordinates!".to_string());
}
Ok(Coords {
latitude: latitude,
longtitude: longtitude,
})
}
pub fn is_valid(latitude: f64, longtitude: f64) -> bool {
(latitude >= -90f64 && latitude <= 90f64) && (longtitude >= -180f64 && longtitude <= 180f64)
}
}
#[test]
fn is_valid_coords() {
let result = Coords::new(-90_f64, -180_f64).unwrap();
let expected = Coords {
latitude: -90_f64,
longtitude: -180_f64,
};
assert_eq!(expected, result);
}
#[test]
fn boundary_tests() {
assert_eq!(true, Coords::is_valid(-90_f64, -180_f64));
assert_eq!(true, Coords::is_valid(-90_f64, 180_f64));
assert_eq!(true, Coords::is_valid(90_f64, 180_f64));
assert_eq!(true, Coords::is_valid(90_f64, -180_f64));
assert_eq!(false, Coords::is_valid(-91_f64, -180_f64));
assert_eq!(false, Coords::is_valid(91_f64, 180_f64));
assert_eq!(false, Coords::is_valid(-90.99, -180f64));
}