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}