1use crate::core::word_dictionary::WordDictionary;
7
8pub const BIP39_ENGLISH: &str = include_str!("bip39-english.txt");
12
13pub fn bip39_english() -> WordDictionary {
29 WordDictionary::builder()
30 .words_from_str(BIP39_ENGLISH)
31 .delimiter(" ")
32 .case_sensitive(false)
33 .build()
34 .expect("BIP-39 English word list should be valid")
35}
36
37#[cfg(test)]
38mod tests {
39 use super::*;
40
41 #[test]
42 fn test_bip39_english_word_count() {
43 let dict = bip39_english();
44 assert_eq!(dict.base(), 2048);
45 }
46
47 #[test]
48 fn test_bip39_english_first_word() {
49 let dict = bip39_english();
50 assert_eq!(dict.encode_word(0), Some("abandon"));
51 }
52
53 #[test]
54 fn test_bip39_english_last_word() {
55 let dict = bip39_english();
56 assert_eq!(dict.encode_word(2047), Some("zoo"));
57 }
58
59 #[test]
60 fn test_bip39_english_roundtrip() {
61 use crate::encoders::algorithms::word;
62
63 let dict = bip39_english();
64 let data = b"The quick brown fox jumps over the lazy dog";
65 let encoded = word::encode(data, &dict);
66 let decoded = word::decode(&encoded, &dict).unwrap();
67 assert_eq!(decoded, data);
68 }
69
70 #[test]
71 fn test_bip39_english_case_insensitive() {
72 let dict = bip39_english();
73 assert_eq!(dict.decode_word("abandon"), Some(0));
74 assert_eq!(dict.decode_word("ABANDON"), Some(0));
75 assert_eq!(dict.decode_word("Abandon"), Some(0));
76 }
77}