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