tester_demo/
tester_demo.rs1use qubit_function::{
12 ArcTester,
13 BoxTester,
14 RcTester,
15 Tester,
16};
17use std::cell::Cell;
18use std::rc::Rc;
19use std::sync::{
20 Arc,
21 atomic::{
22 AtomicBool,
23 AtomicUsize,
24 Ordering,
25 },
26};
27
28fn main() {
29 println!("=== Tester Demo ===\n");
30
31 demo_box_tester();
32 demo_arc_tester();
33 demo_rc_tester();
34}
35
36fn demo_box_tester() {
37 println!("--- BoxTester logic ---");
38
39 let healthy = Arc::new(AtomicBool::new(true));
40 let requests = Arc::new(AtomicUsize::new(10));
41 let max_requests = 100;
42
43 let healthy_for_check = Arc::clone(&healthy);
44 let requests_for_check = Arc::clone(&requests);
45 let can_accept = BoxTester::new(move || healthy_for_check.load(Ordering::Relaxed))
46 .and(move || requests_for_check.load(Ordering::Relaxed) < max_requests);
47
48 println!("Can accept initially: {}", can_accept.test());
49 requests.store(150, Ordering::Relaxed);
50 println!("Can accept after overload: {}", can_accept.test());
51 println!();
52}
53
54fn demo_arc_tester() {
55 println!("--- ArcTester sharing ---");
56
57 let enabled = Arc::new(AtomicBool::new(true));
58 let enabled_for_check = Arc::clone(&enabled);
59 let enabled_tester = ArcTester::new(move || enabled_for_check.load(Ordering::Relaxed));
60 let disabled_tester = enabled_tester.not();
61
62 println!("Enabled: {}", enabled_tester.test());
63 println!("Disabled: {}", disabled_tester.test());
64 enabled.store(false, Ordering::Relaxed);
65 println!("Enabled after update: {}", enabled_tester.test());
66 println!("Disabled after update: {}", disabled_tester.test());
67 println!();
68}
69
70fn demo_rc_tester() {
71 println!("--- RcTester single-threaded sharing ---");
72
73 let value = Rc::new(Cell::new(0));
74 let small_value = {
75 let value = Rc::clone(&value);
76 RcTester::new(move || value.get() < 3)
77 };
78 let even_value = {
79 let value = Rc::clone(&value);
80 RcTester::new(move || value.get() % 2 == 0)
81 };
82 let small_and_even = small_value.and(&even_value);
83
84 println!("0 is small and even: {}", small_and_even.test());
85 value.set(2);
86 println!("2 is small and even: {}", small_and_even.test());
87 value.set(3);
88 println!("3 is small and even: {}", small_and_even.test());
89}