calendar

BSD calendar reimplementation
git clone https://git.ce9e.org/calendar.git

commit
3554fa955345c9c200a308bd7932322be657d92f
parent
e29617e655ac1274b1d396884c4f0c3ef3bc29b9
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2018-11-20 16:38
c: refine test output

Diffstat

M test.c 285 +++++++++++++++++++++++++++++++------------------------------

1 files changed, 145 insertions, 140 deletions


diff --git a/test.c b/test.c

@@ -1,78 +1,80 @@
    1     1 #define test
    2     2 #include "calendar.c"
    3     3 
    4    -1 #define run_test(test) do { char *message = test(); tests_run++; if (message) { tests_failed++; printf("Failed: %s\n", message); } } while (0)
   -1     4 #define mu_unit(msg) do { printf("%s\n", msg); } while (0)
   -1     5 #define mu_test(msg, fn) do { printf("  %s\n", msg); char *result = fn(); tests_run++; if (result) { tests_failed++; printf("    X %s\n", result); } } while (0)
   -1     6 #define mu_assert(msg, test) do { if (!(test)) return msg; } while (0)
    5     7 
    6     8 int tests_run = 0;
    7     9 int tests_failed = 0;
    8    10 
    9    11 static char *test_easter() {
   10    -1 	if (!date_comp(easter(2000, false), mkdate(2000, 4, 23))) return "easter 2000";
   11    -1 	if (!date_comp(easter(2001, false), mkdate(2001, 4, 15))) return "easter 2001";
   12    -1 	if (!date_comp(easter(2002, false), mkdate(2002, 3, 31))) return "easter 2002";
   13    -1 	if (!date_comp(easter(2003, false), mkdate(2003, 4, 20))) return "easter 2003";
   14    -1 	if (!date_comp(easter(2004, false), mkdate(2004, 4, 11))) return "easter 2004";
   15    -1 	if (!date_comp(easter(2005, false), mkdate(2005, 3, 27))) return "easter 2005";
   16    -1 	if (!date_comp(easter(2006, false), mkdate(2006, 4, 16))) return "easter 2006";
   17    -1 	if (!date_comp(easter(2007, false), mkdate(2007, 4,  8))) return "easter 2007";
   18    -1 	if (!date_comp(easter(2008, false), mkdate(2008, 3, 23))) return "easter 2008";
   19    -1 	if (!date_comp(easter(2009, false), mkdate(2009, 4, 12))) return "easter 2009";
   20    -1 	if (!date_comp(easter(2010, false), mkdate(2010, 4,  4))) return "easter 2010";
   21    -1 	if (!date_comp(easter(2011, false), mkdate(2011, 4, 24))) return "easter 2011";
   22    -1 	if (!date_comp(easter(2012, false), mkdate(2012, 4,  8))) return "easter 2012";
   23    -1 	if (!date_comp(easter(2013, false), mkdate(2013, 3, 31))) return "easter 2013";
   24    -1 	if (!date_comp(easter(2014, false), mkdate(2014, 4, 20))) return "easter 2014";
   25    -1 	if (!date_comp(easter(2015, false), mkdate(2015, 4,  5))) return "easter 2015";
   26    -1 	if (!date_comp(easter(2016, false), mkdate(2016, 3, 27))) return "easter 2016";
   27    -1 	if (!date_comp(easter(2017, false), mkdate(2017, 4, 16))) return "easter 2017";
   28    -1 	if (!date_comp(easter(2018, false), mkdate(2018, 4,  1))) return "easter 2018";
   29    -1 	if (!date_comp(easter(2019, false), mkdate(2019, 4, 21))) return "easter 2019";
   30    -1 	if (!date_comp(easter(2020, false), mkdate(2020, 4, 12))) return "easter 2020";
   31    -1 	if (!date_comp(easter(2021, false), mkdate(2021, 4,  4))) return "easter 2021";
   32    -1 	if (!date_comp(easter(2022, false), mkdate(2022, 4, 17))) return "easter 2022";
   33    -1 	if (!date_comp(easter(2023, false), mkdate(2023, 4,  9))) return "easter 2023";
   34    -1 	if (!date_comp(easter(2024, false), mkdate(2024, 3, 31))) return "easter 2024";
   35    -1 	if (!date_comp(easter(2025, false), mkdate(2025, 4, 20))) return "easter 2025";
   36    -1 	if (!date_comp(easter(2026, false), mkdate(2026, 4,  5))) return "easter 2026";
   37    -1 	if (!date_comp(easter(2027, false), mkdate(2027, 3, 28))) return "easter 2027";
   38    -1 	if (!date_comp(easter(2028, false), mkdate(2028, 4, 16))) return "easter 2028";
   39    -1 	if (!date_comp(easter(2029, false), mkdate(2029, 4,  1))) return "easter 2029";
   40    -1 	if (!date_comp(easter(2030, false), mkdate(2030, 4, 21))) return "easter 2030";
   -1    12 	mu_assert("2000", date_comp(easter(2000, false), mkdate(2000, 4, 23)));
   -1    13 	mu_assert("2001", date_comp(easter(2001, false), mkdate(2001, 4, 15)));
   -1    14 	mu_assert("2002", date_comp(easter(2002, false), mkdate(2002, 3, 31)));
   -1    15 	mu_assert("2003", date_comp(easter(2003, false), mkdate(2003, 4, 20)));
   -1    16 	mu_assert("2004", date_comp(easter(2004, false), mkdate(2004, 4, 11)));
   -1    17 	mu_assert("2005", date_comp(easter(2005, false), mkdate(2005, 3, 27)));
   -1    18 	mu_assert("2006", date_comp(easter(2006, false), mkdate(2006, 4, 16)));
   -1    19 	mu_assert("2007", date_comp(easter(2007, false), mkdate(2007, 4,  8)));
   -1    20 	mu_assert("2008", date_comp(easter(2008, false), mkdate(2008, 3, 23)));
   -1    21 	mu_assert("2009", date_comp(easter(2009, false), mkdate(2009, 4, 12)));
   -1    22 	mu_assert("2010", date_comp(easter(2010, false), mkdate(2010, 4,  4)));
   -1    23 	mu_assert("2011", date_comp(easter(2011, false), mkdate(2011, 4, 24)));
   -1    24 	mu_assert("2012", date_comp(easter(2012, false), mkdate(2012, 4,  8)));
   -1    25 	mu_assert("2013", date_comp(easter(2013, false), mkdate(2013, 3, 31)));
   -1    26 	mu_assert("2014", date_comp(easter(2014, false), mkdate(2014, 4, 20)));
   -1    27 	mu_assert("2015", date_comp(easter(2015, false), mkdate(2015, 4,  5)));
   -1    28 	mu_assert("2016", date_comp(easter(2016, false), mkdate(2016, 3, 27)));
   -1    29 	mu_assert("2017", date_comp(easter(2017, false), mkdate(2017, 4, 16)));
   -1    30 	mu_assert("2018", date_comp(easter(2018, false), mkdate(2018, 4,  1)));
   -1    31 	mu_assert("2019", date_comp(easter(2019, false), mkdate(2019, 4, 21)));
   -1    32 	mu_assert("2020", date_comp(easter(2020, false), mkdate(2020, 4, 12)));
   -1    33 	mu_assert("2021", date_comp(easter(2021, false), mkdate(2021, 4,  4)));
   -1    34 	mu_assert("2022", date_comp(easter(2022, false), mkdate(2022, 4, 17)));
   -1    35 	mu_assert("2023", date_comp(easter(2023, false), mkdate(2023, 4,  9)));
   -1    36 	mu_assert("2024", date_comp(easter(2024, false), mkdate(2024, 3, 31)));
   -1    37 	mu_assert("2025", date_comp(easter(2025, false), mkdate(2025, 4, 20)));
   -1    38 	mu_assert("2026", date_comp(easter(2026, false), mkdate(2026, 4,  5)));
   -1    39 	mu_assert("2027", date_comp(easter(2027, false), mkdate(2027, 3, 28)));
   -1    40 	mu_assert("2028", date_comp(easter(2028, false), mkdate(2028, 4, 16)));
   -1    41 	mu_assert("2029", date_comp(easter(2029, false), mkdate(2029, 4,  1)));
   -1    42 	mu_assert("2030", date_comp(easter(2030, false), mkdate(2030, 4, 21)));
   41    43 	return 0;
   42    44 }
   43    45 
   44    46 static char *test_paskha() {
   45    -1 	if (!date_comp(easter(2000, true), mkdate(2000, 4, 30))) return "paskha 2000";
   46    -1 	if (!date_comp(easter(2001, true), mkdate(2001, 4, 15))) return "paskha 2001";
   47    -1 	if (!date_comp(easter(2002, true), mkdate(2002, 5,  5))) return "paskha 2002";
   48    -1 	if (!date_comp(easter(2003, true), mkdate(2003, 4, 27))) return "paskha 2003";
   49    -1 	if (!date_comp(easter(2004, true), mkdate(2004, 4, 11))) return "paskha 2004";
   50    -1 	if (!date_comp(easter(2005, true), mkdate(2005, 5,  1))) return "paskha 2005";
   51    -1 	if (!date_comp(easter(2006, true), mkdate(2006, 4, 23))) return "paskha 2006";
   52    -1 	if (!date_comp(easter(2007, true), mkdate(2007, 4,  8))) return "paskha 2007";
   53    -1 	if (!date_comp(easter(2008, true), mkdate(2008, 4, 27))) return "paskha 2008";
   54    -1 	if (!date_comp(easter(2009, true), mkdate(2009, 4, 19))) return "paskha 2009";
   55    -1 	if (!date_comp(easter(2010, true), mkdate(2010, 4,  4))) return "paskha 2010";
   56    -1 	if (!date_comp(easter(2011, true), mkdate(2011, 4, 24))) return "paskha 2011";
   57    -1 	if (!date_comp(easter(2012, true), mkdate(2012, 4, 15))) return "paskha 2012";
   58    -1 	if (!date_comp(easter(2013, true), mkdate(2013, 5,  5))) return "paskha 2013";
   59    -1 	if (!date_comp(easter(2014, true), mkdate(2014, 4, 20))) return "paskha 2014";
   60    -1 	if (!date_comp(easter(2015, true), mkdate(2015, 4, 12))) return "paskha 2015";
   61    -1 	if (!date_comp(easter(2016, true), mkdate(2016, 5,  1))) return "paskha 2016";
   62    -1 	if (!date_comp(easter(2017, true), mkdate(2017, 4, 16))) return "paskha 2017";
   63    -1 	if (!date_comp(easter(2018, true), mkdate(2018, 4,  8))) return "paskha 2018";
   64    -1 	if (!date_comp(easter(2019, true), mkdate(2019, 4, 28))) return "paskha 2019";
   65    -1 	if (!date_comp(easter(2020, true), mkdate(2020, 4, 19))) return "paskha 2020";
   66    -1 	if (!date_comp(easter(2021, true), mkdate(2021, 5,  2))) return "paskha 2021";
   67    -1 	if (!date_comp(easter(2022, true), mkdate(2022, 4, 24))) return "paskha 2022";
   68    -1 	if (!date_comp(easter(2023, true), mkdate(2023, 4, 16))) return "paskha 2023";
   69    -1 	if (!date_comp(easter(2024, true), mkdate(2024, 5,  5))) return "paskha 2024";
   70    -1 	if (!date_comp(easter(2025, true), mkdate(2025, 4, 20))) return "paskha 2025";
   71    -1 	if (!date_comp(easter(2026, true), mkdate(2026, 4, 12))) return "paskha 2026";
   72    -1 	if (!date_comp(easter(2027, true), mkdate(2027, 5,  2))) return "paskha 2027";
   73    -1 	if (!date_comp(easter(2028, true), mkdate(2028, 4, 16))) return "paskha 2028";
   74    -1 	if (!date_comp(easter(2029, true), mkdate(2029, 4,  8))) return "paskha 2029";
   75    -1 	if (!date_comp(easter(2030, true), mkdate(2030, 4, 28))) return "paskha 2030";
   -1    47 	mu_assert("2000", date_comp(easter(2000, true), mkdate(2000, 4, 30)));
   -1    48 	mu_assert("2001", date_comp(easter(2001, true), mkdate(2001, 4, 15)));
   -1    49 	mu_assert("2002", date_comp(easter(2002, true), mkdate(2002, 5,  5)));
   -1    50 	mu_assert("2003", date_comp(easter(2003, true), mkdate(2003, 4, 27)));
   -1    51 	mu_assert("2004", date_comp(easter(2004, true), mkdate(2004, 4, 11)));
   -1    52 	mu_assert("2005", date_comp(easter(2005, true), mkdate(2005, 5,  1)));
   -1    53 	mu_assert("2006", date_comp(easter(2006, true), mkdate(2006, 4, 23)));
   -1    54 	mu_assert("2007", date_comp(easter(2007, true), mkdate(2007, 4,  8)));
   -1    55 	mu_assert("2008", date_comp(easter(2008, true), mkdate(2008, 4, 27)));
   -1    56 	mu_assert("2009", date_comp(easter(2009, true), mkdate(2009, 4, 19)));
   -1    57 	mu_assert("2010", date_comp(easter(2010, true), mkdate(2010, 4,  4)));
   -1    58 	mu_assert("2011", date_comp(easter(2011, true), mkdate(2011, 4, 24)));
   -1    59 	mu_assert("2012", date_comp(easter(2012, true), mkdate(2012, 4, 15)));
   -1    60 	mu_assert("2013", date_comp(easter(2013, true), mkdate(2013, 5,  5)));
   -1    61 	mu_assert("2014", date_comp(easter(2014, true), mkdate(2014, 4, 20)));
   -1    62 	mu_assert("2015", date_comp(easter(2015, true), mkdate(2015, 4, 12)));
   -1    63 	mu_assert("2016", date_comp(easter(2016, true), mkdate(2016, 5,  1)));
   -1    64 	mu_assert("2017", date_comp(easter(2017, true), mkdate(2017, 4, 16)));
   -1    65 	mu_assert("2018", date_comp(easter(2018, true), mkdate(2018, 4,  8)));
   -1    66 	mu_assert("2019", date_comp(easter(2019, true), mkdate(2019, 4, 28)));
   -1    67 	mu_assert("2020", date_comp(easter(2020, true), mkdate(2020, 4, 19)));
   -1    68 	mu_assert("2021", date_comp(easter(2021, true), mkdate(2021, 5,  2)));
   -1    69 	mu_assert("2022", date_comp(easter(2022, true), mkdate(2022, 4, 24)));
   -1    70 	mu_assert("2023", date_comp(easter(2023, true), mkdate(2023, 4, 16)));
   -1    71 	mu_assert("2024", date_comp(easter(2024, true), mkdate(2024, 5,  5)));
   -1    72 	mu_assert("2025", date_comp(easter(2025, true), mkdate(2025, 4, 20)));
   -1    73 	mu_assert("2026", date_comp(easter(2026, true), mkdate(2026, 4, 12)));
   -1    74 	mu_assert("2027", date_comp(easter(2027, true), mkdate(2027, 5,  2)));
   -1    75 	mu_assert("2028", date_comp(easter(2028, true), mkdate(2028, 4, 16)));
   -1    76 	mu_assert("2029", date_comp(easter(2029, true), mkdate(2029, 4,  8)));
   -1    77 	mu_assert("2030", date_comp(easter(2030, true), mkdate(2030, 4, 28)));
   76    78 	return 0;
   77    79 }
   78    80 
@@ -102,7 +104,7 @@ char *test_parse_date_dd() {
  102   104 	expected.year = today()->tm_year + 1900;
  103   105 	expected.day = 13;
  104   106 
  105    -1 	if (!tpl_comp(actual, expected)) return "parse_date_mut(\"13\")";
   -1   107 	mu_assert("13", tpl_comp(actual, expected));
  106   108 	return 0;
  107   109 }
  108   110 
@@ -111,7 +113,7 @@ char *test_parse_date_dd_star() {
  111   113 	struct tpl expected = mktpl();
  112   114 	expected.day = 13;
  113   115 
  114    -1 	if (!tpl_comp(actual, expected)) return "parse_date_mut(\"13*\")";
   -1   116 	mu_assert("13*)", tpl_comp(actual, expected));
  115   117 	return 0;
  116   118 }
  117   119 
@@ -122,7 +124,7 @@ char *test_parse_date_mmdd() {
  122   124 	expected.month = 2;
  123   125 	expected.day = 13;
  124   126 
  125    -1 	if (!tpl_comp(actual, expected)) return "parse_date_mut(\"02/13\")";
   -1   127 	mu_assert("02/13", tpl_comp(actual, expected));
  126   128 	return 0;
  127   129 }
  128   130 
@@ -132,7 +134,7 @@ char *test_parse_date_mmdd_star() {
  132   134 	expected.month = 2;
  133   135 	expected.day = 13;
  134   136 
  135    -1 	if (!tpl_comp(actual, expected)) return "parse_date_mut(\"02/13*\")";
   -1   137 	mu_assert("02/13", tpl_comp(actual, expected));
  136   138 	return 0;
  137   139 }
  138   140 
@@ -143,7 +145,7 @@ char *test_parse_date_yyyymmdd() {
  143   145 	expected.month = 2;
  144   146 	expected.day = 13;
  145   147 
  146    -1 	if (!tpl_comp(actual, expected)) return "parse_date_mut(\"1999/02/13\")";
   -1   148 	mu_assert("1999/02/13", tpl_comp(actual, expected));
  147   149 	return 0;
  148   150 }
  149   151 
@@ -153,7 +155,7 @@ char *test_parse_date_yyyymmdd_star() {
  153   155 	expected.month = 2;
  154   156 	expected.day = 13;
  155   157 
  156    -1 	if (!tpl_comp(actual, expected)) return "parse_date_mut(\"1999/02/13*\")";
   -1   158 	mu_assert("1999/02/13*", tpl_comp(actual, expected));
  157   159 	return 0;
  158   160 }
  159   161 
@@ -165,7 +167,7 @@ char *test_parse_date_yyyymmdd_repeat() {
  165   167 	expected.day = 13;
  166   168 	expected.repeat = 2;
  167   169 
  168    -1 	if (!tpl_comp(actual, expected)) return "parse_date_mut(\"1999/02/13+2\")";
   -1   170 	mu_assert("1999/02/13+2", tpl_comp(actual, expected));
  169   171 	return 0;
  170   172 }
  171   173 
@@ -174,7 +176,7 @@ char *test_parse_date_weekday() {
  174   176 	struct tpl expected = mktpl();
  175   177 	expected.weekday = 7;
  176   178 
  177    -1 	if (!tpl_comp(actual, expected)) return "parse_date_mut(\"Sat\")";
   -1   179 	mu_assert("Sat", tpl_comp(actual, expected));
  178   180 	return 0;
  179   181 }
  180   182 
@@ -184,7 +186,7 @@ char *test_parse_date_weekday_with_nth_of_month() {
  184   186 	expected.weekday = 7;
  185   187 	expected.nth_of_month = -1;
  186   188 
  187    -1 	if (!tpl_comp(actual, expected)) return "parse_date_mut(\"Sat-1\")";
   -1   189 	mu_assert("Sat-1", tpl_comp(actual, expected));
  188   190 	return 0;
  189   191 }
  190   192 
@@ -195,7 +197,7 @@ char *test_parse_date_mm_weekday() {
  195   197 	expected.weekday = 7;
  196   198 	expected.nth_of_month = 2;
  197   199 
  198    -1 	if (!tpl_comp(actual, expected)) return "parse_date_mut(\"02/Sat+2\")";
   -1   200 	mu_assert("02/Sat+2", tpl_comp(actual, expected));
  199   201 	return 0;
  200   202 }
  201   203 
@@ -207,7 +209,7 @@ char *test_parse_date_yyyymm_weekday() {
  207   209 	expected.weekday = 7;
  208   210 	expected.nth_of_month = 2;
  209   211 
  210    -1 	if (!tpl_comp(actual, expected)) return "parse_date_mut(\"1999/02/Sat+2\")";
   -1   212 	mu_assert("1999/02/Sat+2", tpl_comp(actual, expected));
  211   213 	return 0;
  212   214 }
  213   215 
@@ -216,7 +218,7 @@ char *test_parse_date_easter() {
  216   218 	struct tpl expected = mktpl();
  217   219 	expected.from_easter = 0;
  218   220 
  219    -1 	if (!tpl_comp(actual, expected)) return "parse_date_mut(\"Easter\")";
   -1   221 	mu_assert("Easter", tpl_comp(actual, expected));
  220   222 	return 0;
  221   223 }
  222   224 
@@ -225,7 +227,7 @@ char *test_parse_date_easter_with_offset() {
  225   227 	struct tpl expected = mktpl();
  226   228 	expected.from_easter = 30;
  227   229 
  228    -1 	if (!tpl_comp(actual, expected)) return "parse_date_mut(\"Easter+30\")";
   -1   230 	mu_assert("Easter+30", tpl_comp(actual, expected));
  229   231 	return 0;
  230   232 }
  231   233 
@@ -233,8 +235,8 @@ char *test_is_match_dd() {
  233   235 	struct tpl tpl = mktpl();
  234   236 	tpl.day = 13;
  235   237 
  236    -1 	if (!is_match(tpl, mkdate(1999, 2, 13))) return "is_match dd";
  237    -1 	if (is_match(tpl, mkdate(1999, 2, 14))) return "!is_match dd";
   -1   238 	mu_assert("date does match", is_match(tpl, mkdate(1999, 2, 13)));
   -1   239 	mu_assert("next day does not match", !is_match(tpl, mkdate(1999, 2, 14)));
  238   240 	return 0;
  239   241 }
  240   242 
@@ -243,9 +245,9 @@ char *test_is_match_mmdd() {
  243   245 	tpl.month = 2;
  244   246 	tpl.day = 13;
  245   247 
  246    -1 	if (!is_match(tpl, mkdate(1999, 2, 13))) return "is_match mmdd";
  247    -1 	if (is_match(tpl, mkdate(1999, 2, 14))) return "!is_match mmdd";
  248    -1 	if (is_match(tpl, mkdate(1999, 3, 13))) return "!is_match mmdd";
   -1   248 	mu_assert("date does match", is_match(tpl, mkdate(1999, 2, 13)));
   -1   249 	mu_assert("next day does not match", !is_match(tpl, mkdate(1999, 2, 14)));
   -1   250 	mu_assert("next month does not match", !is_match(tpl, mkdate(1999, 3, 13)));
  249   251 	return 0;
  250   252 }
  251   253 
@@ -255,10 +257,10 @@ char *test_is_match_yyyymmdd() {
  255   257 	tpl.month = 2;
  256   258 	tpl.day = 13;
  257   259 
  258    -1 	if (!is_match(tpl, mkdate(1999, 2, 13))) return "is_match yyyymmdd";
  259    -1 	if (is_match(tpl, mkdate(1999, 2, 14))) return "!is_match yyyymmdd";
  260    -1 	if (is_match(tpl, mkdate(1999, 3, 13))) return "!is_match yyyymmdd";
  261    -1 	if (is_match(tpl, mkdate(2000, 2, 13))) return "!is_match yyyymmdd";
   -1   260 	mu_assert("date does match", is_match(tpl, mkdate(1999, 2, 13)));
   -1   261 	mu_assert("next day does not match", !is_match(tpl, mkdate(1999, 2, 14)));
   -1   262 	mu_assert("next month does not match", !is_match(tpl, mkdate(1999, 3, 13)));
   -1   263 	mu_assert("next year does not match", !is_match(tpl, mkdate(2000, 2, 13)));
  262   264 	return 0;
  263   265 }
  264   266 
@@ -269,10 +271,10 @@ char *test_is_match_yyyymmdd_repeat() {
  269   271 	tpl.day = 13;
  270   272 	tpl.repeat = 2;
  271   273 
  272    -1 	if (!is_match(tpl, mkdate(1999, 2, 13))) return "is_match yyyymmdd repeat";
  273    -1 	if (!is_match(tpl, mkdate(1999, 2, 27))) return "is_match yyyymmdd repeat";
  274    -1 	if (is_match(tpl, mkdate(1999, 2, 14))) return "!is_match yyyymmdd repeat";
  275    -1 	if (is_match(tpl, mkdate(1999, 2, 20))) return "!is_match yyyymmdd repeat";
   -1   274 	mu_assert("date does match", is_match(tpl, mkdate(1999, 2, 13)));
   -1   275 	mu_assert("two weeks later does match", is_match(tpl, mkdate(1999, 2, 27)));
   -1   276 	mu_assert("next day does not match", !is_match(tpl, mkdate(1999, 2, 14)));
   -1   277 	mu_assert("one week later does not match", !is_match(tpl, mkdate(1999, 2, 20)));
  276   278 	return 0;
  277   279 }
  278   280 
@@ -280,8 +282,8 @@ char *test_is_match_weekday() {
  280   282 	struct tpl tpl = mktpl();
  281   283 	tpl.weekday = 7;
  282   284 
  283    -1 	if (!is_match(tpl, mkdate(1999, 2, 13))) return "is_match weekday";
  284    -1 	if (is_match(tpl, mkdate(1999, 2, 14))) return "!is_match weekday";
   -1   285 	mu_assert("date does match", is_match(tpl, mkdate(1999, 2, 13)));
   -1   286 	mu_assert("next day does not match", !is_match(tpl, mkdate(1999, 2, 14)));
  285   287 	return 0;
  286   288 }
  287   289 
@@ -290,9 +292,9 @@ char *test_is_match_weekday_with_nth_of_month() {
  290   292 	tpl.weekday = 7;
  291   293 	tpl.nth_of_month = 2;
  292   294 
  293    -1 	if (!is_match(tpl, mkdate(1999, 2, 13))) return "is_match weekday with nth_of_month";
  294    -1 	if (is_match(tpl, mkdate(1999, 2, 14))) return "!is_match weekday with nth_of_month";
  295    -1 	if (is_match(tpl, mkdate(1999, 2, 20))) return "!is_match weekday with nth_of_month";
   -1   295 	mu_assert("date does match", is_match(tpl, mkdate(1999, 2, 13)));
   -1   296 	mu_assert("next day does not match", !is_match(tpl, mkdate(1999, 2, 14)));
   -1   297 	mu_assert("one week later does not match", !is_match(tpl, mkdate(1999, 2, 20)));
  296   298 	return 0;
  297   299 }
  298   300 
@@ -302,10 +304,10 @@ char *test_is_match_mm_weekday() {
  302   304 	tpl.weekday = 7;
  303   305 	tpl.nth_of_month = 2;
  304   306 
  305    -1 	if (!is_match(tpl, mkdate(1999, 2, 13))) return "is_match mm weekday";
  306    -1 	if (is_match(tpl, mkdate(1999, 2, 14))) return "!is_match mm weekday";
  307    -1 	if (is_match(tpl, mkdate(1999, 2, 20))) return "!is_match mm weekday";
  308    -1 	if (is_match(tpl, mkdate(1999, 3, 13))) return "!is_match mm weekday";
   -1   307 	mu_assert("date does match", is_match(tpl, mkdate(1999, 2, 13)));
   -1   308 	mu_assert("next day does not match", !is_match(tpl, mkdate(1999, 2, 14)));
   -1   309 	mu_assert("one week later does not match", !is_match(tpl, mkdate(1999, 2, 20)));
   -1   310 	mu_assert("next month does not match", !is_match(tpl, mkdate(1999, 3, 13)));
  309   311 	return 0;
  310   312 }
  311   313 
@@ -316,11 +318,11 @@ char *test_is_match_yyyymm_weekday() {
  316   318 	tpl.weekday = 7;
  317   319 	tpl.nth_of_month = 2;
  318   320 
  319    -1 	if (!is_match(tpl, mkdate(1999, 2, 13))) return "is_match yyyymm weekday";
  320    -1 	if (is_match(tpl, mkdate(1999, 2, 14))) return "!is_match yyyymm weekday";
  321    -1 	if (is_match(tpl, mkdate(1999, 2, 20))) return "!is_match yyyymm weekday";
  322    -1 	if (is_match(tpl, mkdate(1999, 3, 13))) return "!is_match yyyymm weekday";
  323    -1 	if (is_match(tpl, mkdate(2000, 2, 12))) return "!is_match yyyymm weekday";
   -1   321 	mu_assert("date does match", is_match(tpl, mkdate(1999, 2, 13)));
   -1   322 	mu_assert("next day does not match", !is_match(tpl, mkdate(1999, 2, 14)));
   -1   323 	mu_assert("one week later does not match", !is_match(tpl, mkdate(1999, 2, 20)));
   -1   324 	mu_assert("next month does not match", !is_match(tpl, mkdate(1999, 3, 13)));
   -1   325 	mu_assert("next year does not match", !is_match(tpl, mkdate(2000, 2, 13)));
  324   326 	return 0;
  325   327 }
  326   328 
@@ -329,8 +331,8 @@ char *test_is_match_easter() {
  329   331 	tpl.from_easter = 0;
  330   332 	tpl.easter = true;
  331   333 
  332    -1 	if (!is_match(tpl, mkdate(2000, 4, 23))) return "is_match easter";
  333    -1 	if (is_match(tpl, mkdate(2000, 4, 25))) return "!is_match easter";
   -1   334 	mu_assert("date does match", is_match(tpl, mkdate(2000, 4, 23)));
   -1   335 	mu_assert("two days later does not match", !is_match(tpl, mkdate(2000, 4, 25)));
  334   336 	return 0;
  335   337 }
  336   338 
@@ -339,8 +341,8 @@ char *test_is_match_easter_with_offset() {
  339   341 	tpl.from_easter = 2;
  340   342 	tpl.easter = true;
  341   343 
  342    -1 	if (!is_match(tpl, mkdate(2000, 4, 25))) return "is_match easter+2";
  343    -1 	if (is_match(tpl, mkdate(2000, 4, 23))) return "!is_match easter+2";
   -1   344 	mu_assert("two days later does match", is_match(tpl, mkdate(2000, 4, 25)));
   -1   345 	mu_assert("date does not match2", !is_match(tpl, mkdate(2000, 4, 23)));
  344   346 	return 0;
  345   347 }
  346   348 
@@ -349,8 +351,8 @@ char *test_is_match_paskha() {
  349   351 	tpl.from_paskha = 0;
  350   352 	tpl.paskha = true;
  351   353 
  352    -1 	if (!is_match(tpl, mkdate(2000, 4, 30))) return "is_match paskha";
  353    -1 	if (is_match(tpl, mkdate(2000, 4, 28))) return "!is_match paskha";
   -1   354 	mu_assert("date does match", is_match(tpl, mkdate(2000, 4, 30)));
   -1   355 	mu_assert("two days earlier does not match", !is_match(tpl, mkdate(2000, 4, 28)));
  354   356 	return 0;
  355   357 }
  356   358 
@@ -359,41 +361,44 @@ char *test_is_match_paskha_with_offset() {
  359   361 	tpl.from_paskha = -2;
  360   362 	tpl.paskha = true;
  361   363 
  362    -1 	if (!is_match(tpl, mkdate(2000, 4, 28))) return "is_match paskha-2";
  363    -1 	if (is_match(tpl, mkdate(2000, 4, 30))) return "!is_match paskha-2";
   -1   364 	mu_assert("two days earlier does match", is_match(tpl, mkdate(2000, 4, 28)));
   -1   365 	mu_assert("date does not match", !is_match(tpl, mkdate(2000, 4, 30)));
  364   366 	return 0;
  365   367 }
  366   368 
  367   369 int main(int argc, char **argv) {
  368    -1 	run_test(test_easter);
  369    -1 	run_test(test_paskha);
  370    -1 
  371    -1 	run_test(test_parse_date_dd);
  372    -1 	run_test(test_parse_date_dd_star);
  373    -1 	run_test(test_parse_date_mmdd);
  374    -1 	run_test(test_parse_date_mmdd_star);
  375    -1 	run_test(test_parse_date_yyyymmdd);
  376    -1 	run_test(test_parse_date_yyyymmdd_star);
  377    -1 	run_test(test_parse_date_yyyymmdd_repeat);
  378    -1 	run_test(test_parse_date_weekday);
  379    -1 	run_test(test_parse_date_weekday_with_nth_of_month);
  380    -1 	run_test(test_parse_date_mm_weekday);
  381    -1 	run_test(test_parse_date_yyyymm_weekday);
  382    -1 	run_test(test_parse_date_easter);
  383    -1 	run_test(test_parse_date_easter_with_offset);
  384    -1 
  385    -1 	run_test(test_is_match_dd);
  386    -1 	run_test(test_is_match_mmdd);
  387    -1 	run_test(test_is_match_yyyymmdd);
  388    -1 	run_test(test_is_match_yyyymmdd_repeat);
  389    -1 	run_test(test_is_match_weekday);
  390    -1 	run_test(test_is_match_weekday_with_nth_of_month);
  391    -1 	run_test(test_is_match_mm_weekday);
  392    -1 	run_test(test_is_match_yyyymm_weekday);
  393    -1 	run_test(test_is_match_easter);
  394    -1 	run_test(test_is_match_easter_with_offset);
  395    -1 	run_test(test_is_match_paskha);
  396    -1 	run_test(test_is_match_paskha_with_offset);
   -1   370 	mu_unit("easter()");
   -1   371 	mu_test("returns correct date for easter", test_easter);
   -1   372 	mu_test("returns correct date for paskha", test_paskha);
   -1   373 
   -1   374 	mu_unit("parse_date()");
   -1   375 	mu_test("parses dd", test_parse_date_dd);
   -1   376 	mu_test("parses dd*", test_parse_date_dd_star);
   -1   377 	mu_test("parses mm/dd", test_parse_date_mmdd);
   -1   378 	mu_test("parses mm/dd*", test_parse_date_mmdd_star);
   -1   379 	mu_test("parses yyyy/mm/dd", test_parse_date_yyyymmdd);
   -1   380 	mu_test("parses yyyy/mm/dd*", test_parse_date_yyyymmdd_star);
   -1   381 	mu_test("parses yyyy/mm/dd+n", test_parse_date_yyyymmdd_repeat);
   -1   382 	mu_test("parses weekday", test_parse_date_weekday);
   -1   383 	mu_test("parses weekday+n", test_parse_date_weekday_with_nth_of_month);
   -1   384 	mu_test("parses mm/weekday", test_parse_date_mm_weekday);
   -1   385 	mu_test("parses yyyy/mm/weekday", test_parse_date_yyyymm_weekday);
   -1   386 	mu_test("parses easter", test_parse_date_easter);
   -1   387 	mu_test("parses easter+n", test_parse_date_easter_with_offset);
   -1   388 
   -1   389 	mu_unit("is_match()");
   -1   390 	mu_test("matches dd", test_is_match_dd);
   -1   391 	mu_test("matches mm/dd", test_is_match_mmdd);
   -1   392 	mu_test("matches yyyy/mm/dd", test_is_match_yyyymmdd);
   -1   393 	mu_test("matches yyyy/mm/dd+n", test_is_match_yyyymmdd_repeat);
   -1   394 	mu_test("matches wekday", test_is_match_weekday);
   -1   395 	mu_test("matches weekdat+n", test_is_match_weekday_with_nth_of_month);
   -1   396 	mu_test("matches mm/weekday", test_is_match_mm_weekday);
   -1   397 	mu_test("matches yyyy/mm/weekday", test_is_match_yyyymm_weekday);
   -1   398 	mu_test("matches easter", test_is_match_easter);
   -1   399 	mu_test("matches easter+n", test_is_match_easter_with_offset);
   -1   400 	mu_test("matches paskha", test_is_match_paskha);
   -1   401 	mu_test("matches paskha+n", test_is_match_paskha_with_offset);
  397   402 
  398   403 	printf("Tests run: %d\n", tests_run);
  399   404 	if (tests_failed) {