@@ -2161,6 +2161,47 @@ static void preprocessSizeOf()
21612161 ASSERT_EQUALS (" file0,1,syntax_error,failed to evaluate #if condition, invalid sizeof expression\n " , toString (outputList));
21622162}
21632163
2164+ static void timeDefine ()
2165+ {
2166+ const char code[] = " __TIME__" ;
2167+ const std::string t = preprocess (code);
2168+ // "19:09:53"
2169+ ASSERT_EQUALS (10 , t.size ());
2170+ // TODO: split string and check proper ranges instead
2171+ ASSERT_EQUALS (' "' , t[0 ]);
2172+ ASSERT_EQUALS (true , isdigit (t[1 ]) != 0 );
2173+ ASSERT_EQUALS (true , isdigit (t[2 ]) != 0 );
2174+ ASSERT_EQUALS (' :' , t[3 ]);
2175+ ASSERT_EQUALS (true , isdigit (t[4 ]) != 0 );
2176+ ASSERT_EQUALS (true , isdigit (t[5 ]) != 0 );
2177+ ASSERT_EQUALS (' :' , t[6 ]);
2178+ ASSERT_EQUALS (true , isdigit (t[7 ]) != 0 );
2179+ ASSERT_EQUALS (true , isdigit (t[8 ]) != 0 );
2180+ ASSERT_EQUALS (' "' , t[9 ]);
2181+ }
2182+
2183+ static void dateDefine ()
2184+ {
2185+ const char code[] = " __DATE__" ;
2186+ const std::string dt = preprocess (code);
2187+ // "\"Mar 11 2022\""
2188+ ASSERT_EQUALS (13 , dt.size ());
2189+ // TODO: split string and check proper ranges instead
2190+ ASSERT_EQUALS (' "' , dt[0 ]);
2191+ ASSERT_EQUALS (true , dt[1 ] >= ' A' && dt[1 ] <= ' Z' ); // uppercase letter
2192+ ASSERT_EQUALS (true , dt[2 ] >= ' a' && dt[2 ] <= ' z' ); // lowercase letter
2193+ ASSERT_EQUALS (true , dt[3 ] >= ' a' && dt[3 ] <= ' z' ); // lowercase letter
2194+ ASSERT_EQUALS (' ' , dt[4 ]);
2195+ ASSERT_EQUALS (true , isdigit (dt[5 ]) != 0 );
2196+ ASSERT_EQUALS (true , isdigit (dt[6 ]) != 0 );
2197+ ASSERT_EQUALS (' ' , dt[7 ]);
2198+ ASSERT_EQUALS (true , isdigit (dt[8 ]) != 0 );
2199+ ASSERT_EQUALS (true , isdigit (dt[9 ]) != 0 );
2200+ ASSERT_EQUALS (true , isdigit (dt[10 ]) != 0 );
2201+ ASSERT_EQUALS (true , isdigit (dt[11 ]) != 0 );
2202+ ASSERT_EQUALS (' "' , dt[12 ]);
2203+ }
2204+
21642205int main (int argc, char **argv)
21652206{
21662207 TEST_CASE (backslash);
@@ -2342,5 +2383,8 @@ int main(int argc, char **argv)
23422383
23432384 TEST_CASE (preprocessSizeOf);
23442385
2386+ TEST_CASE (timeDefine);
2387+ TEST_CASE (dateDefine);
2388+
23452389 return numberOfFailedAssertions > 0 ? EXIT_FAILURE : EXIT_SUCCESS;
23462390}
0 commit comments