int main(int argc, char *argv[]) { i64 i,n; CSA csa; mytimestruct before,after; double t; if (argc<2) { fprintf(stderr, "syntax: suftest file\n"); return 1; } csa_read(&csa,argc,argv); n = csa.n; mygettime(&before); { int m; FILE *out; out = fopen("output.dec","w"); i = 0; while (i < n) { if ((i/PAGE) % PAGE == 0) { fprintf(stderr,"%ld \r",i/PAGE); fflush(stderr); } m = PAGE; if (i+m >= n) m = n-i; csa.text(buf,&csa,i,i+m-1); fwrite(buf,1,m,out); i += m; } fwrite(buf,1,0,out); fclose(out); } mygettime(&after); t = mylaptime(&before,&after); fprintf(stderr,"time %f sec\n",t); return 0; }
void test_approxsearch(CSA *SA) { long i,n_pos; int keylen; double t, t1, t2; unsigned char key[4096]; char *buf,*c_ptr; mytimestruct before,after; approx_list *list, *list0; int max_error; while (!feof(stdin)) { #if 1 printf("\ninput error len pos "); fflush(stdout); scanf(" %d %d %ld",&max_error, &keylen, &i); // i = rand() % (SA->n-keylen-1) + 1; SA->substring(key, SA, i, keylen); // i = 200000; printf("error = %d len = %d pos = %ld\n", max_error, keylen, i); SA->text(key,SA,i,i+keylen-1); key[keylen] = 0; printf("key %s\n",key); #endif #if 0 printf("\ninput key error "); fflush(stdout); scanf(" %s %d",key, &max_error); keylen = strlen(key); for (i=0; i<keylen; i++) key[i] = tolower(key[i]); printf("key %s\n",key); #endif #if 1 mygettime(&before); list = csa_approxsearch(key, keylen, max_error, SA); mygettime(&after); t1 = mylaptime(&before,&after); printf("search1 %f sec\n",t1); approx_list_print(SA, list, key, keylen); #endif #if 1 mygettime(&before); list0 = csa_approxsearch2(key, keylen, max_error, SA); mygettime(&after); t2 = mylaptime(&before,&after); // approx_list_print(SA, list0, key, keylen); printf("search2 %f sec\n",t2); #endif #if 0 if (list0->num != list->num) { printf("list0 %d list %d\n", list0->num, list->num); } for (i=0; i<list0->num && i<list->num; i++) { approx_set *p0, *p; p0 = &list0->p[i]; p = & list->p[i]; if (p0->error != p->error || p0->len != p->len || p0->l != p->l || p0->r != p->r) { printf("list0 error = %d len = %d [%ld,%ld]\n", p0->error, p0->len, p0->l, p0->r); approx_set_print(SA, p0, key, keylen); printf("list error = %d len = %d [%ld,%ld]\n", p->error, p->len, p->l, p->r); approx_set_print(SA, p, key, keylen); } } if (list0->num > list->num) { approx_set *p0; for (i=list->num; i<list0->num; i++) { p0 = &list0->p[i]; printf("list0[%d] error = %d len = %d [%ld,%ld]\n", i, p0->error, p0->len, p0->l, p0->r); approx_set_print(SA, &list0->p[i], key, keylen); } } if (list0->num < list->num) { approx_set *p; for (i=list0->num; i<list->num; i++) { p = &list->p[i]; printf("list[%d] error = %d len = %d [%ld,%ld]\n", i, p->error, p->len, p->l, p->r); approx_set_print(SA, &list->p[i], key, keylen); } } #endif // printf("search results\n"); // approx_list_print(SA, list, key, keylen); // approx_list_free(list); //break; } }