Revision control

Copy as Markdown

Other Tools

use rstest::rstest;
use time::Month::*;
use time::{util, Month};
#[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]
fn weeks_in_year() {
let num_weeks_for_years = [
52, 52, 52, 52, 53, 52, 52, 52, 52, 53, 52, 52, 52, 52, 52, 53, 52, 52, 52, 52, 53, 52, 52,
52, 52, 52, 53, 52, 52, 52, 52, 52, 53, 52, 52, 52, 52, 53, 52, 52, 52, 52, 52, 53, 52, 52,
52, 52, 53, 52, 52, 52, 52, 52, 53, 52, 52, 52, 52, 52, 53, 52, 52, 52, 52, 53, 52, 52, 52,
52, 52, 53, 52, 52, 52, 52, 53, 52, 52, 52, 52, 52, 53, 52, 52, 52, 52, 52, 53, 52, 52, 52,
52, 53, 52, 52, 52, 52, 52, 53, 52, 52, 52, 52, 52, 53, 52, 52, 52, 52, 52, 53, 52, 52, 52,
52, 53, 52, 52, 52, 52, 52, 53, 52, 52, 52, 52, 52, 53, 52, 52, 52, 52, 53, 52, 52, 52, 52,
52, 53, 52, 52, 52, 52, 53, 52, 52, 52, 52, 52, 53, 52, 52, 52, 52, 52, 53, 52, 52, 52, 52,
53, 52, 52, 52, 52, 52, 53, 52, 52, 52, 52, 53, 52, 52, 52, 52, 52, 53, 52, 52, 52, 52, 52,
53, 52, 52, 52, 52, 53, 52, 52, 52, 52, 52, 53, 52, 52, 52, 52, 52, 53, 52, 52, 52, 52, 52,
53, 52, 52, 52, 52, 53, 52, 52, 52, 52, 52, 53, 52, 52, 52, 52, 52, 53, 52, 52, 52, 52, 53,
52, 52, 52, 52, 52, 53, 52, 52, 52, 52, 53, 52, 52, 52, 52, 52, 53, 52, 52, 52, 52, 52, 53,
52, 52, 52, 52, 53, 52, 52, 52, 52, 52, 53, 52, 52, 52, 52, 53, 52, 52, 52, 52, 52, 53, 52,
52, 52, 52, 52, 53, 52, 52, 52, 52, 53, 52, 52, 52, 52, 52, 53, 52, 52, 52, 52, 53, 52, 52,
52, 52, 52, 52, 53, 52, 52, 52, 52, 53, 52, 52, 52, 52, 52, 53, 52, 52, 52, 52, 52, 53, 52,
52, 52, 52, 53, 52, 52, 52, 52, 52, 53, 52, 52, 52, 52, 53, 52, 52, 52, 52, 52, 53, 52, 52,
52, 52, 52, 53, 52, 52, 52, 52, 53, 52, 52, 52, 52, 52, 53, 52, 52, 52, 52, 53, 52, 52, 52,
52, 52, 53, 52, 52, 52, 52, 52, 53, 52, 52, 52, 52, 53, 52, 52, 52, 52, 52, 53, 52, 52, 52,
52, 53, 52, 52, 52, 52, 52, 53, 52,
];
for (year, &num_weeks) in (0..400).zip(&num_weeks_for_years) {
assert_eq!(util::weeks_in_year(year), num_weeks);
}
}
#[rstest]
#[expect(deprecated)]
fn local_offset_soundness() {
use time::util::local_offset::*;
// These functions no longer do anything so they always return `Sound`.
assert_eq!(get_soundness(), Soundness::Sound);
// Safety: This no longer has any safety requirements.
unsafe { set_soundness(Soundness::Unsound) };
assert_eq!(get_soundness(), Soundness::Sound);
// Safety: See above.
unsafe { set_soundness(Soundness::Sound) };
assert_eq!(get_soundness(), Soundness::Sound);
}