diff options
Diffstat (limited to 'src/test.c')
| -rw-r--r-- | src/test.c | 36 |
1 files changed, 35 insertions, 1 deletions
@@ -97,13 +97,46 @@ int benchmark_parser(const char* filename, double time_limit_seconds) { double elapsed_time; int iterations = 0; double avg_time_ns; + FILE* file; + long size; + char* buffer; + /* Load file once before benchmarking */ + file = fopen(filename, "r"); + if (!file) { + printf("Error: Failed to open file %s\n", filename); + return 1; + } + + fseek(file, 0, SEEK_END); + size = ftell(file); + fseek(file, 0, SEEK_SET); + + if (size < 0 || size > 10 * 1024 * 1024) { + fclose(file); + printf("Error: Invalid file size\n"); + return 1; + } + + buffer = (char*)malloc(size + 1); + if (!buffer) { + fclose(file); + printf("Error: Failed to allocate buffer\n"); + return 1; + } + + fread(buffer, 1, size, file); + buffer[size] = '\0'; + fclose(file); + + /* Now benchmark only the parse_string function */ start = clock(); while (1) { - wmap_map_t* map = wmap_parse_file(filename); + wmap_map_t* map = wmap_parse_string(buffer); if (!map) { printf("Error: Failed to parse file on iteration %d\n", iterations); + free(buffer); return 1; } wmap_map_free(map); @@ -124,6 +157,7 @@ int benchmark_parser(const char* filename, double time_limit_seconds) { printf(" Avg time: %.2f ns/iter\n", avg_time_ns); printf(" Ops/sec: %.2f\n", iterations / elapsed_time); + free(buffer); return 0; } |