1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#[macro_use]
extern crate lazy_static;

pub use self::data::blockchain;
pub use self::data::countries;
pub use self::data::defaults;
pub use self::data::media;
pub use self::data::misc;

pub mod locales;

pub mod data {
	pub mod blockchain {
		pub mod bitcoin;
		pub mod ethereum;
	}
	pub mod defaults {
		pub mod colors;
		pub mod crypto;
		pub mod emails;
		pub mod longitude_latitude;
		pub mod name;
		pub mod phone_numbers;
		pub mod types;
		pub mod usernames;
		pub mod uuids;
	}
	pub mod countries {
		pub mod nations;

		pub mod usa {
			pub mod addresses;
		}
		pub mod canada {
			pub mod addresses;
		}
	}
	pub mod misc {
		pub mod adjective;
		pub mod agent_bot;
		pub mod ancients;
		pub mod animals;
		pub mod appliances;
		pub mod artists;
		pub mod barcodes;
		pub mod blood;
		pub mod books;
		pub mod business;
		pub mod chess;
		pub mod codes;
		pub mod commerce;
		pub mod compass;
		pub mod cryptocurrency;
		pub mod currencies;
		pub mod date;
		pub mod demographic;
		pub mod device;
		pub mod fashion;
		pub mod food;
		pub mod greek_philosophers;
		pub mod industry_segments;
		pub mod ipv4;
		pub mod ipv6;
		pub mod job;
		pub mod lorem_ipsum;
		pub mod mac_address;
		pub mod marketing;
		pub mod measurements;
		pub mod military;
		pub mod programming_languages;
		pub mod quotes;
		pub mod relationship;
		pub mod restaurant;
		pub mod shakespeare;
		pub mod space;
		pub mod sports;
		pub mod stripe;
		pub mod subscription;
		pub mod tea;
	}
	pub mod media {
		pub mod elderscrolls;
		pub mod friends;
		pub mod games;
		pub mod hp_lovecraft;
		pub mod kpop;
		pub mod lord_of_the_rings;
		pub mod manga;
		pub mod mario;
		pub mod minecraft;
		pub mod movies;
		pub mod one_piece;
		pub mod pokemon;
		pub mod seinfeld;
		pub mod silicon_valley;
		pub mod simpsons;
		pub mod spongebob;
		pub mod starwars;
		pub mod starwars_yoda;
		pub mod studio_ghibli;
		pub mod the_hobbit;
		pub mod tolkein;
	}
	pub mod religion {
		pub mod bible;
	}
}

pub mod utils {
  pub mod seeder;
}

#[cfg(test)]
mod tests {
	#[test]
	fn it_works() {
		// let result = add(2, 2);
		// assert_eq!(result, 4);
	}

  #[test]
  fn test_greek_philosopher_names() {
    setup_rng();

    use crate::misc::greek_philosophers;
    let name: String = greek_philosophers::greek_philosopher_names();
    let expected: String = "Galen".to_owned();
    assert_eq!(expected, name);
  }

  #[test]
  fn test_greek_philosopher_quotes() {
    setup_rng();

    use crate::misc::greek_philosophers;
    let quote: String = greek_philosophers::greek_philosopher_quotes();
    let expected: String = "Good habits formed at youth make all the difference.".to_owned();
    assert_eq!(expected, quote);
  }

  /*
    Test variable setup.
   */
  use std::sync::Once;

  static STARTUP_RUN: Once = Once::new();
  const SEED_VALUE: u64 = 1;

  fn setup_rng() {
    STARTUP_RUN.call_once(|| {
      use crate::utils::seeder;
      seeder::set_seed(SEED_VALUE);
    });
  }
}