avr_tester/duration_ext.rs
1use crate::AvrTester;
2use avr_simulator::AvrDuration;
3
4pub trait AvrDurationExt {
5 /// Creates a duration of zero cycles, using clock frequency from given
6 /// [`AvrTester`].
7 ///
8 /// See also: [`AvrDuration::new()`].
9 ///
10 /// # Examples
11 ///
12 /// ```no_run
13 /// # use avr_simulator::AvrDuration;
14 /// # use avr_tester::AvrDurationExt;
15 /// # let avr = panic!();
16 /// #
17 /// let duration = AvrDuration::zero(&avr).with_millis(150);
18 /// ```
19 fn zero(avr: &AvrTester) -> Self;
20
21 /// Creates a duration of `n` microseconds, using clock frequency from given
22 /// [`AvrTester`].
23 ///
24 /// # Examples
25 ///
26 /// ```no_run
27 /// # use avr_simulator::AvrDuration;
28 /// # use avr_tester::AvrDurationExt;
29 /// # let avr = panic!();
30 /// #
31 /// let duration = AvrDuration::micros(&avr, 15);
32 /// ```
33 fn micros(avr: &AvrTester, n: u64) -> Self;
34
35 /// Creates a duration of `n` milliseconds, using clock frequency from given
36 /// [`AvrTester`].
37 ///
38 /// # Examples
39 ///
40 /// ```no_run
41 /// # use avr_simulator::AvrDuration;
42 /// # use avr_tester::AvrDurationExt;
43 /// # let avr = panic!();
44 /// #
45 /// let duration = AvrDuration::millis(&avr, 15);
46 /// ```
47 fn millis(avr: &AvrTester, n: u64) -> Self;
48
49 /// Creates a duration of `n` seconds, using clock frequency from given
50 /// [`AvrTester`].
51 ///
52 /// # Examples
53 ///
54 /// ```no_run
55 /// # use avr_simulator::AvrDuration;
56 /// # use avr_tester::AvrDurationExt;
57 /// # let avr = panic!();
58 /// #
59 /// let duration = AvrDuration::secs(&avr, 15);
60 /// ```
61 fn secs(avr: &AvrTester, n: u64) -> Self;
62}
63
64impl AvrDurationExt for AvrDuration {
65 fn zero(avr: &AvrTester) -> Self {
66 Self::new(avr.clock_frequency, 0)
67 }
68
69 fn micros(avr: &AvrTester, n: u64) -> Self {
70 Self::zero(avr).add_micros(n)
71 }
72
73 fn millis(avr: &AvrTester, n: u64) -> Self {
74 Self::zero(avr).add_millis(n)
75 }
76
77 fn secs(avr: &AvrTester, n: u64) -> Self {
78 Self::zero(avr).add_secs(n)
79 }
80}