cellular_lib 0.1.1

A library for simulation of cellular automata
Documentation
#![feature(test)]
#![warn(
    clippy::pedantic,
    clippy::all,
    clippy::style,
    clippy::complexity,
    clippy::correctness,
    clippy::perf
)]
#![allow(
    clippy::module_name_repetitions,
    clippy::module_name_repetitions,
    clippy::inline_always,
    clippy::cast_sign_loss,
    clippy::cast_possible_wrap
)]

#[macro_use]
pub mod cellular_automata;
//use self::cellular_automata::*;
//use cellular_automata;

#[cfg(test)]
mod tests {
    extern crate test;
    use test::Bencher;
    /*
    #[test]
    fn adaptive_transition_function_map_node_parse() {
        let _parsed: crate::cellular_automata::AdaptiveTransitionFunctionMapNode =
            crate::cellular_automata::util::Parseable::parse("1 1 2 3,1 1 4 3");
    }
    #[test]
    fn adaptive_transition_function_map_node_visit() {
        let parsed: crate::cellular_automata::AdaptiveTransitionFunctionMapNode =
            crate::cellular_automata::util::Parseable::parse("2 3,4 5");
        assert_eq!(
            parsed.next_node(&crate::cellular_automata::util::UsizeWrapper::from(2)),
            &crate::cellular_automata::AdaptiveTransitionFunctionMapNode::End(
                crate::cellular_automata::util::UsizeWrapper::from(3)
            )
        );
        assert_eq!(
            parsed.next_node(&crate::cellular_automata::util::UsizeWrapper::from(4)),
            &crate::cellular_automata::AdaptiveTransitionFunctionMapNode::End(
                crate::cellular_automata::util::UsizeWrapper::from(5)
            )
        );
    }
    #[test]
    fn adaptive_transition_function_map_node_lookup() {
        let parsed: crate::cellular_automata::AdaptiveTransitionFunctionMapNode =
            crate::cellular_automata::util::Parseable::parse("2 3 4,5 6 7,8 9 10");
        assert_eq!(
            crate::cellular_automata::util::UsizeWrapper::from(4),
            parsed.follow_path(vec![
                &crate::cellular_automata::util::UsizeWrapper::from(2),
                &crate::cellular_automata::util::UsizeWrapper::from(3)
            ])
        );
    }
    */
    #[test]
    fn test_addr_normal_to_flattened_usize() {
        assert_eq!(
            crate::cellular_automata::util::addr_normal_to_flattened_usize(&[2, 3], &[5, 6]),
            28
        );
    }
    #[test]
    fn new_adaptive_transition_function_map_node_lookup() {
        let parsed: crate::cellular_automata::AdaptiveTransitionFunctionMatrix =
            crate::cellular_automata::util::Parseable::parse("2 3 4;5 6 7;8 9 10");
        assert_eq!(
            crate::cellular_automata::util::NanoVec::new(
                1,
                crate::cellular_automata::util::UsizeWrapper::from(4)
            ),
            parsed.follow_path(&[
                &crate::cellular_automata::util::NanoVec::new(
                    1,
                    crate::cellular_automata::util::UsizeWrapper::from(2)
                ),
                &crate::cellular_automata::util::NanoVec::new(
                    1,
                    crate::cellular_automata::util::UsizeWrapper::from(3)
                )
            ])
        );
        assert_eq!(
            crate::cellular_automata::util::NanoVec::new(
                1,
                crate::cellular_automata::util::UsizeWrapper::from(10)
            ),
            parsed.follow_path(&[
                &crate::cellular_automata::util::NanoVec::new(
                    1,
                    crate::cellular_automata::util::UsizeWrapper::from(8)
                ),
                &crate::cellular_automata::util::NanoVec::new(
                    1,
                    crate::cellular_automata::util::UsizeWrapper::from(9)
                )
            ])
        );
    }
    #[test]
    fn test_nano_vec_index() {
        let mut tmp: crate::cellular_automata::util::NanoVec<
            crate::cellular_automata::util::UsizeWrapper,
        > = crate::cellular_automata::util::NanoVec::new(
            16,
            crate::cellular_automata::util::UsizeWrapper::from(0),
        );
        for j in 0..16 {
            tmp.set_at(j, crate::cellular_automata::util::UsizeWrapper::from(j));
        }
        for j in 0..16 {
            assert_eq!(
                tmp.at(j),
                &crate::cellular_automata::util::UsizeWrapper::from(j)
            );
        }
    }
    #[test]
    fn test_nano_vec_iter() {
        let mut tmp: crate::cellular_automata::util::NanoVec<
            crate::cellular_automata::util::UsizeWrapper,
        > = crate::cellular_automata::util::NanoVec::new(
            16,
            crate::cellular_automata::util::UsizeWrapper::from(0),
        );
        for j in 0..16 {
            tmp.set_at(j, crate::cellular_automata::util::UsizeWrapper::from(j));
        }
        for (j, item) in tmp.into_iter().enumerate() {
            assert_eq!(item, crate::cellular_automata::util::UsizeWrapper::from(j));
        }
    }
    #[test]
    fn test_parse_table_sections() {
        assert_eq!(
            crate::cellular_automata::util::parse_table_sections("7;1,1,1,1;a,s,d,f"),
            vec!["a", "s", "d", "f"]
        );
    }
    #[test]
    fn test_access_flattened_vec() {
        /*
        assert_eq!(
            crate::cellular_automata::util::access_flattened_vec(
                &vec![1, 2, 3, 4, 5, 6, 7, 8][..],
                &vec![0, 1, 1],
                &vec![2, 2, 2],
                0
            ),
            &4
        );
        */
        assert_eq!(
            crate::cellular_automata::util::access_flattened_vec(
                &vec![2, 3, 4, 5, 6, 7, 8, 9, 10][..],
                &vec![3][..],
                &vec![8][..],
                0,
                &0
            ),
            &5
        );
        assert_eq!(
            crate::cellular_automata::util::access_flattened_vec(
                &vec![2, 3, 4, 5, 6, 7, 8, 9, 10][..],
                &vec![1, 2][..],
                &vec![3, 3][..],
                0,
                &0
            ),
            &7
        );
        assert_eq!(
            crate::cellular_automata::util::access_flattened_vec(
                &vec![2, 3, 4, 5, 6, 7][..],
                &vec![1, 2][..],
                &vec![2, 3][..],
                0,
                &0
            ),
            &7
        );
        assert_eq!(
            crate::cellular_automata::util::access_flattened_vec(
                &vec![2, 3, 4, 5, 6, 7][..],
                &vec![6, 2][..],
                &vec![2, 3][..],
                0,
                &99
            ),
            &99
        );
    }
    /*
    #[test]
    fn test_adaptive_neighbor_parser_parse() {
        let parsed: crate::cellular_automata::AdaptiveNeighborParserNode =
            crate::cellular_automata::util::Parseable::parse("a2 3 4");
        assert_eq!(
            parsed,
            crate::cellular_automata::AdaptiveNeighborParserNode::Absolute(vec![2, 3, 4])
        );
        let parsed_2: crate::cellular_automata::AdaptiveNeighborParserNode =
            crate::cellular_automata::util::Parseable::parse("r2 -3 4");
        assert_eq!(
            parsed_2,
            crate::cellular_automata::AdaptiveNeighborParserNode::Relative(vec![2, -3, 4])
        )
    }
    */
    #[test]
    fn test_encode_table_sections() {
        let to_encode = vec![
            String::from("asdf"),
            String::from("foo"),
            String::from(";,.bar"),
            String::from("Baz"),
        ];
        let encoded = crate::cellular_automata::util::encode_table_sections(&to_encode);
        assert_eq!(
            crate::cellular_automata::util::parse_table_sections(encoded.as_str()),
            to_encode
        );
    }
    #[bench]
    fn bench_new_transition_function_lookup(bencher: &mut Bencher) {
        let parsed: crate::cellular_automata::AdaptiveTransitionFunctionMatrix =
            crate::cellular_automata::util::Parseable::parse("2 3 4;5 6 7;8 9 10");
        bencher.iter(|| {
            for _ in 0..200 {
                assert_eq!(
                    crate::cellular_automata::util::NanoVec::new(
                        1,
                        crate::cellular_automata::util::UsizeWrapper::from(4)
                    ),
                    parsed.follow_path(&[
                        &crate::cellular_automata::util::NanoVec::new(
                            1,
                            crate::cellular_automata::util::UsizeWrapper::from(2)
                        ),
                        &crate::cellular_automata::util::NanoVec::new(
                            1,
                            crate::cellular_automata::util::UsizeWrapper::from(3)
                        )
                    ])
                );
                assert_eq!(
                    crate::cellular_automata::util::NanoVec::new(
                        1,
                        crate::cellular_automata::util::UsizeWrapper::from(10)
                    ),
                    parsed.follow_path(&[
                        &crate::cellular_automata::util::NanoVec::new(
                            1,
                            crate::cellular_automata::util::UsizeWrapper::from(8)
                        ),
                        &crate::cellular_automata::util::NanoVec::new(
                            1,
                            crate::cellular_automata::util::UsizeWrapper::from(9)
                        )
                    ])
                );
            }
        });
    }
    /*
    #[bench]
    fn bench_transition_function_lookup(bencher: &mut Bencher) {
        let parsed: crate::cellular_automata::AdaptiveTransitionFunctionMapNode =
            crate::cellular_automata::util::Parseable::parse("2 3 4,5 6 7,8 9 10");
        bencher.iter(|| {
            for _ in 0..200 {
                assert_eq!(
                    crate::cellular_automata::util::UsizeWrapper::from(4),
                    parsed.follow_path(vec![
                        &crate::cellular_automata::util::UsizeWrapper::from(2),
                        &crate::cellular_automata::util::UsizeWrapper::from(3)
                    ])
                );
                assert_eq!(
                    crate::cellular_automata::util::UsizeWrapper::from(7),
                    parsed.follow_path(vec![
                        &crate::cellular_automata::util::UsizeWrapper::from(5),
                        &crate::cellular_automata::util::UsizeWrapper::from(6)
                    ])
                );
                assert_eq!(
                    crate::cellular_automata::util::UsizeWrapper::from(10),
                    parsed.follow_path(vec![
                        &crate::cellular_automata::util::UsizeWrapper::from(8),
                        &crate::cellular_automata::util::UsizeWrapper::from(9)
                    ])
                );
            }
        });
    }
    */
}