/* 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 * namestmt * 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 #include #include 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); }