riichi_calc/parser/
field_input.rs

1use crate::constants::field::Field;
2use crate::parser::ValidationError::OutOfRange;
3use crate::parser::{InputBase, ValidationError};
4
5impl InputBase for Field {
6    fn validate(&self) -> Result<(), ValidationError> {
7        if self.dora.len() > 4 {
8            return Err(OutOfRange(
9                "The number of dora should be less than or equal to 4".to_string(),
10            ));
11        }
12
13        Ok(())
14    }
15}
16
17#[test]
18fn correct_input() {
19    use crate::constants::field::{Bakaze, Zikaze};
20    use crate::constants::tiles::{Tile, TileType};
21
22    let input = Field {
23        honba: 0,
24        zikaze: Zikaze::East,
25        bakaze: Bakaze::East,
26        dora: vec![Tile {
27            number: 1,
28            tile_type: TileType::Manzu,
29        }],
30    };
31    assert_eq!(input.validate(), Ok(()));
32}
33
34#[test]
35fn too_many_dora() {
36    use crate::constants::field::{Bakaze, Zikaze};
37    use crate::constants::tiles::{Tile, TileType};
38
39    let input = Field {
40        honba: 0,
41        zikaze: Zikaze::East,
42        bakaze: Bakaze::East,
43        dora: vec![
44            Tile {
45                number: 1,
46                tile_type: TileType::Manzu,
47            },
48            Tile {
49                number: 1,
50                tile_type: TileType::Manzu,
51            },
52            Tile {
53                number: 1,
54                tile_type: TileType::Manzu,
55            },
56            Tile {
57                number: 1,
58                tile_type: TileType::Manzu,
59            },
60            Tile {
61                number: 1,
62                tile_type: TileType::Manzu,
63            },
64        ],
65    };
66    assert_eq!(
67        input.validate(),
68        Err(OutOfRange(
69            "The number of dora should be less than or equal to 4".to_string()
70        ))
71    );
72}