#![forbid(unsafe_code)]
#![doc = include_str!("../README.md")]
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct ManifoldDimension(usize);
impl ManifoldDimension {
#[must_use]
pub const fn new(value: usize) -> Option<Self> {
Some(Self(value))
}
#[must_use]
pub const fn value(self) -> usize {
self.0
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum BoundaryKind {
WithoutBoundary,
WithBoundary,
Unspecified,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Manifold {
dimension: ManifoldDimension,
boundary_kind: BoundaryKind,
}
impl Manifold {
#[must_use]
pub const fn new(dimension: ManifoldDimension, boundary_kind: BoundaryKind) -> Self {
Self {
dimension,
boundary_kind,
}
}
#[must_use]
pub const fn dimension(self) -> ManifoldDimension {
self.dimension
}
#[must_use]
pub const fn boundary_kind(self) -> BoundaryKind {
self.boundary_kind
}
}
#[cfg(test)]
mod tests {
use super::{BoundaryKind, Manifold, ManifoldDimension};
#[test]
fn stores_manifold_metadata() {
let dimension = ManifoldDimension::new(2).expect("valid dimension");
let manifold = Manifold::new(dimension, BoundaryKind::WithoutBoundary);
assert_eq!(dimension.value(), 2);
assert_eq!(manifold.dimension(), dimension);
assert_eq!(manifold.boundary_kind(), BoundaryKind::WithoutBoundary);
}
}