riichi_calc/parser/
field_input.rs1use 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}