1#![forbid(unsafe_code)]
2#![doc = include_str!("../README.md")]
3
4#[derive(Debug, Clone, PartialEq, Eq)]
6pub struct DelaunayTriangulation {
7 triangles: Vec<[usize; 3]>,
8}
9
10impl DelaunayTriangulation {
11 #[must_use]
13 pub const fn new(triangles: Vec<[usize; 3]>) -> Self {
14 Self { triangles }
15 }
16
17 #[must_use]
19 pub fn triangles(&self) -> &[[usize; 3]] {
20 &self.triangles
21 }
22
23 #[must_use]
25 pub fn triangle_count(&self) -> usize {
26 self.triangles.len()
27 }
28
29 #[must_use]
31 pub fn edge_count_upper_bound(&self) -> usize {
32 self.triangles.len() * 3
33 }
34}
35
36#[cfg(test)]
37mod tests {
38 use super::DelaunayTriangulation;
39
40 #[test]
41 fn stores_delaunay_triangles() {
42 let triangulation = DelaunayTriangulation::new(vec![[0, 1, 2]]);
43
44 assert_eq!(triangulation.triangle_count(), 1);
45 assert_eq!(triangulation.edge_count_upper_bound(), 3);
46 assert_eq!(triangulation.triangles()[0], [0, 1, 2]);
47 }
48}