Skip to content

Commit a8f7457

Browse files
committed
add tests for localtime and localtime_r
1 parent 3630c56 commit a8f7457

File tree

2 files changed

+76
-4
lines changed

2 files changed

+76
-4
lines changed

libc/test/src/time/localtime_r_test.cpp

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111

1212
TEST(LlvmLibcLocaltimeR, ValidUnixTimestamp0) {
1313
struct tm *input = nullptr;
14-
time_t t_ptr = 0;
14+
const time_t timer = 0;
1515

16-
struct tm *result = LIBC_NAMESPACE::localtime_r(&t_ptr, input);
16+
struct tm *result = LIBC_NAMESPACE::localtime_r(&timer, input);
1717

1818
ASSERT_EQ(70, result->tm_year);
1919
ASSERT_EQ(0, result->tm_mon);
@@ -25,3 +25,40 @@ TEST(LlvmLibcLocaltimeR, ValidUnixTimestamp0) {
2525
ASSERT_EQ(0, result->tm_yday);
2626
ASSERT_EQ(0, result->tm_isdst);
2727
}
28+
29+
// TODO(zimirza): These tests does not expect the correct output of localtime as per
30+
// specification. This is due to timezone functions removed from
31+
// https://github.com/llvm/llvm-project/pull/110363.
32+
// This will be resolved a new pull request.
33+
34+
TEST(LlvmLibcLocaltimeR, ValidUnixTimestamp) {
35+
struct tm *input = nullptr;
36+
const time_t timer = 1756595338;
37+
struct tm *result = LIBC_NAMESPACE::localtime_r(&timer, input);
38+
39+
ASSERT_EQ(125, result->tm_year);
40+
ASSERT_EQ(7, result->tm_mon);
41+
ASSERT_EQ(30, result->tm_mday);
42+
ASSERT_EQ(23, result->tm_hour);
43+
ASSERT_EQ(8, result->tm_min);
44+
ASSERT_EQ(58, result->tm_sec);
45+
ASSERT_EQ(6, result->tm_wday);
46+
ASSERT_EQ(241, result->tm_yday);
47+
ASSERT_EQ(0, result->tm_isdst);
48+
}
49+
50+
TEST(LlvmLibcLocaltimeR, ValidUnixTimestampNegative) {
51+
struct tm *input = nullptr;
52+
const time_t timer = -1756595338;
53+
struct tm *result = LIBC_NAMESPACE::localtime_r(&timer, input);
54+
55+
ASSERT_EQ(14, result->tm_year);
56+
ASSERT_EQ(4, result->tm_mon);
57+
ASSERT_EQ(4, result->tm_mday);
58+
ASSERT_EQ(0, result->tm_hour);
59+
ASSERT_EQ(51, result->tm_min);
60+
ASSERT_EQ(2, result->tm_sec);
61+
ASSERT_EQ(1, result->tm_wday);
62+
ASSERT_EQ(123, result->tm_yday);
63+
ASSERT_EQ(0, result->tm_isdst);
64+
}

libc/test/src/time/localtime_test.cpp

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
#include "test/UnitTest/Test.h"
1111

1212
TEST(LlvmLibcLocaltime, ValidUnixTimestamp0) {
13-
time_t t_ptr = 0;
14-
struct tm *result = LIBC_NAMESPACE::localtime(&t_ptr);
13+
const time_t timer = 0;
14+
struct tm *result = LIBC_NAMESPACE::localtime(&timer);
1515

1616
ASSERT_EQ(70, result->tm_year);
1717
ASSERT_EQ(0, result->tm_mon);
@@ -23,3 +23,38 @@ TEST(LlvmLibcLocaltime, ValidUnixTimestamp0) {
2323
ASSERT_EQ(0, result->tm_yday);
2424
ASSERT_EQ(0, result->tm_isdst);
2525
}
26+
27+
// TODO(zimirza): These tests does not expect the correct output of localtime as per
28+
// specification. This is due to timezone functions removed from
29+
// https://github.com/llvm/llvm-project/pull/110363.
30+
// This will be resolved a new pull request.
31+
32+
TEST(LlvmLibcLocaltime, ValidUnixTimestamp) {
33+
const time_t timer = 1756595338;
34+
struct tm *result = LIBC_NAMESPACE::localtime(&timer);
35+
36+
ASSERT_EQ(125, result->tm_year);
37+
ASSERT_EQ(7, result->tm_mon);
38+
ASSERT_EQ(30, result->tm_mday);
39+
ASSERT_EQ(23, result->tm_hour);
40+
ASSERT_EQ(8, result->tm_min);
41+
ASSERT_EQ(58, result->tm_sec);
42+
ASSERT_EQ(6, result->tm_wday);
43+
ASSERT_EQ(241, result->tm_yday);
44+
ASSERT_EQ(0, result->tm_isdst);
45+
}
46+
47+
TEST(LlvmLibcLocaltime, ValidUnixTimestampNegative) {
48+
const time_t timer = -1756595338;
49+
struct tm *result = LIBC_NAMESPACE::localtime(&timer);
50+
51+
ASSERT_EQ(14, result->tm_year);
52+
ASSERT_EQ(4, result->tm_mon);
53+
ASSERT_EQ(4, result->tm_mday);
54+
ASSERT_EQ(0, result->tm_hour);
55+
ASSERT_EQ(51, result->tm_min);
56+
ASSERT_EQ(2, result->tm_sec);
57+
ASSERT_EQ(1, result->tm_wday);
58+
ASSERT_EQ(123, result->tm_yday);
59+
ASSERT_EQ(0, result->tm_isdst);
60+
}

0 commit comments

Comments
 (0)