#![forbid(unsafe_code)]
#![doc = include_str!("../README.md")]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum UniformPolytopeKind {
Regular,
Quasiregular,
Archimedean,
Prismatic,
Other,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct UniformPolytope {
dimension: usize,
kind: UniformPolytopeKind,
}
impl UniformPolytope {
#[must_use]
pub const fn new(dimension: usize, kind: UniformPolytopeKind) -> Option<Self> {
if dimension > 0 {
Some(Self { dimension, kind })
} else {
None
}
}
#[must_use]
pub const fn dimension(self) -> usize {
self.dimension
}
#[must_use]
pub const fn kind(self) -> UniformPolytopeKind {
self.kind
}
}
#[cfg(test)]
mod tests {
use super::{UniformPolytope, UniformPolytopeKind};
#[test]
fn stores_uniform_polytope_metadata() {
let polytope = UniformPolytope::new(3, UniformPolytopeKind::Archimedean).expect("valid");
assert_eq!(polytope.dimension(), 3);
assert_eq!(polytope.kind(), UniformPolytopeKind::Archimedean);
assert_eq!(UniformPolytope::new(0, UniformPolytopeKind::Regular), None);
}
}