|
nsz |
0b76d7 |
#include <stdio.h>
|
|
nsz |
0b76d7 |
#include <stdlib.h>
|
|
nsz |
0b76d7 |
#include <string.h>
|
|
nsz |
0b76d7 |
#include "test.h"
|
|
nsz |
0b76d7 |
|
|
nsz |
0b76d7 |
#define LEN 200000
|
|
nsz |
0b76d7 |
|
|
nsz |
0b76d7 |
static int bstrstr(int N, const char *needle) {
|
|
nsz |
0b76d7 |
size_t l = strlen(needle);
|
|
nsz |
0b76d7 |
size_t cnt = 10000;
|
|
nsz |
0b76d7 |
int i;
|
|
nsz |
0b76d7 |
int cs = 0;
|
|
nsz |
0b76d7 |
char *haystack = malloc(l * cnt + 1);
|
|
nsz |
0b76d7 |
|
|
nsz |
0b76d7 |
for (i=0; i
|
|
nsz |
0b76d7 |
memcpy(haystack + l*i, needle, l);
|
|
nsz |
0b76d7 |
haystack[l*i+l-1] ^= 1;
|
|
nsz |
0b76d7 |
}
|
|
nsz |
0b76d7 |
memcpy(haystack + l*i, needle, l+1);
|
|
nsz |
08c133 |
reset_timer();
|
|
nsz |
0b76d7 |
for (i=0; i
|
|
nsz |
0b76d7 |
haystack[0]^=1;
|
|
nsz |
0b76d7 |
cs += (int)strstr(haystack, needle);
|
|
nsz |
0b76d7 |
}
|
|
nsz |
0b76d7 |
free(haystack);
|
|
nsz |
0b76d7 |
return cs;
|
|
nsz |
0b76d7 |
}
|
|
nsz |
0b76d7 |
|
|
nsz |
0b76d7 |
void bench_string_strstr1(int N) {
|
|
nsz |
0b76d7 |
bstrstr(N, "abcdefghijklmnopqrstuvwxyz");
|
|
nsz |
0b76d7 |
}
|
|
nsz |
0b76d7 |
void bench_string_strstr2(int N) {
|
|
nsz |
0b76d7 |
bstrstr(N, "azbycxdwevfugthsirjqkplomn");
|
|
nsz |
0b76d7 |
}
|
|
nsz |
0b76d7 |
void bench_string_strstr3(int N) {
|
|
nsz |
0b76d7 |
bstrstr(N, "aaaaaaaaaaaaaacccccccccccc");
|
|
nsz |
0b76d7 |
}
|
|
nsz |
0b76d7 |
void bench_string_strstr4(int N) {
|
|
nsz |
0b76d7 |
bstrstr(N, "aaaaaaaaaaaaaaaaaaaaaaaaac");
|
|
nsz |
0b76d7 |
}
|
|
nsz |
0b76d7 |
void bench_string_strstr5(int N) {
|
|
nsz |
0b76d7 |
bstrstr(N, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac");
|
|
nsz |
0b76d7 |
}
|
|
nsz |
0b76d7 |
|
|
nsz |
0b76d7 |
void bench_string_memset(int N) {
|
|
nsz |
0b76d7 |
char *buf = malloc(LEN);
|
|
nsz |
0b76d7 |
int i;
|
|
nsz |
0b76d7 |
|
|
nsz |
0b76d7 |
for (i=0; i
|
|
nsz |
0b76d7 |
memset(buf+i, i, LEN-i);
|
|
nsz |
0b76d7 |
free(buf);
|
|
nsz |
0b76d7 |
}
|
|
nsz |
0b76d7 |
|
|
nsz |
0b76d7 |
void bench_string_strchr(int N) {
|
|
nsz |
0b76d7 |
char *buf = malloc(LEN);
|
|
nsz |
0b76d7 |
int i;
|
|
nsz |
0b76d7 |
int cs = 0;
|
|
nsz |
0b76d7 |
|
|
nsz |
0b76d7 |
memset(buf, 'a', LEN);
|
|
nsz |
0b76d7 |
buf[LEN-1] = 0;
|
|
nsz |
0b76d7 |
buf[LEN-2] = 'b';
|
|
nsz |
0b76d7 |
reset_timer();
|
|
nsz |
0b76d7 |
for (i=0; i
|
|
nsz |
0b76d7 |
buf[i] = '0'+i%8;
|
|
nsz |
0b76d7 |
cs ^= (int)strchr(buf, 'b');
|
|
nsz |
0b76d7 |
}
|
|
nsz |
0b76d7 |
buf[0] = cs;
|
|
nsz |
0b76d7 |
free(buf);
|
|
nsz |
0b76d7 |
}
|
|
nsz |
0b76d7 |
|
|
nsz |
0b76d7 |
void bench_string_strlen(int N) {
|
|
nsz |
0b76d7 |
char *buf = malloc(LEN);
|
|
nsz |
0b76d7 |
int i;
|
|
nsz |
0b76d7 |
int cs = 0;
|
|
nsz |
0b76d7 |
|
|
nsz |
0b76d7 |
memset(buf, 'a', LEN-1);
|
|
nsz |
0b76d7 |
buf[LEN-1] = 0;
|
|
nsz |
0b76d7 |
reset_timer();
|
|
nsz |
0b76d7 |
for (i=0; i
|
|
nsz |
0b76d7 |
buf[i] = '0'+i%8;
|
|
nsz |
0b76d7 |
cs ^= strlen(buf);
|
|
nsz |
0b76d7 |
}
|
|
nsz |
0b76d7 |
buf[0] = cs;
|
|
nsz |
0b76d7 |
free(buf);
|
|
nsz |
0b76d7 |
}
|