mirror of
https://github.com/torvalds/linux.git
synced 2026-10-28 17:55:02 +01:00
time/kunit: Add time64_to_tm() case beyond 32-bit day count
The existing date range test covers +/-80,000 years around the epoch, far below the day count at which a 32-bit long wraps (2^31 days, roughly 5.88 million years). Add a case at exactly 2^31 days after the epoch. Without the preceding fix a 32-bit kernel returns tm_year=-5879541 and wrong month, day, day-of-year and weekday; with it the result matches 64-bit kernels. Signed-off-by: Karl Mehltretter <kmehltretter@gmail.com> Signed-off-by: Thomas Gleixner <tglx@kernel.org> Assisted-by: LLM Reviewed-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de> Link: https://patch.msgid.link/20260925165702.51677-3-kmehltretter@gmail.com
This commit is contained in:
parent
2927f7ca78
commit
3945c4a3ea
|
|
@ -87,8 +87,24 @@ static void time64_to_tm_test_date_range(struct kunit *test)
|
|||
}
|
||||
}
|
||||
|
||||
static void time64_to_tm_test_wide_day_count(struct kunit *test)
|
||||
{
|
||||
/* 2^31 days: the first count that does not fit in a 32-bit long. */
|
||||
time64_t timestamp = (1LL << 31) * 86400;
|
||||
struct tm result;
|
||||
|
||||
time64_to_tm(timestamp, 0, &result);
|
||||
|
||||
KUNIT_EXPECT_EQ(test, result.tm_year, 5879680);
|
||||
KUNIT_EXPECT_EQ(test, result.tm_mon, 6);
|
||||
KUNIT_EXPECT_EQ(test, result.tm_mday, 12);
|
||||
KUNIT_EXPECT_EQ(test, result.tm_yday, 193);
|
||||
KUNIT_EXPECT_EQ(test, result.tm_wday, 6);
|
||||
}
|
||||
|
||||
static struct kunit_case time_test_cases[] = {
|
||||
KUNIT_CASE_SLOW(time64_to_tm_test_date_range),
|
||||
KUNIT_CASE(time64_to_tm_test_wide_day_count),
|
||||
{}
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user