X-Git-Url: https://pd.if.org/git/?p=pdclib;a=blobdiff_plain;f=functions%2F_PDCLIB%2F_PDCLIB_is_leap.c;fp=functions%2F_PDCLIB%2F_PDCLIB_is_leap.c;h=80ea70be04f581ab630688834b0e3ef19d1d5758;hp=0000000000000000000000000000000000000000;hb=3b7e3a6f07410a5757339fb8037c149c1655385e;hpb=3bbe0e5098597cbbf01a4a490ae030b1570fb7e1 diff --git a/functions/_PDCLIB/_PDCLIB_is_leap.c b/functions/_PDCLIB/_PDCLIB_is_leap.c new file mode 100644 index 0000000..80ea70b --- /dev/null +++ b/functions/_PDCLIB/_PDCLIB_is_leap.c @@ -0,0 +1,39 @@ +/* _PDCLIB_is_leap( int ) + + This file is part of the Public Domain C Library (PDCLib). + Permission is granted to use, modify, and / or redistribute at will. +*/ + +#include "_PDCLIB_int.h" + +#ifndef REGTEST + +int _PDCLIB_is_leap( int year_offset ) +{ + /* year given as offset from 1900, matching tm.tm_year in */ + long long year = year_offset + 1900ll; + return ( ( year % 4 ) == 0 && ( ( year % 25 ) != 0 || ( year % 400 ) == 0 ) ); +} + +#endif + +#ifdef TEST + +#include "_PDCLIB_test.h" + +int main( void ) +{ +#ifndef REGTEST + /* 1901 not leap */ + TESTCASE( ! _PDCLIB_is_leap( 1 ) ); + /* 1904 leap */ + TESTCASE( _PDCLIB_is_leap( 4 ) ); + /* 1900 not leap */ + TESTCASE( ! _PDCLIB_is_leap( 0 ) ); + /* 2000 leap */ + TESTCASE( _PDCLIB_is_leap( 100 ) ); +#endif + return TEST_RESULTS; +} + +#endif