-
-
Notifications
You must be signed in to change notification settings - Fork 255
/
utc_offset.rs
163 lines (146 loc) · 5.47 KB
/
utc_offset.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
use time::macros::offset;
use time::{OffsetDateTime, Result, UtcOffset};
#[test]
fn utc_is_zero() {
assert_eq!(offset!(UTC), offset!(+0));
}
#[test]
fn from_hms() -> Result<()> {
assert_eq!(UtcOffset::from_hms(0, 0, 0), Ok(offset!(UTC)));
assert_eq!(UtcOffset::from_hms(0, 0, 1), Ok(offset!(+0:00:01)));
assert_eq!(UtcOffset::from_hms(0, 0, -1), Ok(offset!(-0:00:01)));
assert_eq!(UtcOffset::from_hms(1, 0, 0), Ok(offset!(+1)));
assert_eq!(UtcOffset::from_hms(-1, 0, 0), Ok(offset!(-1)));
assert_eq!(UtcOffset::from_hms(23, 59, 0), Ok(offset!(+23:59)));
assert_eq!(UtcOffset::from_hms(-23, -59, 0), Ok(offset!(-23:59)));
assert_eq!(UtcOffset::from_hms(23, 59, 59), Ok(offset!(+23:59:59)));
assert_eq!(UtcOffset::from_hms(-23, -59, -59), Ok(offset!(-23:59:59)));
assert_eq!(UtcOffset::from_hms(1, 2, 3)?.as_hms(), (1, 2, 3));
assert_eq!(UtcOffset::from_hms(1, -2, -3)?.as_hms(), (1, 2, 3));
assert_eq!(UtcOffset::from_hms(0, 2, -3)?.as_hms(), (0, 2, 3));
Ok(())
}
#[test]
fn from_whole_seconds() {
assert_eq!(UtcOffset::from_whole_seconds(0), Ok(offset!(UTC)));
assert_eq!(UtcOffset::from_whole_seconds(1), Ok(offset!(+0:00:01)));
assert_eq!(UtcOffset::from_whole_seconds(-1), Ok(offset!(-0:00:01)));
assert_eq!(UtcOffset::from_whole_seconds(3_600), Ok(offset!(+1)));
assert_eq!(UtcOffset::from_whole_seconds(-3_600), Ok(offset!(-1)));
assert_eq!(UtcOffset::from_whole_seconds(86_340), Ok(offset!(+23:59)));
assert_eq!(UtcOffset::from_whole_seconds(-86_340), Ok(offset!(-23:59)));
assert_eq!(
UtcOffset::from_whole_seconds(86_399),
Ok(offset!(+23:59:59))
);
assert_eq!(
UtcOffset::from_whole_seconds(-86_399),
Ok(offset!(-23:59:59))
);
}
#[test]
fn as_hms() {
assert_eq!(offset!(UTC).as_hms(), (0, 0, 0));
assert_eq!(offset!(+0:00:01).as_hms(), (0, 0, 1));
assert_eq!(offset!(-0:00:01).as_hms(), (0, 0, -1));
assert_eq!(offset!(+1).as_hms(), (1, 0, 0));
assert_eq!(offset!(-1).as_hms(), (-1, 0, 0));
assert_eq!(offset!(+23:59).as_hms(), (23, 59, 0));
assert_eq!(offset!(-23:59).as_hms(), (-23, -59, 0));
assert_eq!(offset!(+23:59:59).as_hms(), (23, 59, 59));
assert_eq!(offset!(-23:59:59).as_hms(), (-23, -59, -59));
}
#[test]
fn whole_hours() {
assert_eq!(offset!(+1:02:03).whole_hours(), 1);
assert_eq!(offset!(-1:02:03).whole_hours(), -1);
}
#[test]
fn whole_minutes() {
assert_eq!(offset!(+1:02:03).whole_minutes(), 62);
assert_eq!(offset!(-1:02:03).whole_minutes(), -62);
}
#[test]
fn minutes_past_hour() {
assert_eq!(offset!(+1:02:03).minutes_past_hour(), 2);
assert_eq!(offset!(-1:02:03).minutes_past_hour(), -2);
}
#[test]
fn whole_seconds() {
assert_eq!(offset!(UTC).whole_seconds(), 0);
assert_eq!(offset!(+0:00:01).whole_seconds(), 1);
assert_eq!(offset!(-0:00:01).whole_seconds(), -1);
assert_eq!(offset!(+1).whole_seconds(), 3_600);
assert_eq!(offset!(-1).whole_seconds(), -3_600);
assert_eq!(offset!(+23:59).whole_seconds(), 86_340);
assert_eq!(offset!(-23:59).whole_seconds(), -86_340);
assert_eq!(offset!(+23:59:59).whole_seconds(), 86_399);
assert_eq!(offset!(-23:59:59).whole_seconds(), -86_399);
}
#[test]
fn seconds_past_minute() {
assert_eq!(offset!(+1:02:03).seconds_past_minute(), 3);
assert_eq!(offset!(-1:02:03).seconds_past_minute(), -3);
}
#[test]
fn is_utc() {
assert!(offset!(UTC).is_utc());
assert!(!offset!(+0:00:01).is_utc());
assert!(!offset!(-0:00:01).is_utc());
assert!(!offset!(+1).is_utc());
assert!(!offset!(-1).is_utc());
assert!(!offset!(+23:59).is_utc());
assert!(!offset!(-23:59).is_utc());
assert!(!offset!(+23:59:59).is_utc());
assert!(!offset!(-23:59:59).is_utc());
}
#[test]
fn is_positive() {
assert!(!offset!(UTC).is_positive());
assert!(offset!(+0:00:01).is_positive());
assert!(!offset!(-0:00:01).is_positive());
assert!(offset!(+1).is_positive());
assert!(!offset!(-1).is_positive());
assert!(offset!(+23:59).is_positive());
assert!(!offset!(-23:59).is_positive());
assert!(offset!(+23:59:59).is_positive());
assert!(!offset!(-23:59:59).is_positive());
}
#[test]
fn is_negative() {
assert!(!offset!(UTC).is_negative());
assert!(!offset!(+0:00:01).is_negative());
assert!(offset!(-0:00:01).is_negative());
assert!(!offset!(+1).is_negative());
assert!(offset!(-1).is_negative());
assert!(!offset!(+23:59).is_negative());
assert!(offset!(-23:59).is_negative());
assert!(!offset!(+23:59:59).is_negative());
assert!(offset!(-23:59:59).is_negative());
}
#[test]
fn neg() {
assert_eq!(-offset!(UTC), offset!(UTC));
assert_eq!(-offset!(+0:00:01), offset!(-0:00:01));
assert_eq!(-offset!(-0:00:01), offset!(+0:00:01));
assert_eq!(-offset!(+1), offset!(-1));
assert_eq!(-offset!(-1), offset!(+1));
assert_eq!(-offset!(+23:59), offset!(-23:59));
assert_eq!(-offset!(-23:59), offset!(+23:59));
assert_eq!(-offset!(+23:59:59), offset!(-23:59:59));
assert_eq!(-offset!(-23:59:59), offset!(+23:59:59));
}
#[test]
fn local_offset_at() {
#[cfg(not(target_family = "unix"))]
assert!(UtcOffset::local_offset_at(OffsetDateTime::UNIX_EPOCH).is_ok());
#[cfg(target_family = "unix")]
let _ = UtcOffset::local_offset_at(OffsetDateTime::UNIX_EPOCH);
}
#[test]
fn current_local_offset() {
#[cfg(not(target_family = "unix"))]
assert!(UtcOffset::current_local_offset().is_ok());
#[cfg(target_family = "unix")]
let _ = UtcOffset::current_local_offset();
}