use std::io::{BufReader,BufRead};
use std::fs::File;
pub struct Words {
pub words: Vec<String>
}
impl Words {
#[allow(unused)]
pub fn new() -> Words { Words {
words: vec![]
}
}
#[allow(unused)]
pub fn populate(&mut self) { let file = File::open("/usr/share/dict/words").expect("/usr/share/dict/words DNE");
for line in BufReader::new(file).lines() {
self.words.push(line.unwrap());
}
self.words.sort();
}
#[allow(unused)]
pub fn get(&self, query: String) -> String {
match self.words.binary_search(&query) {
Ok(x) => return self.words[x].clone(),
Err(_) => return "This list doesn't contain the word.".to_string()
}
}
#[allow(unused)]
pub fn exists(&self, query: String) -> bool {
match self.words.binary_search(&query) {
Ok(_) => return true,
Err(_) => return false
}
}
}
#[cfg(test)]
#[test]
fn test_new() {
let wordy = Words::new();
assert!(wordy.words.len() == 0);
}
#[test]
fn test_length() {
let mut wordy = Words::new();
wordy.populate();
assert_ne!(wordy.words.len(), 0);
}
#[test]
fn test_populate() {
let mut wordy = Words::new();
wordy.populate();
assert!(wordy.words.len() > 200000)
}
#[test]
fn test_get() {
let mut wordy = Words::new();
wordy.populate();
let x = wordy.get("chloroauric".to_string());
assert_eq!(x, "chloroauric".to_string());
}
#[test]
fn test_exists() {
let mut wordy = Words::new();
wordy.populate();
let x: bool = wordy.exists("the".to_string());
assert!(x == true);
}