1#![forbid(unsafe_code)]
2#![doc = include_str!("../README.md")]
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq)]
6pub enum TessellationKind {
7 Regular,
9 SemiRegular,
11 Irregular,
13}
14
15#[derive(Debug, Clone, Copy, PartialEq, Eq)]
17pub struct Tessellation {
18 kind: TessellationKind,
19 tile_count: usize,
20}
21
22impl Tessellation {
23 #[must_use]
25 pub const fn new(kind: TessellationKind, tile_count: usize) -> Option<Self> {
26 if tile_count > 0 {
27 Some(Self { kind, tile_count })
28 } else {
29 None
30 }
31 }
32
33 #[must_use]
35 pub const fn kind(self) -> TessellationKind {
36 self.kind
37 }
38
39 #[must_use]
41 pub const fn tile_count(self) -> usize {
42 self.tile_count
43 }
44}
45
46#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
48pub struct TileId(pub usize);
49
50#[cfg(test)]
51mod tests {
52 use super::{Tessellation, TessellationKind, TileId};
53
54 #[test]
55 fn stores_tessellation_counts() {
56 let tessellation = Tessellation::new(TessellationKind::Regular, 12).expect("valid");
57
58 assert_eq!(tessellation.kind(), TessellationKind::Regular);
59 assert_eq!(tessellation.tile_count(), 12);
60 assert_eq!(TileId(3).0, 3);
61 }
62}