[7640ff5] | 1 | // Graph searching algorithm testing script
|
---|
| 2 |
|
---|
| 3 | import graph;
|
---|
| 4 |
|
---|
| 5 | import stdio;
|
---|
| 6 | import stdlib;
|
---|
| 7 | import unistd;
|
---|
| 8 |
|
---|
| 9 | void print_usage() {
|
---|
| 10 | printf("Usage: program_name [-n num_iter] [-s seed] [-N num_nodes] [-E num_edges] [-c num_checks] [-h]\n");
|
---|
| 11 | printf("Options:\n");
|
---|
| 12 | printf(" -n num_iter Number of graphs to run on\n");
|
---|
| 13 | printf(" -s seed Seed for random number generator\n");
|
---|
| 14 | printf(" -N num_nodes Number of nodes in generated graph\n");
|
---|
| 15 | printf(" -E num_edges Number of edges in generated graph\n");
|
---|
| 16 | printf(" -c num_checks Number of times to check graph for paths\n");
|
---|
| 17 | printf(" -h Display this help message\n");
|
---|
| 18 | }
|
---|
| 19 |
|
---|
| 20 | struct Arg {
|
---|
| 21 | int num_iter, seed, num_nodes, num_edges, num_checks;
|
---|
| 22 | };
|
---|
| 23 |
|
---|
| 24 | struct Arg process_args(int argc, char *argv[]) {
|
---|
| 25 | int opt;
|
---|
| 26 | struct Arg args;
|
---|
| 27 | args.num_iter = 10;
|
---|
| 28 | args.seed = 0;
|
---|
| 29 | args.num_nodes = 100;
|
---|
| 30 | args.num_edges = 100;
|
---|
| 31 | args.num_checks = 10;
|
---|
| 32 |
|
---|
| 33 | // Parse command line options
|
---|
| 34 | while ((opt = getopt(argc, argv, "n:s:N:E:c:h")) != -1) {
|
---|
| 35 | switch (opt) {
|
---|
| 36 | case 'n':
|
---|
| 37 | args.num_iter = atoi(optarg);
|
---|
| 38 | break;
|
---|
| 39 | case 's':
|
---|
| 40 | args.seed = atoi(optarg);
|
---|
| 41 | break;
|
---|
| 42 | case 'N':
|
---|
| 43 | args.num_nodes = atoi(optarg);
|
---|
| 44 | break;
|
---|
| 45 | case 'E':
|
---|
| 46 | args.num_edges = atoi(optarg);
|
---|
| 47 | break;
|
---|
| 48 | case 'c':
|
---|
| 49 | args.num_checks = atoi(optarg);
|
---|
| 50 | break;
|
---|
| 51 | case 'h':
|
---|
| 52 | print_usage(); // Print usage information
|
---|
| 53 | exit(0);
|
---|
| 54 | case '?':
|
---|
| 55 | // Handle unknown options
|
---|
| 56 | fprintf(stderr, "Unknown option: -%c\n", optopt);
|
---|
| 57 | print_usage();
|
---|
| 58 | exit(1);
|
---|
| 59 | default:
|
---|
| 60 | print_usage();
|
---|
| 61 | exit(1);
|
---|
| 62 | }
|
---|
| 63 | }
|
---|
| 64 | return args;
|
---|
| 65 | }
|
---|
| 66 |
|
---|
| 67 | int main(int argc, char *argv[]) {
|
---|
| 68 | struct Arg args = process_args(argc, argv);
|
---|
| 69 | int total_paths = 0;
|
---|
| 70 | srand(args.seed);
|
---|
| 71 | for (int i=0; i<args.num_iter; ++i) {
|
---|
| 72 | struct Graph g = create_rand_graph(args.num_nodes, args.num_edges);
|
---|
| 73 | int paths_found = 0;
|
---|
| 74 | for (int j=0; j<args.num_checks; ++j) {
|
---|
| 75 | struct Node *n1 = grab_random_node(&g);
|
---|
| 76 | struct Node *n2 = grab_random_node(&g);
|
---|
| 77 | paths_found += path_found(n1, n2); // it's technically returning a bool
|
---|
| 78 | }
|
---|
| 79 | destroy_graph(&g);
|
---|
| 80 | printf("Graph %d: %d paths found over %d checks.\n", i, paths_found, args.num_checks);
|
---|
| 81 | }
|
---|
| 82 | printf("Summary: %d graphs * %d checks = %d total checks performed, %d paths found.\n", args.num_iter, args.num_checks, args.num_iter * args.num_checks, total_paths);
|
---|
| 83 | }
|
---|