internment 0.5.0

Easy interning of data
Documentation

#[cfg(feature = "bench")]
use internment::{ArcIntern, Intern, LocalIntern};

#[cfg(not(feature = "bench"))]
fn main() {}


#[cfg(feature = "bench")]
fn main() {
    println!("^^^^^^^^^^^^^^^^^^^^^^");
    Intern::new(0i64);
    LocalIntern::new(0i64);
    ArcIntern::new(0i64);
    arc_interner::ArcIntern::new(0i64);
    let mut threads = Vec::new();
    for _ in 1..10000 {
        threads.push(std::thread::spawn(|| {
            ArcIntern::new(1i64);
        }));
        threads.push(std::thread::spawn(|| {
            let _x = ArcIntern::new(1i64);
            std::thread::sleep(std::time::Duration::from_nanos(1));
        }));
    }
    for x in threads.into_iter() {
        x.join().unwrap();
    }
    println!("moving on");
    use std::thread;
    let mut thandles = vec![];
    for _i in 0..10 {
        thandles.push(thread::spawn(|| {
            for _i in 0..100_000 {
                let _interned1 = ArcIntern::new("foo".to_string());
                let _interned2 = ArcIntern::new("bar".to_string());
            }
        }));
    }
    for h in thandles.into_iter() {
        h.join().unwrap();
    }
    println!("and finally");
    #[derive(Eq, PartialEq, Hash)]
    pub struct TestStruct(String, u64);

    let mut thandles = vec![];
    for _i in 0..10 {
        thandles.push(thread::spawn(|| {
            for _i in 0..100_000 {
                let _interned1 = ArcIntern::new(TestStruct("foo".to_string(), 5));
                let _interned2 = ArcIntern::new(TestStruct("bar".to_string(), 10));
            }
        }));
    }
    for h in thandles.into_iter() {
        h.join().unwrap()
    }

    println!("vvvvvvvvvvvvvvvvvvvvv");
    println!("all good\n\n\n\n");
}