git_release_name/
lib.rs

1extern crate inflector;
2
3mod adjectives;
4mod adverbs;
5mod case;
6mod nouns;
7mod phrase;
8mod sha;
9
10pub use self::case::Case;
11pub use self::phrase::{ParsePhraseError, Phrase};
12
13/// Looks up a phrase from a given str slice. It should be able to look up
14/// any sized string but only if it's a valid hexadecimal.
15pub fn lookup(sha: &str) -> Result<Phrase, ParsePhraseError> {
16    sha.parse()
17}
18
19#[cfg(test)]
20mod tests {
21    use super::*;
22    use std::collections::HashSet;
23    use std::hash::Hash;
24
25    fn has_unique_elements<T>(iter: T) -> bool
26    where
27        T: IntoIterator,
28        T::Item: Eq + Hash,
29    {
30        let mut uniq = HashSet::new();
31        iter.into_iter().all(move |x| uniq.insert(x))
32    }
33
34    #[test]
35    fn unique_function_detects_non_unique() {
36        assert!(!has_unique_elements(vec![1, 1].iter()));
37    }
38
39    #[test]
40    fn adverbs_are_unique() {
41        assert!(has_unique_elements(adverbs::WORDS.iter()));
42    }
43
44    #[test]
45    fn adjectives_are_unique() {
46        assert!(has_unique_elements(adjectives::WORDS.iter()));
47    }
48
49    #[test]
50    fn nouns_are_unique() {
51        assert!(has_unique_elements(nouns::WORDS.iter()));
52    }
53}