From 1f8c95ba28a59bf8459a15c8b2d52234e577e191 Mon Sep 17 00:00:00 2001 From: daurnimator Date: Fri, 29 Aug 2014 14:56:13 -0400 Subject: [PATCH] luatz/timetable: Optimize and export `is_leap`; add tests --- luatz/timetable.lua | 9 ++++++++- spec/timetable_spec.lua | 13 +++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/luatz/timetable.lua b/luatz/timetable.lua index f096372..99ac52e 100644 --- a/luatz/timetable.lua +++ b/luatz/timetable.lua @@ -16,7 +16,13 @@ end local sakamoto = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4}; local function is_leap ( y ) - return (y % 4) == 0 and (y % 100) ~= 0 or (y % 400) == 0 + if (y % 4) ~= 0 then + return false + elseif (y % 100) ~= 0 then + return true + else + return (y % 400) == 0 + end end local function year_length ( y ) @@ -200,6 +206,7 @@ local function new_from_timestamp ( ts ) end return { + is_leap = is_leap ; day_of_year = day_of_year ; day_of_week = day_of_week ; normalise = normalise ; diff --git a/spec/timetable_spec.lua b/spec/timetable_spec.lua index b769911..0ff42b1 100644 --- a/spec/timetable_spec.lua +++ b/spec/timetable_spec.lua @@ -9,6 +9,19 @@ describe ( "Timetable library" , function ( ) }) end + it ( "#is_leap is correct" , function ( ) + assert.same ( false , timetable.is_leap ( 1 ) ) + assert.same ( false , timetable.is_leap ( 3 ) ) + assert.same ( true , timetable.is_leap ( 4 ) ) + assert.same ( true , timetable.is_leap ( 2000 ) ) + assert.same ( true , timetable.is_leap ( 2004 ) ) + assert.same ( true , timetable.is_leap ( 2012 ) ) + assert.same ( false , timetable.is_leap ( 2013 ) ) + assert.same ( false , timetable.is_leap ( 2014 ) ) + assert.same ( false , timetable.is_leap ( 2100 ) ) + assert.same ( true , timetable.is_leap ( 2400 ) ) + end ) + it ( "#normalise gets #wday (day of week) correct" , function ( ) local function assert_same_wday ( year , month , day ) -- 2.39.2