Skip to content

Instantly share code, notes, and snippets.

@spearman

spearman/main.rs Secret

Created May 28, 2023 19:23
Show Gist options
  • Save spearman/adfc6d84251169fe6075c89eef73043e to your computer and use it in GitHub Desktop.
Save spearman/adfc6d84251169fe6075c89eef73043e to your computer and use it in GitHub Desktop.
Stash serialization
use rand::{Rng, SeedableRng};
use rand_xorshift::XorShiftRng;
use serde_json;
use stash::Stash;
fn main() {
for x in 0..1000 {
println!("ITER: {}", x);
let mut v1 = Stash::<f64>::new();
let mut e1 = Vec::new();
let mut r = XorShiftRng::seed_from_u64(x);
for _ in 0..100 {
// randomly add or remove an element
if r.gen_bool (0.5) {
e1.push(v1.put (1.0));
} else if e1.len() > 0 {
let n = r.gen_range(0..e1.len());
let i = e1.remove(n);
v1.take(i);
}
}
let s = serde_json::to_string_pretty(&v1).unwrap();
let mut v2 = serde_json::from_str::<Stash<f64>>(&s).unwrap();
let mut e2 = e1.clone();
for _ in 0..100 {
// randomly add or remove an element
if r.gen_bool (0.5) {
e1.push(v1.put (1.0));
e2.push(v2.put (1.0));
} else if e1.len() > 0 {
let n = r.gen_range(0..e1.len());
let i1 = e1.remove(n);
let i2 = e2.remove(n);
v1.take(i1).unwrap();
v2.take(i2).unwrap();
}
}
let s1 = serde_json::to_string_pretty(&v1).unwrap();
let s2 = serde_json::to_string_pretty(&v2).unwrap();
assert_eq!(s1, s2);
}
println!("done");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment