From 3a7693d5c89981e1230d0d49163fc23d02224873 Mon Sep 17 00:00:00 2001 From: daurnimator Date: Tue, 23 Jul 2013 18:51:47 -0400 Subject: [PATCH] src/timetable: Move normalise to be a method on timetable object --- spec/timetable_spec.lua | 40 ++++++++++++++++++++-------------------- src/timetable.lua | 33 +++++++++++++++++++++------------ 2 files changed, 41 insertions(+), 32 deletions(-) diff --git a/spec/timetable_spec.lua b/spec/timetable_spec.lua index 6536459..a72a0f9 100644 --- a/spec/timetable_spec.lua +++ b/spec/timetable_spec.lua @@ -12,26 +12,26 @@ describe ( "Time table library" , function ( ) 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 ) diff --git a/src/timetable.lua b/src/timetable.lua index df78b15..7e986a1 100644 --- a/src/timetable.lua +++ b/src/timetable.lua @@ -72,9 +72,8 @@ local function unpack_tm ( tm ) 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 ) @@ -96,22 +95,32 @@ local function normalise ( tm ) 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 ) -- 2.39.5