aboutsummaryrefslogtreecommitdiff
path: root/src/test.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/test.c')
-rw-r--r--src/test.c36
1 files changed, 35 insertions, 1 deletions
diff --git a/src/test.c b/src/test.c
index 5602853..31b7c6e 100644
--- a/src/test.c
+++ b/src/test.c
@@ -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;
}