diff options
Diffstat (limited to 'vendor/countme/examples/bench.rs')
-rw-r--r-- | vendor/countme/examples/bench.rs | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/vendor/countme/examples/bench.rs b/vendor/countme/examples/bench.rs new file mode 100644 index 000000000..1f9cc967f --- /dev/null +++ b/vendor/countme/examples/bench.rs @@ -0,0 +1,69 @@ +use std::thread; + +use countme::{get, Count}; + +#[derive(Default)] +struct Foo { + _c: Count<Self>, +} + +#[derive(Default)] +struct Bar { + _c: Count<Self>, + _x: i32, +} + +mod deeply { + pub(crate) mod nested { + pub(crate) mod module { + use countme::Count; + + #[derive(Default)] + pub(crate) struct Quux { + _c: Count<Self>, + } + } + } +} + +fn main() { + countme::enable(true); + let t = std::time::Instant::now(); + let n = 5; + let m = 1_000_000; + + let mut threads = Vec::new(); + for _ in 0..n { + threads.push(thread::spawn(move || { + for _ in 0..m { + Foo::default(); + } + })); + threads.push(thread::spawn(move || { + let mut xs = Vec::with_capacity(m); + for _ in 0..m { + xs.push(Bar::default()) + } + })); + threads.push(thread::spawn(move || { + for _ in 0..m { + deeply::nested::module::Quux::default(); + } + })); + } + for t in threads { + t.join().unwrap(); + } + + let foo = get::<Foo>(); + assert_eq!(foo.total, m * n); + assert!(foo.max_live >= 1); + assert_eq!(foo.live, 0); + + let bar = get::<Bar>(); + assert_eq!(bar.total, m * n); + assert!(bar.max_live >= m); + assert_eq!(bar.live, 0); + + println!("{:?}", t.elapsed()); +} |