]> mj.ucw.cz Git - eval.git/blob - judge/test-tok.c
Added unit tests for io and tokenizer modules.
[eval.git] / judge / test-tok.c
1 #include <stdio.h>
2 #include <string.h>
3 #include <getopt.h>
4
5 #include "judge.h"
6
7 int main(int argc, char **argv)
8 {
9   struct stream *i = sopen_fd("stdin", 0);
10
11   struct tokenizer t;
12   tok_init(&t, i);
13
14   int opt, verbose = 0;
15   while ((opt = getopt(argc, argv, "lsv")) >= 0)
16     switch (opt)
17       {
18       case 'l':
19         t.flags = TF_REPORT_LINES;
20         break;
21       case 's':
22         t.maxsize = 16;
23         break;
24       case 'v':
25         verbose++;
26         break;
27       default:
28         return 42;
29       }
30
31   char *tok;
32   while (tok = get_token(&t))
33     {
34       printf("<%s>", tok);
35 #define T(f, type, fmt) { type x; if (to_##f(&t, &x)) printf(" = " #f " " fmt, x); }
36       if (verbose)
37         {
38           T(int, int, "%d");
39           T(uint, unsigned int, "%u");
40           T(long, long int, "%ld");
41           T(ulong, unsigned long int, "%lu");
42           T(double, double, "%f");
43           T(long_double, long double, "%Lf");
44         }
45 #undef T
46       putchar('\n');
47     }
48   tok_cleanup(&t);
49
50   sclose(i);
51   return 0;
52 }