tst-getdate.c 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. /* Test for getdate.
  2. Copyright (C) 2000-2019 Free Software Foundation, Inc.
  3. This file is part of the GNU C Library.
  4. Contributed by Andreas Jaeger <aj@suse.de>, 2000.
  5. The GNU C Library is free software; you can redistribute it and/or
  6. modify it under the terms of the GNU Lesser General Public
  7. License as published by the Free Software Foundation; either
  8. version 2.1 of the License, or (at your option) any later version.
  9. The GNU C Library is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12. Lesser General Public License for more details.
  13. You should have received a copy of the GNU Lesser General Public
  14. License along with the GNU C Library; if not, see
  15. <http://www.gnu.org/licenses/>. */
  16. #include <stdio.h>
  17. #include <stdlib.h>
  18. #include <string.h>
  19. #include <time.h>
  20. static const struct
  21. {
  22. const char *str;
  23. const char *tz;
  24. int err;
  25. struct tm tm;
  26. } tests [] =
  27. {
  28. {"21:01:10 1999-1-31", "Universal", 0, {10, 1, 21, 31, 0, 99, 0, 0, 0}},
  29. {"21:01:10 1999-1-31", "Universal", 0, {10, 1, 21, 31, 0, 99, 0, 0, 0}},
  30. {" 21:01:10 1999-1-31", "Universal", 0, {10, 1, 21, 31, 0, 99, 0, 0, 0}},
  31. {"21:01:10 1999-1-31 ", "Universal", 0, {10, 1, 21, 31, 0, 99, 0, 0, 0}},
  32. {" 21:01:10 1999-1-31 ", "Universal", 0, {10, 1, 21, 31, 0, 99, 0, 0, 0}},
  33. {"21:01:10 1999-2-28", "Universal", 0, {10, 1, 21, 28, 1, 99, 0, 0, 0}},
  34. {"16:30:46 2000-2-29", "Universal", 0, {46, 30,16, 29, 1, 100, 0, 0, 0}},
  35. {"01-08-2000 05:06:07", "Europe/Berlin", 0, {7, 6, 5, 1, 7, 100, 0, 0, 0}}
  36. };
  37. static void
  38. report_date_error (int err)
  39. {
  40. switch(err)
  41. {
  42. case 1:
  43. printf ("The environment variable DATEMSK is not defined or null.\n");
  44. break;
  45. case 2:
  46. printf ("The template file denoted by the DATEMSK environment variable cannot be opened.\n");
  47. break;
  48. case 3:
  49. printf ("Information about the template file cannot retrieved.\n");
  50. break;
  51. case 4:
  52. printf ("The template file is not a regular file.\n");
  53. break;
  54. case 5:
  55. printf ("An I/O error occurred while reading the template file.\n");
  56. break;
  57. case 6:
  58. printf ("Not enough memory available to execute the function.\n");
  59. break;
  60. case 7:
  61. printf ("The template file contains no matching template.\n");
  62. break;
  63. case 8:
  64. printf ("The input date is invalid, but would match a template otherwise.\n");
  65. break;
  66. default:
  67. printf("Unknown error code.\n");
  68. break;
  69. }
  70. }
  71. static int
  72. do_test (void)
  73. {
  74. int errors = 0;
  75. size_t i;
  76. struct tm *tm;
  77. for (i = 0; i < sizeof (tests) / sizeof (tests[0]); ++i)
  78. {
  79. setenv ("TZ", tests[i].tz, 1);
  80. tm = getdate (tests[i].str);
  81. if (getdate_err != tests[i].err)
  82. {
  83. printf ("Failure for getdate (\"%s\"):\n", tests[i].str);
  84. printf ("getdate_err should be %d but returned: %d which means:\n",
  85. tests[i].err, getdate_err);
  86. report_date_error (getdate_err);
  87. ++errors;
  88. }
  89. else if (tests[i].tm.tm_mon != tm->tm_mon
  90. || tests[i].tm.tm_year != tm->tm_year
  91. || tests[i].tm.tm_mday != tm->tm_mday
  92. || tests[i].tm.tm_hour != tm->tm_hour
  93. || tests[i].tm.tm_min != tm->tm_min
  94. || tests[i].tm.tm_sec != tm->tm_sec)
  95. {
  96. printf ("Failure for getdate (\"%s\"):\n", tests[i].str);
  97. printf ("struct tm is: %d-%d-%d %d:%d:%d\n",
  98. tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
  99. tm->tm_hour, tm->tm_min, tm->tm_sec);
  100. printf ("but should be: %d-%d-%d %d:%d:%d\n",
  101. tests[i].tm.tm_year + 1900, tests[i].tm.tm_mon + 1,
  102. tests[i].tm.tm_mday,
  103. tests[i].tm.tm_hour, tests[i].tm.tm_min, tests[i].tm.tm_sec);
  104. ++errors;
  105. }
  106. }
  107. if (!errors)
  108. printf ("No errors found.\n");
  109. return errors != 0;
  110. }
  111. #define TEST_FUNCTION do_test ()
  112. #include "../test-skeleton.c"