logo

utils-std

Collection of commonly available Unix tools git clone https://anongit.hacktivis.me/git/utils-std.git/

t_strtodur.c (2245B)


  1. // utils-std: Collection of commonly available Unix tools
  2. // SPDX-FileCopyrightText: 2017 Haelwenn (lanodan) Monnier <contact+utils@hacktivis.me>
  3. // SPDX-License-Identifier: MPL-2.0
  4. #define _POSIX_C_SOURCE 200809L
  5. #include "../libutils/strtodur.h"
  6. #include <assert.h>
  7. #include <stdint.h>
  8. #include <stdio.h> // printf
  9. const char *argv0 = "t_strtodur";
  10. int counter = 0;
  11. int err = 0;
  12. static void
  13. t_strtodur(char *str, time_t ex_sec, long ex_nsec)
  14. {
  15. int id = ++counter;
  16. struct timespec dur = {.tv_sec = 0, .tv_nsec = 0};
  17. int ret = strtodur(str, &dur);
  18. if(dur.tv_sec == ex_sec && dur.tv_nsec == ex_nsec && ret == 0)
  19. {
  20. printf("ok %d - strtodur(\"%s\", _) -> {.tv_sec = %jd, .tv_nsec = %jd}\n",
  21. id,
  22. str,
  23. (intmax_t)dur.tv_sec,
  24. (intmax_t)dur.tv_nsec);
  25. return;
  26. }
  27. err = 1;
  28. printf("not ok %d - strtodur(\"%s\", _) -> {.tv_sec = %jd, .tv_nsec = %jd}\n",
  29. id,
  30. str,
  31. (intmax_t)dur.tv_sec,
  32. (intmax_t)dur.tv_nsec);
  33. if(dur.tv_sec != ex_sec || dur.tv_nsec != ex_nsec)
  34. printf("# Expected: {.tv_sec = %jd, .tv_nsec = %jd}\n", (intmax_t)ex_sec, (intmax_t)ex_nsec);
  35. if(ret != 0) printf("# Exit status: %d\n", ret);
  36. }
  37. int
  38. main(void)
  39. {
  40. int plan = 18;
  41. printf("1..%d\n", plan);
  42. // TODO: Capture errors, say with open_memstream(3)
  43. #define T_NSEC 1000000000
  44. #define T_MIN 60
  45. #define T_HOUR 60 * T_MIN
  46. #define T_DAY 24 * T_HOUR
  47. t_strtodur(NULL, 0, 0);
  48. t_strtodur((char *)"", 0, 0);
  49. t_strtodur((char *)",", 0, 0);
  50. t_strtodur((char *)"1", 1, 0);
  51. t_strtodur((char *)"1.", 1, 0);
  52. t_strtodur((char *)"1,", 1, 0);
  53. t_strtodur((char *)".1", 0, T_NSEC * 0.1);
  54. t_strtodur((char *)"0.1", 0, T_NSEC * 0.1);
  55. t_strtodur((char *)"1s", 1, 0);
  56. t_strtodur((char *)"1m", T_MIN, 0);
  57. t_strtodur((char *)"1h", 1 * T_HOUR, 0);
  58. t_strtodur((char *)"1d", 1 * T_DAY, 0);
  59. t_strtodur((char *)"1d1h1m1s", (1 * T_DAY) + (1 * T_HOUR) + (1 * T_MIN) + 1, 0);
  60. t_strtodur((char *)"1.5s", 1, T_NSEC * 0.5);
  61. t_strtodur((char *)"1.5m", 1.5 * T_MIN, 0);
  62. t_strtodur((char *)"1.5h", 1.5 * T_HOUR, 0);
  63. t_strtodur((char *)"1.5d", 1.5 * T_DAY, 0);
  64. t_strtodur(
  65. (char *)"1.5d1.5h1.5m1.5s", (1.5 * T_DAY) + (1.5 * T_HOUR) + (1.5 * T_MIN) + 1, T_NSEC * 0.5);
  66. assert(counter == plan);
  67. return err;
  68. }