use rstest::rstest;
use time::Month::*;
use time::{Month, util};
#[rstest]
#[case(2019, January, 31)]
#[case(2019, February, 28)]
#[case(2019, March, 31)]
#[case(2019, April, 30)]
#[case(2019, May, 31)]
#[case(2019, June, 30)]
#[case(2019, July, 31)]
#[case(2019, August, 31)]
#[case(2019, September, 30)]
#[case(2019, October, 31)]
#[case(2019, November, 30)]
#[case(2019, December, 31)]
#[case(2020, January, 31)]
#[case(2020, February, 29)]
#[case(2020, March, 31)]
#[case(2020, April, 30)]
#[case(2020, May, 31)]
#[case(2020, June, 30)]
#[case(2020, July, 31)]
#[case(2020, August, 31)]
#[case(2020, September, 30)]
#[case(2020, October, 31)]
#[case(2020, November, 30)]
#[case(2020, December, 31)]
fn days_in_year_month(#[case] year: i32, #[case] month: Month, #[case] expected: u8) {
#[expect(deprecated)]
{
assert_eq!(util::days_in_year_month(year, month), expected);
}
}
#[rstest]
#[case(0, true)]
#[case(1, false)]
#[case(2, false)]
#[case(3, false)]
#[case(4, true)]
#[case(5, false)]
#[case(6, false)]
#[case(7, false)]
#[case(8, true)]
#[case(9, false)]
#[case(10, false)]
#[case(11, false)]
#[case(12, true)]
#[case(13, false)]
#[case(14, false)]
#[case(15, false)]
#[case(16, true)]
#[case(17, false)]
#[case(18, false)]
#[case(19, false)]
#[case(20, true)]
#[case(21, false)]
#[case(22, false)]
#[case(23, false)]
#[case(24, true)]
#[case(25, false)]
#[case(26, false)]
#[case(27, false)]
#[case(28, true)]
#[case(29, false)]
#[case(30, false)]
#[case(31, false)]
#[case(32, true)]
#[case(33, false)]
#[case(34, false)]
#[case(35, false)]
#[case(36, true)]
#[case(37, false)]
#[case(38, false)]
#[case(39, false)]
#[case(40, true)]
#[case(41, false)]
#[case(42, false)]
#[case(43, false)]
#[case(44, true)]
#[case(45, false)]
#[case(46, false)]
#[case(47, false)]
#[case(48, true)]
#[case(49, false)]
#[case(50, false)]
#[case(51, false)]
#[case(52, true)]
#[case(53, false)]
#[case(54, false)]
#[case(55, false)]
#[case(56, true)]
#[case(57, false)]
#[case(58, false)]
#[case(59, false)]
#[case(60, true)]
#[case(61, false)]
#[case(62, false)]
#[case(63, false)]
#[case(64, true)]
#[case(65, false)]
#[case(66, false)]
#[case(67, false)]
#[case(68, true)]
#[case(69, false)]
#[case(70, false)]
#[case(71, false)]
#[case(72, true)]
#[case(73, false)]
#[case(74, false)]
#[case(75, false)]
#[case(76, true)]
#[case(77, false)]
#[case(78, false)]
#[case(79, false)]
#[case(80, true)]
#[case(81, false)]
#[case(82, false)]
#[case(83, false)]
#[case(84, true)]
#[case(85, false)]
#[case(86, false)]
#[case(87, false)]
#[case(88, true)]
#[case(89, false)]
#[case(90, false)]
#[case(91, false)]
#[case(92, true)]
#[case(93, false)]
#[case(94, false)]
#[case(95, false)]
#[case(96, true)]
#[case(97, false)]
#[case(98, false)]
#[case(99, false)]
#[case(100, false)]
#[case(101, false)]
#[case(102, false)]
#[case(103, false)]
#[case(104, true)]
#[case(105, false)]
#[case(106, false)]
#[case(107, false)]
#[case(108, true)]
#[case(109, false)]
#[case(110, false)]
#[case(111, false)]
#[case(112, true)]
#[case(113, false)]
#[case(114, false)]
#[case(115, false)]
#[case(116, true)]
#[case(117, false)]
#[case(118, false)]
#[case(119, false)]
#[case(120, true)]
#[case(121, false)]
#[case(122, false)]
#[case(123, false)]
#[case(124, true)]
#[case(125, false)]
#[case(126, false)]
#[case(127, false)]
#[case(128, true)]
#[case(129, false)]
#[case(130, false)]
#[case(131, false)]
#[case(132, true)]
#[case(133, false)]
#[case(134, false)]
#[case(135, false)]
#[case(136, true)]
#[case(137, false)]
#[case(138, false)]
#[case(139, false)]
#[case(140, true)]
#[case(141, false)]
#[case(142, false)]
#[case(143, false)]
#[case(144, true)]
#[case(145, false)]
#[case(146, false)]
#[case(147, false)]
#[case(148, true)]
#[case(149, false)]
#[case(150, false)]
#[case(151, false)]
#[case(152, true)]
#[case(153, false)]
#[case(154, false)]
#[case(155, false)]
#[case(156, true)]
#[case(157, false)]
#[case(158, false)]
#[case(159, false)]
#[case(160, true)]
#[case(161, false)]
#[case(162, false)]
#[case(163, false)]
#[case(164, true)]
#[case(165, false)]
#[case(166, false)]
#[case(167, false)]
#[case(168, true)]
#[case(169, false)]
#[case(170, false)]
#[case(171, false)]
#[case(172, true)]
#[case(173, false)]
#[case(174, false)]
#[case(175, false)]
#[case(176, true)]
#[case(177, false)]
#[case(178, false)]
#[case(179, false)]
#[case(180, true)]
#[case(181, false)]
#[case(182, false)]
#[case(183, false)]
#[case(184, true)]
#[case(185, false)]
#[case(186, false)]
#[case(187, false)]
#[case(188, true)]
#[case(189, false)]
#[case(190, false)]
#[case(191, false)]
#[case(192, true)]
#[case(193, false)]
#[case(194, false)]
#[case(195, false)]
#[case(196, true)]
#[case(197, false)]
#[case(198, false)]
#[case(199, false)]
#[case(200, false)]
#[case(201, false)]
#[case(202, false)]
#[case(203, false)]
#[case(204, true)]
#[case(205, false)]
#[case(206, false)]
#[case(207, false)]
#[case(208, true)]
#[case(209, false)]
#[case(210, false)]
#[case(211, false)]
#[case(212, true)]
#[case(213, false)]
#[case(214, false)]
#[case(215, false)]
#[case(216, true)]
#[case(217, false)]
#[case(218, false)]
#[case(219, false)]
#[case(220, true)]
#[case(221, false)]
#[case(222, false)]
#[case(223, false)]
#[case(224, true)]
#[case(225, false)]
#[case(226, false)]
#[case(227, false)]
#[case(228, true)]
#[case(229, false)]
#[case(230, false)]
#[case(231, false)]
#[case(232, true)]
#[case(233, false)]
#[case(234, false)]
#[case(235, false)]
#[case(236, true)]
#[case(237, false)]
#[case(238, false)]
#[case(239, false)]
#[case(240, true)]
#[case(241, false)]
#[case(242, false)]
#[case(243, false)]
#[case(244, true)]
#[case(245, false)]
#[case(246, false)]
#[case(247, false)]
#[case(248, true)]
#[case(249, false)]
#[case(250, false)]
#[case(251, false)]
#[case(252, true)]
#[case(253, false)]
#[case(254, false)]
#[case(255, false)]
#[case(256, true)]
#[case(257, false)]
#[case(258, false)]
#[case(259, false)]
#[case(260, true)]
#[case(261, false)]
#[case(262, false)]
#[case(263, false)]
#[case(264, true)]
#[case(265, false)]
#[case(266, false)]
#[case(267, false)]
#[case(268, true)]
#[case(269, false)]
#[case(270, false)]
#[case(271, false)]
#[case(272, true)]
#[case(273, false)]
#[case(274, false)]
#[case(275, false)]
#[case(276, true)]
#[case(277, false)]
#[case(278, false)]
#[case(279, false)]
#[case(280, true)]
#[case(281, false)]
#[case(282, false)]
#[case(283, false)]
#[case(284, true)]
#[case(285, false)]
#[case(286, false)]
#[case(287, false)]
#[case(288, true)]
#[case(289, false)]
#[case(290, false)]
#[case(291, false)]
#[case(292, true)]
#[case(293, false)]
#[case(294, false)]
#[case(295, false)]
#[case(296, true)]
#[case(297, false)]
#[case(298, false)]
#[case(299, false)]
#[case(300, false)]
#[case(301, false)]
#[case(302, false)]
#[case(303, false)]
#[case(304, true)]
#[case(305, false)]
#[case(306, false)]
#[case(307, false)]
#[case(308, true)]
#[case(309, false)]
#[case(310, false)]
#[case(311, false)]
#[case(312, true)]
#[case(313, false)]
#[case(314, false)]
#[case(315, false)]
#[case(316, true)]
#[case(317, false)]
#[case(318, false)]
#[case(319, false)]
#[case(320, true)]
#[case(321, false)]
#[case(322, false)]
#[case(323, false)]
#[case(324, true)]
#[case(325, false)]
#[case(326, false)]
#[case(327, false)]
#[case(328, true)]
#[case(329, false)]
#[case(330, false)]
#[case(331, false)]
#[case(332, true)]
#[case(333, false)]
#[case(334, false)]
#[case(335, false)]
#[case(336, true)]
#[case(337, false)]
#[case(338, false)]
#[case(339, false)]
#[case(340, true)]
#[case(341, false)]
#[case(342, false)]
#[case(343, false)]
#[case(344, true)]
#[case(345, false)]
#[case(346, false)]
#[case(347, false)]
#[case(348, true)]
#[case(349, false)]
#[case(350, false)]
#[case(351, false)]
#[case(352, true)]
#[case(353, false)]
#[case(354, false)]
#[case(355, false)]
#[case(356, true)]
#[case(357, false)]
#[case(358, false)]
#[case(359, false)]
#[case(360, true)]
#[case(361, false)]
#[case(362, false)]
#[case(363, false)]
#[case(364, true)]
#[case(365, false)]
#[case(366, false)]
#[case(367, false)]
#[case(368, true)]
#[case(369, false)]
#[case(370, false)]
#[case(371, false)]
#[case(372, true)]
#[case(373, false)]
#[case(374, false)]
#[case(375, false)]
#[case(376, true)]
#[case(377, false)]
#[case(378, false)]
#[case(379, false)]
#[case(380, true)]
#[case(381, false)]
#[case(382, false)]
#[case(383, false)]
#[case(384, true)]
#[case(385, false)]
#[case(386, false)]
#[case(387, false)]
#[case(388, true)]
#[case(389, false)]
#[case(390, false)]
#[case(391, false)]
#[case(392, true)]
#[case(393, false)]
#[case(394, false)]
#[case(395, false)]
#[case(396, true)]
#[case(397, false)]
#[case(398, false)]
#[case(399, false)]
fn is_leap_year(#[case] year: i32, #[case] expected: bool) {
assert_eq!(util::is_leap_year(year), expected, "year {year} failed");
}
#[rstest]
#[case(1900, 365)]
#[case(2000, 366)]
#[case(2004, 366)]
#[case(2005, 365)]
#[case(2100, 365)]
fn days_in_year(#[case] year: i32, #[case] expected: u16) {
assert_eq!(util::days_in_year(year), expected);
}
#[rstest]
#[case(0, 52)]
#[case(1, 52)]
#[case(2, 52)]
#[case(3, 52)]
#[case(4, 53)]
#[case(5, 52)]
#[case(6, 52)]
#[case(7, 52)]
#[case(8, 52)]
#[case(9, 53)]
#[case(10, 52)]
#[case(11, 52)]
#[case(12, 52)]
#[case(13, 52)]
#[case(14, 52)]
#[case(15, 53)]
#[case(16, 52)]
#[case(17, 52)]
#[case(18, 52)]
#[case(19, 52)]
#[case(20, 53)]
#[case(21, 52)]
#[case(22, 52)]
#[case(23, 52)]
#[case(24, 52)]
#[case(25, 52)]
#[case(26, 53)]
#[case(27, 52)]
#[case(28, 52)]
#[case(29, 52)]
#[case(30, 52)]
#[case(31, 52)]
#[case(32, 53)]
#[case(33, 52)]
#[case(34, 52)]
#[case(35, 52)]
#[case(36, 52)]
#[case(37, 53)]
#[case(38, 52)]
#[case(39, 52)]
#[case(40, 52)]
#[case(41, 52)]
#[case(42, 52)]
#[case(43, 53)]
#[case(44, 52)]
#[case(45, 52)]
#[case(46, 52)]
#[case(47, 52)]
#[case(48, 53)]
#[case(49, 52)]
#[case(50, 52)]
#[case(51, 52)]
#[case(52, 52)]
#[case(53, 52)]
#[case(54, 53)]
#[case(55, 52)]
#[case(56, 52)]
#[case(57, 52)]
#[case(58, 52)]
#[case(59, 52)]
#[case(60, 53)]
#[case(61, 52)]
#[case(62, 52)]
#[case(63, 52)]
#[case(64, 52)]
#[case(65, 53)]
#[case(66, 52)]
#[case(67, 52)]
#[case(68, 52)]
#[case(69, 52)]
#[case(70, 52)]
#[case(71, 53)]
#[case(72, 52)]
#[case(73, 52)]
#[case(74, 52)]
#[case(75, 52)]
#[case(76, 53)]
#[case(77, 52)]
#[case(78, 52)]
#[case(79, 52)]
#[case(80, 52)]
#[case(81, 52)]
#[case(82, 53)]
#[case(83, 52)]
#[case(84, 52)]
#[case(85, 52)]
#[case(86, 52)]
#[case(87, 52)]
#[case(88, 53)]
#[case(89, 52)]
#[case(90, 52)]
#[case(91, 52)]
#[case(92, 52)]
#[case(93, 53)]
#[case(94, 52)]
#[case(95, 52)]
#[case(96, 52)]
#[case(97, 52)]
#[case(98, 52)]
#[case(99, 53)]
#[case(100, 52)]
#[case(101, 52)]
#[case(102, 52)]
#[case(103, 52)]
#[case(104, 52)]
#[case(105, 53)]
#[case(106, 52)]
#[case(107, 52)]
#[case(108, 52)]
#[case(109, 52)]
#[case(110, 52)]
#[case(111, 53)]
#[case(112, 52)]
#[case(113, 52)]
#[case(114, 52)]
#[case(115, 52)]
#[case(116, 53)]
#[case(117, 52)]
#[case(118, 52)]
#[case(119, 52)]
#[case(120, 52)]
#[case(121, 52)]
#[case(122, 53)]
#[case(123, 52)]
#[case(124, 52)]
#[case(125, 52)]
#[case(126, 52)]
#[case(127, 52)]
#[case(128, 53)]
#[case(129, 52)]
#[case(130, 52)]
#[case(131, 52)]
#[case(132, 52)]
#[case(133, 53)]
#[case(134, 52)]
#[case(135, 52)]
#[case(136, 52)]
#[case(137, 52)]
#[case(138, 52)]
#[case(139, 53)]
#[case(140, 52)]
#[case(141, 52)]
#[case(142, 52)]
#[case(143, 52)]
#[case(144, 53)]
#[case(145, 52)]
#[case(146, 52)]
#[case(147, 52)]
#[case(148, 52)]
#[case(149, 52)]
#[case(150, 53)]
#[case(151, 52)]
#[case(152, 52)]
#[case(153, 52)]
#[case(154, 52)]
#[case(155, 52)]
#[case(156, 53)]
#[case(157, 52)]
#[case(158, 52)]
#[case(159, 52)]
#[case(160, 52)]
#[case(161, 53)]
#[case(162, 52)]
#[case(163, 52)]
#[case(164, 52)]
#[case(165, 52)]
#[case(166, 52)]
#[case(167, 53)]
#[case(168, 52)]
#[case(169, 52)]
#[case(170, 52)]
#[case(171, 52)]
#[case(172, 53)]
#[case(173, 52)]
#[case(174, 52)]
#[case(175, 52)]
#[case(176, 52)]
#[case(177, 52)]
#[case(178, 53)]
#[case(179, 52)]
#[case(180, 52)]
#[case(181, 52)]
#[case(182, 52)]
#[case(183, 52)]
#[case(184, 53)]
#[case(185, 52)]
#[case(186, 52)]
#[case(187, 52)]
#[case(188, 52)]
#[case(189, 53)]
#[case(190, 52)]
#[case(191, 52)]
#[case(192, 52)]
#[case(193, 52)]
#[case(194, 52)]
#[case(195, 53)]
#[case(196, 52)]
#[case(197, 52)]
#[case(198, 52)]
#[case(199, 52)]
#[case(200, 52)]
#[case(201, 53)]
#[case(202, 52)]
#[case(203, 52)]
#[case(204, 52)]
#[case(205, 52)]
#[case(206, 52)]
#[case(207, 53)]
#[case(208, 52)]
#[case(209, 52)]
#[case(210, 52)]
#[case(211, 52)]
#[case(212, 53)]
#[case(213, 52)]
#[case(214, 52)]
#[case(215, 52)]
#[case(216, 52)]
#[case(217, 52)]
#[case(218, 53)]
#[case(219, 52)]
#[case(220, 52)]
#[case(221, 52)]
#[case(222, 52)]
#[case(223, 52)]
#[case(224, 53)]
#[case(225, 52)]
#[case(226, 52)]
#[case(227, 52)]
#[case(228, 52)]
#[case(229, 53)]
#[case(230, 52)]
#[case(231, 52)]
#[case(232, 52)]
#[case(233, 52)]
#[case(234, 52)]
#[case(235, 53)]
#[case(236, 52)]
#[case(237, 52)]
#[case(238, 52)]
#[case(239, 52)]
#[case(240, 53)]
#[case(241, 52)]
#[case(242, 52)]
#[case(243, 52)]
#[case(244, 52)]
#[case(245, 52)]
#[case(246, 53)]
#[case(247, 52)]
#[case(248, 52)]
#[case(249, 52)]
#[case(250, 52)]
#[case(251, 52)]
#[case(252, 53)]
#[case(253, 52)]
#[case(254, 52)]
#[case(255, 52)]
#[case(256, 52)]
#[case(257, 53)]
#[case(258, 52)]
#[case(259, 52)]
#[case(260, 52)]
#[case(261, 52)]
#[case(262, 52)]
#[case(263, 53)]
#[case(264, 52)]
#[case(265, 52)]
#[case(266, 52)]
#[case(267, 52)]
#[case(268, 53)]
#[case(269, 52)]
#[case(270, 52)]
#[case(271, 52)]
#[case(272, 52)]
#[case(273, 52)]
#[case(274, 53)]
#[case(275, 52)]
#[case(276, 52)]
#[case(277, 52)]
#[case(278, 52)]
#[case(279, 52)]
#[case(280, 53)]
#[case(281, 52)]
#[case(282, 52)]
#[case(283, 52)]
#[case(284, 52)]
#[case(285, 53)]
#[case(286, 52)]
#[case(287, 52)]
#[case(288, 52)]
#[case(289, 52)]
#[case(290, 52)]
#[case(291, 53)]
#[case(292, 52)]
#[case(293, 52)]
#[case(294, 52)]
#[case(295, 52)]
#[case(296, 53)]
#[case(297, 52)]
#[case(298, 52)]
#[case(299, 52)]
#[case(300, 52)]
#[case(301, 52)]
#[case(302, 52)]
#[case(303, 53)]
#[case(304, 52)]
#[case(305, 52)]
#[case(306, 52)]
#[case(307, 52)]
#[case(308, 53)]
#[case(309, 52)]
#[case(310, 52)]
#[case(311, 52)]
#[case(312, 52)]
#[case(313, 52)]
#[case(314, 53)]
#[case(315, 52)]
#[case(316, 52)]
#[case(317, 52)]
#[case(318, 52)]
#[case(319, 52)]
#[case(320, 53)]
#[case(321, 52)]
#[case(322, 52)]
#[case(323, 52)]
#[case(324, 52)]
#[case(325, 53)]
#[case(326, 52)]
#[case(327, 52)]
#[case(328, 52)]
#[case(329, 52)]
#[case(330, 52)]
#[case(331, 53)]
#[case(332, 52)]
#[case(333, 52)]
#[case(334, 52)]
#[case(335, 52)]
#[case(336, 53)]
#[case(337, 52)]
#[case(338, 52)]
#[case(339, 52)]
#[case(340, 52)]
#[case(341, 52)]
#[case(342, 53)]
#[case(343, 52)]
#[case(344, 52)]
#[case(345, 52)]
#[case(346, 52)]
#[case(347, 52)]
#[case(348, 53)]
#[case(349, 52)]
#[case(350, 52)]
#[case(351, 52)]
#[case(352, 52)]
#[case(353, 53)]
#[case(354, 52)]
#[case(355, 52)]
#[case(356, 52)]
#[case(357, 52)]
#[case(358, 52)]
#[case(359, 53)]
#[case(360, 52)]
#[case(361, 52)]
#[case(362, 52)]
#[case(363, 52)]
#[case(364, 53)]
#[case(365, 52)]
#[case(366, 52)]
#[case(367, 52)]
#[case(368, 52)]
#[case(369, 52)]
#[case(370, 53)]
#[case(371, 52)]
#[case(372, 52)]
#[case(373, 52)]
#[case(374, 52)]
#[case(375, 52)]
#[case(376, 53)]
#[case(377, 52)]
#[case(378, 52)]
#[case(379, 52)]
#[case(380, 52)]
#[case(381, 53)]
#[case(382, 52)]
#[case(383, 52)]
#[case(384, 52)]
#[case(385, 52)]
#[case(386, 52)]
#[case(387, 53)]
#[case(388, 52)]
#[case(389, 52)]
#[case(390, 52)]
#[case(391, 52)]
#[case(392, 53)]
#[case(393, 52)]
#[case(394, 52)]
#[case(395, 52)]
#[case(396, 52)]
#[case(397, 52)]
#[case(398, 53)]
#[case(399, 52)]
fn weeks_in_year(#[case] year: i32, #[case] expected: u8) {
assert_eq!(util::weeks_in_year(year), expected, "year {year} failed");
}
#[rstest]
#[expect(deprecated)]
fn local_offset_soundness() {
use time::util::local_offset::*;
assert_eq!(get_soundness(), Soundness::Sound);
unsafe { set_soundness(Soundness::Unsound) };
assert_eq!(get_soundness(), Soundness::Sound);
unsafe { set_soundness(Soundness::Sound) };
assert_eq!(get_soundness(), Soundness::Sound);
}