]> git.lizzy.rs Git - rust.git/blob - src/libcore/tests/time.rs
Rollup merge of #50525 - nnethercote:lit_token, r=michaelwoerister
[rust.git] / src / libcore / tests / time.rs
1 // Copyright 2018 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
4 //
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
10
11 use core::time::Duration;
12
13 #[test]
14 fn creation() {
15     assert!(Duration::from_secs(1) != Duration::from_secs(0));
16     assert_eq!(Duration::from_secs(1) + Duration::from_secs(2),
17                Duration::from_secs(3));
18     assert_eq!(Duration::from_millis(10) + Duration::from_secs(4),
19                Duration::new(4, 10 * 1_000_000));
20     assert_eq!(Duration::from_millis(4000), Duration::new(4, 0));
21 }
22
23 #[test]
24 fn secs() {
25     assert_eq!(Duration::new(0, 0).as_secs(), 0);
26     assert_eq!(Duration::from_secs(1).as_secs(), 1);
27     assert_eq!(Duration::from_millis(999).as_secs(), 0);
28     assert_eq!(Duration::from_millis(1001).as_secs(), 1);
29 }
30
31 #[test]
32 fn nanos() {
33     assert_eq!(Duration::new(0, 0).subsec_nanos(), 0);
34     assert_eq!(Duration::new(0, 5).subsec_nanos(), 5);
35     assert_eq!(Duration::new(0, 1_000_000_001).subsec_nanos(), 1);
36     assert_eq!(Duration::from_secs(1).subsec_nanos(), 0);
37     assert_eq!(Duration::from_millis(999).subsec_nanos(), 999 * 1_000_000);
38     assert_eq!(Duration::from_millis(1001).subsec_nanos(), 1 * 1_000_000);
39 }
40
41 #[test]
42 fn add() {
43     assert_eq!(Duration::new(0, 0) + Duration::new(0, 1),
44                Duration::new(0, 1));
45     assert_eq!(Duration::new(0, 500_000_000) + Duration::new(0, 500_000_001),
46                Duration::new(1, 1));
47 }
48
49 #[test]
50 fn checked_add() {
51     assert_eq!(Duration::new(0, 0).checked_add(Duration::new(0, 1)),
52                Some(Duration::new(0, 1)));
53     assert_eq!(Duration::new(0, 500_000_000).checked_add(Duration::new(0, 500_000_001)),
54                Some(Duration::new(1, 1)));
55     assert_eq!(Duration::new(1, 0).checked_add(Duration::new(::core::u64::MAX, 0)), None);
56 }
57
58 #[test]
59 fn sub() {
60     assert_eq!(Duration::new(0, 1) - Duration::new(0, 0),
61                Duration::new(0, 1));
62     assert_eq!(Duration::new(0, 500_000_001) - Duration::new(0, 500_000_000),
63                Duration::new(0, 1));
64     assert_eq!(Duration::new(1, 0) - Duration::new(0, 1),
65                Duration::new(0, 999_999_999));
66 }
67
68 #[test]
69 fn checked_sub() {
70     let zero = Duration::new(0, 0);
71     let one_nano = Duration::new(0, 1);
72     let one_sec = Duration::new(1, 0);
73     assert_eq!(one_nano.checked_sub(zero), Some(Duration::new(0, 1)));
74     assert_eq!(one_sec.checked_sub(one_nano),
75                Some(Duration::new(0, 999_999_999)));
76     assert_eq!(zero.checked_sub(one_nano), None);
77     assert_eq!(zero.checked_sub(one_sec), None);
78 }
79
80 #[test]
81 #[should_panic]
82 fn sub_bad1() {
83     let _ = Duration::new(0, 0) - Duration::new(0, 1);
84 }
85
86 #[test]
87 #[should_panic]
88 fn sub_bad2() {
89     let _ = Duration::new(0, 0) - Duration::new(1, 0);
90 }
91
92 #[test]
93 fn mul() {
94     assert_eq!(Duration::new(0, 1) * 2, Duration::new(0, 2));
95     assert_eq!(Duration::new(1, 1) * 3, Duration::new(3, 3));
96     assert_eq!(Duration::new(0, 500_000_001) * 4, Duration::new(2, 4));
97     assert_eq!(Duration::new(0, 500_000_001) * 4000,
98                Duration::new(2000, 4000));
99 }
100
101 #[test]
102 fn checked_mul() {
103     assert_eq!(Duration::new(0, 1).checked_mul(2), Some(Duration::new(0, 2)));
104     assert_eq!(Duration::new(1, 1).checked_mul(3), Some(Duration::new(3, 3)));
105     assert_eq!(Duration::new(0, 500_000_001).checked_mul(4), Some(Duration::new(2, 4)));
106     assert_eq!(Duration::new(0, 500_000_001).checked_mul(4000),
107                Some(Duration::new(2000, 4000)));
108     assert_eq!(Duration::new(::core::u64::MAX - 1, 0).checked_mul(2), None);
109 }
110
111 #[test]
112 fn div() {
113     assert_eq!(Duration::new(0, 1) / 2, Duration::new(0, 0));
114     assert_eq!(Duration::new(1, 1) / 3, Duration::new(0, 333_333_333));
115     assert_eq!(Duration::new(99, 999_999_000) / 100,
116                Duration::new(0, 999_999_990));
117 }
118
119 #[test]
120 fn checked_div() {
121     assert_eq!(Duration::new(2, 0).checked_div(2), Some(Duration::new(1, 0)));
122     assert_eq!(Duration::new(1, 0).checked_div(2), Some(Duration::new(0, 500_000_000)));
123     assert_eq!(Duration::new(2, 0).checked_div(0), None);
124 }