end )
it ( "Get day of week correct" , function ( )
- local function native_normalise ( tbl )
- return os.date("*t",os.time(tbl))
+ local function native_normalise ( year , month , day )
+ return os.date("*t",os.time{
+ year = year ;
+ month = month ;
+ day = day ;
+ })
end
- local tbl = {
- year = 2013 ;
- month = 7 ;
- day = 23 ;
- }
- assert.are.same ( native_normalise ( tbl ).wday , timetable.normalise ( tbl ).wday )
- tbl.day=24
- assert.are.same ( native_normalise ( tbl ).wday , timetable.normalise ( tbl ).wday )
- tbl.day=25
- assert.are.same ( native_normalise ( tbl ).wday , timetable.normalise ( tbl ).wday )
- tbl.day=26
- assert.are.same ( native_normalise ( tbl ).wday , timetable.normalise ( tbl ).wday )
- tbl.day=27
- assert.are.same ( native_normalise ( tbl ).wday , timetable.normalise ( tbl ).wday )
- tbl.day=28
- assert.are.same ( native_normalise ( tbl ).wday , timetable.normalise ( tbl ).wday )
- tbl.day=29
- assert.are.same ( native_normalise ( tbl ).wday , timetable.normalise ( tbl ).wday )
+ local function assert_same_wday ( year , month , day )
+ return assert.are.same (
+ native_normalise ( year , month , day ).wday ,
+ timetable.new ( year , month , day ):normalise().wday
+ )
+ end
+
+ assert_same_wday ( 2013 , 7 , 23 )
+ assert_same_wday ( 2013 , 7 , 24 )
+ assert_same_wday ( 2013 , 7 , 25 )
+ assert_same_wday ( 2013 , 7 , 26 )
+ assert_same_wday ( 2013 , 7 , 27 )
+ assert_same_wday ( 2013 , 7 , 28 )
+ assert_same_wday ( 2013 , 7 , 29 )
end )
end )
tm.sec or 0
end
-local function normalise ( tm )
- local year , month , day , hour , min , sec = unpack_tm ( tm )
-
+-- Modify parameters so they all fit within the "normal" range
+local function normalise ( year , month , day , hour , min , sec )
min , sec = increment ( min , sec , 60 ) -- TODO: consider leap seconds?
hour , min = increment ( hour , min , 60 )
day , hour = increment ( day , hour , 24 )
year , month = increment ( year , month - 1 , 12 )
month = month + 1
- tm.sec = sec
- tm.min = min
- tm.hour = hour
- tm.day = day
- tm.month = month
- tm.year = year
+ return year , month , day , hour , min , sec
+end
+
+
+local timetable_methods = { }
+
+function timetable_methods:normalise ( )
+ local year , month , day
+ year , month , day , self.hour , self.min , self.sec = normalise ( unpack_tm ( self ) )
+
+ self.day = day
+ self.month = month
+ self.year = year
local yday = day_of_year ( day , month , year )
local wday = day_of_week ( yday , year )
- tm.yday = yday
- tm.wday = wday
+ self.yday = yday
+ self.wday = wday
- return tm
+ return self
end
+timetable_methods.normalize = timetable_methods.normalise -- American English
+
local timetable_mt = {
+ __index = timetable_methods ;
}
local function cast_timetable ( tm )