time: move - operator to operator.v (#7433)

pull/7444/head
zakuro 2020-12-21 17:28:00 +09:00 committed by GitHub
parent c69947160b
commit c639dd03d0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 30 additions and 21 deletions

View File

@ -44,3 +44,11 @@ pub fn (t1 Time) gt(t2 Time) bool {
pub fn (t1 Time) ge(t2 Time) bool {
return t1.gt(t2) || t1.eq(t2)
}
// Time subtract using eperator overloading
[inline]
pub fn (lhs Time) -(rhs Time) Duration {
lhs_micro := lhs.unix * 1000 * 1000 + u64(lhs.microsecond)
rhs_micro := rhs.unix * 1000 * 1000 + u64(rhs.microsecond)
return (i64(lhs_micro) - i64(rhs_micro)) * microsecond
}

View File

@ -367,3 +367,25 @@ fn test_time2_copied_from_time1_should_be_equal() {
t2 := new_time(t1)
assert t2.eq(t1)
}
fn test_subtract() {
d_seconds := 3
d_microseconds := 13
duration := d_seconds * second + d_microseconds * microsecond
t1 := new_time(Time{
year: 2000
month: 5
day: 10
hour: 22
minute: 11
second: 3
microsecond: 100
})
t2 := unix2(int(t1.unix) + d_seconds, t1.microsecond + d_microseconds)
d1 := t2 - t1
d2 := t1 - t2
assert d1 > 0
assert d1 == duration
assert d2 < 0
assert d2 == -duration
}

View File

@ -355,13 +355,6 @@ pub fn (t Time) str() string {
return t.format_ss()
}
// Time subtract using eperator overloading
pub fn (lhs Time) -(rhs Time) Duration {
lhs_micro := lhs.unix * 1000 * 1000 + u64(lhs.microsecond)
rhs_micro := rhs.unix * 1000 * 1000 + u64(rhs.microsecond)
return (i64(lhs_micro) - i64(rhs_micro)) * microsecond
}
fn convert_ctime(t C.tm, microsecond int) Time {
return Time{
year: t.tm_year + 1900

View File

@ -177,20 +177,6 @@ fn test_str() {
assert '1980-07-11 21:23:42' == time_to_test.str()
}
fn test_subtract() {
d_seconds := 3
d_microseconds := 13
duration := d_seconds * time.second + d_microseconds * time.microsecond
t1 := time_to_test
t2 := time.unix2(int(t1.unix) + d_seconds, t1.microsecond + d_microseconds)
d1 := t2 - t1
d2 := t1 - t2
assert d1 > 0
assert d1 == duration
assert d2 < 0
assert d2 == -duration
}
// not optimal test but will find obvious bugs
fn test_now() {
now := time.now()