libxlsxwriter/test/unit/utility/test_datetime_to_excel.c
2021-07-01 21:00:59 +01:00

671 lines
33 KiB
C

/*
* Tests for the libxlsxwriter library.
*
* Copyright 2014-2021, John McNamara, jmcnamara@cpan.org
*
*/
#include "../ctest.h"
#include "../helper.h"
#include "../../../include/xlsxwriter/utility.h"
// Test _datetime_to_excel_date().
CTEST(utility, test_datetime_date_and_time) {
double got;
lxw_datetime *datetime;
TEST_DATETIME(1899, 12, 31, 0, 0, 0.000, 0);
TEST_DATETIME(1982, 8, 25, 0, 15, 20.213, 30188.010650613425);
TEST_DATETIME(2065, 4, 19, 0, 16, 48.290, 60376.011670023145);
TEST_DATETIME(2147, 12, 15, 0, 55, 25.446, 90565.038488958337);
TEST_DATETIME(2230, 8, 10, 1, 2, 46.891, 120753.04359827546);
TEST_DATETIME(2313, 4, 6, 1, 4, 15.597, 150942.04462496529);
TEST_DATETIME(2395, 11, 30, 1, 9, 40.889, 181130.04838991899);
TEST_DATETIME(2478, 7, 25, 1, 11, 32.560, 211318.04968240741);
TEST_DATETIME(2561, 3, 21, 1, 30, 19.169, 241507.06272186342);
TEST_DATETIME(2643, 11, 15, 1, 48, 25.580, 271695.07529606484);
TEST_DATETIME(2726, 7, 12, 2, 3, 31.919, 301884.08578609955);
TEST_DATETIME(2809, 3, 6, 2, 11, 11.986, 332072.09111094906);
TEST_DATETIME(2891, 10, 31, 2, 24, 37.095, 362261.10042934027);
TEST_DATETIME(2974, 6, 26, 2, 35, 7.220, 392449.10772245371);
TEST_DATETIME(3057, 2, 19, 2, 45, 12.109, 422637.1147234838);
TEST_DATETIME(3139, 10, 17, 3, 6, 39.990, 452826.12962951389);
TEST_DATETIME(3222, 6, 11, 3, 8, 8.251, 483014.13065105322);
TEST_DATETIME(3305, 2, 5, 3, 19, 12.576, 513203.13834);
TEST_DATETIME(3387, 10, 1, 3, 29, 42.574, 543391.14563164348);
TEST_DATETIME(3470, 5, 27, 3, 37, 30.813, 573579.15105107636);
TEST_DATETIME(3553, 1, 21, 4, 14, 38.231, 603768.17683137732);
TEST_DATETIME(3635, 9, 16, 4, 16, 28.559, 633956.17810832174);
TEST_DATETIME(3718, 5, 13, 4, 17, 58.222, 664145.17914608796);
TEST_DATETIME(3801, 1, 6, 4, 21, 41.794, 694333.18173372687);
TEST_DATETIME(3883, 9, 2, 4, 56, 35.792, 724522.20596981479);
TEST_DATETIME(3966, 4, 28, 5, 25, 14.885, 754710.2258667245);
TEST_DATETIME(4048, 12, 21, 5, 26, 5.724, 784898.22645513888);
TEST_DATETIME(4131, 8, 18, 5, 46, 44.068, 815087.24078782403);
TEST_DATETIME(4214, 4, 13, 5, 48, 1.141, 845275.24167987274);
TEST_DATETIME(4296, 12, 7, 5, 53, 52.315, 875464.24574438657);
TEST_DATETIME(4379, 8, 3, 6, 14, 48.580, 905652.26028449077);
TEST_DATETIME(4462, 3, 28, 6, 46, 15.738, 935840.28212659725);
TEST_DATETIME(4544, 11, 22, 7, 31, 20.407, 966029.31343063654);
TEST_DATETIME(4627, 7, 19, 7, 58, 33.754, 996217.33233511576);
TEST_DATETIME(4710, 3, 15, 8, 7, 43.130, 1026406.3386936343);
TEST_DATETIME(4792, 11, 7, 8, 29, 11.091, 1056594.3536005903);
TEST_DATETIME(4875, 7, 4, 9, 8, 15.328, 1086783.3807329629);
TEST_DATETIME(4958, 2, 27, 9, 30, 41.781, 1116971.3963169097);
TEST_DATETIME(5040, 10, 23, 9, 34, 4.462, 1147159.3986627546);
TEST_DATETIME(5123, 6, 20, 9, 37, 23.945, 1177348.4009715857);
TEST_DATETIME(5206, 2, 12, 9, 37, 56.655, 1207536.4013501736);
TEST_DATETIME(5288, 10, 8, 9, 45, 12.230, 1237725.406391551);
TEST_DATETIME(5371, 6, 4, 9, 54, 14.782, 1267913.412671088);
TEST_DATETIME(5454, 1, 28, 9, 54, 22.108, 1298101.4127558796);
TEST_DATETIME(5536, 9, 24, 10, 1, 36.151, 1328290.4177795255);
TEST_DATETIME(5619, 5, 20, 12, 9, 48.602, 1358478.5068125231);
TEST_DATETIME(5702, 1, 14, 12, 34, 8.549, 1388667.5237100578);
TEST_DATETIME(5784, 9, 8, 12, 56, 6.495, 1418855.5389640625);
TEST_DATETIME(5867, 5, 6, 12, 58, 58.217, 1449044.5409515856);
TEST_DATETIME(5949, 12, 30, 12, 59, 54.263, 1479232.5416002662);
TEST_DATETIME(6032, 8, 24, 13, 34, 41.331, 1509420.5657561459);
TEST_DATETIME(6115, 4, 21, 13, 58, 28.601, 1539609.5822754744);
TEST_DATETIME(6197, 12, 14, 14, 2, 16.899, 1569797.5849178126);
TEST_DATETIME(6280, 8, 10, 14, 36, 17.444, 1599986.6085352316);
TEST_DATETIME(6363, 4, 6, 14, 37, 57.451, 1630174.60969272);
TEST_DATETIME(6445, 11, 30, 14, 57, 42.757, 1660363.6234115392);
TEST_DATETIME(6528, 7, 26, 15, 10, 48.307, 1690551.6325035533);
TEST_DATETIME(6611, 3, 22, 15, 14, 39.890, 1720739.635183912);
TEST_DATETIME(6693, 11, 15, 15, 19, 47.988, 1750928.6387498612);
TEST_DATETIME(6776, 7, 11, 16, 4, 24.344, 1781116.6697262037);
TEST_DATETIME(6859, 3, 7, 16, 22, 23.952, 1811305.6822216667);
TEST_DATETIME(6941, 10, 31, 16, 29, 55.999, 1841493.6874536921);
TEST_DATETIME(7024, 6, 26, 16, 58, 20.259, 1871681.7071789235);
TEST_DATETIME(7107, 2, 21, 17, 4, 2.415, 1901870.7111390624);
TEST_DATETIME(7189, 10, 16, 17, 18, 29.630, 1932058.7211762732);
TEST_DATETIME(7272, 6, 11, 17, 47, 21.323, 1962247.7412190163);
TEST_DATETIME(7355, 2, 5, 17, 53, 29.866, 1992435.7454845603);
TEST_DATETIME(7437, 10, 2, 17, 53, 41.076, 2022624.7456143056);
TEST_DATETIME(7520, 5, 28, 17, 55, 6.044, 2052812.7465977315);
TEST_DATETIME(7603, 1, 21, 18, 14, 49.151, 2083000.7602910995);
TEST_DATETIME(7685, 9, 16, 18, 17, 45.738, 2113189.7623349307);
TEST_DATETIME(7768, 5, 12, 18, 29, 59.700, 2143377.7708298611);
TEST_DATETIME(7851, 1, 7, 18, 33, 21.233, 2173566.773162419);
TEST_DATETIME(7933, 9, 2, 19, 14, 24.673, 2203754.8016744559);
TEST_DATETIME(8016, 4, 27, 19, 17, 12.816, 2233942.8036205554);
TEST_DATETIME(8098, 12, 22, 19, 23, 36.418, 2264131.8080603937);
TEST_DATETIME(8181, 8, 17, 19, 46, 25.908, 2294319.8239109721);
TEST_DATETIME(8264, 4, 13, 20, 7, 47.314, 2324508.8387420601);
TEST_DATETIME(8346, 12, 8, 20, 31, 37.603, 2354696.855296331);
TEST_DATETIME(8429, 8, 3, 20, 39, 57.770, 2384885.8610853008);
TEST_DATETIME(8512, 3, 29, 20, 50, 17.067, 2415073.8682530904);
TEST_DATETIME(8594, 11, 22, 21, 2, 57.827, 2445261.8770581828);
TEST_DATETIME(8677, 7, 19, 21, 23, 5.519, 2475450.8910360998);
TEST_DATETIME(8760, 3, 14, 21, 34, 49.572, 2505638.8991848612);
TEST_DATETIME(8842, 11, 8, 21, 39, 5.944, 2535827.9021521294);
TEST_DATETIME(8925, 7, 4, 21, 39, 18.426, 2566015.9022965971);
TEST_DATETIME(9008, 2, 28, 21, 46, 7.769, 2596203.9070343636);
TEST_DATETIME(9090, 10, 24, 21, 57, 55.662, 2626392.9152275696);
TEST_DATETIME(9173, 6, 19, 22, 19, 11.732, 2656580.9299968979);
TEST_DATETIME(9256, 2, 13, 22, 23, 51.376, 2686769.9332335186);
TEST_DATETIME(9338, 10, 9, 22, 27, 58.771, 2716957.9360968866);
TEST_DATETIME(9421, 6, 5, 22, 43, 30.392, 2747146.9468795368);
TEST_DATETIME(9504, 1, 30, 22, 48, 25.834, 2777334.9502990046);
TEST_DATETIME(9586, 9, 24, 22, 53, 51.727, 2807522.9540709145);
TEST_DATETIME(9669, 5, 20, 23, 12, 56.536, 2837711.9673210187);
TEST_DATETIME(9752, 1, 14, 23, 15, 54.109, 2867899.9693762613);
TEST_DATETIME(9834, 9, 10, 23, 17, 12.632, 2898088.9702850925);
TEST_DATETIME(9999, 12, 31, 23, 59, 59.000, 2958465.999988426);
}
CTEST(utility, test_datetime_date_only) {
double got;
lxw_datetime *datetime;
// Params = (year, month, day, excel_date).
TEST_DATETIME_DATE(1899, 12, 31, 0);
TEST_DATETIME_DATE(1900, 1, 1, 1);
TEST_DATETIME_DATE(1900, 2, 27, 58);
TEST_DATETIME_DATE(1900, 2, 28, 59);
TEST_DATETIME_DATE(1900, 3, 1, 61);
TEST_DATETIME_DATE(1900, 3, 2, 62);
TEST_DATETIME_DATE(1900, 3, 11, 71);
TEST_DATETIME_DATE(1900, 4, 8, 99);
TEST_DATETIME_DATE(1900, 9, 12, 256);
TEST_DATETIME_DATE(1901, 5, 3, 489);
TEST_DATETIME_DATE(1901, 10, 13, 652);
TEST_DATETIME_DATE(1902, 2, 15, 777);
TEST_DATETIME_DATE(1902, 6, 6, 888);
TEST_DATETIME_DATE(1902, 9, 25, 999);
TEST_DATETIME_DATE(1902, 9, 27, 1001);
TEST_DATETIME_DATE(1903, 4, 26, 1212);
TEST_DATETIME_DATE(1903, 8, 5, 1313);
TEST_DATETIME_DATE(1903, 12, 31, 1461);
TEST_DATETIME_DATE(1904, 1, 1, 1462);
TEST_DATETIME_DATE(1904, 2, 28, 1520);
TEST_DATETIME_DATE(1904, 2, 29, 1521);
TEST_DATETIME_DATE(1904, 3, 1, 1522);
TEST_DATETIME_DATE(1907, 2, 27, 2615);
TEST_DATETIME_DATE(1907, 2, 28, 2616);
TEST_DATETIME_DATE(1907, 3, 1, 2617);
TEST_DATETIME_DATE(1907, 3, 2, 2618);
TEST_DATETIME_DATE(1907, 3, 3, 2619);
TEST_DATETIME_DATE(1907, 3, 4, 2620);
TEST_DATETIME_DATE(1907, 3, 5, 2621);
TEST_DATETIME_DATE(1907, 3, 6, 2622);
TEST_DATETIME_DATE(1999, 1, 1, 36161);
TEST_DATETIME_DATE(1999, 1, 31, 36191);
TEST_DATETIME_DATE(1999, 2, 1, 36192);
TEST_DATETIME_DATE(1999, 2, 28, 36219);
TEST_DATETIME_DATE(1999, 3, 1, 36220);
TEST_DATETIME_DATE(1999, 3, 31, 36250);
TEST_DATETIME_DATE(1999, 4, 1, 36251);
TEST_DATETIME_DATE(1999, 4, 30, 36280);
TEST_DATETIME_DATE(1999, 5, 1, 36281);
TEST_DATETIME_DATE(1999, 5, 31, 36311);
TEST_DATETIME_DATE(1999, 6, 1, 36312);
TEST_DATETIME_DATE(1999, 6, 30, 36341);
TEST_DATETIME_DATE(1999, 7, 1, 36342);
TEST_DATETIME_DATE(1999, 7, 31, 36372);
TEST_DATETIME_DATE(1999, 8, 1, 36373);
TEST_DATETIME_DATE(1999, 8, 31, 36403);
TEST_DATETIME_DATE(1999, 9, 1, 36404);
TEST_DATETIME_DATE(1999, 9, 30, 36433);
TEST_DATETIME_DATE(1999, 10, 1, 36434);
TEST_DATETIME_DATE(1999, 10, 31, 36464);
TEST_DATETIME_DATE(1999, 11, 1, 36465);
TEST_DATETIME_DATE(1999, 11, 30, 36494);
TEST_DATETIME_DATE(1999, 12, 1, 36495);
TEST_DATETIME_DATE(1999, 12, 31, 36525);
TEST_DATETIME_DATE(2000, 1, 1, 36526);
TEST_DATETIME_DATE(2000, 1, 31, 36556);
TEST_DATETIME_DATE(2000, 2, 1, 36557);
TEST_DATETIME_DATE(2000, 2, 29, 36585);
TEST_DATETIME_DATE(2000, 3, 1, 36586);
TEST_DATETIME_DATE(2000, 3, 31, 36616);
TEST_DATETIME_DATE(2000, 4, 1, 36617);
TEST_DATETIME_DATE(2000, 4, 30, 36646);
TEST_DATETIME_DATE(2000, 5, 1, 36647);
TEST_DATETIME_DATE(2000, 5, 31, 36677);
TEST_DATETIME_DATE(2000, 6, 1, 36678);
TEST_DATETIME_DATE(2000, 6, 30, 36707);
TEST_DATETIME_DATE(2000, 7, 1, 36708);
TEST_DATETIME_DATE(2000, 7, 31, 36738);
TEST_DATETIME_DATE(2000, 8, 1, 36739);
TEST_DATETIME_DATE(2000, 8, 31, 36769);
TEST_DATETIME_DATE(2000, 9, 1, 36770);
TEST_DATETIME_DATE(2000, 9, 30, 36799);
TEST_DATETIME_DATE(2000, 10, 1, 36800);
TEST_DATETIME_DATE(2000, 10, 31, 36830);
TEST_DATETIME_DATE(2000, 11, 1, 36831);
TEST_DATETIME_DATE(2000, 11, 30, 36860);
TEST_DATETIME_DATE(2000, 12, 1, 36861);
TEST_DATETIME_DATE(2000, 12, 31, 36891);
TEST_DATETIME_DATE(2001, 1, 1, 36892);
TEST_DATETIME_DATE(2001, 1, 31, 36922);
TEST_DATETIME_DATE(2001, 2, 1, 36923);
TEST_DATETIME_DATE(2001, 2, 28, 36950);
TEST_DATETIME_DATE(2001, 3, 1, 36951);
TEST_DATETIME_DATE(2001, 3, 31, 36981);
TEST_DATETIME_DATE(2001, 4, 1, 36982);
TEST_DATETIME_DATE(2001, 4, 30, 37011);
TEST_DATETIME_DATE(2001, 5, 1, 37012);
TEST_DATETIME_DATE(2001, 5, 31, 37042);
TEST_DATETIME_DATE(2001, 6, 1, 37043);
TEST_DATETIME_DATE(2001, 6, 30, 37072);
TEST_DATETIME_DATE(2001, 7, 1, 37073);
TEST_DATETIME_DATE(2001, 7, 31, 37103);
TEST_DATETIME_DATE(2001, 8, 1, 37104);
TEST_DATETIME_DATE(2001, 8, 31, 37134);
TEST_DATETIME_DATE(2001, 9, 1, 37135);
TEST_DATETIME_DATE(2001, 9, 30, 37164);
TEST_DATETIME_DATE(2001, 10, 1, 37165);
TEST_DATETIME_DATE(2001, 10, 31, 37195);
TEST_DATETIME_DATE(2001, 11, 1, 37196);
TEST_DATETIME_DATE(2001, 11, 30, 37225);
TEST_DATETIME_DATE(2001, 12, 1, 37226);
TEST_DATETIME_DATE(2001, 12, 31, 37256);
TEST_DATETIME_DATE(2400, 1, 1, 182623);
TEST_DATETIME_DATE(2400, 1, 31, 182653);
TEST_DATETIME_DATE(2400, 2, 1, 182654);
TEST_DATETIME_DATE(2400, 2, 29, 182682);
TEST_DATETIME_DATE(2400, 3, 1, 182683);
TEST_DATETIME_DATE(2400, 3, 31, 182713);
TEST_DATETIME_DATE(2400, 4, 1, 182714);
TEST_DATETIME_DATE(2400, 4, 30, 182743);
TEST_DATETIME_DATE(2400, 5, 1, 182744);
TEST_DATETIME_DATE(2400, 5, 31, 182774);
TEST_DATETIME_DATE(2400, 6, 1, 182775);
TEST_DATETIME_DATE(2400, 6, 30, 182804);
TEST_DATETIME_DATE(2400, 7, 1, 182805);
TEST_DATETIME_DATE(2400, 7, 31, 182835);
TEST_DATETIME_DATE(2400, 8, 1, 182836);
TEST_DATETIME_DATE(2400, 8, 31, 182866);
TEST_DATETIME_DATE(2400, 9, 1, 182867);
TEST_DATETIME_DATE(2400, 9, 30, 182896);
TEST_DATETIME_DATE(2400, 10, 1, 182897);
TEST_DATETIME_DATE(2400, 10, 31, 182927);
TEST_DATETIME_DATE(2400, 11, 1, 182928);
TEST_DATETIME_DATE(2400, 11, 30, 182957);
TEST_DATETIME_DATE(2400, 12, 1, 182958);
TEST_DATETIME_DATE(2400, 12, 31, 182988);
TEST_DATETIME_DATE(4000, 1, 1, 767011);
TEST_DATETIME_DATE(4000, 1, 31, 767041);
TEST_DATETIME_DATE(4000, 2, 1, 767042);
TEST_DATETIME_DATE(4000, 2, 29, 767070);
TEST_DATETIME_DATE(4000, 3, 1, 767071);
TEST_DATETIME_DATE(4000, 3, 31, 767101);
TEST_DATETIME_DATE(4000, 4, 1, 767102);
TEST_DATETIME_DATE(4000, 4, 30, 767131);
TEST_DATETIME_DATE(4000, 5, 1, 767132);
TEST_DATETIME_DATE(4000, 5, 31, 767162);
TEST_DATETIME_DATE(4000, 6, 1, 767163);
TEST_DATETIME_DATE(4000, 6, 30, 767192);
TEST_DATETIME_DATE(4000, 7, 1, 767193);
TEST_DATETIME_DATE(4000, 7, 31, 767223);
TEST_DATETIME_DATE(4000, 8, 1, 767224);
TEST_DATETIME_DATE(4000, 8, 31, 767254);
TEST_DATETIME_DATE(4000, 9, 1, 767255);
TEST_DATETIME_DATE(4000, 9, 30, 767284);
TEST_DATETIME_DATE(4000, 10, 1, 767285);
TEST_DATETIME_DATE(4000, 10, 31, 767315);
TEST_DATETIME_DATE(4000, 11, 1, 767316);
TEST_DATETIME_DATE(4000, 11, 30, 767345);
TEST_DATETIME_DATE(4000, 12, 1, 767346);
TEST_DATETIME_DATE(4000, 12, 31, 767376);
TEST_DATETIME_DATE(4321, 1, 1, 884254);
TEST_DATETIME_DATE(4321, 1, 31, 884284);
TEST_DATETIME_DATE(4321, 2, 1, 884285);
TEST_DATETIME_DATE(4321, 2, 28, 884312);
TEST_DATETIME_DATE(4321, 3, 1, 884313);
TEST_DATETIME_DATE(4321, 3, 31, 884343);
TEST_DATETIME_DATE(4321, 4, 1, 884344);
TEST_DATETIME_DATE(4321, 4, 30, 884373);
TEST_DATETIME_DATE(4321, 5, 1, 884374);
TEST_DATETIME_DATE(4321, 5, 31, 884404);
TEST_DATETIME_DATE(4321, 6, 1, 884405);
TEST_DATETIME_DATE(4321, 6, 30, 884434);
TEST_DATETIME_DATE(4321, 7, 1, 884435);
TEST_DATETIME_DATE(4321, 7, 31, 884465);
TEST_DATETIME_DATE(4321, 8, 1, 884466);
TEST_DATETIME_DATE(4321, 8, 31, 884496);
TEST_DATETIME_DATE(4321, 9, 1, 884497);
TEST_DATETIME_DATE(4321, 9, 30, 884526);
TEST_DATETIME_DATE(4321, 10, 1, 884527);
TEST_DATETIME_DATE(4321, 10, 31, 884557);
TEST_DATETIME_DATE(4321, 11, 1, 884558);
TEST_DATETIME_DATE(4321, 11, 30, 884587);
TEST_DATETIME_DATE(4321, 12, 1, 884588);
TEST_DATETIME_DATE(4321, 12, 31, 884618);
TEST_DATETIME_DATE(9999, 1, 1, 2958101);
TEST_DATETIME_DATE(9999, 1, 31, 2958131);
TEST_DATETIME_DATE(9999, 2, 1, 2958132);
TEST_DATETIME_DATE(9999, 2, 28, 2958159);
TEST_DATETIME_DATE(9999, 3, 1, 2958160);
TEST_DATETIME_DATE(9999, 3, 31, 2958190);
TEST_DATETIME_DATE(9999, 4, 1, 2958191);
TEST_DATETIME_DATE(9999, 4, 30, 2958220);
TEST_DATETIME_DATE(9999, 5, 1, 2958221);
TEST_DATETIME_DATE(9999, 5, 31, 2958251);
TEST_DATETIME_DATE(9999, 6, 1, 2958252);
TEST_DATETIME_DATE(9999, 6, 30, 2958281);
TEST_DATETIME_DATE(9999, 7, 1, 2958282);
TEST_DATETIME_DATE(9999, 7, 31, 2958312);
TEST_DATETIME_DATE(9999, 8, 1, 2958313);
TEST_DATETIME_DATE(9999, 8, 31, 2958343);
TEST_DATETIME_DATE(9999, 9, 1, 2958344);
TEST_DATETIME_DATE(9999, 9, 30, 2958373);
TEST_DATETIME_DATE(9999, 10, 1, 2958374);
TEST_DATETIME_DATE(9999, 10, 31, 2958404);
TEST_DATETIME_DATE(9999, 11, 1, 2958405);
TEST_DATETIME_DATE(9999, 11, 30, 2958434);
TEST_DATETIME_DATE(9999, 12, 1, 2958435);
TEST_DATETIME_DATE(9999, 12, 31, 2958465);
}
CTEST(utility, test_datetime_date_only_1904) {
double got;
lxw_datetime *datetime;
// Params = (year, month, day, excel_date).
TEST_DATETIME_DATE_1904(1904, 1, 1, 0);
TEST_DATETIME_DATE_1904(1904, 1, 31, 30);
TEST_DATETIME_DATE_1904(1904, 2, 1, 31);
TEST_DATETIME_DATE_1904(1904, 2, 29, 59);
TEST_DATETIME_DATE_1904(1904, 3, 1, 60);
TEST_DATETIME_DATE_1904(1904, 3, 31, 90);
TEST_DATETIME_DATE_1904(1904, 4, 1, 91);
TEST_DATETIME_DATE_1904(1904, 4, 30, 120);
TEST_DATETIME_DATE_1904(1904, 5, 1, 121);
TEST_DATETIME_DATE_1904(1904, 5, 31, 151);
TEST_DATETIME_DATE_1904(1904, 6, 1, 152);
TEST_DATETIME_DATE_1904(1904, 6, 30, 181);
TEST_DATETIME_DATE_1904(1904, 7, 1, 182);
TEST_DATETIME_DATE_1904(1904, 7, 31, 212);
TEST_DATETIME_DATE_1904(1904, 8, 1, 213);
TEST_DATETIME_DATE_1904(1904, 8, 31, 243);
TEST_DATETIME_DATE_1904(1904, 9, 1, 244);
TEST_DATETIME_DATE_1904(1904, 9, 30, 273);
TEST_DATETIME_DATE_1904(1904, 10, 1, 274);
TEST_DATETIME_DATE_1904(1904, 10, 31, 304);
TEST_DATETIME_DATE_1904(1904, 11, 1, 305);
TEST_DATETIME_DATE_1904(1904, 11, 30, 334);
TEST_DATETIME_DATE_1904(1904, 12, 1, 335);
TEST_DATETIME_DATE_1904(1904, 12, 31, 365);
TEST_DATETIME_DATE_1904(1907, 2, 27, 1153);
TEST_DATETIME_DATE_1904(1907, 2, 28, 1154);
TEST_DATETIME_DATE_1904(1907, 3, 1, 1155);
TEST_DATETIME_DATE_1904(1907, 3, 2, 1156);
TEST_DATETIME_DATE_1904(1907, 3, 3, 1157);
TEST_DATETIME_DATE_1904(1907, 3, 4, 1158);
TEST_DATETIME_DATE_1904(1907, 3, 5, 1159);
TEST_DATETIME_DATE_1904(1907, 3, 6, 1160);
TEST_DATETIME_DATE_1904(1999, 1, 1, 34699);
TEST_DATETIME_DATE_1904(1999, 1, 31, 34729);
TEST_DATETIME_DATE_1904(1999, 2, 1, 34730);
TEST_DATETIME_DATE_1904(1999, 2, 28, 34757);
TEST_DATETIME_DATE_1904(1999, 3, 1, 34758);
TEST_DATETIME_DATE_1904(1999, 3, 31, 34788);
TEST_DATETIME_DATE_1904(1999, 4, 1, 34789);
TEST_DATETIME_DATE_1904(1999, 4, 30, 34818);
TEST_DATETIME_DATE_1904(1999, 5, 1, 34819);
TEST_DATETIME_DATE_1904(1999, 5, 31, 34849);
TEST_DATETIME_DATE_1904(1999, 6, 1, 34850);
TEST_DATETIME_DATE_1904(1999, 6, 30, 34879);
TEST_DATETIME_DATE_1904(1999, 7, 1, 34880);
TEST_DATETIME_DATE_1904(1999, 7, 31, 34910);
TEST_DATETIME_DATE_1904(1999, 8, 1, 34911);
TEST_DATETIME_DATE_1904(1999, 8, 31, 34941);
TEST_DATETIME_DATE_1904(1999, 9, 1, 34942);
TEST_DATETIME_DATE_1904(1999, 9, 30, 34971);
TEST_DATETIME_DATE_1904(1999, 10, 1, 34972);
TEST_DATETIME_DATE_1904(1999, 10, 31, 35002);
TEST_DATETIME_DATE_1904(1999, 11, 1, 35003);
TEST_DATETIME_DATE_1904(1999, 11, 30, 35032);
TEST_DATETIME_DATE_1904(1999, 12, 1, 35033);
TEST_DATETIME_DATE_1904(1999, 12, 31, 35063);
TEST_DATETIME_DATE_1904(2000, 1, 1, 35064);
TEST_DATETIME_DATE_1904(2000, 1, 31, 35094);
TEST_DATETIME_DATE_1904(2000, 2, 1, 35095);
TEST_DATETIME_DATE_1904(2000, 2, 29, 35123);
TEST_DATETIME_DATE_1904(2000, 3, 1, 35124);
TEST_DATETIME_DATE_1904(2000, 3, 31, 35154);
TEST_DATETIME_DATE_1904(2000, 4, 1, 35155);
TEST_DATETIME_DATE_1904(2000, 4, 30, 35184);
TEST_DATETIME_DATE_1904(2000, 5, 1, 35185);
TEST_DATETIME_DATE_1904(2000, 5, 31, 35215);
TEST_DATETIME_DATE_1904(2000, 6, 1, 35216);
TEST_DATETIME_DATE_1904(2000, 6, 30, 35245);
TEST_DATETIME_DATE_1904(2000, 7, 1, 35246);
TEST_DATETIME_DATE_1904(2000, 7, 31, 35276);
TEST_DATETIME_DATE_1904(2000, 8, 1, 35277);
TEST_DATETIME_DATE_1904(2000, 8, 31, 35307);
TEST_DATETIME_DATE_1904(2000, 9, 1, 35308);
TEST_DATETIME_DATE_1904(2000, 9, 30, 35337);
TEST_DATETIME_DATE_1904(2000, 10, 1, 35338);
TEST_DATETIME_DATE_1904(2000, 10, 31, 35368);
TEST_DATETIME_DATE_1904(2000, 11, 1, 35369);
TEST_DATETIME_DATE_1904(2000, 11, 30, 35398);
TEST_DATETIME_DATE_1904(2000, 12, 1, 35399);
TEST_DATETIME_DATE_1904(2000, 12, 31, 35429);
TEST_DATETIME_DATE_1904(2001, 1, 1, 35430);
TEST_DATETIME_DATE_1904(2001, 1, 31, 35460);
TEST_DATETIME_DATE_1904(2001, 2, 1, 35461);
TEST_DATETIME_DATE_1904(2001, 2, 28, 35488);
TEST_DATETIME_DATE_1904(2001, 3, 1, 35489);
TEST_DATETIME_DATE_1904(2001, 3, 31, 35519);
TEST_DATETIME_DATE_1904(2001, 4, 1, 35520);
TEST_DATETIME_DATE_1904(2001, 4, 30, 35549);
TEST_DATETIME_DATE_1904(2001, 5, 1, 35550);
TEST_DATETIME_DATE_1904(2001, 5, 31, 35580);
TEST_DATETIME_DATE_1904(2001, 6, 1, 35581);
TEST_DATETIME_DATE_1904(2001, 6, 30, 35610);
TEST_DATETIME_DATE_1904(2001, 7, 1, 35611);
TEST_DATETIME_DATE_1904(2001, 7, 31, 35641);
TEST_DATETIME_DATE_1904(2001, 8, 1, 35642);
TEST_DATETIME_DATE_1904(2001, 8, 31, 35672);
TEST_DATETIME_DATE_1904(2001, 9, 1, 35673);
TEST_DATETIME_DATE_1904(2001, 9, 30, 35702);
TEST_DATETIME_DATE_1904(2001, 10, 1, 35703);
TEST_DATETIME_DATE_1904(2001, 10, 31, 35733);
TEST_DATETIME_DATE_1904(2001, 11, 1, 35734);
TEST_DATETIME_DATE_1904(2001, 11, 30, 35763);
TEST_DATETIME_DATE_1904(2001, 12, 1, 35764);
TEST_DATETIME_DATE_1904(2001, 12, 31, 35794);
TEST_DATETIME_DATE_1904(2400, 1, 1, 181161);
TEST_DATETIME_DATE_1904(2400, 1, 31, 181191);
TEST_DATETIME_DATE_1904(2400, 2, 1, 181192);
TEST_DATETIME_DATE_1904(2400, 2, 29, 181220);
TEST_DATETIME_DATE_1904(2400, 3, 1, 181221);
TEST_DATETIME_DATE_1904(2400, 3, 31, 181251);
TEST_DATETIME_DATE_1904(2400, 4, 1, 181252);
TEST_DATETIME_DATE_1904(2400, 4, 30, 181281);
TEST_DATETIME_DATE_1904(2400, 5, 1, 181282);
TEST_DATETIME_DATE_1904(2400, 5, 31, 181312);
TEST_DATETIME_DATE_1904(2400, 6, 1, 181313);
TEST_DATETIME_DATE_1904(2400, 6, 30, 181342);
TEST_DATETIME_DATE_1904(2400, 7, 1, 181343);
TEST_DATETIME_DATE_1904(2400, 7, 31, 181373);
TEST_DATETIME_DATE_1904(2400, 8, 1, 181374);
TEST_DATETIME_DATE_1904(2400, 8, 31, 181404);
TEST_DATETIME_DATE_1904(2400, 9, 1, 181405);
TEST_DATETIME_DATE_1904(2400, 9, 30, 181434);
TEST_DATETIME_DATE_1904(2400, 10, 1, 181435);
TEST_DATETIME_DATE_1904(2400, 10, 31, 181465);
TEST_DATETIME_DATE_1904(2400, 11, 1, 181466);
TEST_DATETIME_DATE_1904(2400, 11, 30, 181495);
TEST_DATETIME_DATE_1904(2400, 12, 1, 181496);
TEST_DATETIME_DATE_1904(2400, 12, 31, 181526);
TEST_DATETIME_DATE_1904(4000, 1, 1, 765549);
TEST_DATETIME_DATE_1904(4000, 1, 31, 765579);
TEST_DATETIME_DATE_1904(4000, 2, 1, 765580);
TEST_DATETIME_DATE_1904(4000, 2, 29, 765608);
TEST_DATETIME_DATE_1904(4000, 3, 1, 765609);
TEST_DATETIME_DATE_1904(4000, 3, 31, 765639);
TEST_DATETIME_DATE_1904(4000, 4, 1, 765640);
TEST_DATETIME_DATE_1904(4000, 4, 30, 765669);
TEST_DATETIME_DATE_1904(4000, 5, 1, 765670);
TEST_DATETIME_DATE_1904(4000, 5, 31, 765700);
TEST_DATETIME_DATE_1904(4000, 6, 1, 765701);
TEST_DATETIME_DATE_1904(4000, 6, 30, 765730);
TEST_DATETIME_DATE_1904(4000, 7, 1, 765731);
TEST_DATETIME_DATE_1904(4000, 7, 31, 765761);
TEST_DATETIME_DATE_1904(4000, 8, 1, 765762);
TEST_DATETIME_DATE_1904(4000, 8, 31, 765792);
TEST_DATETIME_DATE_1904(4000, 9, 1, 765793);
TEST_DATETIME_DATE_1904(4000, 9, 30, 765822);
TEST_DATETIME_DATE_1904(4000, 10, 1, 765823);
TEST_DATETIME_DATE_1904(4000, 10, 31, 765853);
TEST_DATETIME_DATE_1904(4000, 11, 1, 765854);
TEST_DATETIME_DATE_1904(4000, 11, 30, 765883);
TEST_DATETIME_DATE_1904(4000, 12, 1, 765884);
TEST_DATETIME_DATE_1904(4000, 12, 31, 765914);
TEST_DATETIME_DATE_1904(4321, 1, 1, 882792);
TEST_DATETIME_DATE_1904(4321, 1, 31, 882822);
TEST_DATETIME_DATE_1904(4321, 2, 1, 882823);
TEST_DATETIME_DATE_1904(4321, 2, 28, 882850);
TEST_DATETIME_DATE_1904(4321, 3, 1, 882851);
TEST_DATETIME_DATE_1904(4321, 3, 31, 882881);
TEST_DATETIME_DATE_1904(4321, 4, 1, 882882);
TEST_DATETIME_DATE_1904(4321, 4, 30, 882911);
TEST_DATETIME_DATE_1904(4321, 5, 1, 882912);
TEST_DATETIME_DATE_1904(4321, 5, 31, 882942);
TEST_DATETIME_DATE_1904(4321, 6, 1, 882943);
TEST_DATETIME_DATE_1904(4321, 6, 30, 882972);
TEST_DATETIME_DATE_1904(4321, 7, 1, 882973);
TEST_DATETIME_DATE_1904(4321, 7, 31, 883003);
TEST_DATETIME_DATE_1904(4321, 8, 1, 883004);
TEST_DATETIME_DATE_1904(4321, 8, 31, 883034);
TEST_DATETIME_DATE_1904(4321, 9, 1, 883035);
TEST_DATETIME_DATE_1904(4321, 9, 30, 883064);
TEST_DATETIME_DATE_1904(4321, 10, 1, 883065);
TEST_DATETIME_DATE_1904(4321, 10, 31, 883095);
TEST_DATETIME_DATE_1904(4321, 11, 1, 883096);
TEST_DATETIME_DATE_1904(4321, 11, 30, 883125);
TEST_DATETIME_DATE_1904(4321, 12, 1, 883126);
TEST_DATETIME_DATE_1904(4321, 12, 31, 883156);
TEST_DATETIME_DATE_1904(9999, 1, 1, 2956639);
TEST_DATETIME_DATE_1904(9999, 1, 31, 2956669);
TEST_DATETIME_DATE_1904(9999, 2, 1, 2956670);
TEST_DATETIME_DATE_1904(9999, 2, 28, 2956697);
TEST_DATETIME_DATE_1904(9999, 3, 1, 2956698);
TEST_DATETIME_DATE_1904(9999, 3, 31, 2956728);
TEST_DATETIME_DATE_1904(9999, 4, 1, 2956729);
TEST_DATETIME_DATE_1904(9999, 4, 30, 2956758);
TEST_DATETIME_DATE_1904(9999, 5, 1, 2956759);
TEST_DATETIME_DATE_1904(9999, 5, 31, 2956789);
TEST_DATETIME_DATE_1904(9999, 6, 1, 2956790);
TEST_DATETIME_DATE_1904(9999, 6, 30, 2956819);
TEST_DATETIME_DATE_1904(9999, 7, 1, 2956820);
TEST_DATETIME_DATE_1904(9999, 7, 31, 2956850);
TEST_DATETIME_DATE_1904(9999, 8, 1, 2956851);
TEST_DATETIME_DATE_1904(9999, 8, 31, 2956881);
TEST_DATETIME_DATE_1904(9999, 9, 1, 2956882);
TEST_DATETIME_DATE_1904(9999, 9, 30, 2956911);
TEST_DATETIME_DATE_1904(9999, 10, 1, 2956912);
TEST_DATETIME_DATE_1904(9999, 10, 31, 2956942);
TEST_DATETIME_DATE_1904(9999, 11, 1, 2956943);
TEST_DATETIME_DATE_1904(9999, 11, 30, 2956972);
TEST_DATETIME_DATE_1904(9999, 12, 1, 2956973);
TEST_DATETIME_DATE_1904(9999, 12, 31, 2957003);
}
CTEST(utility, test_datetime_time_only) {
double got;
lxw_datetime *datetime;
TEST_DATETIME_TIME( 0, 0, 0.000, 0);
TEST_DATETIME_TIME( 0, 15, 20.213, 1.0650613425925924E-2);
TEST_DATETIME_TIME( 0, 16, 48.290, 1.1670023148148148E-2);
TEST_DATETIME_TIME( 0, 55, 25.446, 3.8488958333333337E-2);
TEST_DATETIME_TIME( 1, 2, 46.891, 4.3598275462962965E-2);
TEST_DATETIME_TIME( 1, 4, 15.597, 4.4624965277777782E-2);
TEST_DATETIME_TIME( 1, 9, 40.889, 4.8389918981481483E-2);
TEST_DATETIME_TIME( 1, 11, 32.560, 4.9682407407407404E-2);
TEST_DATETIME_TIME( 1, 30, 19.169, 6.2721863425925936E-2);
TEST_DATETIME_TIME( 1, 48, 25.580, 7.5296064814814809E-2);
TEST_DATETIME_TIME( 2, 3, 31.919, 8.5786099537037031E-2);
TEST_DATETIME_TIME( 2, 11, 11.986, 9.1110949074074077E-2);
TEST_DATETIME_TIME( 2, 24, 37.095, 0.10042934027777778);
TEST_DATETIME_TIME( 2, 35, 7.220, 0.1077224537037037);
TEST_DATETIME_TIME( 2, 45, 12.109, 0.11472348379629631);
TEST_DATETIME_TIME( 3, 6, 39.990, 0.12962951388888888);
TEST_DATETIME_TIME( 3, 8, 8.251, 0.13065105324074075);
TEST_DATETIME_TIME( 3, 19, 12.576, 0.13833999999999999);
TEST_DATETIME_TIME( 3, 29, 42.574, 0.14563164351851851);
TEST_DATETIME_TIME( 3, 37, 30.813, 0.1510510763888889);
TEST_DATETIME_TIME( 4, 14, 38.231, 0.1768313773148148);
TEST_DATETIME_TIME( 4, 16, 28.559, 0.17810832175925925);
TEST_DATETIME_TIME( 4, 17, 58.222, 0.17914608796296297);
TEST_DATETIME_TIME( 4, 21, 41.794, 0.18173372685185185);
TEST_DATETIME_TIME( 4, 56, 35.792, 0.2059698148148148);
TEST_DATETIME_TIME( 5, 25, 14.885, 0.22586672453703704);
TEST_DATETIME_TIME( 5, 26, 5.724, 0.22645513888888891);
TEST_DATETIME_TIME( 5, 46, 44.068, 0.24078782407407406);
TEST_DATETIME_TIME( 5, 48, 1.141, 0.2416798726851852);
TEST_DATETIME_TIME( 5, 53, 52.315, 0.24574438657407408);
TEST_DATETIME_TIME( 6, 14, 48.580, 0.26028449074074073);
TEST_DATETIME_TIME( 6, 46, 15.738, 0.28212659722222222);
TEST_DATETIME_TIME( 7, 31, 20.407, 0.31343063657407405);
TEST_DATETIME_TIME( 7, 58, 33.754, 0.33233511574074076);
TEST_DATETIME_TIME( 8, 7, 43.130, 0.33869363425925925);
TEST_DATETIME_TIME( 8, 29, 11.091, 0.35360059027777774);
TEST_DATETIME_TIME( 9, 8, 15.328, 0.380732962962963);
TEST_DATETIME_TIME( 9, 30, 41.781, 0.39631690972222228);
TEST_DATETIME_TIME( 9, 34, 4.462, 0.39866275462962958);
TEST_DATETIME_TIME( 9, 37, 23.945, 0.40097158564814817);
TEST_DATETIME_TIME( 9, 37, 56.655, 0.40135017361111114);
TEST_DATETIME_TIME( 9, 45, 12.230, 0.40639155092592594);
TEST_DATETIME_TIME( 9, 54, 14.782, 0.41267108796296298);
TEST_DATETIME_TIME( 9, 54, 22.108, 0.41275587962962962);
TEST_DATETIME_TIME(10, 1, 36.151, 0.41777952546296299);
TEST_DATETIME_TIME(12, 9, 48.602, 0.50681252314814818);
TEST_DATETIME_TIME(12, 34, 8.549, 0.52371005787037039);
TEST_DATETIME_TIME(12, 56, 6.495, 0.53896406249999995);
TEST_DATETIME_TIME(12, 58, 58.217, 0.54095158564814816);
TEST_DATETIME_TIME(12, 59, 54.263, 0.54160026620370372);
TEST_DATETIME_TIME(13, 34, 41.331, 0.56575614583333333);
TEST_DATETIME_TIME(13, 58, 28.601, 0.58227547453703699);
TEST_DATETIME_TIME(14, 2, 16.899, 0.58491781249999997);
TEST_DATETIME_TIME(14, 36, 17.444, 0.60853523148148148);
TEST_DATETIME_TIME(14, 37, 57.451, 0.60969271990740748);
TEST_DATETIME_TIME(14, 57, 42.757, 0.6234115393518519);
TEST_DATETIME_TIME(15, 10, 48.307, 0.6325035532407407);
TEST_DATETIME_TIME(15, 14, 39.890, 0.63518391203703706);
TEST_DATETIME_TIME(15, 19, 47.988, 0.63874986111111109);
TEST_DATETIME_TIME(16, 4, 24.344, 0.66972620370370362);
TEST_DATETIME_TIME(16, 22, 23.952, 0.68222166666666662);
TEST_DATETIME_TIME(16, 29, 55.999, 0.6874536921296297);
TEST_DATETIME_TIME(16, 58, 20.259, 0.70717892361111112);
TEST_DATETIME_TIME(17, 4, 2.415, 0.71113906250000003);
TEST_DATETIME_TIME(17, 18, 29.630, 0.72117627314814825);
TEST_DATETIME_TIME(17, 47, 21.323, 0.74121901620370367);
TEST_DATETIME_TIME(17, 53, 29.866, 0.74548456018518516);
TEST_DATETIME_TIME(17, 53, 41.076, 0.74561430555555563);
TEST_DATETIME_TIME(17, 55, 6.044, 0.74659773148148145);
TEST_DATETIME_TIME(18, 14, 49.151, 0.760291099537037);
TEST_DATETIME_TIME(18, 17, 45.738, 0.76233493055555546);
TEST_DATETIME_TIME(18, 29, 59.700, 0.77082986111111118);
TEST_DATETIME_TIME(18, 33, 21.233, 0.77316241898148153);
TEST_DATETIME_TIME(19, 14, 24.673, 0.80167445601851861);
TEST_DATETIME_TIME(19, 17, 12.816, 0.80362055555555545);
TEST_DATETIME_TIME(19, 23, 36.418, 0.80806039351851855);
TEST_DATETIME_TIME(19, 46, 25.908, 0.82391097222222232);
TEST_DATETIME_TIME(20, 7, 47.314, 0.83874206018518516);
TEST_DATETIME_TIME(20, 31, 37.603, 0.85529633101851854);
TEST_DATETIME_TIME(20, 39, 57.770, 0.86108530092592594);
TEST_DATETIME_TIME(20, 50, 17.067, 0.86825309027777775);
TEST_DATETIME_TIME(21, 2, 57.827, 0.87705818287037041);
TEST_DATETIME_TIME(21, 23, 5.519, 0.891036099537037);
TEST_DATETIME_TIME(21, 34, 49.572, 0.89918486111111118);
TEST_DATETIME_TIME(21, 39, 5.944, 0.90215212962962965);
TEST_DATETIME_TIME(21, 39, 18.426, 0.90229659722222222);
TEST_DATETIME_TIME(21, 46, 7.769, 0.90703436342592603);
TEST_DATETIME_TIME(21, 57, 55.662, 0.91522756944444439);
TEST_DATETIME_TIME(22, 19, 11.732, 0.92999689814814823);
TEST_DATETIME_TIME(22, 23, 51.376, 0.93323351851851843);
TEST_DATETIME_TIME(22, 27, 58.771, 0.93609688657407408);
TEST_DATETIME_TIME(22, 43, 30.392, 0.94687953703703709);
TEST_DATETIME_TIME(22, 48, 25.834, 0.95029900462962968);
TEST_DATETIME_TIME(22, 53, 51.727, 0.95407091435185187);
TEST_DATETIME_TIME(23, 12, 56.536, 0.96732101851851848);
TEST_DATETIME_TIME(23, 15, 54.109, 0.96937626157407408);
TEST_DATETIME_TIME(23, 17, 12.632, 0.97028509259259266);
TEST_DATETIME_TIME(23, 59, 59.999, 0.99999998842592586);
}
CTEST(utility, test_unixtime) {
double got;
TEST_UNIXTIME(-2209075200, 0); // 1899-12-31 00:00
TEST_UNIXTIME(-2209032000, 0.5); // 1899-12-31 12:00
TEST_UNIXTIME(-2208988800, 1); // 1900-01-01 00:00
TEST_UNIXTIME(-2208945600, 1.5); // 1900-01-01 12:00
TEST_UNIXTIME(-2203977600, 59); // 1900-02-28 00:00
TEST_UNIXTIME(-2203934400, 59.5); // 1900-02-28 12:00
TEST_UNIXTIME(-2203891200, 61); // 1900-03-01 00:00
TEST_UNIXTIME(-2203848000, 61.5); // 1900-03-01 12:00
TEST_UNIXTIME(0, 25569); // 1970-01-01 00:00
TEST_UNIXTIME(43200, 25569.5); // 1970-01-01 12:00
TEST_UNIXTIME(946684800, 36526); // 2000-01-01 00:00
TEST_UNIXTIME(946728000, 36526.5); // 2000-01-01 12:00
}
CTEST(utility, test_unixtime_1904) {
double got;
TEST_UNIXTIME_1904(-2082844800, 0); // 1904-01-01 00:00
TEST_UNIXTIME_1904(-2082801600, 0.5); // 1904-01-01 12:00
TEST_UNIXTIME_1904(0, 24107); // 1970-01-01 00:00
TEST_UNIXTIME_1904(43200, 24107.5); // 1970-01-01 12:00
TEST_UNIXTIME_1904(946684800, 35064); // 2000-01-01 00:00
TEST_UNIXTIME_1904(946728000, 35064.5); // 2000-01-01 12:00
}