/****************************************************************** * Program: writetest.c * * This program writes another program called timetest.c * * It's a little hard to read, so bear with me. I've * * added comments between the code being written by the * * program and the code of the program itself, so * * hopefully that helps a bit. * * * * Author: Benjamin Bartlett, Drawer 425, x2021, * * bartlbe@earlham.edu * *******************************************************************/ #include #include int main() { FILE *fp = fopen("timetest.c", "w"); FILE *infile = fopen("tests.txt", "r"); int i = 1; int nloops; char s[128], num[128]; s[0] = '\0'; fprintf(fp, " /* Program being written */ #include #include #include #include #include \"useinfo.h\" #define MAXLOOPS 1000000 int sum1(int i2) { return i2; } int sum2(int i2, int i3) { return i2 + i3; } int sum3(int i2, int i3, int i4) { return i2 + i3 + i4; } int main() { int i; int i1 = 1, i2 = 2, i3 = 3, i4 = 4; float f1 = 1.1, f2 = 2.2, f3 = 3.3; double d1 = 1.11, d2 = 2.22, d3 = 3.33; int v[MAXLOOPS]; double utime, stime, wtime, atime; struct rusage *info1, *info2; char s[228] = \"Hello world\\n\"; FILE *fp = fopen(\"t.t\", \"wr\");\n"); /* This program */ while(1) { fgets(s, sizeof(s), infile); if(strcmp(s, "exit\n") == 0) break; fgets(num, sizeof(num), infile); nloops = atoi(num); fprintf(fp, "\n /* Program being written */ get_usage_info(&info1); for(i = 0; i < %d; i++); get_usage_info(&info2); utime = user_time_info(info1, info2); stime = system_time_info(info1, info2); atime = (double) (utime + stime); free(info1); free(info2); rewind(fp); get_usage_info(&info1); for(i = 0; i < %d; i++) { %s } get_usage_info(&info2); utime = user_time_info(info1, info2); stime = system_time_info(info1, info2); wtime = (double) (utime + stime - atime)/%d; printf(\"%d: %%f\\n\", wtime); free(info1); free(info2);\n", nloops, nloops, s, nloops, i); i++; } /* This program */ fprintf(fp, "\n exit(0);\n"); fprintf(fp, "}\n"); fclose(fp); exit(0); }