diff options
author | Rainer Gerhards <rgerhards@adiscon.com> | 2011-03-04 09:19:08 +0100 |
---|---|---|
committer | Rainer Gerhards <rgerhards@adiscon.com> | 2011-03-04 09:19:08 +0100 |
commit | b8610a107ee4fd9e4b1ba06e7bd43dd6cbd72ea7 (patch) | |
tree | 2c62df4eb1996e93b2d967f0a95d0b8acc862bd1 | |
parent | 3018b443e7aee3de5485fa00e01951d2a05f2774 (diff) | |
download | rsyslog-b8610a107ee4fd9e4b1ba06e7bd43dd6cbd72ea7.tar.gz rsyslog-b8610a107ee4fd9e4b1ba06e7bd43dd6cbd72ea7.tar.xz rsyslog-b8610a107ee4fd9e4b1ba06e7bd43dd6cbd72ea7.zip |
added first experimental skeleton of what is to become a testconfig generator
currently it generates only the power set, more work to do to make it
a real config generator.
-rw-r--r-- | tests/testconfgen.c | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/tests/testconfgen.c b/tests/testconfgen.c new file mode 100644 index 00000000..9f191cc7 --- /dev/null +++ b/tests/testconfgen.c @@ -0,0 +1,72 @@ +/* a testcase generator + * THis program reads stdin, which must consist of (name,stmt) tupels + * where name is a part of the config name (small!) and stmt is an actual + * config statement. These tupels must be encoded as + * name<SP>stmt<LF> + * on stdin. After all tupels are read, the power set of all possible + * configurations is generated. + * Copyright (C) 2011 by Rainer Gerhards and Adiscon GmbH + * Released under the GPLv3 as part of the rsyslog project. + */ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +static int arr[128]; +static char *name[128]; +static char *stmt[128]; + +void output(int n) +{ + int i; + + printf("name:"); + for(i = 0 ; i < n ; ++i) { + if(arr[i]) { + printf("-%s", name[i]); + } + } + printf("\n"); +} + +void pows(int n, int i) +{ + if(i == 0) { + output(n); + } else { + --i; + arr[i] = 0; + pows(n, i); + arr[i] = 1; + pows(n, i); + } +} + + +int main(int argc, char *argv[]) +{ + int n; + char iname[512]; + char istmt[2048]; + int nscanned; + + n = 0; + while(!feof(stdin)) { + nscanned = scanf("%s %[^\n]s\n", iname, istmt); + if(nscanned == EOF) + break; + else if(nscanned != 2) { + fprintf(stderr, "problem scanning entry %d, scanned %d\n", + n, nscanned); + exit(1); + } + name[n] = strdup(iname); + stmt[n] = strdup(istmt); + n++; + printf("name: %s, stmt: %s\n", iname, istmt); + } + /* n is on to high for an index, but just right as the actual number! */ + + printf("read %d entries\n", n); + pows(n, n); +} |