1 mod idx {
2     use crate::{
3         cfg,
4         page::{self, slot},
5         Pack, Tid,
6     };
7     use proptest::prelude::*;
8 
9     proptest! {
10         #[test]
11         #[cfg_attr(loom, ignore)]
12         fn tid_roundtrips(tid in 0usize..Tid::<cfg::DefaultConfig>::BITS) {
13             let tid = Tid::<cfg::DefaultConfig>::from_usize(tid);
14             let packed = tid.pack(0);
15             assert_eq!(tid, Tid::from_packed(packed));
16         }
17 
18         #[test]
19         #[cfg_attr(loom, ignore)]
20         fn idx_roundtrips(
21             tid in 0usize..Tid::<cfg::DefaultConfig>::BITS,
22             gen in 0usize..slot::Generation::<cfg::DefaultConfig>::BITS,
23             addr in 0usize..page::Addr::<cfg::DefaultConfig>::BITS,
24         ) {
25             let tid = Tid::<cfg::DefaultConfig>::from_usize(tid);
26             let gen = slot::Generation::<cfg::DefaultConfig>::from_usize(gen);
27             let addr = page::Addr::<cfg::DefaultConfig>::from_usize(addr);
28             let packed = tid.pack(gen.pack(addr.pack(0)));
29             assert_eq!(addr, page::Addr::from_packed(packed));
30             assert_eq!(gen, slot::Generation::from_packed(packed));
31             assert_eq!(tid, Tid::from_packed(packed));
32         }
33     }
34 }
35 
36 pub(crate) mod util {
37     #[cfg(loom)]
38     use std::sync::atomic::{AtomicUsize, Ordering};
39     pub(crate) struct TinyConfig;
40 
41     impl crate::Config for TinyConfig {
42         const INITIAL_PAGE_SIZE: usize = 4;
43     }
44 
45     #[cfg(loom)]
run_model(name: &'static str, f: impl Fn() + Sync + Send + 'static)46     pub(crate) fn run_model(name: &'static str, f: impl Fn() + Sync + Send + 'static) {
47         run_builder(name, loom::model::Builder::new(), f)
48     }
49 
50     #[cfg(loom)]
run_builder( name: &'static str, builder: loom::model::Builder, f: impl Fn() + Sync + Send + 'static, )51     pub(crate) fn run_builder(
52         name: &'static str,
53         builder: loom::model::Builder,
54         f: impl Fn() + Sync + Send + 'static,
55     ) {
56         let iters = AtomicUsize::new(1);
57         builder.check(move || {
58             test_println!(
59                 "\n------------ running test {}; iteration {} ------------\n",
60                 name,
61                 iters.fetch_add(1, Ordering::SeqCst)
62             );
63             f()
64         });
65     }
66 }
67 
68 #[cfg(not(loom))]
69 mod custom_config;
70 #[cfg(loom)]
71 mod loom_pool;
72 #[cfg(loom)]
73 mod loom_slab;
74 #[cfg(not(loom))]
75 mod properties;
76