geohashrust 0.0.2

A Rust GeoHash Library
Documentation
extern crate geohashrust;

use geohashrust::{GeoLocation, BinaryHash, encode, decode};

#[test]
fn test_encode() {
	assert!(encode(&GeoLocation::from_coordinates(31.55, 121.46), 1)=="w");
	assert!(encode(&GeoLocation::from_coordinates(31.55, 121.46), 2)=="wt");
	assert!(encode(&GeoLocation::from_coordinates(31.55, 121.46), 3)=="wtw");
	assert!(encode(&GeoLocation::from_coordinates(31.55, 121.46), 4)=="wtw7");
	assert!(encode(&GeoLocation::from_coordinates(31.55, 121.46), 5)=="wtw77");
	assert!(encode(&GeoLocation::from_coordinates(31.55, 121.46), 6)=="wtw77z");
	assert!(encode(&GeoLocation::from_coordinates(31.55, 121.46), 7)=="wtw77zs");
	assert!(encode(&GeoLocation::from_coordinates(31.55, 121.46), 8)=="wtw77zs2");
	assert!(encode(&GeoLocation::from_coordinates(31.55, 121.46), 9)=="wtw77zs2p");

	let l=GeoLocation{
	        latitude:31.16373922,
	        longitude:121.62585927,
	};
	assert_eq!(encode(&l, 1u8), "w");
	assert_eq!(encode(&l, 2u8), "wt");
	assert_eq!(encode(&l, 3u8), "wtw");
	assert_eq!(encode(&l, 4u8), "wtw3");
	assert_eq!(encode(&l, 5u8), "wtw3r");
	assert_eq!(encode(&l, 6u8), "wtw3r9");
	assert_eq!(encode(&l, 7u8), "wtw3r9j");
	assert_eq!(encode(&l, 8u8), "wtw3r9jj");
	assert_eq!(encode(&l, 9u8), "wtw3r9jjz");
	assert_eq!(encode(&l, 10u8), "wtw3r9jjzy");
	assert_eq!(encode(&l, 11u8), "wtw3r9jjzyj");
	assert_eq!(encode(&l, 12u8), "wtw3r9jjzyjc");
}

#[test]
fn test_binary_hash() {
    assert_eq!(BinaryHash::from_string("111001100111100").to_string(), "111001100111100");
    assert_eq!(BinaryHash::from_string("111001100111100000111100010001100011111111").to_string(), "111001100111100000111100010001100011111111");

    let l=GeoLocation{
            latitude:31.23,
            longitude:121.473,
    };
    assert_eq!(BinaryHash::encode(&l, 8).to_string(), "11100110");
    assert_eq!(BinaryHash::encode(&l, 15).to_string(), "111001100111100");
    assert_eq!(BinaryHash::encode(&l, 42).to_string(), "111001100111100000111100010001100011111111");

	assert_eq!(BinaryHash::encode(&GeoLocation::from_coordinates(31.55, 121.46), 5).to_string(), "11100");
	assert_eq!(BinaryHash::encode(&GeoLocation::from_coordinates(31.55, 121.46), 10).to_string(), "1110011001");
	assert_eq!(BinaryHash::encode(&GeoLocation::from_coordinates(31.55, 121.46), 15).to_string(), "111001100111100");
	assert_eq!(BinaryHash::encode(&GeoLocation::from_coordinates(31.55, 121.46), 20).to_string(), "11100110011110000111");
	assert_eq!(BinaryHash::encode(&GeoLocation::from_coordinates(31.55, 121.46), 25).to_string(), "1110011001111000011100111");
	assert_eq!(BinaryHash::encode(&GeoLocation::from_coordinates(31.55, 121.46), 30).to_string(), "111001100111100001110011111111");
	assert_eq!(BinaryHash::encode(&GeoLocation::from_coordinates(31.55, 121.46), 35).to_string(), "11100110011110000111001111111111000");
	assert_eq!(BinaryHash::encode(&GeoLocation::from_coordinates(31.55, 121.46), 40).to_string(), "1110011001111000011100111111111100000010");
	assert_eq!(BinaryHash::encode(&GeoLocation::from_coordinates(31.55, 121.46), 45).to_string(), "111001100111100001110011111111110000001010101");

    assert!(BinaryHash::from_string("11100").decode().contains(&GeoLocation::from_coordinates(21.0, 113.0)));
    assert!(!BinaryHash::from_string("11100").decode().contains(&GeoLocation::from_coordinates(81.0, 113.0)));
    assert!(BinaryHash::from_string("111001100111100").decode().contains(&GeoLocation::from_coordinates(31.6, 121.6)));
    assert!(!BinaryHash::from_string("111001100111100").decode().contains(&GeoLocation::from_coordinates(51.0, 121.6)));

    assert!(BinaryHash::decode_string("11100").contains(&GeoLocation::from_coordinates(21.0, 113.0)));
    assert!(!BinaryHash::decode_string("11100").contains(&GeoLocation::from_coordinates(81.0, 113.0)));
    assert!(BinaryHash::decode_string("111001100111100").contains(&GeoLocation::from_coordinates(31.6, 121.6)));
    assert!(!BinaryHash::decode_string("111001100111100").contains(&GeoLocation::from_coordinates(51.0, 121.6)));
}

#[test]
fn test_decode() {
	let p=GeoLocation::from_coordinates(31.55, 121.46);
	assert!(decode("w").contains(&p));
	assert!(decode("wt").contains(&p));
	assert!(decode("wtw").contains(&p));
	assert!(decode("wtw7").contains(&p));
	assert!(decode("wtw77").contains(&p));
	assert!(decode("wtw77z").contains(&p));
	assert!(decode("wtw77zs").contains(&p));
	assert!(decode("wtw77zs2").contains(&p));
	assert!(decode("wtw77zs2p").contains(&p));

	assert!(decode("w").contains(&GeoLocation::from_coordinates(21.0, 113.0)));
	assert!(decode("wtw3r9").contains(&GeoLocation::from_coordinates(31.1655, 121.624)));
	assert!(decode("wtw3r9jjz").contains(&GeoLocation::from_coordinates(31.163728, 121.625841)));
	assert!(!decode("wtw3r9jjz").contains(&GeoLocation::from_coordinates(32.163728, 121.625841)));
	assert!(decode("wtw3r9jjzyjc").contains(&GeoLocation::from_coordinates(31.16373922, 121.62585927)));
	assert!(!decode("wtw3r9jjzyjc").contains(&GeoLocation::from_coordinates(31.16373922, 121.63585927)));
}