scsys_core/id/
mod.rs

1/*
2    Appellation: ids <module>
3    Contrib: FL03 <jo3mccain@icloud.com>
4*/
5//! # Identity
6//!
7//! The identity module provides a set of traits and types for generating unique identifiers.
8#[doc(inline)]
9pub use self::prelude::*;
10
11pub(crate) mod identifier;
12
13mod impls {
14    pub mod impl_id;
15}
16
17pub mod traits {
18    //! this module implements various traits supporting the [`Id`](super::Id) type
19    #[doc(inline)]
20    pub use self::prelude::*;
21
22    pub mod id;
23    pub mod identifier;
24
25    pub(crate) mod prelude {
26        #[doc(inline)]
27        pub use super::id::*;
28        #[doc(inline)]
29        pub use super::identifier::*;
30    }
31}
32
33pub mod types {
34    #[doc(inline)]
35    pub use self::multi_id::IndexId;
36
37    pub mod multi_id;
38
39    pub(crate) mod prelude {
40        #[doc(inline)]
41        pub use super::multi_id::IndexId;
42    }
43}
44
45pub(crate) mod prelude {
46    #[doc(inline)]
47    pub use super::identifier::Id;
48    #[doc(inline)]
49    pub use super::traits::prelude::*;
50    #[doc(inline)]
51    pub use super::types::prelude::*;
52}
53
54#[cfg(test)]
55mod tests {
56    use super::Id;
57
58    #[test]
59    fn test_id() {
60        let mut id = Id::<usize>::default();
61        assert_eq!(id.get(), &0);
62        assert_eq!(id.get_mut(), &mut 0);
63        let view = id.view();
64        assert_eq!(view.get(), &&0);
65        assert_eq!(view.copied(), id);
66    }
67
68    #[test]
69    fn test_atomic_id() {
70        let v1 = Id::atomic();
71        let v2 = Id::atomic();
72        assert_ne!(v1, v2);
73    }
74
75    #[test]
76    fn test_id_stepper() {
77        let mut id: Id<usize> = Id::zero();
78        assert_eq!(id.step(), 0);
79        assert_eq!(id.step(), 1);
80        assert_eq!(id.step(), 2);
81        assert_eq!(id.step(), 3);
82        assert_eq!(id.step(), 4);
83        assert_eq!(id, 5);
84    }
85}