Skip to main content

cellular_automaton/ruleset/
bs.rs

1use wasm_bindgen::prelude::wasm_bindgen;
2
3use crate::rule;
4
5/// A ruleset containing birth and survival (B/S) rules.
6#[wasm_bindgen]
7#[derive(Clone, Debug, PartialEq, PartialOrd)]
8pub struct BS {
9    #[wasm_bindgen(getter_with_clone)]
10    pub birth: rule::Birth,
11    #[wasm_bindgen(getter_with_clone)]
12    pub survival: rule::Survival,
13}
14
15#[wasm_bindgen]
16impl BS {
17    /// Constructs a new ruleset containing birth and survival rules.
18    ///
19    /// # Examples
20    ///
21    /// ```
22    /// use cellular_automaton::ruleset::BS;
23    ///
24    /// let rules = BS::default();
25    /// //  = BS::new(&[3], &[2, 3]);
26    /// //  = BS {
27    /// //      birth: vec![3],
28    /// //      survival: vec![2, 3],
29    /// //  };
30    /// assert_eq!(rules.birth, vec![3]);
31    /// assert_eq!(rules.survival, vec![2, 3]);
32    /// ```
33    #[wasm_bindgen(constructor)]
34    #[must_use]
35    pub fn new(b: &[u8], s: &[u8]) -> Self {
36        #[cfg(debug_assertions)]
37        console_error_panic_hook::set_once();
38
39        Self {
40            birth: b.to_vec(),
41            survival: s.to_vec(),
42        }
43    }
44}
45
46impl Default for BS {
47    /// Rules from Conway's Game of Life.
48    fn default() -> Self {
49        Self {
50            birth: vec![3],
51            survival: vec![2, 3],
52        }
53    }
54}