antelope/
microseconds.rs

1#![allow(dead_code, unused)]
2use core::str;
3use std::cmp::{Ord, Ordering, PartialEq, PartialOrd};
4use std::convert::From;
5
6use crate::check;
7
8#[derive(Debug, Copy, Clone, PartialEq, PartialOrd, Eq, Ord, Default)]
9pub struct Microseconds {
10    count: i64,
11}
12
13impl Microseconds {
14    pub fn new() -> Microseconds {
15        Microseconds { count: 0 }
16    }
17
18    pub fn maximum() -> Microseconds {
19        Microseconds::from(0x7fffffffffffffff)
20    }
21
22    pub fn count(&self) -> i64 {
23        self.count
24    }
25
26    pub fn to_seconds(&self) -> i64 {
27        self.count / 1000000
28    }
29}
30
31impl From<i64> for Microseconds {
32    fn from(count: i64) -> Self {
33        Microseconds { count }
34    }
35}
36
37impl From<Microseconds> for i64 {
38    fn from(microseconds: Microseconds) -> i64 {
39        microseconds.count
40    }
41}
42
43impl std::ops::Add for Microseconds {
44    type Output = Microseconds;
45    fn add(self, other: Microseconds) -> Microseconds {
46        Microseconds::from(self.count + other.count)
47    }
48}
49
50impl std::ops::Sub for Microseconds {
51    type Output = Microseconds;
52    fn sub(self, other: Microseconds) -> Microseconds {
53        Microseconds::from(self.count - other.count)
54    }
55}
56
57impl std::ops::AddAssign for Microseconds {
58    fn add_assign(&mut self, other: Microseconds) {
59        self.count += other.count;
60    }
61}
62
63impl std::ops::SubAssign for Microseconds {
64    fn sub_assign(&mut self, other: Microseconds) {
65        self.count -= other.count;
66    }
67}
68
69pub fn milliseconds(ms: i64) -> Microseconds {
70    Microseconds::from(ms * 1000)
71}
72
73pub fn seconds(s: i64) -> Microseconds {
74    milliseconds(s * 1000)
75}
76
77pub fn minutes(m: i64) -> Microseconds {
78    seconds(60 * m)
79}
80
81pub fn hours(h: i64) -> Microseconds {
82    minutes(60 * h)
83}
84
85pub fn days(d: i64) -> Microseconds {
86    hours(24 * d)
87}
88
89#[cfg(test)]
90mod tests {
91    use super::*;
92
93    #[test]
94    fn test_microseconds_creation() {
95        let micro = Microseconds::from(100);
96        assert_eq!(micro.count(), 100);
97
98        let micro = Microseconds::from(-100);
99        assert_eq!(micro.count(), -100);
100    }
101
102    #[test]
103    fn test_microseconds_equality() {
104        let micro1 = Microseconds::from(100);
105        let micro2 = Microseconds::from(100);
106        assert_eq!(micro1, micro2);
107    }
108
109    #[test]
110    fn test_microseconds_inequality() {
111        let micro1 = Microseconds::from(100);
112        let micro2 = Microseconds::from(200);
113        assert_ne!(micro1, micro2);
114
115        let micro1 = Microseconds::from(-100);
116        let micro2 = Microseconds::from(100);
117        assert_ne!(micro1, micro2);
118    }
119
120    #[test]
121    fn test_microseconds_addition() {
122        let micro1 = Microseconds::from(100);
123        let micro2 = Microseconds::from(200);
124        let result = micro1 + micro2;
125        assert_eq!(result.count(), 300);
126    }
127
128    #[test]
129    fn test_microseconds_subtraction() {
130        let micro1 = Microseconds::from(100);
131        let micro2 = Microseconds::from(200);
132        let result = micro2 - micro1;
133        assert_eq!(result.count(), 100);
134    }
135
136    #[test]
137    fn test_microseconds_comparison() {
138        let micro1 = Microseconds::from(100);
139        let micro2 = Microseconds::from(200);
140        assert!(micro1 < micro2);
141        assert!(micro2 > micro1);
142        assert!(micro1 <= micro2);
143        assert!(micro2 >= micro1);
144    }
145
146    #[test]
147    fn test_microseconds_addition_assignment() {
148        let mut micro1 = Microseconds::from(100);
149        let micro2 = Microseconds::from(200);
150        micro1 += micro2;
151        assert_eq!(micro1.count(), 300);
152    }
153
154    #[test]
155    fn test_microseconds_subtraction_assignment() {
156        let micro1 = Microseconds::from(100);
157        let mut micro2 = Microseconds::from(200);
158        micro2 -= micro1;
159        assert_eq!(micro2.count(), 100);
160    }
161
162    #[test]
163    fn test_microseconds_to_seconds() {
164        let micro = Microseconds::from(1000000);
165        assert_eq!(micro.to_seconds(), 1);
166    }
167
168    #[test]
169    fn test_microseconds_time_functions() {
170        let days_micro = days(1);
171        let hours_micro = hours(1);
172        let minutes_micro = minutes(1);
173        let seconds_micro = seconds(1);
174
175        assert_eq!(days_micro.count(), 86400000000);
176        assert_eq!(hours_micro.count(), 3600000000);
177        assert_eq!(minutes_micro.count(), 60000000);
178        assert_eq!(seconds_micro.count(), 1000000);
179    }
180}