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