]> git.saurik.com Git - apple/libc.git/blob - tests/strptime.c
Libc-1439.40.11.tar.gz
[apple/libc.git] / tests / strptime.c
1 #include <time.h>
2
3 #include <darwintest.h>
4 #include <darwintest_utils.h>
5
6 T_GLOBAL_META(T_META_REQUIRES_OS_VARIANT_NOT("IsDarwinOS"));
7
8 T_DECL(strptime_PR_27004626, "strptime() should fail when a %t doesn't match anything")
9 {
10 struct tm tm;
11 T_ASSERT_NULL(strptime("there'snotemplateforthis", "%t", &tm), NULL);
12 }
13
14 T_DECL(strptime_PR_29381762, "strptime() sets the tm_wday field incorrectly")
15 {
16 time_t epoch = 0;
17 struct tm t = *localtime(&epoch);
18
19 T_LOG("2015-01-01 12:00:00 -> Thursday");
20 (void)strptime("2015-01-01 12:00:00", "%F %T", &t);
21 T_EXPECT_EQ(t.tm_wday, 4, NULL);
22
23 T_LOG("2015-04-19 12:00:00 -> Sunday");
24 (void)strptime("2015-04-19 12:00:00", "%F %T", &t);
25 T_EXPECT_EQ(t.tm_wday, 0, NULL);
26
27 T_LOG("2009-03-03 12:00:00 -> Tuesday");
28 (void)strptime("2009-03-03 12:00:00", "%F %T", &t);
29 T_EXPECT_EQ(t.tm_wday, 2, NULL);
30
31 T_LOG("1990-02-15 12:00:00 -> Thursday");
32 (void)strptime("1990-02-15 12:00:00", "%F %T", &t);
33 T_EXPECT_EQ(t.tm_wday, 4, NULL);
34
35 T_LOG("1993-03-02 12:00:00 -> Sunday");
36 (void)strptime("1993-03-02 12:00:00", "%F %T", &t);
37 T_EXPECT_EQ(t.tm_wday, 2, NULL);
38 }
39
40
41 T_DECL(strptime_PR_42669744_1, "strptime() with %%C, %%y and %%Y")
42 {
43 struct tm tm;
44 char *result;
45
46 // %C%y combinations
47 T_LOG("201, %%C%%y");
48 result = strptime("201", "%C%y", &tm);
49 T_QUIET; T_EXPECT_NOTNULL(result, "201, %%C%%y");
50 T_EXPECT_EQ(tm.tm_year, 2001 - 1900, NULL);
51
52 T_LOG("2010, %%C%%y");
53 result = strptime("2010", "%C%y", &tm);
54 T_QUIET; T_EXPECT_NOTNULL(result, "2010, %%C%%y");
55 T_EXPECT_EQ(tm.tm_year, 2010 - 1900, NULL);
56
57 T_LOG("20010, %%C%%y");
58 result = strptime("20010", "%C%y", &tm);
59 T_QUIET; T_EXPECT_NOTNULL(result, "20010, %%C%%y");
60 T_EXPECT_EQ(tm.tm_year, 2001 - 1900, NULL);
61
62 T_LOG("+2010, %%C%%y");
63 result = strptime("+2010", "%C%y", &tm);
64 T_QUIET; T_EXPECT_NOTNULL(result, "2010, %%C%%y");
65 T_EXPECT_EQ(tm.tm_year, 201 - 1900, NULL);
66
67 T_LOG("-20100, %%C%%y");
68 result = strptime("-20100", "%C%y", &tm);
69 T_QUIET; T_EXPECT_NOTNULL(result, "-20100, %%C%%y");
70 T_EXPECT_EQ(tm.tm_year, -200 + 1 - 1900, NULL);
71
72 T_LOG("-2-1, %%C%%y");
73 result = strptime("-2-1", "%C%y", &tm);
74 T_QUIET; T_EXPECT_NOTNULL(result, "-2-1, %%C%%y");
75 T_EXPECT_EQ(tm.tm_year, -200 - 1 - 1900, NULL);
76
77 T_LOG("-2+1, %%C%%y");
78 result = strptime("-2+1", "%C%y", &tm);
79 T_QUIET; T_EXPECT_NOTNULL(result, "-2+1, %%C%%y");
80 T_EXPECT_EQ(tm.tm_year, -200 + 1 - 1900, NULL);
81
82 // %Y combinations
83 T_LOG("201, %%Y");
84 result = strptime("201", "%Y", &tm);
85 T_QUIET; T_EXPECT_NOTNULL(result, "201, %%Y");
86 T_EXPECT_EQ(tm.tm_year, 201 - 1900, NULL);
87
88 T_LOG("2001, %%Y");
89 result = strptime("2001", "%Y", &tm);
90 T_QUIET; T_EXPECT_NOTNULL(result, "2001, %%Y");
91 T_EXPECT_EQ(tm.tm_year, 2001 - 1900, NULL);
92
93 T_LOG("20010, %%Y");
94 result = strptime("20010", "%Y", &tm);
95 T_QUIET; T_EXPECT_NOTNULL(result, "20010, %%Y");
96 T_EXPECT_EQ(tm.tm_year, 2001 - 1900, NULL);
97
98 T_LOG("+2010, %%Y");
99 result = strptime("+2010", "%Y", &tm);
100 T_QUIET; T_EXPECT_NOTNULL(result, "+2010, %%Y");
101 T_EXPECT_EQ(tm.tm_year, 201 - 1900, NULL);
102
103 T_LOG("-2010, %%Y");
104 result = strptime("-2010", "%Y", &tm);
105 T_QUIET; T_EXPECT_NOTNULL(result, "-2010, %%Y");
106 T_EXPECT_EQ(tm.tm_year, -201 - 1900, NULL);
107 }
108