load time load testing import test @test('Constructing datetime') routine testMakeTime(){ t = time.make(2015, 8, 5, 10, 30, 24.56) assertEqual(t.year, 2015) assertEqual(t.month, 8) assertEqual(t.day, 5) assertEqual(t.hour, 10) assertEqual(t.minute, 30) assertEqual(t.second, 24.56) t = time.make(2015, 8, 5, 12, 15, 0.12345678) assertEqual(t.second, 0.123456) t = time.make(2015, 8, 5) assertEqual(t.hour, 0) assertEqual(t.minute, 0) assertEqual(t.second, 0.0) t = time.make(2015, 4, 12, 23) assertEqual(t.minute, 0) assertEqual(t.second, 0.0) t = time.make(2015, 4, 12, 23, 7) assertEqual(t.second, 0.0) assertError('Time'){ time.make(-2, 8, 5) } assertError('Time'){ time.make(2015, 0, 5) } assertError('Time'){ time.make(2015, 13, 5) } assertError('Time'){ time.make(2015, 8, 0) } assertError('Time'){ time.make(2015, 8, 32) } assertError('Time'){ time.make(2015, 2, 30) } assertError('Time'){ time.make(2015, 8, 5, -3) } assertError('Time'){ time.make(2015, 8, 5, 24) } assertError('Time'){ time.make(2015, 8, 5, 10, -234) } assertError('Time'){ time.make(2015, 8, 5, 10, 30, -1895.234) } assertError('Time'){ time.make(2015, 8, 5, 10, 30, 60.36) } } @test('Setting datetime parts') routine testSetTime(){ t = time.make(2015, 8, 5) t.year = 2016 assertEqual(t.year, 2016) assertError('Param'){ t.year = -1 } assertEqual(t.year, 2016) t.month = 2 assertEqual(t.month, 2) assertError('Param'){ t.month = -1 } assertError('Param'){ t.month = 15 } assertEqual(t.month, 2) t.day = 29 assertEqual(t.day, 29) assertError('Param'){ t.day = 30 } assertError('Param'){ t.day = 0 } assertError('Param'){ t.year = 2015 } assertEqual(t.day, 29) t.hour = 13 assertEqual(t.hour, 13) assertError('Param'){ t.hour = -900 } assertError('Param'){ t.hour = 3423 } assertEqual(t.hour, 13) t.minute = 41 assertEqual(t.minute, 41) assertError('Param'){ t.minute = -1 } assertError('Param'){ t.minute = 235 } assertEqual(t.minute, 41) t.second = 0.0000009 assertEqual(t.second, 0.0) assertError('Param'){ t.second = -0.003 } assertError('Param'){ t.second = -346234.098 } assertEqual(t.second, 0.0) } @test('Datetime parsing (RFC 3339)') routine testParseTime1(){ t = time.parse('2015-08-05T12:35:00Z') assertEqual(t.kind, $utc) assertEqual(t.year, 2015) assertEqual(t.month, 8) assertEqual(t.day, 5) assertEqual(t.hour, 12) assertEqual(t.minute, 35) assertEqual(t.second, 0.0) t = time.parse('2015-08-05T12:35:00.1234567Z') assertEqual(t.kind, $utc) assertEqual(t.hour, 12) assertEqual(t.second, 0.123456) t = time.parse('1988-10-25T01:37:15+01:00') assertEqual(t.kind, $utc) assertEqual(t.year, 1988) assertEqual(t.month, 10) assertEqual(t.day, 25) assertEqual(t.hour, 0) assertEqual(t.minute, 37) assertEqual(t.second, 15.0) t = time.parse('1988-10-25T01:37:15.2-01:30') assertEqual(t.hour, 3) assertEqual(t.minute, 7) assertEqual(t.second, 15.2) assertError('Time'){ time.parse('15-08-05T12:35:00Z') } assertError('Time'){ time.parse('2015-8-05T12:35:00Z') } assertError('Time'){ time.parse('2015-13-05T12:35:00Z') } assertError('Time'){ time.parse('2015-08-5T12:35:00Z') } assertError('Time'){ time.parse('2015-08-35T12:35:00Z') } assertError('Time'){ time.parse('2015-08-05t12:35:00Z') } assertError('Time'){ time.parse('2015-08-05T1:35:00Z') } assertError('Time'){ time.parse('2015-08-05T24:35:00Z') } assertError('Time'){ time.parse('2015-08-05T12:3:00Z') } assertError('Time'){ time.parse('2015-08-05T12:64:00Z') } assertError('Time'){ time.parse('2015-08T12:35:00Z') } assertError('Time'){ time.parse('2015-08-05T12:35Z') } assertError('Time'){ time.parse('2015-08-05T12:35:0Z') } assertError('Time'){ time.parse('2015-08-05T12:35:234Z') } assertError('Time'){ time.parse('2015-08-05T12:35:-5.0Z') } assertError('Time'){ time.parse('2015-08-05T12:35:00') } assertError('Time'){ time.parse('2015-08-05T12:35:00.0.0Z') } assertError('Time'){ time.parse('2015-08-05T12:35:00z') } assertError('Time'){ time.parse('2015-08-05T1a:35:00Z') } assertError('Time'){ time.parse('2015-08-05T12:35:00.xZ') } assertError('Time'){ time.parse('201f-08-05T12:35:00Z') } assertError('Time'){ time.parse('2015-08-05T12:35:001') } assertError('Time'){ time.parse('2015-08-05T12:35:00-1') } assertError('Time'){ time.parse('2015-08-05T12:35:00-01') } assertError('Time'){ time.parse('2015-08-05T12:35:00-01:') } assertError('Time'){ time.parse('2015-08-05T12:35:00-01:0') } assertError('Time'){ time.parse('2015-08-05T12:35:00-01Z') } assertError('Time'){ time.parse('2015-08-05T12:35:00-01:65') } assertError('Time'){ time.parse('2015-08-05T12:35:00-36:00') } assertError('Time'){ time.parse('2015-08-05T12:35:00-1:00') } assertError('Time'){ time.parse('2015-08-05T12:35:00-01:00Z') } } @test('Datetime parsing (simple format)') routine testParseTime2(){ t = time.parse('2015-08-05 12:35:00') assertEqual(t.kind, $local) assertEqual(t.year, 2015) assertEqual(t.month, 8) assertEqual(t.day, 5) assertEqual(t.hour, 12) assertEqual(t.minute, 35) assertEqual(t.second, 0.0) t = time.parse('2015-08-05 12:35:00.1234567') assertEqual(t.kind, $local) assertEqual(t.hour, 12) assertEqual(t.second, 0.123456) t = time.parse('1988-10-25') assertEqual(t.kind, $local) assertEqual(t.year, 1988) assertEqual(t.month, 10) assertEqual(t.day, 25) assertEqual(t.hour, 0) assertEqual(t.minute, 0) assertEqual(t.second, 0.0) t = time.parse('1988-10-25') assertEqual(t.kind, $local) assertEqual(t.year, 1988) assertEqual(t.month, 10) assertEqual(t.day, 25) assertEqual(t.hour, 0) assertEqual(t.minute, 0) assertEqual(t.second, 0.0) t = time.parse('10-25') assertEqual(t.kind, $local) assertEqual(t.year, time.now().year) assertEqual(t.month, 10) assertEqual(t.day, 25) assertEqual(t.hour, 0) assertEqual(t.minute, 0) assertEqual(t.second, 0.0) t = time.parse('15:45:09') now = time.now() assertEqual(t.kind, $local) assertEqual(t.year, now.year) assertEqual(t.month, now.month) assertEqual(t.day, now.day) assertEqual(t.hour, 15) assertEqual(t.minute, 45) assertEqual(t.second, 9.0) t = time.parse('15:45') now = time.now() assertEqual(t.kind, $local) assertEqual(t.year, now.year) assertEqual(t.month, now.month) assertEqual(t.day, now.day) assertEqual(t.hour, 15) assertEqual(t.minute, 45) assertEqual(t.second, 0.0) assertError('Time'){ time.parse('2015-08 12:35:00') } assertError('Time'){ time.parse('15-08-05 12:35:00') } assertError('Time'){ time.parse('2015-8-05 12:35:00') } assertError('Time'){ time.parse('2015-13-05 12:35:00') } assertError('Time'){ time.parse('2015-08-5 12:35:00') } assertError('Time'){ time.parse('2015-08-35 12:35:00') } assertError('Time'){ time.parse('2015-08-05 1:35:00') } assertError('Time'){ time.parse('2015-08-05 24:35:00') } assertError('Time'){ time.parse('12:3:00') } assertError('Time'){ time.parse('2015-08-35 12:5:00') } assertError('Time'){ time.parse('2015-08-05 12:64:00') } assertError('Time'){ time.parse('2015-08-35 12:35:0') } assertError('Time'){ time.parse('2015-08-35 12:35:324') } assertError('Time'){ time.parse('2015-08 12:35:00') } assertError('Time'){ time.parse('2015-08-05 12') } assertError('Time'){ time.parse('2015') } assertError('Time'){ time.parse('12') } assertError('Time'){ time.parse('') } assertError('Time'){ time.parse('2015-08-05 12:35:00:15') } assertError('Time'){ time.parse('2015-08-05-01 12:35:00') } assertError('Time'){ time.parse('2015-08-05 12:35:234') } assertError('Time'){ time.parse('2015-08-05 12:35:-5.0') } assertError('Time'){ time.parse('2015-08-05 12:35:00.0.0') } assertError('Time'){ time.parse('2015-08-05 1a:35:00') } assertError('Time'){ time.parse('2015-08-05 12:35:00.x') } assertError('Time'){ time.parse('201f-08-05 12:35:00') } assertError('Time'){ time.parse('2015-08-05 12:35:001') } } @test('Time zone conversions') routine testConvertTime(){ t = time.parse('2015-08-06T13:46:34.54Z') assertEqual(t.as($local).as($utc).value, t.value) t = time.make(2015, 08, 06, 13, 46, 34.54) assertEqual(t.as($utc).as($local).value, t.value) } @test('Epoch time conversions') routine testTimeValue(){ utc = time.parse('2000-01-01T00:00:45.903Z') assertEqual(utc.value, utc.second) assertEqual(time.fromValue(utc.value).value, utc.value) loc = utc.as($local) assertEqual(loc.value, utc.value) assertEqual(time.fromValue(loc.value).value, utc.value) } @test('Datetime comparison') routine testCompareTime(){ t1 = time.parse('2015-08-06T13:46:34.54Z') t2 = t1 assert(t1 == t2) assert(t1 >= t2) assert(t1 <= t2) assert(not (t1 != t2)) t2.second = 34.545 assert(t2 > t1) assert(not (t2 < t1)) assert(t2 >= t1) assert(not (t2 <= t1)) assert(t1 < t2) assert(not (t2 < t1)) assert(t1 <= t2) assert(not (t2 <= t1)) assert(t1 != t2) t1.hour = 18 assert(t1 > t2) t2.month = 9 assert(t2 > t1) } @test('Week, month and year days') routine testDayNumbers(){ t = time.parse('2015-08-03') assertEqual(t.weekDay, 1) t.day = 9 assertEqual(t.weekDay, 7) t = time.parse('2015-01-01') assertEqual(t.yearDay, 1) t = time.parse('2015-02-01') assertEqual(t.yearDay, 32) assertEqual(t.daysIn($month), 28) assertEqual(t.daysIn($year), 365) t.year = 2016 assertEqual(t.daysIn($month), 29) assertEqual(t.daysIn($year), 366) t.month = 8 assertEqual(t.daysIn($month), 31) } @test('Constructing timespan') routine testMakeTimeSpan() { s = time.TimeSpan( years=1, months=2, days=3, hours=4 ) assertEqual(s.years, 1) assertEqual(s.months, 14) s = time.TimeSpan( months=50, days=3, hours=4 ) assertEqual(s.years, 4) assertEqual(s.months, 50) s = time.TimeSpan( days=100, minutes=20 ) assertEqual(s.days, 100) assertEqual(s.hours, 100*24) s = time.TimeSpan( hours=100, minutes=20 ) assertEqual(s.days, 100/24) assertEqual(s.hours, 100) assertEqual(s.minutes, 100*60 + 20) } @test('Datetime and timespan operations') routine testDateTimeSpanOper() { t1 = time.parse( '2006-05-05 11:23:45' ) t2 = time.parse( '2009-02-09 15:23:45' ) s = t2 - t1 assertEqual(s.years, 2) assertEqual(s.months, 33) assertEqual(s.days, time.daysBetween(t1, t2)) assertEqual( t1 + s, t2) assertEqual( t2 - s, t1) s2 = s + s assertEqual(s2.years, 5) assertEqual(s2.months, 66) assertEqual(s < s2, true) assertEqual(t2 < t1 + s2, true) t3 = t2 + s2 assertEqual( t2 + s2, t3) assertEqual( t3 - s2, t2) assertEqual( (t3 - t1).value, (8, 3, 11, 12, 0, 0.0) ) t1 = time.parse( '2000-01-01 00:00:00' ) t2 = time.parse( '2009-02-09 15:23:45' ) s1 = t2 - t1; s3 = s1 + s1 + s1; s4 = time.TimeSpan( years=27, months=3, days=26, hours=22, minutes=11, seconds=15.000000 ) assertEqual( s4, s3 ) tup = s3.value; s5 = time.TimeSpan( years=tup.years, months=tup.months, days=tup.days, hours=tup.hours, minutes=tup.minutes, seconds=tup.seconds ) assertEqual( s5, s3 ) assertEqual( s5.value, s3.value ) } routine main(){ runTests() }