55 #include <sys/resource.h>
69 #include <amxc/amxc_macros.h>
70 #include <amxc/amxc.h>
99 assert_int_equal(
amxp_cron_build_weekly(&cron_expr,
"12:00",
"MONDAY,TUESDAY,wednesday,thursday,friday"), 0);
108 const char* error = NULL;
112 assert_non_null(error);
116 assert_non_null(error);
120 assert_non_null(error);
124 assert_non_null(error);
131 const char* error = NULL;
135 assert_non_null(error);
139 assert_non_null(error);
143 assert_non_null(error);
147 assert_non_null(error);
154 const char* error = NULL;
156 assert_non_null(cron_expr);
160 assert_non_null(error);
164 assert_non_null(error);
168 assert_non_null(error);
172 assert_non_null(error);
176 assert_non_null(error);
180 assert_non_null(error);
184 assert_non_null(error);
188 assert_non_null(error);
192 assert_non_null(error);
199 amxc_ts_t start = { 0, 0, 0 };
200 amxc_ts_t next = { 0, 0, 0 };
204 assert_non_null(cron_expr);
207 assert_non_null(cron_expr);
209 amxc_ts_parse(&start,
"2023-05-18T10:07:24Z", 20);
210 amxc_ts_format(&start, str_ts, 40);
211 printf(
"%s\n", str_ts);
214 amxc_ts_format(&next, str_ts, 40);
215 printf(
"%s\n", str_ts);
216 assert_string_equal(str_ts,
"2023-07-01T12:00:00Z");
220 amxc_ts_format(&next, str_ts, 40);
221 printf(
"%s\n", str_ts);
222 assert_string_equal(str_ts,
"2023-07-01T12:00:01Z");
226 amxc_ts_format(&next, str_ts, 40);
227 printf(
"%s\n", str_ts);
228 assert_string_equal(str_ts,
"2023-07-01T12:00:02Z");
232 amxc_ts_format(&next, str_ts, 40);
233 printf(
"%s\n", str_ts);
234 assert_string_equal(str_ts,
"2023-07-01T12:00:03Z");
238 amxc_ts_format(&next, str_ts, 40);
239 printf(
"%s\n", str_ts);
240 assert_string_equal(str_ts,
"2023-07-01T12:00:04Z");
244 amxc_ts_format(&next, str_ts, 40);
245 printf(
"%s\n", str_ts);
246 assert_string_equal(str_ts,
"2023-07-01T12:00:05Z");
253 amxc_ts_t start = { 0, 0, 0 };
254 amxc_ts_t next = { 0, 0, 0 };
258 assert_non_null(cron_expr);
261 assert_non_null(cron_expr);
263 amxc_ts_parse(&start,
"2023-05-18T10:07:24Z", 20);
264 amxc_ts_format(&start, str_ts, 40);
265 printf(
"%s\n", str_ts);
268 amxc_ts_format(&next, str_ts, 40);
269 printf(
"%s\n", str_ts);
270 assert_string_equal(str_ts,
"2023-05-01T12:00:59Z");
274 amxc_ts_format(&next, str_ts, 40);
275 printf(
"%s\n", str_ts);
276 assert_string_equal(str_ts,
"2023-05-01T12:00:58Z");
280 amxc_ts_format(&next, str_ts, 40);
281 printf(
"%s\n", str_ts);
282 assert_string_equal(str_ts,
"2023-05-01T12:00:57Z");
286 amxc_ts_format(&next, str_ts, 40);
287 printf(
"%s\n", str_ts);
288 assert_string_equal(str_ts,
"2023-05-01T12:00:56Z");
292 amxc_ts_format(&next, str_ts, 40);
293 printf(
"%s\n", str_ts);
294 assert_string_equal(str_ts,
"2023-05-01T12:00:55Z");
298 amxc_ts_format(&next, str_ts, 40);
299 printf(
"%s\n", str_ts);
300 assert_string_equal(str_ts,
"2023-05-01T12:00:54Z");
307 amxc_ts_t start = { 0, 0, 0 };
308 amxc_ts_t next = { 0, 0, 0 };
315 amxc_ts_parse(&start,
"2023-05-18T10:07:24Z", 20);
316 amxc_ts_format(&start, str_ts, 40);
317 printf(
"%s\n", str_ts);
320 amxc_ts_format(&next, str_ts, 40);
321 printf(
"%s\n", str_ts);
322 assert_string_equal(str_ts,
"2023-05-18T10:10:00Z");
326 amxc_ts_format(&next, str_ts, 40);
327 printf(
"%s\n", str_ts);
328 assert_string_equal(str_ts,
"2023-05-18T10:20:00Z");
332 amxc_ts_format(&next, str_ts, 40);
333 printf(
"%s\n", str_ts);
334 assert_string_equal(str_ts,
"2023-05-18T10:30:00Z");
338 amxc_ts_format(&next, str_ts, 40);
339 printf(
"%s\n", str_ts);
340 assert_string_equal(str_ts,
"2023-05-18T10:40:00Z");
344 amxc_ts_format(&next, str_ts, 40);
345 printf(
"%s\n", str_ts);
346 assert_string_equal(str_ts,
"2023-05-18T10:50:00Z");
350 amxc_ts_format(&next, str_ts, 40);
351 printf(
"%s\n", str_ts);
352 assert_string_equal(str_ts,
"2023-05-18T11:00:00Z");
359 amxc_ts_t start = { 0, 0, 0 };
360 amxc_ts_t next = { 0, 0, 0 };
367 amxc_ts_parse(&start,
"2023-05-18T10:07:24Z", 20);
368 amxc_ts_format(&start, str_ts, 40);
369 printf(
"%s\n", str_ts);
372 amxc_ts_format(&next, str_ts, 40);
373 printf(
"%s\n", str_ts);
374 assert_string_equal(str_ts,
"2023-05-18T10:00:00Z");
378 amxc_ts_format(&next, str_ts, 40);
379 printf(
"%s\n", str_ts);
380 assert_string_equal(str_ts,
"2023-05-18T09:50:00Z");
384 amxc_ts_format(&next, str_ts, 40);
385 printf(
"%s\n", str_ts);
386 assert_string_equal(str_ts,
"2023-05-18T09:40:00Z");
390 amxc_ts_format(&next, str_ts, 40);
391 printf(
"%s\n", str_ts);
392 assert_string_equal(str_ts,
"2023-05-18T09:30:00Z");
396 amxc_ts_format(&next, str_ts, 40);
397 printf(
"%s\n", str_ts);
398 assert_string_equal(str_ts,
"2023-05-18T09:20:00Z");
402 amxc_ts_format(&next, str_ts, 40);
403 printf(
"%s\n", str_ts);
404 assert_string_equal(str_ts,
"2023-05-18T09:10:00Z");
411 amxc_ts_t start = { 0, 0, 0 };
412 amxc_ts_t next = { 0, 0, 0 };
419 amxc_ts_parse(&start,
"2023-05-18T10:07:24Z", 20);
420 amxc_ts_format(&start, str_ts, 40);
421 printf(
"%s\n", str_ts);
424 amxc_ts_format(&next, str_ts, 40);
425 printf(
"%s\n", str_ts);
426 assert_string_equal(str_ts,
"2023-05-18T10:15:00Z");
430 amxc_ts_format(&next, str_ts, 40);
431 printf(
"%s\n", str_ts);
432 assert_string_equal(str_ts,
"2023-05-18T12:15:00Z");
436 amxc_ts_format(&next, str_ts, 40);
437 printf(
"%s\n", str_ts);
438 assert_string_equal(str_ts,
"2023-05-18T14:15:00Z");
442 amxc_ts_format(&next, str_ts, 40);
443 printf(
"%s\n", str_ts);
444 assert_string_equal(str_ts,
"2023-05-19T10:15:00Z");
446 printf(
"=== USING LOCAL TIME ===\n");
447 amxc_ts_parse(&start,
"2023-05-19T12:25:00+02:00", 25);
448 amxc_ts_format(&start, str_ts, 40);
449 printf(
"%s\n", str_ts);
452 amxc_ts_format(&next, str_ts, 40);
453 printf(
"%s\n", str_ts);
454 assert_string_equal(str_ts,
"2023-05-19T14:15:00+02:00");
458 amxc_ts_format(&next, str_ts, 40);
459 printf(
"%s\n", str_ts);
460 assert_string_equal(str_ts,
"2023-05-20T10:15:00+02:00");
467 amxc_ts_t start = { 0, 0, 0 };
468 amxc_ts_t next = { 0, 0, 0 };
475 amxc_ts_parse(&start,
"2023-05-17T14:15:00Z", 20);
476 amxc_ts_format(&start, str_ts, 40);
477 printf(
"%s\n", str_ts);
480 amxc_ts_format(&next, str_ts, 40);
481 printf(
"%s\n", str_ts);
482 assert_string_equal(str_ts,
"2023-05-17T12:15:00Z");
486 amxc_ts_format(&next, str_ts, 40);
487 printf(
"%s\n", str_ts);
488 assert_string_equal(str_ts,
"2023-05-17T10:15:00Z");
492 amxc_ts_format(&next, str_ts, 40);
493 printf(
"%s\n", str_ts);
494 assert_string_equal(str_ts,
"2023-05-16T14:15:00Z");
498 amxc_ts_format(&next, str_ts, 40);
499 printf(
"%s\n", str_ts);
500 assert_string_equal(str_ts,
"2023-05-16T12:15:00Z");
502 printf(
"=== USING LOCAL TIME ===\n");
503 amxc_ts_parse(&start,
"2023-05-19T12:25:00+02:00", 25);
504 amxc_ts_format(&start, str_ts, 40);
505 printf(
"%s\n", str_ts);
508 amxc_ts_format(&next, str_ts, 40);
509 printf(
"%s\n", str_ts);
510 assert_string_equal(str_ts,
"2023-05-19T12:15:00+02:00");
514 amxc_ts_format(&next, str_ts, 40);
515 printf(
"%s\n", str_ts);
516 assert_string_equal(str_ts,
"2023-05-19T10:15:00+02:00");
523 amxc_ts_t start = { 0, 0, 0 };
524 amxc_ts_t next = { 0, 0, 0 };
528 assert_non_null(cron_expr);
531 assert_non_null(cron_expr);
533 amxc_ts_parse(&start,
"2023-05-18T10:07:24Z", 20);
534 amxc_ts_format(&start, str_ts, 40);
535 printf(
"%s\n", str_ts);
538 amxc_ts_format(&next, str_ts, 40);
539 printf(
"%s\n", str_ts);
540 assert_string_equal(str_ts,
"2023-05-21T12:00:00Z");
544 amxc_ts_format(&next, str_ts, 40);
545 printf(
"%s\n", str_ts);
546 assert_string_equal(str_ts,
"2023-05-25T12:00:00Z");
550 amxc_ts_format(&next, str_ts, 40);
551 printf(
"%s\n", str_ts);
552 assert_string_equal(str_ts,
"2023-05-29T12:00:00Z");
556 amxc_ts_format(&next, str_ts, 40);
557 printf(
"%s\n", str_ts);
558 assert_string_equal(str_ts,
"2023-06-01T12:00:00Z");
562 amxc_ts_format(&next, str_ts, 40);
563 printf(
"%s\n", str_ts);
564 assert_string_equal(str_ts,
"2023-06-05T12:00:00Z");
568 amxc_ts_format(&next, str_ts, 40);
569 printf(
"%s\n", str_ts);
570 assert_string_equal(str_ts,
"2023-06-09T12:00:00Z");
577 amxc_ts_t start = { 0, 0, 0 };
578 amxc_ts_t next = { 0, 0, 0 };
582 assert_non_null(cron_expr);
585 assert_non_null(cron_expr);
587 amxc_ts_parse(&start,
"2023-05-18T10:07:24Z", 20);
588 amxc_ts_format(&start, str_ts, 40);
589 printf(
"%s\n", str_ts);
592 amxc_ts_format(&next, str_ts, 40);
593 printf(
"%s\n", str_ts);
594 assert_string_equal(str_ts,
"2023-05-17T12:00:00Z");
598 amxc_ts_format(&next, str_ts, 40);
599 printf(
"%s\n", str_ts);
600 assert_string_equal(str_ts,
"2023-05-13T12:00:00Z");
604 amxc_ts_format(&next, str_ts, 40);
605 printf(
"%s\n", str_ts);
606 assert_string_equal(str_ts,
"2023-05-09T12:00:00Z");
610 amxc_ts_format(&next, str_ts, 40);
611 printf(
"%s\n", str_ts);
612 assert_string_equal(str_ts,
"2023-05-05T12:00:00Z");
616 amxc_ts_format(&next, str_ts, 40);
617 printf(
"%s\n", str_ts);
618 assert_string_equal(str_ts,
"2023-05-01T12:00:00Z");
622 amxc_ts_format(&next, str_ts, 40);
623 printf(
"%s\n", str_ts);
624 assert_string_equal(str_ts,
"2023-04-29T12:00:00Z");
631 amxc_ts_t start = { 0, 0, 0 };
632 amxc_ts_t next = { 0, 0, 0 };
636 assert_non_null(cron_expr);
639 assert_non_null(cron_expr);
641 amxc_ts_parse(&start,
"2023-05-18T10:07:24Z", 20);
642 amxc_ts_format(&start, str_ts, 40);
643 printf(
"%s\n", str_ts);
646 amxc_ts_format(&next, str_ts, 40);
647 printf(
"%s\n", str_ts);
648 assert_string_equal(str_ts,
"2023-05-20T12:00:00Z");
652 amxc_ts_format(&next, str_ts, 40);
653 printf(
"%s\n", str_ts);
654 assert_string_equal(str_ts,
"2023-05-21T12:00:00Z");
658 amxc_ts_format(&next, str_ts, 40);
659 printf(
"%s\n", str_ts);
660 assert_string_equal(str_ts,
"2023-05-27T12:00:00Z");
664 amxc_ts_format(&next, str_ts, 40);
665 printf(
"%s\n", str_ts);
666 assert_string_equal(str_ts,
"2023-05-28T12:00:00Z");
670 amxc_ts_format(&next, str_ts, 40);
671 printf(
"%s\n", str_ts);
672 assert_string_equal(str_ts,
"2023-06-03T12:00:00Z");
676 amxc_ts_format(&next, str_ts, 40);
677 printf(
"%s\n", str_ts);
678 assert_string_equal(str_ts,
"2023-06-04T12:00:00Z");
685 amxc_ts_t start = { 0, 0, 0 };
686 amxc_ts_t next = { 0, 0, 0 };
690 assert_non_null(cron_expr);
693 assert_non_null(cron_expr);
695 amxc_ts_parse(&start,
"2023-05-18T10:07:24Z", 20);
696 amxc_ts_format(&start, str_ts, 40);
697 printf(
"%s\n", str_ts);
700 amxc_ts_format(&next, str_ts, 40);
701 printf(
"%s\n", str_ts);
702 assert_string_equal(str_ts,
"2023-05-14T12:00:00Z");
706 amxc_ts_format(&next, str_ts, 40);
707 printf(
"%s\n", str_ts);
708 assert_string_equal(str_ts,
"2023-05-13T12:00:00Z");
712 amxc_ts_format(&next, str_ts, 40);
713 printf(
"%s\n", str_ts);
714 assert_string_equal(str_ts,
"2023-05-07T12:00:00Z");
718 amxc_ts_format(&next, str_ts, 40);
719 printf(
"%s\n", str_ts);
720 assert_string_equal(str_ts,
"2023-05-06T12:00:00Z");
724 amxc_ts_format(&next, str_ts, 40);
725 printf(
"%s\n", str_ts);
726 assert_string_equal(str_ts,
"2023-04-30T12:00:00Z");
730 amxc_ts_format(&next, str_ts, 40);
731 printf(
"%s\n", str_ts);
732 assert_string_equal(str_ts,
"2023-04-29T12:00:00Z");
739 amxc_ts_t start = { 0, 0, 0 };
740 amxc_ts_t next = { 0, 0, 0 };
744 assert_non_null(cron_expr);
747 assert_non_null(cron_expr);
749 amxc_ts_parse(&start,
"2023-05-18T10:07:24Z", 20);
750 amxc_ts_format(&start, str_ts, 40);
751 printf(
"%s\n", str_ts);
754 amxc_ts_format(&next, str_ts, 40);
755 printf(
"%s\n", str_ts);
756 assert_string_equal(str_ts,
"2023-07-01T12:00:00Z");
760 amxc_ts_format(&next, str_ts, 40);
761 printf(
"%s\n", str_ts);
762 assert_string_equal(str_ts,
"2023-09-01T12:00:00Z");
766 amxc_ts_format(&next, str_ts, 40);
767 printf(
"%s\n", str_ts);
768 assert_string_equal(str_ts,
"2023-11-01T12:00:00Z");
772 amxc_ts_format(&next, str_ts, 40);
773 printf(
"%s\n", str_ts);
774 assert_string_equal(str_ts,
"2024-01-01T12:00:00Z");
778 amxc_ts_format(&next, str_ts, 40);
779 printf(
"%s\n", str_ts);
780 assert_string_equal(str_ts,
"2024-03-01T12:00:00Z");
784 amxc_ts_format(&next, str_ts, 40);
785 printf(
"%s\n", str_ts);
786 assert_string_equal(str_ts,
"2024-05-01T12:00:00Z");
790 amxc_ts_format(&next, str_ts, 40);
791 printf(
"%s\n", str_ts);
792 assert_string_equal(str_ts,
"2024-07-01T12:00:00Z");
796 amxc_ts_format(&next, str_ts, 40);
797 printf(
"%s\n", str_ts);
798 assert_string_equal(str_ts,
"2024-09-01T12:00:00Z");
805 amxc_ts_t start = { 0, 0, 0 };
806 amxc_ts_t next = { 0, 0, 0 };
810 assert_non_null(cron_expr);
813 assert_non_null(cron_expr);
815 amxc_ts_parse(&start,
"2023-05-18T10:07:24Z", 20);
816 amxc_ts_format(&start, str_ts, 40);
817 printf(
"%s\n", str_ts);
820 amxc_ts_format(&next, str_ts, 40);
821 printf(
"%s\n", str_ts);
822 assert_string_equal(str_ts,
"2023-05-01T12:00:00Z");
826 amxc_ts_format(&next, str_ts, 40);
827 printf(
"%s\n", str_ts);
828 assert_string_equal(str_ts,
"2023-03-01T12:00:00Z");
832 amxc_ts_format(&next, str_ts, 40);
833 printf(
"%s\n", str_ts);
834 assert_string_equal(str_ts,
"2023-01-01T12:00:00Z");
838 amxc_ts_format(&next, str_ts, 40);
839 printf(
"%s\n", str_ts);
840 assert_string_equal(str_ts,
"2022-11-01T12:00:00Z");
844 amxc_ts_format(&next, str_ts, 40);
845 printf(
"%s\n", str_ts);
846 assert_string_equal(str_ts,
"2022-09-01T12:00:00Z");
850 amxc_ts_format(&next, str_ts, 40);
851 printf(
"%s\n", str_ts);
852 assert_string_equal(str_ts,
"2022-07-01T12:00:00Z");
856 amxc_ts_format(&next, str_ts, 40);
857 printf(
"%s\n", str_ts);
858 assert_string_equal(str_ts,
"2022-05-01T12:00:00Z");
862 amxc_ts_format(&next, str_ts, 40);
863 printf(
"%s\n", str_ts);
864 assert_string_equal(str_ts,
"2022-03-01T12:00:00Z");
871 amxc_ts_t start = { 0, 0, 0 };
872 amxc_ts_t next = { 0, 0, 0 };
876 assert_non_null(cron_expr);
879 assert_non_null(cron_expr);
881 amxc_ts_parse(&start,
"2023-05-18T10:07:24Z", 20);
882 amxc_ts_format(&start, str_ts, 40);
883 printf(
"%s\n", str_ts);
886 amxc_ts_format(&next, str_ts, 40);
887 printf(
"%s\n", str_ts);
888 assert_string_equal(str_ts,
"2023-06-05T00:00:00Z");
892 amxc_ts_format(&next, str_ts, 40);
893 printf(
"%s\n", str_ts);
894 assert_string_equal(str_ts,
"2023-07-03T00:00:00Z");
898 amxc_ts_format(&next, str_ts, 40);
899 printf(
"%s\n", str_ts);
900 assert_string_equal(str_ts,
"2023-08-07T00:00:00Z");
904 amxc_ts_format(&next, str_ts, 40);
905 printf(
"%s\n", str_ts);
906 assert_string_equal(str_ts,
"2023-09-04T00:00:00Z");
910 amxc_ts_format(&next, str_ts, 40);
911 printf(
"%s\n", str_ts);
912 assert_string_equal(str_ts,
"2023-10-02T00:00:00Z");
916 amxc_ts_format(&next, str_ts, 40);
917 printf(
"%s\n", str_ts);
918 assert_string_equal(str_ts,
"2023-11-06T00:00:00Z");
925 amxc_ts_t start = { 0, 0, 0 };
926 amxc_ts_t next = { 0, 0, 0 };
930 assert_non_null(cron_expr);
932 amxc_ts_parse(&start,
"2023-05-18T10:07:24Z", 20);
933 amxc_ts_format(&start, str_ts, 40);
934 printf(
"%s\n", str_ts);
938 amxc_ts_format(&next, str_ts, 40);
939 printf(
"%s\n", str_ts);
940 assert_string_equal(str_ts,
"2023-05-18T18:00:00Z");
944 amxc_ts_format(&next, str_ts, 40);
945 printf(
"%s\n", str_ts);
946 assert_string_equal(str_ts,
"2023-05-19T18:00:00Z");
950 amxc_ts_format(&next, str_ts, 40);
951 printf(
"%s\n", str_ts);
952 assert_string_equal(str_ts,
"2023-05-22T18:00:00Z");
956 amxc_ts_format(&next, str_ts, 40);
957 printf(
"%s\n", str_ts);
958 assert_string_equal(str_ts,
"2023-05-23T18:00:00Z");
962 amxc_ts_format(&next, str_ts, 40);
963 printf(
"%s\n", str_ts);
964 assert_string_equal(str_ts,
"2023-05-25T18:00:00Z");
968 amxc_ts_format(&next, str_ts, 40);
969 printf(
"%s\n", str_ts);
970 assert_string_equal(str_ts,
"2023-05-26T18:00:00Z");
974 amxc_ts_format(&next, str_ts, 40);
975 printf(
"%s\n", str_ts);
976 assert_string_equal(str_ts,
"2023-05-29T18:00:00Z");
983 amxc_ts_t start = { 0, 0, 0 };
984 amxc_ts_t next = { 0, 0, 0 };
988 assert_non_null(cron_expr);
990 amxc_ts_parse(&start,
"2023-05-18T10:07:24Z", 20);
991 amxc_ts_format(&start, str_ts, 40);
992 printf(
"%s\n", str_ts);
995 amxc_ts_format(&next, str_ts, 40);
996 printf(
"%s\n", str_ts);
997 assert_string_equal(str_ts,
"2023-05-18T10:07:25Z");
1001 amxc_ts_format(&next, str_ts, 40);
1002 printf(
"%s\n", str_ts);
1003 assert_string_equal(str_ts,
"2023-05-18T10:07:26Z");
1007 amxc_ts_format(&next, str_ts, 40);
1008 printf(
"%s\n", str_ts);
1009 assert_string_equal(str_ts,
"2023-05-18T10:07:27Z");
1019 amxc_ts_t start = { 0, 0, 0 };
1020 amxc_ts_t next = { 0, 0, 0 };
1023 assert_non_null(cron_expr);
1028 assert_non_null(cron_expr);
1030 assert_int_not_equal(
amxp_cron_next(cron_expr, &start, NULL), 0);
1033 assert_int_not_equal(
amxp_cron_next(cron_expr, &start, NULL), 0);
Ambiorix cron expression parser.
int amxp_cron_build_weekly(amxp_cron_expr_t *target, const char *time, const char *days_of_week)
Builds a weekly cron expression that is triggered at a certain time on certain days of the week.
int amxp_cron_init(amxp_cron_expr_t *cron_expr)
Initializes an amxp_cron_expr_t structures to every second.
int64_t amxp_cron_time_until_next(const amxp_cron_expr_t *expr, bool local)
Calculates the time in seconds until next trigger of a parsed cron expression occurs.
int amxp_cron_new(amxp_cron_expr_t **cron_expr)
Allocates an amxp_cron_expr_t structures and initializes it to every second.
int amxp_cron_parse_expr(amxp_cron_expr_t *target, const char *expression, const char **error)
Allocates and initializes an amxp_cron_expr_t structures and parses the given cron expression.
void amxp_cron_clean(amxp_cron_expr_t *cron_expr)
Resets the amxp_cron_expr_t structure to the initialized state.
int amxp_cron_prev(const amxp_cron_expr_t *expr, const amxc_ts_t *ref, amxc_ts_t *next)
Calculates the previous trigger time for a parsed cron expression.
void amxp_cron_delete(amxp_cron_expr_t **cron_expr)
Frees the previously allocated amxp_cron_expr_t structure.
int amxp_cron_next(const amxp_cron_expr_t *expr, const amxc_ts_t *ref, amxc_ts_t *next)
Calculates the next trigger time for a parsed cron expression.
Structure containing parsed cron expression.
void test_cron_expr_can_calculate_prev_minutes(UNUSED void **state)
void test_cron_expr_can_calculate_next_hours(UNUSED void **state)
void test_cron_expr_can_calculate_prev_day(UNUSED void **state)
void test_cron_expr_weekly(UNUSED void **state)
void test_cron_expr_can_calculate_prev_month(UNUSED void **state)
void test_cron_expr_can_calculate_next_day_of_week(UNUSED void **state)
void test_cron_expr_can_calculate_first_monday_of_month(UNUSED void **state)
void test_cron_expr_can_calculate_next_minutes(UNUSED void **state)
void test_cron_expr_build_weekly(UNUSED void **state)
void test_cron_expr_can_calculate_next_second(UNUSED void **state)
void test_cron_expr_can_calculate_prev_hours(UNUSED void **state)
void test_cron_expr_parser_invalid_increment(UNUSED void **state)
void test_cron_expr_parser_invalid_range(UNUSED void **state)
void test_cron_expr_can_calculate_prev_second(UNUSED void **state)
void test_cron_expr_can_calculate_next_day(UNUSED void **state)
void test_cron_expr_next_invalid(UNUSED void **state)
void test_cron_expr_can_calculate_prev_day_of_week(UNUSED void **state)
void test_cron_expr_parser_invalid_expression(UNUSED void **state)
void test_cron_expr_can_calculate_next_month(UNUSED void **state)
void test_cron_expr_next_empty(UNUSED void **state)
void test_cron_expr_parser(UNUSED void **state)