#![cfg(feature = "serde")]
#[macro_use]
extern crate std;
use bitarray::{BitArray, Hamming};
use hgg::{Hgg, HggLite};
use rand::{Rng, SeedableRng};
use space::{Knn, KnnInsert};
#[test]
fn serde_json_bincode_round_trip_lite() {
let mut hgg: HggLite<Hamming, BitArray<32>, ()> = HggLite::default().insert_knn(100);
let mut rng = rand_xoshiro::Xoshiro256PlusPlus::seed_from_u64(0);
let keys: Vec<BitArray<32>> = (&mut rng)
.sample_iter::<[u8; 32], _>(rand::distributions::Standard)
.map(BitArray::new)
.take(1 << 8)
.collect();
for &key in &keys {
hgg.insert(key, ());
}
let old_knns: Vec<Vec<_>> = keys.iter().map(|k| hgg.knn(k, 10)).collect();
let hgg: HggLite<Hamming, BitArray<32>, ()> = serde_json::from_str(
&serde_json::to_string(&hgg).expect("failed to serialize with serde_json"),
)
.expect("failed to deserialize with serde_json");
let mut bdata = vec![];
bincode::serialize_into(&mut bdata, &hgg).expect("failed to serialize with bincode");
let hgg: HggLite<Hamming, BitArray<32>, ()> =
bincode::deserialize_from(bdata.as_slice()).expect("failed to deserialize with bincode");
let new_knns: Vec<Vec<_>> = keys.iter().map(|k| hgg.knn(k, 10)).collect();
assert_eq!(old_knns, new_knns);
}
#[test]
fn serde_json_bincode_round_trip_hgg() {
let mut hgg: Hgg<Hamming, BitArray<32>, ()> = Hgg::default().insert_knn(100);
let mut rng = rand_xoshiro::Xoshiro256PlusPlus::seed_from_u64(0);
let keys: Vec<BitArray<32>> = (&mut rng)
.sample_iter::<[u8; 32], _>(rand::distributions::Standard)
.map(BitArray::new)
.take(1 << 8)
.collect();
for &key in &keys {
hgg.insert(key, ());
}
let old_knns: Vec<Vec<_>> = keys.iter().map(|k| hgg.knn(k, 10)).collect();
let hgg: Hgg<Hamming, BitArray<32>, ()> = serde_json::from_str(
&serde_json::to_string(&hgg).expect("failed to serialize with serde_json"),
)
.expect("failed to deserialize with serde_json");
let mut bdata = vec![];
bincode::serialize_into(&mut bdata, &hgg).expect("failed to serialize with bincode");
let hgg: Hgg<Hamming, BitArray<32>, ()> =
bincode::deserialize_from(bdata.as_slice()).expect("failed to deserialize with bincode");
let new_knns: Vec<Vec<_>> = keys.iter().map(|k| hgg.knn(k, 10)).collect();
assert_eq!(old_knns, new_knns);
}