cellular_lib/lib.rs
1#![feature(test)]
2#![warn(
3 clippy::pedantic,
4 clippy::all,
5 clippy::style,
6 clippy::complexity,
7 clippy::correctness,
8 clippy::perf
9)]
10#![allow(
11 clippy::module_name_repetitions,
12 clippy::module_name_repetitions,
13 clippy::inline_always,
14 clippy::cast_sign_loss,
15 clippy::cast_possible_wrap
16)]
17
18#[macro_use]
19pub mod cellular_automata;
20//use self::cellular_automata::*;
21//use cellular_automata;
22
23#[cfg(test)]
24mod tests {
25 extern crate test;
26 use test::Bencher;
27 /*
28 #[test]
29 fn adaptive_transition_function_map_node_parse() {
30 let _parsed: crate::cellular_automata::AdaptiveTransitionFunctionMapNode =
31 crate::cellular_automata::util::Parseable::parse("1 1 2 3,1 1 4 3");
32 }
33 #[test]
34 fn adaptive_transition_function_map_node_visit() {
35 let parsed: crate::cellular_automata::AdaptiveTransitionFunctionMapNode =
36 crate::cellular_automata::util::Parseable::parse("2 3,4 5");
37 assert_eq!(
38 parsed.next_node(&crate::cellular_automata::util::UsizeWrapper::from(2)),
39 &crate::cellular_automata::AdaptiveTransitionFunctionMapNode::End(
40 crate::cellular_automata::util::UsizeWrapper::from(3)
41 )
42 );
43 assert_eq!(
44 parsed.next_node(&crate::cellular_automata::util::UsizeWrapper::from(4)),
45 &crate::cellular_automata::AdaptiveTransitionFunctionMapNode::End(
46 crate::cellular_automata::util::UsizeWrapper::from(5)
47 )
48 );
49 }
50 #[test]
51 fn adaptive_transition_function_map_node_lookup() {
52 let parsed: crate::cellular_automata::AdaptiveTransitionFunctionMapNode =
53 crate::cellular_automata::util::Parseable::parse("2 3 4,5 6 7,8 9 10");
54 assert_eq!(
55 crate::cellular_automata::util::UsizeWrapper::from(4),
56 parsed.follow_path(vec![
57 &crate::cellular_automata::util::UsizeWrapper::from(2),
58 &crate::cellular_automata::util::UsizeWrapper::from(3)
59 ])
60 );
61 }
62 */
63 #[test]
64 fn test_addr_normal_to_flattened_usize() {
65 assert_eq!(
66 crate::cellular_automata::util::addr_normal_to_flattened_usize(&[2, 3], &[5, 6]),
67 28
68 );
69 }
70 #[test]
71 fn new_adaptive_transition_function_map_node_lookup() {
72 let parsed: crate::cellular_automata::AdaptiveTransitionFunctionMatrix =
73 crate::cellular_automata::util::Parseable::parse("2 3 4;5 6 7;8 9 10");
74 assert_eq!(
75 crate::cellular_automata::util::NanoVec::new(
76 1,
77 crate::cellular_automata::util::UsizeWrapper::from(4)
78 ),
79 parsed.follow_path(&[
80 &crate::cellular_automata::util::NanoVec::new(
81 1,
82 crate::cellular_automata::util::UsizeWrapper::from(2)
83 ),
84 &crate::cellular_automata::util::NanoVec::new(
85 1,
86 crate::cellular_automata::util::UsizeWrapper::from(3)
87 )
88 ])
89 );
90 assert_eq!(
91 crate::cellular_automata::util::NanoVec::new(
92 1,
93 crate::cellular_automata::util::UsizeWrapper::from(10)
94 ),
95 parsed.follow_path(&[
96 &crate::cellular_automata::util::NanoVec::new(
97 1,
98 crate::cellular_automata::util::UsizeWrapper::from(8)
99 ),
100 &crate::cellular_automata::util::NanoVec::new(
101 1,
102 crate::cellular_automata::util::UsizeWrapper::from(9)
103 )
104 ])
105 );
106 }
107 #[test]
108 fn test_nano_vec_index() {
109 let mut tmp: crate::cellular_automata::util::NanoVec<
110 crate::cellular_automata::util::UsizeWrapper,
111 > = crate::cellular_automata::util::NanoVec::new(
112 16,
113 crate::cellular_automata::util::UsizeWrapper::from(0),
114 );
115 for j in 0..16 {
116 tmp.set_at(j, crate::cellular_automata::util::UsizeWrapper::from(j));
117 }
118 for j in 0..16 {
119 assert_eq!(
120 tmp.at(j),
121 &crate::cellular_automata::util::UsizeWrapper::from(j)
122 );
123 }
124 }
125 #[test]
126 fn test_nano_vec_iter() {
127 let mut tmp: crate::cellular_automata::util::NanoVec<
128 crate::cellular_automata::util::UsizeWrapper,
129 > = crate::cellular_automata::util::NanoVec::new(
130 16,
131 crate::cellular_automata::util::UsizeWrapper::from(0),
132 );
133 for j in 0..16 {
134 tmp.set_at(j, crate::cellular_automata::util::UsizeWrapper::from(j));
135 }
136 for (j, item) in tmp.into_iter().enumerate() {
137 assert_eq!(item, crate::cellular_automata::util::UsizeWrapper::from(j));
138 }
139 }
140 #[test]
141 fn test_parse_table_sections() {
142 assert_eq!(
143 crate::cellular_automata::util::parse_table_sections("7;1,1,1,1;a,s,d,f"),
144 vec!["a", "s", "d", "f"]
145 );
146 }
147 #[test]
148 fn test_access_flattened_vec() {
149 /*
150 assert_eq!(
151 crate::cellular_automata::util::access_flattened_vec(
152 &vec![1, 2, 3, 4, 5, 6, 7, 8][..],
153 &vec![0, 1, 1],
154 &vec![2, 2, 2],
155 0
156 ),
157 &4
158 );
159 */
160 assert_eq!(
161 crate::cellular_automata::util::access_flattened_vec(
162 &vec![2, 3, 4, 5, 6, 7, 8, 9, 10][..],
163 &vec![3][..],
164 &vec![8][..],
165 0,
166 &0
167 ),
168 &5
169 );
170 assert_eq!(
171 crate::cellular_automata::util::access_flattened_vec(
172 &vec![2, 3, 4, 5, 6, 7, 8, 9, 10][..],
173 &vec![1, 2][..],
174 &vec![3, 3][..],
175 0,
176 &0
177 ),
178 &7
179 );
180 assert_eq!(
181 crate::cellular_automata::util::access_flattened_vec(
182 &vec![2, 3, 4, 5, 6, 7][..],
183 &vec![1, 2][..],
184 &vec![2, 3][..],
185 0,
186 &0
187 ),
188 &7
189 );
190 assert_eq!(
191 crate::cellular_automata::util::access_flattened_vec(
192 &vec![2, 3, 4, 5, 6, 7][..],
193 &vec![6, 2][..],
194 &vec![2, 3][..],
195 0,
196 &99
197 ),
198 &99
199 );
200 }
201 /*
202 #[test]
203 fn test_adaptive_neighbor_parser_parse() {
204 let parsed: crate::cellular_automata::AdaptiveNeighborParserNode =
205 crate::cellular_automata::util::Parseable::parse("a2 3 4");
206 assert_eq!(
207 parsed,
208 crate::cellular_automata::AdaptiveNeighborParserNode::Absolute(vec![2, 3, 4])
209 );
210 let parsed_2: crate::cellular_automata::AdaptiveNeighborParserNode =
211 crate::cellular_automata::util::Parseable::parse("r2 -3 4");
212 assert_eq!(
213 parsed_2,
214 crate::cellular_automata::AdaptiveNeighborParserNode::Relative(vec![2, -3, 4])
215 )
216 }
217 */
218 #[test]
219 fn test_encode_table_sections() {
220 let to_encode = vec![
221 String::from("asdf"),
222 String::from("foo"),
223 String::from(";,.bar"),
224 String::from("Baz"),
225 ];
226 let encoded = crate::cellular_automata::util::encode_table_sections(&to_encode);
227 assert_eq!(
228 crate::cellular_automata::util::parse_table_sections(encoded.as_str()),
229 to_encode
230 );
231 }
232 #[bench]
233 fn bench_new_transition_function_lookup(bencher: &mut Bencher) {
234 let parsed: crate::cellular_automata::AdaptiveTransitionFunctionMatrix =
235 crate::cellular_automata::util::Parseable::parse("2 3 4;5 6 7;8 9 10");
236 bencher.iter(|| {
237 for _ in 0..200 {
238 assert_eq!(
239 crate::cellular_automata::util::NanoVec::new(
240 1,
241 crate::cellular_automata::util::UsizeWrapper::from(4)
242 ),
243 parsed.follow_path(&[
244 &crate::cellular_automata::util::NanoVec::new(
245 1,
246 crate::cellular_automata::util::UsizeWrapper::from(2)
247 ),
248 &crate::cellular_automata::util::NanoVec::new(
249 1,
250 crate::cellular_automata::util::UsizeWrapper::from(3)
251 )
252 ])
253 );
254 assert_eq!(
255 crate::cellular_automata::util::NanoVec::new(
256 1,
257 crate::cellular_automata::util::UsizeWrapper::from(10)
258 ),
259 parsed.follow_path(&[
260 &crate::cellular_automata::util::NanoVec::new(
261 1,
262 crate::cellular_automata::util::UsizeWrapper::from(8)
263 ),
264 &crate::cellular_automata::util::NanoVec::new(
265 1,
266 crate::cellular_automata::util::UsizeWrapper::from(9)
267 )
268 ])
269 );
270 }
271 });
272 }
273 /*
274 #[bench]
275 fn bench_transition_function_lookup(bencher: &mut Bencher) {
276 let parsed: crate::cellular_automata::AdaptiveTransitionFunctionMapNode =
277 crate::cellular_automata::util::Parseable::parse("2 3 4,5 6 7,8 9 10");
278 bencher.iter(|| {
279 for _ in 0..200 {
280 assert_eq!(
281 crate::cellular_automata::util::UsizeWrapper::from(4),
282 parsed.follow_path(vec![
283 &crate::cellular_automata::util::UsizeWrapper::from(2),
284 &crate::cellular_automata::util::UsizeWrapper::from(3)
285 ])
286 );
287 assert_eq!(
288 crate::cellular_automata::util::UsizeWrapper::from(7),
289 parsed.follow_path(vec![
290 &crate::cellular_automata::util::UsizeWrapper::from(5),
291 &crate::cellular_automata::util::UsizeWrapper::from(6)
292 ])
293 );
294 assert_eq!(
295 crate::cellular_automata::util::UsizeWrapper::from(10),
296 parsed.follow_path(vec![
297 &crate::cellular_automata::util::UsizeWrapper::from(8),
298 &crate::cellular_automata::util::UsizeWrapper::from(9)
299 ])
300 );
301 }
302 });
303 }
304 */
305}