dary 0.1.1

This crate provides double-array construction and search functions.
Documentation
use std::env;
use std::fs;
use std::path::PathBuf;
use std::fmt::Debug;

use dary::DoubleArray;
use dary::Trie;

use rand::{Rng, thread_rng};
use rand::distributions::Alphanumeric;
use serde_derive::{Serialize, Deserialize};

#[derive(Serialize, Deserialize, Debug, PartialEq)]
struct MorphemeData {
    surface: String,
    cost: usize,
}

impl MorphemeData {
    fn new(surface: &str, cost: usize) -> Self {
        MorphemeData {
            surface: surface.to_string(),
            cost: cost
        }
    }
}


#[test]
fn double_array_1() {
	let mut keys: Vec<String> = Vec::new();
	for _ in 0..1000 {
		keys.push(thread_rng().sample_iter(Alphanumeric).take(10).collect::<String>());
	}

	let mut trie: Trie<u32> = Trie::new();
	for (i, key) in keys.iter().enumerate() {
		trie.set(&key, i as u32);
	}

	let double_array: DoubleArray<u32> = trie.to_double_array().unwrap();

	let mut path: PathBuf = env::current_dir().unwrap();
	path.push("test_double_array_1.dic");
	let double_array = double_array.dump(path.to_str().unwrap()).unwrap();

	for (i, key) in keys.iter().enumerate() {
		assert!(double_array.get(&key).unwrap().contains(&(i as u32)));
	}

	fs::remove_file(path).unwrap();
}

#[test]
fn double_array_2() {
	let mut keys: Vec<String> = Vec::new();
	for _ in 0..1000 {
		keys.push(thread_rng().sample_iter(Alphanumeric).take(10).collect::<String>());
	}

	let mut trie: Trie<String> = Trie::new();
	for key in keys.iter() {
		trie.set(&key, key.to_string());
	}

	let double_array: DoubleArray<String> = trie.to_double_array().unwrap();

	let mut path: PathBuf = env::current_dir().unwrap();
	path.push("test_double_array_2.dic");
	let double_array = double_array.dump(path.to_str().unwrap()).unwrap();

	for key in keys.iter() {
		assert!(double_array.get(&key).unwrap().contains(&key));
	}

	fs::remove_file(path).unwrap();
}

#[test]
fn double_array_3() {
	let mut keys: Vec<String> = Vec::new();
	for _ in 0..1000 {
		keys.push(thread_rng().sample_iter(Alphanumeric).take(10).collect::<String>());
	}

	let mut trie: Trie<MorphemeData> = Trie::new();
	for (i, key) in keys.iter().enumerate() {
		trie.set(&key, MorphemeData::new(key, i));
	}

	let double_array: DoubleArray<MorphemeData> = trie.to_double_array().unwrap();

	let mut path: PathBuf = env::current_dir().unwrap();
	path.push("test_double_array_3.dic");
	let double_array = double_array.dump(path.to_str().unwrap()).unwrap();

	for (i, key) in keys.iter().enumerate() {
		assert!(double_array.get(&key).unwrap().contains(&MorphemeData::new(key, i)));
	}

	fs::remove_file(path).unwrap();
}