58 #ifdef BUILD_HYPERSCAN
71 if ((
ConfGet(
"spm-algo", &spm_algo)) == 1) {
72 if (spm_algo != NULL) {
73 if (strcmp(
"auto", spm_algo) == 0) {
80 if (strcmp(
spm_table[i].name, spm_algo) == 0) {
86 #ifndef BUILD_HYPERSCAN
87 if ((spm_algo != NULL) && (strcmp(spm_algo,
"hs") == 0)) {
89 "not compiled into Suricata.");
93 "Invalid spm algo supplied "
94 "in the yaml conf file: \"%s\"",
102 #ifdef BUILD_HYPERSCAN
103 #ifdef HAVE_HS_VALID_PLATFORM
106 if (hs_valid_platform() != HS_SUCCESS) {
107 SCLogInfo(
"SSSE3 support not detected, disabling Hyperscan for "
128 #ifdef BUILD_HYPERSCAN
129 #ifdef HAVE_HS_VALID_PLATFORM
130 if (hs_valid_platform() == HS_SUCCESS) {
147 if (global_thread_ctx == NULL) {
150 uint16_t matcher = global_thread_ctx->
matcher;
156 if (global_thread_ctx == NULL) {
159 uint16_t matcher = global_thread_ctx->
matcher;
166 if (thread_ctx == NULL) {
169 uint16_t matcher = thread_ctx->
matcher;
177 BUG_ON(global_thread_ctx == NULL);
178 uint16_t matcher = global_thread_ctx->
matcher;
189 uint16_t matcher = ctx->
matcher;
195 const uint8_t *haystack, uint32_t haystack_len)
197 uint16_t matcher = ctx->
matcher;
198 return spm_table[matcher].
Scan(ctx, thread_ctx, haystack, haystack_len);
216 const uint8_t *needle, uint16_t needlelen)
221 return Bs2Bm(text, textlen, needle, needlelen, badchars);
233 const uint8_t *needle, uint16_t needlelen)
238 return Bs2BmNocase(text, textlen, needle, needlelen, badchars);
251 const uint8_t *needle, uint16_t needlelen)
255 uint8_t *ret =
BoyerMoore(needle, needlelen, text, textlen, bm_ctx);
271 uint8_t *needle, uint16_t needlelen)
289 #define STATS_TIMES 1000000
298 static uint8_t *BasicSearchWrapper(uint8_t *text, uint8_t *needle,
int times)
300 uint32_t textlen = strlen((
char *)text);
301 uint16_t needlelen = (uint16_t)strlen((
char *)needle);
310 for (i = 0; i < times; i++) {
311 ret =
BasicSearch(text, textlen, needle, needlelen);
318 static uint8_t *BasicSearchNocaseWrapper(uint8_t *text, uint8_t *needle,
int times)
320 uint32_t textlen = strlen((
char *)text);
321 uint16_t needlelen = (uint16_t)strlen((
char *)needle);
328 for (i = 0; i < times; i++) {
335 static uint8_t *Bs2bmWrapper(uint8_t *text, uint8_t *needle,
int times)
337 uint32_t textlen = strlen((
char *)text);
338 uint16_t needlelen = (uint16_t)strlen((
char *)needle);
348 for (i = 0; i < times; i++) {
349 ret =
Bs2Bm(text, textlen, needle, needlelen, badchars);
355 static uint8_t *Bs2bmNocaseWrapper(uint8_t *text, uint8_t *needle,
int times)
357 uint32_t textlen = strlen((
char *)text);
358 uint16_t needlelen = (uint16_t)strlen((
char *)needle);
368 for (i = 0; i < times; i++) {
369 ret =
Bs2BmNocase(text, textlen, needle, needlelen, badchars);
375 static uint8_t *BoyerMooreWrapper(uint8_t *text, uint8_t *needle,
int times)
377 uint32_t textlen = strlen((
char *)text);
378 uint16_t needlelen = (uint16_t)strlen((
char *)needle);
387 for (i = 0; i < times; i++) {
388 ret =
BoyerMoore(needle, needlelen, text, textlen, bm_ctx);
395 static uint8_t *BoyerMooreNocaseWrapper(uint8_t *text, uint8_t *in_needle,
int times)
397 uint32_t textlen = strlen((
char *)text);
398 uint16_t needlelen = (uint16_t)strlen((
char *)in_needle);
401 uint8_t *needle =
SCMalloc(needlelen);
404 memcpy(needle, in_needle, needlelen);
413 for (i = 0; i < times; i++) {
423 #ifdef ENABLE_SEARCH_STATS
431 static uint8_t *BasicSearchCtxWrapper(uint8_t *text, uint8_t *needle,
int times)
433 uint32_t textlen = strlen((
char *)text);
434 uint16_t needlelen = strlen((
char *)needle);
441 for (i = 0; i < times; i++) {
443 ret =
BasicSearch(text, textlen, needle, needlelen);
449 static uint8_t *BasicSearchNocaseCtxWrapper(uint8_t *text, uint8_t *needle,
int times)
451 uint32_t textlen = strlen((
char *)text);
452 uint16_t needlelen = strlen((
char *)needle);
459 for (i = 0; i < times; i++) {
467 static uint8_t *Bs2bmCtxWrapper(uint8_t *text, uint8_t *needle,
int times)
469 uint32_t textlen = strlen((
char *)text);
470 uint16_t needlelen = strlen((
char *)needle);
479 for (i = 0; i < times; i++) {
482 ret =
Bs2Bm(text, textlen, needle, needlelen, badchars);
488 static uint8_t *Bs2bmNocaseCtxWrapper(uint8_t *text, uint8_t *needle,
int times)
490 uint32_t textlen = strlen((
char *)text);
491 uint16_t needlelen = strlen((
char *)needle);
500 for (i = 0; i < times; i++) {
503 ret =
Bs2BmNocase(text, textlen, needle, needlelen, badchars);
509 static uint8_t *BoyerMooreCtxWrapper(uint8_t *text, uint8_t *needle,
int times)
511 uint32_t textlen = strlen((
char *)text);
512 uint16_t needlelen = strlen((
char *)needle);
521 for (i = 0; i < times; i++) {
523 ret =
BoyerMoore(needle, needlelen, text, textlen, bm_ctx);
531 static uint8_t *RawCtxWrapper(uint8_t *text, uint8_t *needle,
int times)
533 uint32_t textlen = strlen((
char *)text);
534 uint16_t needlelen = strlen((
char *)needle);
541 for (i = 0; i < times; i++) {
542 ret =
SpmSearch(text, textlen, needle, needlelen);
548 static uint8_t *BoyerMooreNocaseCtxWrapper(uint8_t *text, uint8_t *in_needle,
int times)
550 uint32_t textlen = strlen((
char *)text);
551 uint16_t needlelen = strlen((
char *)in_needle);
554 uint8_t *needle =
SCMalloc(needlelen);
557 memcpy(needle, in_needle, needlelen);
566 for (i = 0; i < times; i++) {
580 static int UtilSpmBasicSearchTest01(
void)
582 uint8_t *needle = (uint8_t *)
"oPqRsT";
583 uint8_t *text = (uint8_t *)
"aBcDeFgHiJkLmNoPqRsTuVwXyZ";
584 uint8_t *found = BasicSearchWrapper(text, needle, 1);
595 static int UtilSpmBasicSearchNocaseTest01(
void)
597 uint8_t *needle = (uint8_t *)
"OpQrSt";
598 uint8_t *text = (uint8_t *)
"aBcDeFgHiJkLmNoPqRsTuVwXyZ";
599 uint8_t *found = BasicSearchNocaseWrapper(text, needle, 1);
610 static int UtilSpmBs2bmSearchTest01(
void)
612 uint8_t *needle = (uint8_t *)
"oPqRsT";
613 uint8_t *text = (uint8_t *)
"aBcDeFgHiJkLmNoPqRsTuVwXyZ";
614 uint8_t *found = Bs2bmWrapper(text, needle, 1);
625 static int UtilSpmBs2bmSearchNocaseTest01(
void)
627 uint8_t *needle = (uint8_t *)
"OpQrSt";
628 uint8_t *text = (uint8_t *)
"aBcDeFgHiJkLmNoPqRsTuVwXyZ";
629 uint8_t *found = Bs2bmNocaseWrapper(text, needle, 1);
640 static int UtilSpmBoyerMooreSearchTest01(
void)
642 uint8_t *needle = (uint8_t *)
"oPqRsT";
643 uint8_t *text = (uint8_t *)
"aBcDeFgHiJkLmNoPqRsTuVwXyZ";
644 uint8_t *found = BoyerMooreWrapper(text, needle, 1);
655 static int UtilSpmBoyerMooreSearchNocaseTest01(
void)
657 uint8_t *needle = (uint8_t *)
"OpQrSt";
658 uint8_t *text = (uint8_t *)
"aBcDeFgHiJkLmNoPqRsTuVwXyZ";
659 uint8_t *found = BoyerMooreNocaseWrapper(text, needle, 1);
671 static int UtilSpmBoyerMooreSearchNocaseTestIssue130(
void)
673 uint8_t *needle = (uint8_t *)
"WWW-Authenticate: ";
674 uint8_t *text = (uint8_t *)
"Date: Mon, 23 Feb 2009 13:31:49 GMT"
676 "Www-authenticate: Basic realm=\"Authentification user password\"\r\n"
677 "Vary: accept-language,accept-charset\r\n"
678 "Accept-ranges: bytes\r\n"
679 "Connection: close\r\n"
680 "Content-type: text/html; charset=iso-8859-1\r\n"
681 "Content-language: fr\r\n"
682 "Expires: Mon, 23 Feb 2009 13:31:49 GMT\r\n\r\n";
683 uint8_t *found = BoyerMooreNocaseWrapper(text, needle, 1);
692 static int UtilSpmBasicSearchTest02(
void)
694 uint8_t *needle = (uint8_t *)
"oPQRsT";
695 uint8_t *text = (uint8_t *)
"aBcDeFgHiJkLmNoPqRsTuVwXyZ";
696 uint8_t *found = BasicSearchWrapper(text, needle, 1);
704 static int UtilSpmBasicSearchNocaseTest02(
void)
706 uint8_t *needle = (uint8_t *)
"OpZrSt";
707 uint8_t *text = (uint8_t *)
"aBcDeFgHiJkLmNoPqRsTuVwXyZ";
708 uint8_t *found = BasicSearchNocaseWrapper(text, needle, 1);
716 static int UtilSpmBs2bmSearchTest02(
void)
718 uint8_t *needle = (uint8_t *)
"oPQRsT";
719 uint8_t *text = (uint8_t *)
"aBcDeFgHiJkLmNoPqRsTuVwXyZ";
720 uint8_t *found = Bs2bmWrapper(text, needle, 1);
728 static int UtilSpmBs2bmSearchNocaseTest02(
void)
730 uint8_t *needle = (uint8_t *)
"OpZrSt";
731 uint8_t *text = (uint8_t *)
"aBcDeFgHiJkLmNoPqRsTuVwXyZ";
732 uint8_t *found = Bs2bmNocaseWrapper(text, needle, 1);
740 static int UtilSpmBoyerMooreSearchTest02(
void)
742 uint8_t *needle = (uint8_t *)
"oPQRsT";
743 uint8_t *text = (uint8_t *)
"aBcDeFgHiJkLmNoPqRsTuVwXyZ";
744 uint8_t *found = BoyerMooreWrapper(text, needle, 1);
752 static int UtilSpmBoyerMooreSearchNocaseTest02(
void)
754 uint8_t *needle = (uint8_t *)
"OpZrSt";
755 uint8_t *text = (uint8_t *)
"aBcDeFgHiJkLmNoPqRsTuVwXyZ";
756 uint8_t *found = BoyerMooreNocaseWrapper(text, needle, 1);
767 static int UtilSpmSearchOffsetsTest01(
void)
769 const char *text[26][27];
770 text[0][0]=
"azzzzzzzzzzzzzzzzzzzzzzzzzz";
771 text[0][1]=
"zazzzzzzzzzzzzzzzzzzzzzzzzz";
772 text[0][2]=
"zzazzzzzzzzzzzzzzzzzzzzzzzz";
773 text[0][3]=
"zzzazzzzzzzzzzzzzzzzzzzzzzz";
774 text[0][4]=
"zzzzazzzzzzzzzzzzzzzzzzzzzz";
775 text[0][5]=
"zzzzzazzzzzzzzzzzzzzzzzzzzz";
776 text[0][6]=
"zzzzzzazzzzzzzzzzzzzzzzzzzz";
777 text[0][7]=
"zzzzzzzazzzzzzzzzzzzzzzzzzz";
778 text[0][8]=
"zzzzzzzzazzzzzzzzzzzzzzzzzz";
779 text[0][9]=
"zzzzzzzzzazzzzzzzzzzzzzzzzz";
780 text[0][10]=
"zzzzzzzzzzazzzzzzzzzzzzzzzz";
781 text[0][11]=
"zzzzzzzzzzzazzzzzzzzzzzzzzz";
782 text[0][12]=
"zzzzzzzzzzzzazzzzzzzzzzzzzz";
783 text[0][13]=
"zzzzzzzzzzzzzazzzzzzzzzzzzz";
784 text[0][14]=
"zzzzzzzzzzzzzzazzzzzzzzzzzz";
785 text[0][15]=
"zzzzzzzzzzzzzzzazzzzzzzzzzz";
786 text[0][16]=
"zzzzzzzzzzzzzzzzazzzzzzzzzz";
787 text[0][17]=
"zzzzzzzzzzzzzzzzzazzzzzzzzz";
788 text[0][18]=
"zzzzzzzzzzzzzzzzzzazzzzzzzz";
789 text[0][19]=
"zzzzzzzzzzzzzzzzzzzazzzzzzz";
790 text[0][20]=
"zzzzzzzzzzzzzzzzzzzzazzzzzz";
791 text[0][21]=
"zzzzzzzzzzzzzzzzzzzzzazzzzz";
792 text[0][22]=
"zzzzzzzzzzzzzzzzzzzzzzazzzz";
793 text[0][23]=
"zzzzzzzzzzzzzzzzzzzzzzzazzz";
794 text[0][24]=
"zzzzzzzzzzzzzzzzzzzzzzzzazz";
795 text[0][25]=
"zzzzzzzzzzzzzzzzzzzzzzzzzaz";
796 text[0][26]=
"zzzzzzzzzzzzzzzzzzzzzzzzzza";
797 text[1][0]=
"aBzzzzzzzzzzzzzzzzzzzzzzzzz";
798 text[1][1]=
"zaBzzzzzzzzzzzzzzzzzzzzzzzz";
799 text[1][2]=
"zzaBzzzzzzzzzzzzzzzzzzzzzzz";
800 text[1][3]=
"zzzaBzzzzzzzzzzzzzzzzzzzzzz";
801 text[1][4]=
"zzzzaBzzzzzzzzzzzzzzzzzzzzz";
802 text[1][5]=
"zzzzzaBzzzzzzzzzzzzzzzzzzzz";
803 text[1][6]=
"zzzzzzaBzzzzzzzzzzzzzzzzzzz";
804 text[1][7]=
"zzzzzzzaBzzzzzzzzzzzzzzzzzz";
805 text[1][8]=
"zzzzzzzzaBzzzzzzzzzzzzzzzzz";
806 text[1][9]=
"zzzzzzzzzaBzzzzzzzzzzzzzzzz";
807 text[1][10]=
"zzzzzzzzzzaBzzzzzzzzzzzzzzz";
808 text[1][11]=
"zzzzzzzzzzzaBzzzzzzzzzzzzzz";
809 text[1][12]=
"zzzzzzzzzzzzaBzzzzzzzzzzzzz";
810 text[1][13]=
"zzzzzzzzzzzzzaBzzzzzzzzzzzz";
811 text[1][14]=
"zzzzzzzzzzzzzzaBzzzzzzzzzzz";
812 text[1][15]=
"zzzzzzzzzzzzzzzaBzzzzzzzzzz";
813 text[1][16]=
"zzzzzzzzzzzzzzzzaBzzzzzzzzz";
814 text[1][17]=
"zzzzzzzzzzzzzzzzzaBzzzzzzzz";
815 text[1][18]=
"zzzzzzzzzzzzzzzzzzaBzzzzzzz";
816 text[1][19]=
"zzzzzzzzzzzzzzzzzzzaBzzzzzz";
817 text[1][20]=
"zzzzzzzzzzzzzzzzzzzzaBzzzzz";
818 text[1][21]=
"zzzzzzzzzzzzzzzzzzzzzaBzzzz";
819 text[1][22]=
"zzzzzzzzzzzzzzzzzzzzzzaBzzz";
820 text[1][23]=
"zzzzzzzzzzzzzzzzzzzzzzzaBzz";
821 text[1][24]=
"zzzzzzzzzzzzzzzzzzzzzzzzaBz";
822 text[1][25]=
"zzzzzzzzzzzzzzzzzzzzzzzzzaB";
823 text[2][0]=
"aBczzzzzzzzzzzzzzzzzzzzzzzz";
824 text[2][1]=
"zaBczzzzzzzzzzzzzzzzzzzzzzz";
825 text[2][2]=
"zzaBczzzzzzzzzzzzzzzzzzzzzz";
826 text[2][3]=
"zzzaBczzzzzzzzzzzzzzzzzzzzz";
827 text[2][4]=
"zzzzaBczzzzzzzzzzzzzzzzzzzz";
828 text[2][5]=
"zzzzzaBczzzzzzzzzzzzzzzzzzz";
829 text[2][6]=
"zzzzzzaBczzzzzzzzzzzzzzzzzz";
830 text[2][7]=
"zzzzzzzaBczzzzzzzzzzzzzzzzz";
831 text[2][8]=
"zzzzzzzzaBczzzzzzzzzzzzzzzz";
832 text[2][9]=
"zzzzzzzzzaBczzzzzzzzzzzzzzz";
833 text[2][10]=
"zzzzzzzzzzaBczzzzzzzzzzzzzz";
834 text[2][11]=
"zzzzzzzzzzzaBczzzzzzzzzzzzz";
835 text[2][12]=
"zzzzzzzzzzzzaBczzzzzzzzzzzz";
836 text[2][13]=
"zzzzzzzzzzzzzaBczzzzzzzzzzz";
837 text[2][14]=
"zzzzzzzzzzzzzzaBczzzzzzzzzz";
838 text[2][15]=
"zzzzzzzzzzzzzzzaBczzzzzzzzz";
839 text[2][16]=
"zzzzzzzzzzzzzzzzaBczzzzzzzz";
840 text[2][17]=
"zzzzzzzzzzzzzzzzzaBczzzzzzz";
841 text[2][18]=
"zzzzzzzzzzzzzzzzzzaBczzzzzz";
842 text[2][19]=
"zzzzzzzzzzzzzzzzzzzaBczzzzz";
843 text[2][20]=
"zzzzzzzzzzzzzzzzzzzzaBczzzz";
844 text[2][21]=
"zzzzzzzzzzzzzzzzzzzzzaBczzz";
845 text[2][22]=
"zzzzzzzzzzzzzzzzzzzzzzaBczz";
846 text[2][23]=
"zzzzzzzzzzzzzzzzzzzzzzzaBcz";
847 text[2][24]=
"zzzzzzzzzzzzzzzzzzzzzzzzaBc";
848 text[3][0]=
"aBcDzzzzzzzzzzzzzzzzzzzzzzz";
849 text[3][1]=
"zaBcDzzzzzzzzzzzzzzzzzzzzzz";
850 text[3][2]=
"zzaBcDzzzzzzzzzzzzzzzzzzzzz";
851 text[3][3]=
"zzzaBcDzzzzzzzzzzzzzzzzzzzz";
852 text[3][4]=
"zzzzaBcDzzzzzzzzzzzzzzzzzzz";
853 text[3][5]=
"zzzzzaBcDzzzzzzzzzzzzzzzzzz";
854 text[3][6]=
"zzzzzzaBcDzzzzzzzzzzzzzzzzz";
855 text[3][7]=
"zzzzzzzaBcDzzzzzzzzzzzzzzzz";
856 text[3][8]=
"zzzzzzzzaBcDzzzzzzzzzzzzzzz";
857 text[3][9]=
"zzzzzzzzzaBcDzzzzzzzzzzzzzz";
858 text[3][10]=
"zzzzzzzzzzaBcDzzzzzzzzzzzzz";
859 text[3][11]=
"zzzzzzzzzzzaBcDzzzzzzzzzzzz";
860 text[3][12]=
"zzzzzzzzzzzzaBcDzzzzzzzzzzz";
861 text[3][13]=
"zzzzzzzzzzzzzaBcDzzzzzzzzzz";
862 text[3][14]=
"zzzzzzzzzzzzzzaBcDzzzzzzzzz";
863 text[3][15]=
"zzzzzzzzzzzzzzzaBcDzzzzzzzz";
864 text[3][16]=
"zzzzzzzzzzzzzzzzaBcDzzzzzzz";
865 text[3][17]=
"zzzzzzzzzzzzzzzzzaBcDzzzzzz";
866 text[3][18]=
"zzzzzzzzzzzzzzzzzzaBcDzzzzz";
867 text[3][19]=
"zzzzzzzzzzzzzzzzzzzaBcDzzzz";
868 text[3][20]=
"zzzzzzzzzzzzzzzzzzzzaBcDzzz";
869 text[3][21]=
"zzzzzzzzzzzzzzzzzzzzzaBcDzz";
870 text[3][22]=
"zzzzzzzzzzzzzzzzzzzzzzaBcDz";
871 text[3][23]=
"zzzzzzzzzzzzzzzzzzzzzzzaBcD";
872 text[4][0]=
"aBcDezzzzzzzzzzzzzzzzzzzzzz";
873 text[4][1]=
"zaBcDezzzzzzzzzzzzzzzzzzzzz";
874 text[4][2]=
"zzaBcDezzzzzzzzzzzzzzzzzzzz";
875 text[4][3]=
"zzzaBcDezzzzzzzzzzzzzzzzzzz";
876 text[4][4]=
"zzzzaBcDezzzzzzzzzzzzzzzzzz";
877 text[4][5]=
"zzzzzaBcDezzzzzzzzzzzzzzzzz";
878 text[4][6]=
"zzzzzzaBcDezzzzzzzzzzzzzzzz";
879 text[4][7]=
"zzzzzzzaBcDezzzzzzzzzzzzzzz";
880 text[4][8]=
"zzzzzzzzaBcDezzzzzzzzzzzzzz";
881 text[4][9]=
"zzzzzzzzzaBcDezzzzzzzzzzzzz";
882 text[4][10]=
"zzzzzzzzzzaBcDezzzzzzzzzzzz";
883 text[4][11]=
"zzzzzzzzzzzaBcDezzzzzzzzzzz";
884 text[4][12]=
"zzzzzzzzzzzzaBcDezzzzzzzzzz";
885 text[4][13]=
"zzzzzzzzzzzzzaBcDezzzzzzzzz";
886 text[4][14]=
"zzzzzzzzzzzzzzaBcDezzzzzzzz";
887 text[4][15]=
"zzzzzzzzzzzzzzzaBcDezzzzzzz";
888 text[4][16]=
"zzzzzzzzzzzzzzzzaBcDezzzzzz";
889 text[4][17]=
"zzzzzzzzzzzzzzzzzaBcDezzzzz";
890 text[4][18]=
"zzzzzzzzzzzzzzzzzzaBcDezzzz";
891 text[4][19]=
"zzzzzzzzzzzzzzzzzzzaBcDezzz";
892 text[4][20]=
"zzzzzzzzzzzzzzzzzzzzaBcDezz";
893 text[4][21]=
"zzzzzzzzzzzzzzzzzzzzzaBcDez";
894 text[4][22]=
"zzzzzzzzzzzzzzzzzzzzzzaBcDe";
895 text[5][0]=
"aBcDeFzzzzzzzzzzzzzzzzzzzzz";
896 text[5][1]=
"zaBcDeFzzzzzzzzzzzzzzzzzzzz";
897 text[5][2]=
"zzaBcDeFzzzzzzzzzzzzzzzzzzz";
898 text[5][3]=
"zzzaBcDeFzzzzzzzzzzzzzzzzzz";
899 text[5][4]=
"zzzzaBcDeFzzzzzzzzzzzzzzzzz";
900 text[5][5]=
"zzzzzaBcDeFzzzzzzzzzzzzzzzz";
901 text[5][6]=
"zzzzzzaBcDeFzzzzzzzzzzzzzzz";
902 text[5][7]=
"zzzzzzzaBcDeFzzzzzzzzzzzzzz";
903 text[5][8]=
"zzzzzzzzaBcDeFzzzzzzzzzzzzz";
904 text[5][9]=
"zzzzzzzzzaBcDeFzzzzzzzzzzzz";
905 text[5][10]=
"zzzzzzzzzzaBcDeFzzzzzzzzzzz";
906 text[5][11]=
"zzzzzzzzzzzaBcDeFzzzzzzzzzz";
907 text[5][12]=
"zzzzzzzzzzzzaBcDeFzzzzzzzzz";
908 text[5][13]=
"zzzzzzzzzzzzzaBcDeFzzzzzzzz";
909 text[5][14]=
"zzzzzzzzzzzzzzaBcDeFzzzzzzz";
910 text[5][15]=
"zzzzzzzzzzzzzzzaBcDeFzzzzzz";
911 text[5][16]=
"zzzzzzzzzzzzzzzzaBcDeFzzzzz";
912 text[5][17]=
"zzzzzzzzzzzzzzzzzaBcDeFzzzz";
913 text[5][18]=
"zzzzzzzzzzzzzzzzzzaBcDeFzzz";
914 text[5][19]=
"zzzzzzzzzzzzzzzzzzzaBcDeFzz";
915 text[5][20]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFz";
916 text[5][21]=
"zzzzzzzzzzzzzzzzzzzzzaBcDeF";
917 text[6][0]=
"aBcDeFgzzzzzzzzzzzzzzzzzzzz";
918 text[6][1]=
"zaBcDeFgzzzzzzzzzzzzzzzzzzz";
919 text[6][2]=
"zzaBcDeFgzzzzzzzzzzzzzzzzzz";
920 text[6][3]=
"zzzaBcDeFgzzzzzzzzzzzzzzzzz";
921 text[6][4]=
"zzzzaBcDeFgzzzzzzzzzzzzzzzz";
922 text[6][5]=
"zzzzzaBcDeFgzzzzzzzzzzzzzzz";
923 text[6][6]=
"zzzzzzaBcDeFgzzzzzzzzzzzzzz";
924 text[6][7]=
"zzzzzzzaBcDeFgzzzzzzzzzzzzz";
925 text[6][8]=
"zzzzzzzzaBcDeFgzzzzzzzzzzzz";
926 text[6][9]=
"zzzzzzzzzaBcDeFgzzzzzzzzzzz";
927 text[6][10]=
"zzzzzzzzzzaBcDeFgzzzzzzzzzz";
928 text[6][11]=
"zzzzzzzzzzzaBcDeFgzzzzzzzzz";
929 text[6][12]=
"zzzzzzzzzzzzaBcDeFgzzzzzzzz";
930 text[6][13]=
"zzzzzzzzzzzzzaBcDeFgzzzzzzz";
931 text[6][14]=
"zzzzzzzzzzzzzzaBcDeFgzzzzzz";
932 text[6][15]=
"zzzzzzzzzzzzzzzaBcDeFgzzzzz";
933 text[6][16]=
"zzzzzzzzzzzzzzzzaBcDeFgzzzz";
934 text[6][17]=
"zzzzzzzzzzzzzzzzzaBcDeFgzzz";
935 text[6][18]=
"zzzzzzzzzzzzzzzzzzaBcDeFgzz";
936 text[6][19]=
"zzzzzzzzzzzzzzzzzzzaBcDeFgz";
937 text[6][20]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFg";
938 text[7][0]=
"aBcDeFgHzzzzzzzzzzzzzzzzzzz";
939 text[7][1]=
"zaBcDeFgHzzzzzzzzzzzzzzzzzz";
940 text[7][2]=
"zzaBcDeFgHzzzzzzzzzzzzzzzzz";
941 text[7][3]=
"zzzaBcDeFgHzzzzzzzzzzzzzzzz";
942 text[7][4]=
"zzzzaBcDeFgHzzzzzzzzzzzzzzz";
943 text[7][5]=
"zzzzzaBcDeFgHzzzzzzzzzzzzzz";
944 text[7][6]=
"zzzzzzaBcDeFgHzzzzzzzzzzzzz";
945 text[7][7]=
"zzzzzzzaBcDeFgHzzzzzzzzzzzz";
946 text[7][8]=
"zzzzzzzzaBcDeFgHzzzzzzzzzzz";
947 text[7][9]=
"zzzzzzzzzaBcDeFgHzzzzzzzzzz";
948 text[7][10]=
"zzzzzzzzzzaBcDeFgHzzzzzzzzz";
949 text[7][11]=
"zzzzzzzzzzzaBcDeFgHzzzzzzzz";
950 text[7][12]=
"zzzzzzzzzzzzaBcDeFgHzzzzzzz";
951 text[7][13]=
"zzzzzzzzzzzzzaBcDeFgHzzzzzz";
952 text[7][14]=
"zzzzzzzzzzzzzzaBcDeFgHzzzzz";
953 text[7][15]=
"zzzzzzzzzzzzzzzaBcDeFgHzzzz";
954 text[7][16]=
"zzzzzzzzzzzzzzzzaBcDeFgHzzz";
955 text[7][17]=
"zzzzzzzzzzzzzzzzzaBcDeFgHzz";
956 text[7][18]=
"zzzzzzzzzzzzzzzzzzaBcDeFgHz";
957 text[7][19]=
"zzzzzzzzzzzzzzzzzzzaBcDeFgH";
958 text[8][0]=
"aBcDeFgHizzzzzzzzzzzzzzzzzz";
959 text[8][1]=
"zaBcDeFgHizzzzzzzzzzzzzzzzz";
960 text[8][2]=
"zzaBcDeFgHizzzzzzzzzzzzzzzz";
961 text[8][3]=
"zzzaBcDeFgHizzzzzzzzzzzzzzz";
962 text[8][4]=
"zzzzaBcDeFgHizzzzzzzzzzzzzz";
963 text[8][5]=
"zzzzzaBcDeFgHizzzzzzzzzzzzz";
964 text[8][6]=
"zzzzzzaBcDeFgHizzzzzzzzzzzz";
965 text[8][7]=
"zzzzzzzaBcDeFgHizzzzzzzzzzz";
966 text[8][8]=
"zzzzzzzzaBcDeFgHizzzzzzzzzz";
967 text[8][9]=
"zzzzzzzzzaBcDeFgHizzzzzzzzz";
968 text[8][10]=
"zzzzzzzzzzaBcDeFgHizzzzzzzz";
969 text[8][11]=
"zzzzzzzzzzzaBcDeFgHizzzzzzz";
970 text[8][12]=
"zzzzzzzzzzzzaBcDeFgHizzzzzz";
971 text[8][13]=
"zzzzzzzzzzzzzaBcDeFgHizzzzz";
972 text[8][14]=
"zzzzzzzzzzzzzzaBcDeFgHizzzz";
973 text[8][15]=
"zzzzzzzzzzzzzzzaBcDeFgHizzz";
974 text[8][16]=
"zzzzzzzzzzzzzzzzaBcDeFgHizz";
975 text[8][17]=
"zzzzzzzzzzzzzzzzzaBcDeFgHiz";
976 text[8][18]=
"zzzzzzzzzzzzzzzzzzaBcDeFgHi";
977 text[9][0]=
"aBcDeFgHiJzzzzzzzzzzzzzzzzz";
978 text[9][1]=
"zaBcDeFgHiJzzzzzzzzzzzzzzzz";
979 text[9][2]=
"zzaBcDeFgHiJzzzzzzzzzzzzzzz";
980 text[9][3]=
"zzzaBcDeFgHiJzzzzzzzzzzzzzz";
981 text[9][4]=
"zzzzaBcDeFgHiJzzzzzzzzzzzzz";
982 text[9][5]=
"zzzzzaBcDeFgHiJzzzzzzzzzzzz";
983 text[9][6]=
"zzzzzzaBcDeFgHiJzzzzzzzzzzz";
984 text[9][7]=
"zzzzzzzaBcDeFgHiJzzzzzzzzzz";
985 text[9][8]=
"zzzzzzzzaBcDeFgHiJzzzzzzzzz";
986 text[9][9]=
"zzzzzzzzzaBcDeFgHiJzzzzzzzz";
987 text[9][10]=
"zzzzzzzzzzaBcDeFgHiJzzzzzzz";
988 text[9][11]=
"zzzzzzzzzzzaBcDeFgHiJzzzzzz";
989 text[9][12]=
"zzzzzzzzzzzzaBcDeFgHiJzzzzz";
990 text[9][13]=
"zzzzzzzzzzzzzaBcDeFgHiJzzzz";
991 text[9][14]=
"zzzzzzzzzzzzzzaBcDeFgHiJzzz";
992 text[9][15]=
"zzzzzzzzzzzzzzzaBcDeFgHiJzz";
993 text[9][16]=
"zzzzzzzzzzzzzzzzaBcDeFgHiJz";
994 text[9][17]=
"zzzzzzzzzzzzzzzzzaBcDeFgHiJ";
995 text[10][0]=
"aBcDeFgHiJkzzzzzzzzzzzzzzzz";
996 text[10][1]=
"zaBcDeFgHiJkzzzzzzzzzzzzzzz";
997 text[10][2]=
"zzaBcDeFgHiJkzzzzzzzzzzzzzz";
998 text[10][3]=
"zzzaBcDeFgHiJkzzzzzzzzzzzzz";
999 text[10][4]=
"zzzzaBcDeFgHiJkzzzzzzzzzzzz";
1000 text[10][5]=
"zzzzzaBcDeFgHiJkzzzzzzzzzzz";
1001 text[10][6]=
"zzzzzzaBcDeFgHiJkzzzzzzzzzz";
1002 text[10][7]=
"zzzzzzzaBcDeFgHiJkzzzzzzzzz";
1003 text[10][8]=
"zzzzzzzzaBcDeFgHiJkzzzzzzzz";
1004 text[10][9]=
"zzzzzzzzzaBcDeFgHiJkzzzzzzz";
1005 text[10][10]=
"zzzzzzzzzzaBcDeFgHiJkzzzzzz";
1006 text[10][11]=
"zzzzzzzzzzzaBcDeFgHiJkzzzzz";
1007 text[10][12]=
"zzzzzzzzzzzzaBcDeFgHiJkzzzz";
1008 text[10][13]=
"zzzzzzzzzzzzzaBcDeFgHiJkzzz";
1009 text[10][14]=
"zzzzzzzzzzzzzzaBcDeFgHiJkzz";
1010 text[10][15]=
"zzzzzzzzzzzzzzzaBcDeFgHiJkz";
1011 text[10][16]=
"zzzzzzzzzzzzzzzzaBcDeFgHiJk";
1012 text[11][0]=
"aBcDeFgHiJkLzzzzzzzzzzzzzzz";
1013 text[11][1]=
"zaBcDeFgHiJkLzzzzzzzzzzzzzz";
1014 text[11][2]=
"zzaBcDeFgHiJkLzzzzzzzzzzzzz";
1015 text[11][3]=
"zzzaBcDeFgHiJkLzzzzzzzzzzzz";
1016 text[11][4]=
"zzzzaBcDeFgHiJkLzzzzzzzzzzz";
1017 text[11][5]=
"zzzzzaBcDeFgHiJkLzzzzzzzzzz";
1018 text[11][6]=
"zzzzzzaBcDeFgHiJkLzzzzzzzzz";
1019 text[11][7]=
"zzzzzzzaBcDeFgHiJkLzzzzzzzz";
1020 text[11][8]=
"zzzzzzzzaBcDeFgHiJkLzzzzzzz";
1021 text[11][9]=
"zzzzzzzzzaBcDeFgHiJkLzzzzzz";
1022 text[11][10]=
"zzzzzzzzzzaBcDeFgHiJkLzzzzz";
1023 text[11][11]=
"zzzzzzzzzzzaBcDeFgHiJkLzzzz";
1024 text[11][12]=
"zzzzzzzzzzzzaBcDeFgHiJkLzzz";
1025 text[11][13]=
"zzzzzzzzzzzzzaBcDeFgHiJkLzz";
1026 text[11][14]=
"zzzzzzzzzzzzzzaBcDeFgHiJkLz";
1027 text[11][15]=
"zzzzzzzzzzzzzzzaBcDeFgHiJkL";
1028 text[12][0]=
"aBcDeFgHiJkLmzzzzzzzzzzzzzz";
1029 text[12][1]=
"zaBcDeFgHiJkLmzzzzzzzzzzzzz";
1030 text[12][2]=
"zzaBcDeFgHiJkLmzzzzzzzzzzzz";
1031 text[12][3]=
"zzzaBcDeFgHiJkLmzzzzzzzzzzz";
1032 text[12][4]=
"zzzzaBcDeFgHiJkLmzzzzzzzzzz";
1033 text[12][5]=
"zzzzzaBcDeFgHiJkLmzzzzzzzzz";
1034 text[12][6]=
"zzzzzzaBcDeFgHiJkLmzzzzzzzz";
1035 text[12][7]=
"zzzzzzzaBcDeFgHiJkLmzzzzzzz";
1036 text[12][8]=
"zzzzzzzzaBcDeFgHiJkLmzzzzzz";
1037 text[12][9]=
"zzzzzzzzzaBcDeFgHiJkLmzzzzz";
1038 text[12][10]=
"zzzzzzzzzzaBcDeFgHiJkLmzzzz";
1039 text[12][11]=
"zzzzzzzzzzzaBcDeFgHiJkLmzzz";
1040 text[12][12]=
"zzzzzzzzzzzzaBcDeFgHiJkLmzz";
1041 text[12][13]=
"zzzzzzzzzzzzzaBcDeFgHiJkLmz";
1042 text[12][14]=
"zzzzzzzzzzzzzzaBcDeFgHiJkLm";
1043 text[13][0]=
"aBcDeFgHiJkLmNzzzzzzzzzzzzz";
1044 text[13][1]=
"zaBcDeFgHiJkLmNzzzzzzzzzzzz";
1045 text[13][2]=
"zzaBcDeFgHiJkLmNzzzzzzzzzzz";
1046 text[13][3]=
"zzzaBcDeFgHiJkLmNzzzzzzzzzz";
1047 text[13][4]=
"zzzzaBcDeFgHiJkLmNzzzzzzzzz";
1048 text[13][5]=
"zzzzzaBcDeFgHiJkLmNzzzzzzzz";
1049 text[13][6]=
"zzzzzzaBcDeFgHiJkLmNzzzzzzz";
1050 text[13][7]=
"zzzzzzzaBcDeFgHiJkLmNzzzzzz";
1051 text[13][8]=
"zzzzzzzzaBcDeFgHiJkLmNzzzzz";
1052 text[13][9]=
"zzzzzzzzzaBcDeFgHiJkLmNzzzz";
1053 text[13][10]=
"zzzzzzzzzzaBcDeFgHiJkLmNzzz";
1054 text[13][11]=
"zzzzzzzzzzzaBcDeFgHiJkLmNzz";
1055 text[13][12]=
"zzzzzzzzzzzzaBcDeFgHiJkLmNz";
1056 text[13][13]=
"zzzzzzzzzzzzzaBcDeFgHiJkLmN";
1057 text[14][0]=
"aBcDeFgHiJkLmNozzzzzzzzzzzz";
1058 text[14][1]=
"zaBcDeFgHiJkLmNozzzzzzzzzzz";
1059 text[14][2]=
"zzaBcDeFgHiJkLmNozzzzzzzzzz";
1060 text[14][3]=
"zzzaBcDeFgHiJkLmNozzzzzzzzz";
1061 text[14][4]=
"zzzzaBcDeFgHiJkLmNozzzzzzzz";
1062 text[14][5]=
"zzzzzaBcDeFgHiJkLmNozzzzzzz";
1063 text[14][6]=
"zzzzzzaBcDeFgHiJkLmNozzzzzz";
1064 text[14][7]=
"zzzzzzzaBcDeFgHiJkLmNozzzzz";
1065 text[14][8]=
"zzzzzzzzaBcDeFgHiJkLmNozzzz";
1066 text[14][9]=
"zzzzzzzzzaBcDeFgHiJkLmNozzz";
1067 text[14][10]=
"zzzzzzzzzzaBcDeFgHiJkLmNozz";
1068 text[14][11]=
"zzzzzzzzzzzaBcDeFgHiJkLmNoz";
1069 text[14][12]=
"zzzzzzzzzzzzaBcDeFgHiJkLmNo";
1070 text[15][0]=
"aBcDeFgHiJkLmNoPzzzzzzzzzzz";
1071 text[15][1]=
"zaBcDeFgHiJkLmNoPzzzzzzzzzz";
1072 text[15][2]=
"zzaBcDeFgHiJkLmNoPzzzzzzzzz";
1073 text[15][3]=
"zzzaBcDeFgHiJkLmNoPzzzzzzzz";
1074 text[15][4]=
"zzzzaBcDeFgHiJkLmNoPzzzzzzz";
1075 text[15][5]=
"zzzzzaBcDeFgHiJkLmNoPzzzzzz";
1076 text[15][6]=
"zzzzzzaBcDeFgHiJkLmNoPzzzzz";
1077 text[15][7]=
"zzzzzzzaBcDeFgHiJkLmNoPzzzz";
1078 text[15][8]=
"zzzzzzzzaBcDeFgHiJkLmNoPzzz";
1079 text[15][9]=
"zzzzzzzzzaBcDeFgHiJkLmNoPzz";
1080 text[15][10]=
"zzzzzzzzzzaBcDeFgHiJkLmNoPz";
1081 text[15][11]=
"zzzzzzzzzzzaBcDeFgHiJkLmNoP";
1082 text[16][0]=
"aBcDeFgHiJkLmNoPqzzzzzzzzzz";
1083 text[16][1]=
"zaBcDeFgHiJkLmNoPqzzzzzzzzz";
1084 text[16][2]=
"zzaBcDeFgHiJkLmNoPqzzzzzzzz";
1085 text[16][3]=
"zzzaBcDeFgHiJkLmNoPqzzzzzzz";
1086 text[16][4]=
"zzzzaBcDeFgHiJkLmNoPqzzzzzz";
1087 text[16][5]=
"zzzzzaBcDeFgHiJkLmNoPqzzzzz";
1088 text[16][6]=
"zzzzzzaBcDeFgHiJkLmNoPqzzzz";
1089 text[16][7]=
"zzzzzzzaBcDeFgHiJkLmNoPqzzz";
1090 text[16][8]=
"zzzzzzzzaBcDeFgHiJkLmNoPqzz";
1091 text[16][9]=
"zzzzzzzzzaBcDeFgHiJkLmNoPqz";
1092 text[16][10]=
"zzzzzzzzzzaBcDeFgHiJkLmNoPq";
1093 text[17][0]=
"aBcDeFgHiJkLmNoPqRzzzzzzzzz";
1094 text[17][1]=
"zaBcDeFgHiJkLmNoPqRzzzzzzzz";
1095 text[17][2]=
"zzaBcDeFgHiJkLmNoPqRzzzzzzz";
1096 text[17][3]=
"zzzaBcDeFgHiJkLmNoPqRzzzzzz";
1097 text[17][4]=
"zzzzaBcDeFgHiJkLmNoPqRzzzzz";
1098 text[17][5]=
"zzzzzaBcDeFgHiJkLmNoPqRzzzz";
1099 text[17][6]=
"zzzzzzaBcDeFgHiJkLmNoPqRzzz";
1100 text[17][7]=
"zzzzzzzaBcDeFgHiJkLmNoPqRzz";
1101 text[17][8]=
"zzzzzzzzaBcDeFgHiJkLmNoPqRz";
1102 text[17][9]=
"zzzzzzzzzaBcDeFgHiJkLmNoPqR";
1103 text[18][0]=
"aBcDeFgHiJkLmNoPqRszzzzzzzz";
1104 text[18][1]=
"zaBcDeFgHiJkLmNoPqRszzzzzzz";
1105 text[18][2]=
"zzaBcDeFgHiJkLmNoPqRszzzzzz";
1106 text[18][3]=
"zzzaBcDeFgHiJkLmNoPqRszzzzz";
1107 text[18][4]=
"zzzzaBcDeFgHiJkLmNoPqRszzzz";
1108 text[18][5]=
"zzzzzaBcDeFgHiJkLmNoPqRszzz";
1109 text[18][6]=
"zzzzzzaBcDeFgHiJkLmNoPqRszz";
1110 text[18][7]=
"zzzzzzzaBcDeFgHiJkLmNoPqRsz";
1111 text[18][8]=
"zzzzzzzzaBcDeFgHiJkLmNoPqRs";
1112 text[19][0]=
"aBcDeFgHiJkLmNoPqRsTzzzzzzz";
1113 text[19][1]=
"zaBcDeFgHiJkLmNoPqRsTzzzzzz";
1114 text[19][2]=
"zzaBcDeFgHiJkLmNoPqRsTzzzzz";
1115 text[19][3]=
"zzzaBcDeFgHiJkLmNoPqRsTzzzz";
1116 text[19][4]=
"zzzzaBcDeFgHiJkLmNoPqRsTzzz";
1117 text[19][5]=
"zzzzzaBcDeFgHiJkLmNoPqRsTzz";
1118 text[19][6]=
"zzzzzzaBcDeFgHiJkLmNoPqRsTz";
1119 text[19][7]=
"zzzzzzzaBcDeFgHiJkLmNoPqRsT";
1120 text[20][0]=
"aBcDeFgHiJkLmNoPqRsTuzzzzzz";
1121 text[20][1]=
"zaBcDeFgHiJkLmNoPqRsTuzzzzz";
1122 text[20][2]=
"zzaBcDeFgHiJkLmNoPqRsTuzzzz";
1123 text[20][3]=
"zzzaBcDeFgHiJkLmNoPqRsTuzzz";
1124 text[20][4]=
"zzzzaBcDeFgHiJkLmNoPqRsTuzz";
1125 text[20][5]=
"zzzzzaBcDeFgHiJkLmNoPqRsTuz";
1126 text[20][6]=
"zzzzzzaBcDeFgHiJkLmNoPqRsTu";
1127 text[21][0]=
"aBcDeFgHiJkLmNoPqRsTuVzzzzz";
1128 text[21][1]=
"zaBcDeFgHiJkLmNoPqRsTuVzzzz";
1129 text[21][2]=
"zzaBcDeFgHiJkLmNoPqRsTuVzzz";
1130 text[21][3]=
"zzzaBcDeFgHiJkLmNoPqRsTuVzz";
1131 text[21][4]=
"zzzzaBcDeFgHiJkLmNoPqRsTuVz";
1132 text[21][5]=
"zzzzzaBcDeFgHiJkLmNoPqRsTuV";
1133 text[22][0]=
"aBcDeFgHiJkLmNoPqRsTuVwzzzz";
1134 text[22][1]=
"zaBcDeFgHiJkLmNoPqRsTuVwzzz";
1135 text[22][2]=
"zzaBcDeFgHiJkLmNoPqRsTuVwzz";
1136 text[22][3]=
"zzzaBcDeFgHiJkLmNoPqRsTuVwz";
1137 text[22][4]=
"zzzzaBcDeFgHiJkLmNoPqRsTuVw";
1138 text[23][0]=
"aBcDeFgHiJkLmNoPqRsTuVwXzzz";
1139 text[23][1]=
"zaBcDeFgHiJkLmNoPqRsTuVwXzz";
1140 text[23][2]=
"zzaBcDeFgHiJkLmNoPqRsTuVwXz";
1141 text[23][3]=
"zzzaBcDeFgHiJkLmNoPqRsTuVwX";
1142 text[24][0]=
"aBcDeFgHiJkLmNoPqRsTuVwXyzz";
1143 text[24][1]=
"zaBcDeFgHiJkLmNoPqRsTuVwXyz";
1144 text[24][2]=
"zzaBcDeFgHiJkLmNoPqRsTuVwXy";
1145 text[25][0]=
"aBcDeFgHiJkLmNoPqRsTuVwXyZz";
1146 text[25][1]=
"zaBcDeFgHiJkLmNoPqRsTuVwXyZ";
1148 const char *needle[26];
1155 needle[6]=
"aBcDeFg";
1156 needle[7]=
"aBcDeFgH";
1157 needle[8]=
"aBcDeFgHi";
1158 needle[9]=
"aBcDeFgHiJ";
1159 needle[10]=
"aBcDeFgHiJk";
1160 needle[11]=
"aBcDeFgHiJkL";
1161 needle[12]=
"aBcDeFgHiJkLm";
1162 needle[13]=
"aBcDeFgHiJkLmN";
1163 needle[14]=
"aBcDeFgHiJkLmNo";
1164 needle[15]=
"aBcDeFgHiJkLmNoP";
1165 needle[16]=
"aBcDeFgHiJkLmNoPq";
1166 needle[17]=
"aBcDeFgHiJkLmNoPqR";
1167 needle[18]=
"aBcDeFgHiJkLmNoPqRs";
1168 needle[19]=
"aBcDeFgHiJkLmNoPqRsT";
1169 needle[20]=
"aBcDeFgHiJkLmNoPqRsTu";
1170 needle[21]=
"aBcDeFgHiJkLmNoPqRsTuV";
1171 needle[22]=
"aBcDeFgHiJkLmNoPqRsTuVw";
1172 needle[23]=
"aBcDeFgHiJkLmNoPqRsTuVwX";
1173 needle[24]=
"aBcDeFgHiJkLmNoPqRsTuVwXy";
1174 needle[25]=
"aBcDeFgHiJkLmNoPqRsTuVwXyZ";
1177 uint8_t *found = NULL;
1178 for (i = 0; i < 26; i++) {
1179 for (j = 0; j <= (26 - i); j++) {
1180 found = BasicSearchWrapper((uint8_t *)text[i][j], (uint8_t *)needle[i], 1);
1182 printf(
"Error1 searching for %s in text %s\n", needle[i], text[i][j]);
1185 found = Bs2bmWrapper((uint8_t *)text[i][j], (uint8_t *)needle[i], 1);
1187 printf(
"Error2 searching for %s in text %s\n", needle[i], text[i][j]);
1190 found = BoyerMooreWrapper((uint8_t *)text[i][j], (uint8_t *)needle[i], 1);
1192 printf(
"Error3 searching for %s in text %s\n", needle[i], text[i][j]);
1203 static int UtilSpmSearchOffsetsNocaseTest01(
void)
1205 const char *text[26][27];
1206 text[0][0]=
"azzzzzzzzzzzzzzzzzzzzzzzzzz";
1207 text[0][1]=
"zazzzzzzzzzzzzzzzzzzzzzzzzz";
1208 text[0][2]=
"zzazzzzzzzzzzzzzzzzzzzzzzzz";
1209 text[0][3]=
"zzzazzzzzzzzzzzzzzzzzzzzzzz";
1210 text[0][4]=
"zzzzazzzzzzzzzzzzzzzzzzzzzz";
1211 text[0][5]=
"zzzzzazzzzzzzzzzzzzzzzzzzzz";
1212 text[0][6]=
"zzzzzzazzzzzzzzzzzzzzzzzzzz";
1213 text[0][7]=
"zzzzzzzazzzzzzzzzzzzzzzzzzz";
1214 text[0][8]=
"zzzzzzzzazzzzzzzzzzzzzzzzzz";
1215 text[0][9]=
"zzzzzzzzzazzzzzzzzzzzzzzzzz";
1216 text[0][10]=
"zzzzzzzzzzazzzzzzzzzzzzzzzz";
1217 text[0][11]=
"zzzzzzzzzzzazzzzzzzzzzzzzzz";
1218 text[0][12]=
"zzzzzzzzzzzzazzzzzzzzzzzzzz";
1219 text[0][13]=
"zzzzzzzzzzzzzazzzzzzzzzzzzz";
1220 text[0][14]=
"zzzzzzzzzzzzzzazzzzzzzzzzzz";
1221 text[0][15]=
"zzzzzzzzzzzzzzzazzzzzzzzzzz";
1222 text[0][16]=
"zzzzzzzzzzzzzzzzazzzzzzzzzz";
1223 text[0][17]=
"zzzzzzzzzzzzzzzzzazzzzzzzzz";
1224 text[0][18]=
"zzzzzzzzzzzzzzzzzzazzzzzzzz";
1225 text[0][19]=
"zzzzzzzzzzzzzzzzzzzazzzzzzz";
1226 text[0][20]=
"zzzzzzzzzzzzzzzzzzzzazzzzzz";
1227 text[0][21]=
"zzzzzzzzzzzzzzzzzzzzzazzzzz";
1228 text[0][22]=
"zzzzzzzzzzzzzzzzzzzzzzazzzz";
1229 text[0][23]=
"zzzzzzzzzzzzzzzzzzzzzzzazzz";
1230 text[0][24]=
"zzzzzzzzzzzzzzzzzzzzzzzzazz";
1231 text[0][25]=
"zzzzzzzzzzzzzzzzzzzzzzzzzaz";
1232 text[0][26]=
"zzzzzzzzzzzzzzzzzzzzzzzzzza";
1233 text[1][0]=
"aBzzzzzzzzzzzzzzzzzzzzzzzzz";
1234 text[1][1]=
"zaBzzzzzzzzzzzzzzzzzzzzzzzz";
1235 text[1][2]=
"zzaBzzzzzzzzzzzzzzzzzzzzzzz";
1236 text[1][3]=
"zzzaBzzzzzzzzzzzzzzzzzzzzzz";
1237 text[1][4]=
"zzzzaBzzzzzzzzzzzzzzzzzzzzz";
1238 text[1][5]=
"zzzzzaBzzzzzzzzzzzzzzzzzzzz";
1239 text[1][6]=
"zzzzzzaBzzzzzzzzzzzzzzzzzzz";
1240 text[1][7]=
"zzzzzzzaBzzzzzzzzzzzzzzzzzz";
1241 text[1][8]=
"zzzzzzzzaBzzzzzzzzzzzzzzzzz";
1242 text[1][9]=
"zzzzzzzzzaBzzzzzzzzzzzzzzzz";
1243 text[1][10]=
"zzzzzzzzzzaBzzzzzzzzzzzzzzz";
1244 text[1][11]=
"zzzzzzzzzzzaBzzzzzzzzzzzzzz";
1245 text[1][12]=
"zzzzzzzzzzzzaBzzzzzzzzzzzzz";
1246 text[1][13]=
"zzzzzzzzzzzzzaBzzzzzzzzzzzz";
1247 text[1][14]=
"zzzzzzzzzzzzzzaBzzzzzzzzzzz";
1248 text[1][15]=
"zzzzzzzzzzzzzzzaBzzzzzzzzzz";
1249 text[1][16]=
"zzzzzzzzzzzzzzzzaBzzzzzzzzz";
1250 text[1][17]=
"zzzzzzzzzzzzzzzzzaBzzzzzzzz";
1251 text[1][18]=
"zzzzzzzzzzzzzzzzzzaBzzzzzzz";
1252 text[1][19]=
"zzzzzzzzzzzzzzzzzzzaBzzzzzz";
1253 text[1][20]=
"zzzzzzzzzzzzzzzzzzzzaBzzzzz";
1254 text[1][21]=
"zzzzzzzzzzzzzzzzzzzzzaBzzzz";
1255 text[1][22]=
"zzzzzzzzzzzzzzzzzzzzzzaBzzz";
1256 text[1][23]=
"zzzzzzzzzzzzzzzzzzzzzzzaBzz";
1257 text[1][24]=
"zzzzzzzzzzzzzzzzzzzzzzzzaBz";
1258 text[1][25]=
"zzzzzzzzzzzzzzzzzzzzzzzzzaB";
1259 text[2][0]=
"aBczzzzzzzzzzzzzzzzzzzzzzzz";
1260 text[2][1]=
"zaBczzzzzzzzzzzzzzzzzzzzzzz";
1261 text[2][2]=
"zzaBczzzzzzzzzzzzzzzzzzzzzz";
1262 text[2][3]=
"zzzaBczzzzzzzzzzzzzzzzzzzzz";
1263 text[2][4]=
"zzzzaBczzzzzzzzzzzzzzzzzzzz";
1264 text[2][5]=
"zzzzzaBczzzzzzzzzzzzzzzzzzz";
1265 text[2][6]=
"zzzzzzaBczzzzzzzzzzzzzzzzzz";
1266 text[2][7]=
"zzzzzzzaBczzzzzzzzzzzzzzzzz";
1267 text[2][8]=
"zzzzzzzzaBczzzzzzzzzzzzzzzz";
1268 text[2][9]=
"zzzzzzzzzaBczzzzzzzzzzzzzzz";
1269 text[2][10]=
"zzzzzzzzzzaBczzzzzzzzzzzzzz";
1270 text[2][11]=
"zzzzzzzzzzzaBczzzzzzzzzzzzz";
1271 text[2][12]=
"zzzzzzzzzzzzaBczzzzzzzzzzzz";
1272 text[2][13]=
"zzzzzzzzzzzzzaBczzzzzzzzzzz";
1273 text[2][14]=
"zzzzzzzzzzzzzzaBczzzzzzzzzz";
1274 text[2][15]=
"zzzzzzzzzzzzzzzaBczzzzzzzzz";
1275 text[2][16]=
"zzzzzzzzzzzzzzzzaBczzzzzzzz";
1276 text[2][17]=
"zzzzzzzzzzzzzzzzzaBczzzzzzz";
1277 text[2][18]=
"zzzzzzzzzzzzzzzzzzaBczzzzzz";
1278 text[2][19]=
"zzzzzzzzzzzzzzzzzzzaBczzzzz";
1279 text[2][20]=
"zzzzzzzzzzzzzzzzzzzzaBczzzz";
1280 text[2][21]=
"zzzzzzzzzzzzzzzzzzzzzaBczzz";
1281 text[2][22]=
"zzzzzzzzzzzzzzzzzzzzzzaBczz";
1282 text[2][23]=
"zzzzzzzzzzzzzzzzzzzzzzzaBcz";
1283 text[2][24]=
"zzzzzzzzzzzzzzzzzzzzzzzzaBc";
1284 text[3][0]=
"aBcDzzzzzzzzzzzzzzzzzzzzzzz";
1285 text[3][1]=
"zaBcDzzzzzzzzzzzzzzzzzzzzzz";
1286 text[3][2]=
"zzaBcDzzzzzzzzzzzzzzzzzzzzz";
1287 text[3][3]=
"zzzaBcDzzzzzzzzzzzzzzzzzzzz";
1288 text[3][4]=
"zzzzaBcDzzzzzzzzzzzzzzzzzzz";
1289 text[3][5]=
"zzzzzaBcDzzzzzzzzzzzzzzzzzz";
1290 text[3][6]=
"zzzzzzaBcDzzzzzzzzzzzzzzzzz";
1291 text[3][7]=
"zzzzzzzaBcDzzzzzzzzzzzzzzzz";
1292 text[3][8]=
"zzzzzzzzaBcDzzzzzzzzzzzzzzz";
1293 text[3][9]=
"zzzzzzzzzaBcDzzzzzzzzzzzzzz";
1294 text[3][10]=
"zzzzzzzzzzaBcDzzzzzzzzzzzzz";
1295 text[3][11]=
"zzzzzzzzzzzaBcDzzzzzzzzzzzz";
1296 text[3][12]=
"zzzzzzzzzzzzaBcDzzzzzzzzzzz";
1297 text[3][13]=
"zzzzzzzzzzzzzaBcDzzzzzzzzzz";
1298 text[3][14]=
"zzzzzzzzzzzzzzaBcDzzzzzzzzz";
1299 text[3][15]=
"zzzzzzzzzzzzzzzaBcDzzzzzzzz";
1300 text[3][16]=
"zzzzzzzzzzzzzzzzaBcDzzzzzzz";
1301 text[3][17]=
"zzzzzzzzzzzzzzzzzaBcDzzzzzz";
1302 text[3][18]=
"zzzzzzzzzzzzzzzzzzaBcDzzzzz";
1303 text[3][19]=
"zzzzzzzzzzzzzzzzzzzaBcDzzzz";
1304 text[3][20]=
"zzzzzzzzzzzzzzzzzzzzaBcDzzz";
1305 text[3][21]=
"zzzzzzzzzzzzzzzzzzzzzaBcDzz";
1306 text[3][22]=
"zzzzzzzzzzzzzzzzzzzzzzaBcDz";
1307 text[3][23]=
"zzzzzzzzzzzzzzzzzzzzzzzaBcD";
1308 text[4][0]=
"aBcDezzzzzzzzzzzzzzzzzzzzzz";
1309 text[4][1]=
"zaBcDezzzzzzzzzzzzzzzzzzzzz";
1310 text[4][2]=
"zzaBcDezzzzzzzzzzzzzzzzzzzz";
1311 text[4][3]=
"zzzaBcDezzzzzzzzzzzzzzzzzzz";
1312 text[4][4]=
"zzzzaBcDezzzzzzzzzzzzzzzzzz";
1313 text[4][5]=
"zzzzzaBcDezzzzzzzzzzzzzzzzz";
1314 text[4][6]=
"zzzzzzaBcDezzzzzzzzzzzzzzzz";
1315 text[4][7]=
"zzzzzzzaBcDezzzzzzzzzzzzzzz";
1316 text[4][8]=
"zzzzzzzzaBcDezzzzzzzzzzzzzz";
1317 text[4][9]=
"zzzzzzzzzaBcDezzzzzzzzzzzzz";
1318 text[4][10]=
"zzzzzzzzzzaBcDezzzzzzzzzzzz";
1319 text[4][11]=
"zzzzzzzzzzzaBcDezzzzzzzzzzz";
1320 text[4][12]=
"zzzzzzzzzzzzaBcDezzzzzzzzzz";
1321 text[4][13]=
"zzzzzzzzzzzzzaBcDezzzzzzzzz";
1322 text[4][14]=
"zzzzzzzzzzzzzzaBcDezzzzzzzz";
1323 text[4][15]=
"zzzzzzzzzzzzzzzaBcDezzzzzzz";
1324 text[4][16]=
"zzzzzzzzzzzzzzzzaBcDezzzzzz";
1325 text[4][17]=
"zzzzzzzzzzzzzzzzzaBcDezzzzz";
1326 text[4][18]=
"zzzzzzzzzzzzzzzzzzaBcDezzzz";
1327 text[4][19]=
"zzzzzzzzzzzzzzzzzzzaBcDezzz";
1328 text[4][20]=
"zzzzzzzzzzzzzzzzzzzzaBcDezz";
1329 text[4][21]=
"zzzzzzzzzzzzzzzzzzzzzaBcDez";
1330 text[4][22]=
"zzzzzzzzzzzzzzzzzzzzzzaBcDe";
1331 text[5][0]=
"aBcDeFzzzzzzzzzzzzzzzzzzzzz";
1332 text[5][1]=
"zaBcDeFzzzzzzzzzzzzzzzzzzzz";
1333 text[5][2]=
"zzaBcDeFzzzzzzzzzzzzzzzzzzz";
1334 text[5][3]=
"zzzaBcDeFzzzzzzzzzzzzzzzzzz";
1335 text[5][4]=
"zzzzaBcDeFzzzzzzzzzzzzzzzzz";
1336 text[5][5]=
"zzzzzaBcDeFzzzzzzzzzzzzzzzz";
1337 text[5][6]=
"zzzzzzaBcDeFzzzzzzzzzzzzzzz";
1338 text[5][7]=
"zzzzzzzaBcDeFzzzzzzzzzzzzzz";
1339 text[5][8]=
"zzzzzzzzaBcDeFzzzzzzzzzzzzz";
1340 text[5][9]=
"zzzzzzzzzaBcDeFzzzzzzzzzzzz";
1341 text[5][10]=
"zzzzzzzzzzaBcDeFzzzzzzzzzzz";
1342 text[5][11]=
"zzzzzzzzzzzaBcDeFzzzzzzzzzz";
1343 text[5][12]=
"zzzzzzzzzzzzaBcDeFzzzzzzzzz";
1344 text[5][13]=
"zzzzzzzzzzzzzaBcDeFzzzzzzzz";
1345 text[5][14]=
"zzzzzzzzzzzzzzaBcDeFzzzzzzz";
1346 text[5][15]=
"zzzzzzzzzzzzzzzaBcDeFzzzzzz";
1347 text[5][16]=
"zzzzzzzzzzzzzzzzaBcDeFzzzzz";
1348 text[5][17]=
"zzzzzzzzzzzzzzzzzaBcDeFzzzz";
1349 text[5][18]=
"zzzzzzzzzzzzzzzzzzaBcDeFzzz";
1350 text[5][19]=
"zzzzzzzzzzzzzzzzzzzaBcDeFzz";
1351 text[5][20]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFz";
1352 text[5][21]=
"zzzzzzzzzzzzzzzzzzzzzaBcDeF";
1353 text[6][0]=
"aBcDeFgzzzzzzzzzzzzzzzzzzzz";
1354 text[6][1]=
"zaBcDeFgzzzzzzzzzzzzzzzzzzz";
1355 text[6][2]=
"zzaBcDeFgzzzzzzzzzzzzzzzzzz";
1356 text[6][3]=
"zzzaBcDeFgzzzzzzzzzzzzzzzzz";
1357 text[6][4]=
"zzzzaBcDeFgzzzzzzzzzzzzzzzz";
1358 text[6][5]=
"zzzzzaBcDeFgzzzzzzzzzzzzzzz";
1359 text[6][6]=
"zzzzzzaBcDeFgzzzzzzzzzzzzzz";
1360 text[6][7]=
"zzzzzzzaBcDeFgzzzzzzzzzzzzz";
1361 text[6][8]=
"zzzzzzzzaBcDeFgzzzzzzzzzzzz";
1362 text[6][9]=
"zzzzzzzzzaBcDeFgzzzzzzzzzzz";
1363 text[6][10]=
"zzzzzzzzzzaBcDeFgzzzzzzzzzz";
1364 text[6][11]=
"zzzzzzzzzzzaBcDeFgzzzzzzzzz";
1365 text[6][12]=
"zzzzzzzzzzzzaBcDeFgzzzzzzzz";
1366 text[6][13]=
"zzzzzzzzzzzzzaBcDeFgzzzzzzz";
1367 text[6][14]=
"zzzzzzzzzzzzzzaBcDeFgzzzzzz";
1368 text[6][15]=
"zzzzzzzzzzzzzzzaBcDeFgzzzzz";
1369 text[6][16]=
"zzzzzzzzzzzzzzzzaBcDeFgzzzz";
1370 text[6][17]=
"zzzzzzzzzzzzzzzzzaBcDeFgzzz";
1371 text[6][18]=
"zzzzzzzzzzzzzzzzzzaBcDeFgzz";
1372 text[6][19]=
"zzzzzzzzzzzzzzzzzzzaBcDeFgz";
1373 text[6][20]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFg";
1374 text[7][0]=
"aBcDeFgHzzzzzzzzzzzzzzzzzzz";
1375 text[7][1]=
"zaBcDeFgHzzzzzzzzzzzzzzzzzz";
1376 text[7][2]=
"zzaBcDeFgHzzzzzzzzzzzzzzzzz";
1377 text[7][3]=
"zzzaBcDeFgHzzzzzzzzzzzzzzzz";
1378 text[7][4]=
"zzzzaBcDeFgHzzzzzzzzzzzzzzz";
1379 text[7][5]=
"zzzzzaBcDeFgHzzzzzzzzzzzzzz";
1380 text[7][6]=
"zzzzzzaBcDeFgHzzzzzzzzzzzzz";
1381 text[7][7]=
"zzzzzzzaBcDeFgHzzzzzzzzzzzz";
1382 text[7][8]=
"zzzzzzzzaBcDeFgHzzzzzzzzzzz";
1383 text[7][9]=
"zzzzzzzzzaBcDeFgHzzzzzzzzzz";
1384 text[7][10]=
"zzzzzzzzzzaBcDeFgHzzzzzzzzz";
1385 text[7][11]=
"zzzzzzzzzzzaBcDeFgHzzzzzzzz";
1386 text[7][12]=
"zzzzzzzzzzzzaBcDeFgHzzzzzzz";
1387 text[7][13]=
"zzzzzzzzzzzzzaBcDeFgHzzzzzz";
1388 text[7][14]=
"zzzzzzzzzzzzzzaBcDeFgHzzzzz";
1389 text[7][15]=
"zzzzzzzzzzzzzzzaBcDeFgHzzzz";
1390 text[7][16]=
"zzzzzzzzzzzzzzzzaBcDeFgHzzz";
1391 text[7][17]=
"zzzzzzzzzzzzzzzzzaBcDeFgHzz";
1392 text[7][18]=
"zzzzzzzzzzzzzzzzzzaBcDeFgHz";
1393 text[7][19]=
"zzzzzzzzzzzzzzzzzzzaBcDeFgH";
1394 text[8][0]=
"aBcDeFgHizzzzzzzzzzzzzzzzzz";
1395 text[8][1]=
"zaBcDeFgHizzzzzzzzzzzzzzzzz";
1396 text[8][2]=
"zzaBcDeFgHizzzzzzzzzzzzzzzz";
1397 text[8][3]=
"zzzaBcDeFgHizzzzzzzzzzzzzzz";
1398 text[8][4]=
"zzzzaBcDeFgHizzzzzzzzzzzzzz";
1399 text[8][5]=
"zzzzzaBcDeFgHizzzzzzzzzzzzz";
1400 text[8][6]=
"zzzzzzaBcDeFgHizzzzzzzzzzzz";
1401 text[8][7]=
"zzzzzzzaBcDeFgHizzzzzzzzzzz";
1402 text[8][8]=
"zzzzzzzzaBcDeFgHizzzzzzzzzz";
1403 text[8][9]=
"zzzzzzzzzaBcDeFgHizzzzzzzzz";
1404 text[8][10]=
"zzzzzzzzzzaBcDeFgHizzzzzzzz";
1405 text[8][11]=
"zzzzzzzzzzzaBcDeFgHizzzzzzz";
1406 text[8][12]=
"zzzzzzzzzzzzaBcDeFgHizzzzzz";
1407 text[8][13]=
"zzzzzzzzzzzzzaBcDeFgHizzzzz";
1408 text[8][14]=
"zzzzzzzzzzzzzzaBcDeFgHizzzz";
1409 text[8][15]=
"zzzzzzzzzzzzzzzaBcDeFgHizzz";
1410 text[8][16]=
"zzzzzzzzzzzzzzzzaBcDeFgHizz";
1411 text[8][17]=
"zzzzzzzzzzzzzzzzzaBcDeFgHiz";
1412 text[8][18]=
"zzzzzzzzzzzzzzzzzzaBcDeFgHi";
1413 text[9][0]=
"aBcDeFgHiJzzzzzzzzzzzzzzzzz";
1414 text[9][1]=
"zaBcDeFgHiJzzzzzzzzzzzzzzzz";
1415 text[9][2]=
"zzaBcDeFgHiJzzzzzzzzzzzzzzz";
1416 text[9][3]=
"zzzaBcDeFgHiJzzzzzzzzzzzzzz";
1417 text[9][4]=
"zzzzaBcDeFgHiJzzzzzzzzzzzzz";
1418 text[9][5]=
"zzzzzaBcDeFgHiJzzzzzzzzzzzz";
1419 text[9][6]=
"zzzzzzaBcDeFgHiJzzzzzzzzzzz";
1420 text[9][7]=
"zzzzzzzaBcDeFgHiJzzzzzzzzzz";
1421 text[9][8]=
"zzzzzzzzaBcDeFgHiJzzzzzzzzz";
1422 text[9][9]=
"zzzzzzzzzaBcDeFgHiJzzzzzzzz";
1423 text[9][10]=
"zzzzzzzzzzaBcDeFgHiJzzzzzzz";
1424 text[9][11]=
"zzzzzzzzzzzaBcDeFgHiJzzzzzz";
1425 text[9][12]=
"zzzzzzzzzzzzaBcDeFgHiJzzzzz";
1426 text[9][13]=
"zzzzzzzzzzzzzaBcDeFgHiJzzzz";
1427 text[9][14]=
"zzzzzzzzzzzzzzaBcDeFgHiJzzz";
1428 text[9][15]=
"zzzzzzzzzzzzzzzaBcDeFgHiJzz";
1429 text[9][16]=
"zzzzzzzzzzzzzzzzaBcDeFgHiJz";
1430 text[9][17]=
"zzzzzzzzzzzzzzzzzaBcDeFgHiJ";
1431 text[10][0]=
"aBcDeFgHiJkzzzzzzzzzzzzzzzz";
1432 text[10][1]=
"zaBcDeFgHiJkzzzzzzzzzzzzzzz";
1433 text[10][2]=
"zzaBcDeFgHiJkzzzzzzzzzzzzzz";
1434 text[10][3]=
"zzzaBcDeFgHiJkzzzzzzzzzzzzz";
1435 text[10][4]=
"zzzzaBcDeFgHiJkzzzzzzzzzzzz";
1436 text[10][5]=
"zzzzzaBcDeFgHiJkzzzzzzzzzzz";
1437 text[10][6]=
"zzzzzzaBcDeFgHiJkzzzzzzzzzz";
1438 text[10][7]=
"zzzzzzzaBcDeFgHiJkzzzzzzzzz";
1439 text[10][8]=
"zzzzzzzzaBcDeFgHiJkzzzzzzzz";
1440 text[10][9]=
"zzzzzzzzzaBcDeFgHiJkzzzzzzz";
1441 text[10][10]=
"zzzzzzzzzzaBcDeFgHiJkzzzzzz";
1442 text[10][11]=
"zzzzzzzzzzzaBcDeFgHiJkzzzzz";
1443 text[10][12]=
"zzzzzzzzzzzzaBcDeFgHiJkzzzz";
1444 text[10][13]=
"zzzzzzzzzzzzzaBcDeFgHiJkzzz";
1445 text[10][14]=
"zzzzzzzzzzzzzzaBcDeFgHiJkzz";
1446 text[10][15]=
"zzzzzzzzzzzzzzzaBcDeFgHiJkz";
1447 text[10][16]=
"zzzzzzzzzzzzzzzzaBcDeFgHiJk";
1448 text[11][0]=
"aBcDeFgHiJkLzzzzzzzzzzzzzzz";
1449 text[11][1]=
"zaBcDeFgHiJkLzzzzzzzzzzzzzz";
1450 text[11][2]=
"zzaBcDeFgHiJkLzzzzzzzzzzzzz";
1451 text[11][3]=
"zzzaBcDeFgHiJkLzzzzzzzzzzzz";
1452 text[11][4]=
"zzzzaBcDeFgHiJkLzzzzzzzzzzz";
1453 text[11][5]=
"zzzzzaBcDeFgHiJkLzzzzzzzzzz";
1454 text[11][6]=
"zzzzzzaBcDeFgHiJkLzzzzzzzzz";
1455 text[11][7]=
"zzzzzzzaBcDeFgHiJkLzzzzzzzz";
1456 text[11][8]=
"zzzzzzzzaBcDeFgHiJkLzzzzzzz";
1457 text[11][9]=
"zzzzzzzzzaBcDeFgHiJkLzzzzzz";
1458 text[11][10]=
"zzzzzzzzzzaBcDeFgHiJkLzzzzz";
1459 text[11][11]=
"zzzzzzzzzzzaBcDeFgHiJkLzzzz";
1460 text[11][12]=
"zzzzzzzzzzzzaBcDeFgHiJkLzzz";
1461 text[11][13]=
"zzzzzzzzzzzzzaBcDeFgHiJkLzz";
1462 text[11][14]=
"zzzzzzzzzzzzzzaBcDeFgHiJkLz";
1463 text[11][15]=
"zzzzzzzzzzzzzzzaBcDeFgHiJkL";
1464 text[12][0]=
"aBcDeFgHiJkLmzzzzzzzzzzzzzz";
1465 text[12][1]=
"zaBcDeFgHiJkLmzzzzzzzzzzzzz";
1466 text[12][2]=
"zzaBcDeFgHiJkLmzzzzzzzzzzzz";
1467 text[12][3]=
"zzzaBcDeFgHiJkLmzzzzzzzzzzz";
1468 text[12][4]=
"zzzzaBcDeFgHiJkLmzzzzzzzzzz";
1469 text[12][5]=
"zzzzzaBcDeFgHiJkLmzzzzzzzzz";
1470 text[12][6]=
"zzzzzzaBcDeFgHiJkLmzzzzzzzz";
1471 text[12][7]=
"zzzzzzzaBcDeFgHiJkLmzzzzzzz";
1472 text[12][8]=
"zzzzzzzzaBcDeFgHiJkLmzzzzzz";
1473 text[12][9]=
"zzzzzzzzzaBcDeFgHiJkLmzzzzz";
1474 text[12][10]=
"zzzzzzzzzzaBcDeFgHiJkLmzzzz";
1475 text[12][11]=
"zzzzzzzzzzzaBcDeFgHiJkLmzzz";
1476 text[12][12]=
"zzzzzzzzzzzzaBcDeFgHiJkLmzz";
1477 text[12][13]=
"zzzzzzzzzzzzzaBcDeFgHiJkLmz";
1478 text[12][14]=
"zzzzzzzzzzzzzzaBcDeFgHiJkLm";
1479 text[13][0]=
"aBcDeFgHiJkLmNzzzzzzzzzzzzz";
1480 text[13][1]=
"zaBcDeFgHiJkLmNzzzzzzzzzzzz";
1481 text[13][2]=
"zzaBcDeFgHiJkLmNzzzzzzzzzzz";
1482 text[13][3]=
"zzzaBcDeFgHiJkLmNzzzzzzzzzz";
1483 text[13][4]=
"zzzzaBcDeFgHiJkLmNzzzzzzzzz";
1484 text[13][5]=
"zzzzzaBcDeFgHiJkLmNzzzzzzzz";
1485 text[13][6]=
"zzzzzzaBcDeFgHiJkLmNzzzzzzz";
1486 text[13][7]=
"zzzzzzzaBcDeFgHiJkLmNzzzzzz";
1487 text[13][8]=
"zzzzzzzzaBcDeFgHiJkLmNzzzzz";
1488 text[13][9]=
"zzzzzzzzzaBcDeFgHiJkLmNzzzz";
1489 text[13][10]=
"zzzzzzzzzzaBcDeFgHiJkLmNzzz";
1490 text[13][11]=
"zzzzzzzzzzzaBcDeFgHiJkLmNzz";
1491 text[13][12]=
"zzzzzzzzzzzzaBcDeFgHiJkLmNz";
1492 text[13][13]=
"zzzzzzzzzzzzzaBcDeFgHiJkLmN";
1493 text[14][0]=
"aBcDeFgHiJkLmNozzzzzzzzzzzz";
1494 text[14][1]=
"zaBcDeFgHiJkLmNozzzzzzzzzzz";
1495 text[14][2]=
"zzaBcDeFgHiJkLmNozzzzzzzzzz";
1496 text[14][3]=
"zzzaBcDeFgHiJkLmNozzzzzzzzz";
1497 text[14][4]=
"zzzzaBcDeFgHiJkLmNozzzzzzzz";
1498 text[14][5]=
"zzzzzaBcDeFgHiJkLmNozzzzzzz";
1499 text[14][6]=
"zzzzzzaBcDeFgHiJkLmNozzzzzz";
1500 text[14][7]=
"zzzzzzzaBcDeFgHiJkLmNozzzzz";
1501 text[14][8]=
"zzzzzzzzaBcDeFgHiJkLmNozzzz";
1502 text[14][9]=
"zzzzzzzzzaBcDeFgHiJkLmNozzz";
1503 text[14][10]=
"zzzzzzzzzzaBcDeFgHiJkLmNozz";
1504 text[14][11]=
"zzzzzzzzzzzaBcDeFgHiJkLmNoz";
1505 text[14][12]=
"zzzzzzzzzzzzaBcDeFgHiJkLmNo";
1506 text[15][0]=
"aBcDeFgHiJkLmNoPzzzzzzzzzzz";
1507 text[15][1]=
"zaBcDeFgHiJkLmNoPzzzzzzzzzz";
1508 text[15][2]=
"zzaBcDeFgHiJkLmNoPzzzzzzzzz";
1509 text[15][3]=
"zzzaBcDeFgHiJkLmNoPzzzzzzzz";
1510 text[15][4]=
"zzzzaBcDeFgHiJkLmNoPzzzzzzz";
1511 text[15][5]=
"zzzzzaBcDeFgHiJkLmNoPzzzzzz";
1512 text[15][6]=
"zzzzzzaBcDeFgHiJkLmNoPzzzzz";
1513 text[15][7]=
"zzzzzzzaBcDeFgHiJkLmNoPzzzz";
1514 text[15][8]=
"zzzzzzzzaBcDeFgHiJkLmNoPzzz";
1515 text[15][9]=
"zzzzzzzzzaBcDeFgHiJkLmNoPzz";
1516 text[15][10]=
"zzzzzzzzzzaBcDeFgHiJkLmNoPz";
1517 text[15][11]=
"zzzzzzzzzzzaBcDeFgHiJkLmNoP";
1518 text[16][0]=
"aBcDeFgHiJkLmNoPqzzzzzzzzzz";
1519 text[16][1]=
"zaBcDeFgHiJkLmNoPqzzzzzzzzz";
1520 text[16][2]=
"zzaBcDeFgHiJkLmNoPqzzzzzzzz";
1521 text[16][3]=
"zzzaBcDeFgHiJkLmNoPqzzzzzzz";
1522 text[16][4]=
"zzzzaBcDeFgHiJkLmNoPqzzzzzz";
1523 text[16][5]=
"zzzzzaBcDeFgHiJkLmNoPqzzzzz";
1524 text[16][6]=
"zzzzzzaBcDeFgHiJkLmNoPqzzzz";
1525 text[16][7]=
"zzzzzzzaBcDeFgHiJkLmNoPqzzz";
1526 text[16][8]=
"zzzzzzzzaBcDeFgHiJkLmNoPqzz";
1527 text[16][9]=
"zzzzzzzzzaBcDeFgHiJkLmNoPqz";
1528 text[16][10]=
"zzzzzzzzzzaBcDeFgHiJkLmNoPq";
1529 text[17][0]=
"aBcDeFgHiJkLmNoPqRzzzzzzzzz";
1530 text[17][1]=
"zaBcDeFgHiJkLmNoPqRzzzzzzzz";
1531 text[17][2]=
"zzaBcDeFgHiJkLmNoPqRzzzzzzz";
1532 text[17][3]=
"zzzaBcDeFgHiJkLmNoPqRzzzzzz";
1533 text[17][4]=
"zzzzaBcDeFgHiJkLmNoPqRzzzzz";
1534 text[17][5]=
"zzzzzaBcDeFgHiJkLmNoPqRzzzz";
1535 text[17][6]=
"zzzzzzaBcDeFgHiJkLmNoPqRzzz";
1536 text[17][7]=
"zzzzzzzaBcDeFgHiJkLmNoPqRzz";
1537 text[17][8]=
"zzzzzzzzaBcDeFgHiJkLmNoPqRz";
1538 text[17][9]=
"zzzzzzzzzaBcDeFgHiJkLmNoPqR";
1539 text[18][0]=
"aBcDeFgHiJkLmNoPqRszzzzzzzz";
1540 text[18][1]=
"zaBcDeFgHiJkLmNoPqRszzzzzzz";
1541 text[18][2]=
"zzaBcDeFgHiJkLmNoPqRszzzzzz";
1542 text[18][3]=
"zzzaBcDeFgHiJkLmNoPqRszzzzz";
1543 text[18][4]=
"zzzzaBcDeFgHiJkLmNoPqRszzzz";
1544 text[18][5]=
"zzzzzaBcDeFgHiJkLmNoPqRszzz";
1545 text[18][6]=
"zzzzzzaBcDeFgHiJkLmNoPqRszz";
1546 text[18][7]=
"zzzzzzzaBcDeFgHiJkLmNoPqRsz";
1547 text[18][8]=
"zzzzzzzzaBcDeFgHiJkLmNoPqRs";
1548 text[19][0]=
"aBcDeFgHiJkLmNoPqRsTzzzzzzz";
1549 text[19][1]=
"zaBcDeFgHiJkLmNoPqRsTzzzzzz";
1550 text[19][2]=
"zzaBcDeFgHiJkLmNoPqRsTzzzzz";
1551 text[19][3]=
"zzzaBcDeFgHiJkLmNoPqRsTzzzz";
1552 text[19][4]=
"zzzzaBcDeFgHiJkLmNoPqRsTzzz";
1553 text[19][5]=
"zzzzzaBcDeFgHiJkLmNoPqRsTzz";
1554 text[19][6]=
"zzzzzzaBcDeFgHiJkLmNoPqRsTz";
1555 text[19][7]=
"zzzzzzzaBcDeFgHiJkLmNoPqRsT";
1556 text[20][0]=
"aBcDeFgHiJkLmNoPqRsTuzzzzzz";
1557 text[20][1]=
"zaBcDeFgHiJkLmNoPqRsTuzzzzz";
1558 text[20][2]=
"zzaBcDeFgHiJkLmNoPqRsTuzzzz";
1559 text[20][3]=
"zzzaBcDeFgHiJkLmNoPqRsTuzzz";
1560 text[20][4]=
"zzzzaBcDeFgHiJkLmNoPqRsTuzz";
1561 text[20][5]=
"zzzzzaBcDeFgHiJkLmNoPqRsTuz";
1562 text[20][6]=
"zzzzzzaBcDeFgHiJkLmNoPqRsTu";
1563 text[21][0]=
"aBcDeFgHiJkLmNoPqRsTuVzzzzz";
1564 text[21][1]=
"zaBcDeFgHiJkLmNoPqRsTuVzzzz";
1565 text[21][2]=
"zzaBcDeFgHiJkLmNoPqRsTuVzzz";
1566 text[21][3]=
"zzzaBcDeFgHiJkLmNoPqRsTuVzz";
1567 text[21][4]=
"zzzzaBcDeFgHiJkLmNoPqRsTuVz";
1568 text[21][5]=
"zzzzzaBcDeFgHiJkLmNoPqRsTuV";
1569 text[22][0]=
"aBcDeFgHiJkLmNoPqRsTuVwzzzz";
1570 text[22][1]=
"zaBcDeFgHiJkLmNoPqRsTuVwzzz";
1571 text[22][2]=
"zzaBcDeFgHiJkLmNoPqRsTuVwzz";
1572 text[22][3]=
"zzzaBcDeFgHiJkLmNoPqRsTuVwz";
1573 text[22][4]=
"zzzzaBcDeFgHiJkLmNoPqRsTuVw";
1574 text[23][0]=
"aBcDeFgHiJkLmNoPqRsTuVwXzzz";
1575 text[23][1]=
"zaBcDeFgHiJkLmNoPqRsTuVwXzz";
1576 text[23][2]=
"zzaBcDeFgHiJkLmNoPqRsTuVwXz";
1577 text[23][3]=
"zzzaBcDeFgHiJkLmNoPqRsTuVwX";
1578 text[24][0]=
"aBcDeFgHiJkLmNoPqRsTuVwXyzz";
1579 text[24][1]=
"zaBcDeFgHiJkLmNoPqRsTuVwXyz";
1580 text[24][2]=
"zzaBcDeFgHiJkLmNoPqRsTuVwXy";
1581 text[25][0]=
"aBcDeFgHiJkLmNoPqRsTuVwXyZz";
1582 text[25][1]=
"zaBcDeFgHiJkLmNoPqRsTuVwXyZ";
1584 const char *needle[26];
1591 needle[6]=
"AbCdEfG";
1592 needle[7]=
"AbCdEfGh";
1593 needle[8]=
"AbCdEfGhI";
1594 needle[9]=
"AbCdEfGhIJ";
1595 needle[10]=
"AbCdEfGhIjK";
1596 needle[11]=
"AbCdEfGhIjKl";
1597 needle[12]=
"AbCdEfGhIjKlM";
1598 needle[13]=
"AbCdEfGhIjKlMn";
1599 needle[14]=
"AbCdEfGhIjKlMnO";
1600 needle[15]=
"AbCdEfGhIjKlMnOp";
1601 needle[16]=
"AbCdEfGhIjKlMnOpQ";
1602 needle[17]=
"AbCdEfGhIjKlMnOpQr";
1603 needle[18]=
"AbCdEfGhIjKlMnOpQrS";
1604 needle[19]=
"AbCdEfGhIjKlMnOpQrSt";
1605 needle[20]=
"AbCdEfGhIjKlMnOpQrStU";
1606 needle[21]=
"AbCdEfGhIjKlMnOpQrStUv";
1607 needle[22]=
"AbCdEfGhIjKlMnOpQrStUvW";
1608 needle[23]=
"AbCdEfGhIjKlMnOpQrStUvWx";
1609 needle[24]=
"AbCdEfGhIjKlMnOpQrStUvWxY";
1610 needle[25]=
"AbCdEfGhIjKlMnOpQrStUvWxYZ";
1613 uint8_t *found = NULL;
1614 for (i = 0; i < 26; i++) {
1615 for (j = 0; j <= (26-i); j++) {
1616 found = BasicSearchNocaseWrapper((uint8_t *)text[i][j], (uint8_t *)needle[i], 1);
1618 printf(
"Error1 searching for %s in text %s\n", needle[i], text[i][j]);
1621 found = Bs2bmNocaseWrapper((uint8_t *)text[i][j], (uint8_t *)needle[i], 1);
1623 printf(
"Error2 searching for %s in text %s\n", needle[i], text[i][j]);
1626 found = BoyerMooreNocaseWrapper((uint8_t *)text[i][j], (uint8_t *)needle[i], 1);
1628 printf(
"Error3 searching for %s in text %s\n", needle[i], text[i][j]);
1636 #ifdef ENABLE_SEARCH_STATS
1640 static int UtilSpmSearchStatsTest01(
void)
1643 text[0]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzza";
1644 text[1]=
"aaaaaaaaazaaaaaaaaaaaaaaaaaaaaazaaaaaaaaaaaaaazaaaaaaaaaaaaaaaaaaaaazaaaaaaaaaaaaaaaaaaazaaaaaaaaaaaaaaaaaaazaaaaaaaaazaaaaaaaaaazaaaaaaaaaaaaazaaaaaaaaazaaaaaaaaaaaaaaaaazaaaaaaaaaaaaaaaaazaaaaaaaaazaaaaaaaaaazaaaaaraaaaazaaaaaaazaaaaaaaaaaaaaazaaaaaaaazaaaaaaaaazaaaaaaaaaaaaB";
1645 text[2]=
"aBaBaBaBaBaBaBaBazaBaBaBaBaBaBazaBaBaBaBaBaBaBaBaBzBaBaBaBaBaBaBaBazaBaBaBaBaBaBaBzBaBaBaBaBaBaBzBaBaBaBaBzBaBaBaBaBaBzBaBaBaBaBaBzBaBaBaBaBaBaBaBazaBaBaBaBaBaBaBaBaBaBaBaBazaBaBaBaBaBaBaBaBaBzBaBaBaBaBaBaBaBzBaBaBaBaBaBaBaBaBaBzBaBaBaBaBaBaBaBaBaBaBazaBaBaBaBaBaBaBazaBaBaBaBaBc";
1646 text[3]=
"aBcaBcaBcaBcaBczBcaBcaBzaBcaBcaBcaBcaBcaBcaBcaBcazcaBcaBcaBcaBcaBcaBcaBzaBcaBcaBcaBcaBcaBczBcaBcaBcaBcaBcaBzaBcaBcaBcaBcaBcaBcaBcazcaBcaBcaBcaBcaBcaBcaBcaBczBcaBcaBcaBcaBcaBcaBczBcaBcaBcaBcaBzaBcaBcaBcaBcaBcaBcaBcazcaBcaBcaBcaBcaBcazcaBcaBcaBcaBcaBcaBzaBcaBcaBcazcaBcaBcaBcaBcaBcD";
1647 text[4]=
"aBcDaBcDaBcDaBczaBcDaBcDaBcDaBcDaBczaBcDaBcDaBcDaBcDzBcDaBcDaBcDaBcDzBcDaBcDaBczaBcDaBcDaBczaBcDaBcDaBcDaBcDaBzDaBcDaBcDaBcDaBcDaBcDaBcDaBcDaBczaBcDaBcDaBcDaBcDaBcDaBzDaBcDaBcDaBcDaBzDaBcDaBcDaBzDaBcDaBcDaBcDaBcDaBcDaBczaBcDaBcDaBcDaBcDazcDaBcDaBcDaBcDaBcDzBcDaBcDaBcDaBcDaBcDaBcDe";
1648 text[5]=
"aBcDeaBcDeaBcDeazcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDezBcDeaBcDeaBcDzaBcDeaBcDeaBcDeazcDzaBcDeaBcDezBcDeaBzDeaBcDeaBcDeazcDeaBcDeaBcDeaBcDzaBcDeaBcDeaBczeaBcDeaBcDeaBzDeaBcDeaBcDezBcDeaBcDzaBcDeaBcDezBcDeaBcDezBcDeaBczeaBcDeaBcDeaBzDeaBcDezBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDezzzaBcDeF";
1649 text[6]=
"aBcDeaBcDeaBcDeazcDeaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDeaBcDzaBzDeaBcDeaBcDeaBcDzaBcDzaBcDeaBcDeaBcDeaBcDzaBzDeaBcDeaBcDeaBczzaBcDeaBcDeaBcDzazcDeaBcDeaBcDeaBcDzaBzDeaBcDeaBcDeaBcDeazcDeaBcDeaBcDeaBcDeaBczeaBcDeaBcDeaBcDeaBczeaBcDezzzaBcDeFg";
1650 text[7]=
"aBcDeaBczeaBcDzaBcDezBcDeaBcDeaBcDeaBcDzaBzDeaBcDeaBcDeaBzDzaBcDeaBcDeazcDeaBcDzaBcDeaBczeaBcDeaBcDeaBzDzaBcDeaBcDeaBcDezBcDzaBcDeaBzDeaBcDeaBcDezBcDzaBcDeaBcDeaBzDeaBcDeaBcDeaBzDeaBcDeaBcDezBcDeaBcDeaBcDeazcDeaBcDeaBcDeaBcDzaBcDeaBcDeaBcDeaBcDzaBcDeaBcDeaBcDeaBrDeaBcDeaBcDezzzaBcDeFgH";
1651 text[8]=
"aBcDeaBcDeaBczzaBcDeazcDeaBcDezBcDeaBcDzaBcDeaBcDeaBcDeaBczzaBcDeaBcDeaBczeaBcDeaBcDzzBcDeaBcDeaBcDzaBczeaBcDeaBcDzaBcDeaBczeaBcDeaBcDeaBzDeaBcDeaBcDeaBzDeaBcDeaBcDzaBcDeaBcDeazcDeaBcDeaBcDzaBcDeaBcDeaBcDeazcDeaBcDeaBcDeaBcDeazcDeaBcDeaBcDeaBczeaBcDeaBzDeaBcDeaBcDeaBcDeaBcDezzzaBcDeFgHi";
1652 text[9]=
"aBcDeaBcDzaBcDzaBcDeaBcDeaBcDzaBcDeaBcDzaBcDeazcDeaBcDeaBcDzzBcDeaBcDeaBczeaBcDzaBcDezBcDeaBczeaBcDzaBcDezBcDeaBcDzaBczeaBcDeaBcDzaBcDeazcDeaBcDeaBcDzaBczeaBcDeaBcDzaBzDeaBcDeaBczeaBcDeaBcDzaBcDeaBcDeaBzDeaBcDeaBcDeaBczeaBcDeaBcDeaBcDeaBzDeaBcDeaBcDeazcDeaBcDeaBcDeaBcDeaBcDezzzaBcDeFgHiJ";
1653 text[10]=
"aBcDeaBcDeaBczeaBcDzaBczeaBcDeaBczeaBcDeaBcDzaBcDeaBcDeazcDeaBcDeaBcDeaBzDzaBcDeazcDeaBcDeazcDeaBcDzaBcDeazcDeaBcDeaBczzaBcDeaBcDeaBzDeaBcDeaBcDzaBczeaBcDeaBcDeaBcDeaBczeaBcDeaBcDeaBcDzaBcDeaBcDeaBcDezBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDezBcDeaBcDeaBcDeaBzDeaBcDeaBcDezzzaBcDeFgHiJk";
1654 text[11]=
"aBcDeaBcDeaBcDeaBcDeaBzDeaBcDeaBcDzaBcDzaBcDeaBcDeaBcDeaBcDeazcDeaBcDzaBcDeaBcDeaBcDeaBcDzaBcDeaBcDzaBcDzaBcDeaBcDeaBcDeaBcDzzBcDeaBcDeaBcDeaBcDzaBcDzaBcDeaBzDeaBcDeaBcDezBcDeaBcDeazcDeaBcDeaBcDezBcDeaBcDeaBcDeazcDeaBcDeaBzDeaBcDeaBczeaBcDeazcDeaBcDezBcDeaBcDeaBcDeaBcDeaBcDezzzaBcDeFgHiJkL";
1655 text[12]=
"aBcDeaBcDeaBcDeaBcDeaBzDeaBcDeaBzDeaBcDeaBcDezBcDeaBcDeazcDeaBcDeaBcDeazcDeaBcDeaBczeaBcDeaBcDeaBcDezBcDeaBcDzaBcDeaBcDzaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDzaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDeaBcDeaBcDeaBcDezzzaBcDeFgHiJkLm";
1656 text[13]=
"aBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDezzzaBcDeFgHiJkLmN";
1657 text[14]=
"aBcDeaBcDeaBcDzaBcDeaBcDeaBcDeaBcDzaBcDeaBcDeaBcDeaBcDzaBcDeaBcDeaBcDeaBcDzaBcDeaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDzaBcDezzzaBcDeFgHiJkLmNo";
1658 text[15]=
"aBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDzaBcDeaBcDzaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDzaBcDeaBcDzaBcDeaBcDzaBcDeaBcDzaBcDeaBcDzaBcDeaBcDzaBcDeaBcDeaBcDeaBcDezzzaBcDeFgHiJkLmNoP";
1667 needle[6]=
"aBcDeFg";
1668 needle[7]=
"aBcDeFgH";
1669 needle[8]=
"aBcDeFgHi";
1670 needle[9]=
"aBcDeFgHiJ";
1671 needle[10]=
"aBcDeFgHiJk";
1672 needle[11]=
"aBcDeFgHiJkL";
1673 needle[12]=
"aBcDeFgHiJkLm";
1674 needle[13]=
"aBcDeFgHiJkLmN";
1675 needle[14]=
"aBcDeFgHiJkLmNo";
1676 needle[15]=
"aBcDeFgHiJkLmNoP";
1679 uint8_t *found = NULL;
1680 printf(
"\nStats for text of greater length (text with a lot of partial matches, worst case for a basic search):\n");
1681 for (i = 0; i < 16; i++) {
1682 printf(
"Pattern length %d with BasicSearch:", i+1);
1683 found = BasicSearchWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
1685 printf(
"Error1 searching for %s in text %s\n", needle[i], text[i]);
1688 printf(
"Pattern length %d with Bs2BmSearch:", i+1);
1689 found = Bs2bmWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
1691 printf(
"Error2 searching for %s in text %s\n", needle[i], text[i]);
1694 printf(
"Pattern length %d with BoyerMooreSearch:", i+1);
1695 found = BoyerMooreWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
1697 printf(
"Error3 searching for %s in text %s\n", needle[i], text[i]);
1708 static int UtilSpmSearchStatsTest02(
void)
1711 text[0]=
"zzzzzzzzzzzzzzzzzza";
1712 text[1]=
"zzzzzzzzzzzzzzzzzzaB";
1713 text[2]=
"zzzzzzzzzzzzzzzzzzaBc";
1714 text[3]=
"zzzzzzzzzzzzzzzzzzaBcD";
1715 text[4]=
"zzzzzzzzzzzzzzzzzzaBcDe";
1716 text[5]=
"zzzzzzzzzzzzzzzzzzzzaBcDeF";
1717 text[6]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFg";
1718 text[7]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgH";
1719 text[8]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgHi";
1720 text[9]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgHiJ";
1721 text[10]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgHiJk";
1722 text[11]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgHiJkL";
1723 text[12]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgHiJkLm";
1724 text[13]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgHiJkLmN";
1725 text[14]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgHiJkLmNo";
1726 text[15]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgHiJkLmNoP";
1735 needle[6]=
"aBcDeFg";
1736 needle[7]=
"aBcDeFgH";
1737 needle[8]=
"aBcDeFgHi";
1738 needle[9]=
"aBcDeFgHiJ";
1739 needle[10]=
"aBcDeFgHiJk";
1740 needle[11]=
"aBcDeFgHiJkL";
1741 needle[12]=
"aBcDeFgHiJkLm";
1742 needle[13]=
"aBcDeFgHiJkLmN";
1743 needle[14]=
"aBcDeFgHiJkLmNo";
1744 needle[15]=
"aBcDeFgHiJkLmNoP";
1747 uint8_t *found = NULL;
1748 printf(
"\nStats for text of lower length:\n");
1749 for (i = 0; i < 16; i++) {
1750 printf(
"Pattern length %d with BasicSearch:", i+1);
1751 found = BasicSearchWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
1753 printf(
"Error1 searching for %s in text %s\n", needle[i], text[i]);
1756 printf(
"Pattern length %d with Bs2BmSearch:", i+1);
1757 found = Bs2bmWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
1759 printf(
"Error2 searching for %s in text %s\n", needle[i], text[i]);
1762 printf(
"Pattern length %d with BoyerMooreSearch:", i+1);
1763 found = BoyerMooreWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
1765 printf(
"Error3 searching for %s in text %s\n", needle[i], text[i]);
1774 static int UtilSpmSearchStatsTest03(
void)
1779 text[2]=
"zzzzzzaBc";
1780 text[3]=
"zzzzzzaBcD";
1781 text[4]=
"zzzzzzaBcDe";
1782 text[5]=
"zzzzzzzzaBcDeF";
1783 text[6]=
"zzzzzzzzaBcDeFg";
1784 text[7]=
"zzzzzzzzaBcDeFgH";
1785 text[8]=
"zzzzzzzzaBcDeFgHi";
1786 text[9]=
"zzzzzzzzaBcDeFgHiJ";
1787 text[10]=
"zzzzzzzzaBcDeFgHiJk";
1788 text[11]=
"zzzzzzzzaBcDeFgHiJkL";
1789 text[12]=
"zzzzzzzzaBcDeFgHiJkLm";
1790 text[13]=
"zzzzzzzzaBcDeFgHiJkLmN";
1791 text[14]=
"zzzzzzzzaBcDeFgHiJkLmNo";
1792 text[15]=
"zzzzzzzzaBcDeFgHiJkLmNoP";
1801 needle[6]=
"aBcDeFg";
1802 needle[7]=
"aBcDeFgH";
1803 needle[8]=
"aBcDeFgHi";
1804 needle[9]=
"aBcDeFgHiJ";
1805 needle[10]=
"aBcDeFgHiJk";
1806 needle[11]=
"aBcDeFgHiJkL";
1807 needle[12]=
"aBcDeFgHiJkLm";
1808 needle[13]=
"aBcDeFgHiJkLmN";
1809 needle[14]=
"aBcDeFgHiJkLmNo";
1810 needle[15]=
"aBcDeFgHiJkLmNoP";
1813 uint8_t *found = NULL;
1814 printf(
"\nStats for text of lower length (badcase for):\n");
1815 for (i = 0; i < 16; i++) {
1816 printf(
"Pattern length %d with BasicSearch:", i+1);
1817 found = BasicSearchWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
1819 printf(
"Error1 searching for %s in text %s\n", needle[i], text[i]);
1822 printf(
"Pattern length %d with Bs2BmSearch:", i+1);
1823 found = Bs2bmWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
1825 printf(
"Error2 searching for %s in text %s\n", needle[i], text[i]);
1828 printf(
"Pattern length %d with BoyerMooreSearch:", i+1);
1829 found = BoyerMooreWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
1831 printf(
"Error3 searching for %s in text %s\n", needle[i], text[i]);
1842 static int UtilSpmSearchStatsTest04(
void)
1845 text[0]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzza";
1846 text[1]=
"aaaaaaaaazaaaaaaaaaaaaaaaaaaaaazaaaaaaaaaaaaaazaaaaaaaaaaaaaaaaaaaaazaaaaaaaaaaaaaaaaaaazaaaaaaaaaaaaaaaaaaazaaaaaaaaazaaaaaaaaaazaaaaaaaaaaaaazaaaaaaaaazaaaaaaaaaaaaaaaaazaaaaaaaaaaaaaaaaazaaaaaaaaazaaaaaaaaaazaaaaaraaaaazaaaaaaazaaaaaaaaaaaaaazaaaaaaaazaaaaaaaaazaaaaaaaaaaaaB";
1847 text[2]=
"aBaBaBaBaBaBaBaBazaBaBaBaBaBaBazaBaBaBaBaBaBaBaBaBzBaBaBaBaBaBaBaBazaBaBaBaBaBaBaBzBaBaBaBaBaBaBzBaBaBaBaBzBaBaBaBaBaBzBaBaBaBaBaBzBaBaBaBaBaBaBaBazaBaBaBaBaBaBaBaBaBaBaBaBazaBaBaBaBaBaBaBaBaBzBaBaBaBaBaBaBaBzBaBaBaBaBaBaBaBaBaBzBaBaBaBaBaBaBaBaBaBaBazaBaBaBaBaBaBaBazaBaBaBaBaBc";
1848 text[3]=
"aBcaBcaBcaBcaBczBcaBcaBzaBcaBcaBcaBcaBcaBcaBcaBcazcaBcaBcaBcaBcaBcaBcaBzaBcaBcaBcaBcaBcaBczBcaBcaBcaBcaBcaBzaBcaBcaBcaBcaBcaBcaBcazcaBcaBcaBcaBcaBcaBcaBcaBczBcaBcaBcaBcaBcaBcaBczBcaBcaBcaBcaBzaBcaBcaBcaBcaBcaBcaBcazcaBcaBcaBcaBcaBcazcaBcaBcaBcaBcaBcaBzaBcaBcaBcazcaBcaBcaBcaBcaBcD";
1849 text[4]=
"aBcDaBcDaBcDaBczaBcDaBcDaBcDaBcDaBczaBcDaBcDaBcDaBcDzBcDaBcDaBcDaBcDzBcDaBcDaBczaBcDaBcDaBczaBcDaBcDaBcDaBcDaBzDaBcDaBcDaBcDaBcDaBcDaBcDaBcDaBczaBcDaBcDaBcDaBcDaBcDaBzDaBcDaBcDaBcDaBzDaBcDaBcDaBzDaBcDaBcDaBcDaBcDaBcDaBczaBcDaBcDaBcDaBcDazcDaBcDaBcDaBcDaBcDzBcDaBcDaBcDaBcDaBcDaBcDe";
1850 text[5]=
"aBcDeaBcDeaBcDeazcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDezBcDeaBcDeaBcDzaBcDeaBcDeaBcDeazcDzaBcDeaBcDezBcDeaBzDeaBcDeaBcDeazcDeaBcDeaBcDeaBcDzaBcDeaBcDeaBczeaBcDeaBcDeaBzDeaBcDeaBcDezBcDeaBcDzaBcDeaBcDezBcDeaBcDezBcDeaBczeaBcDeaBcDeaBzDeaBcDezBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDezzzaBcDeF";
1851 text[6]=
"aBcDeaBcDeaBcDeazcDeaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDeaBcDzaBzDeaBcDeaBcDeaBcDzaBcDzaBcDeaBcDeaBcDeaBcDzaBzDeaBcDeaBcDeaBczzaBcDeaBcDeaBcDzazcDeaBcDeaBcDeaBcDzaBzDeaBcDeaBcDeaBcDeazcDeaBcDeaBcDeaBcDeaBczeaBcDeaBcDeaBcDeaBczeaBcDezzzaBcDeFg";
1852 text[7]=
"aBcDeaBczeaBcDzaBcDezBcDeaBcDeaBcDeaBcDzaBzDeaBcDeaBcDeaBzDzaBcDeaBcDeazcDeaBcDzaBcDeaBczeaBcDeaBcDeaBzDzaBcDeaBcDeaBcDezBcDzaBcDeaBzDeaBcDeaBcDezBcDzaBcDeaBcDeaBzDeaBcDeaBcDeaBzDeaBcDeaBcDezBcDeaBcDeaBcDeazcDeaBcDeaBcDeaBcDzaBcDeaBcDeaBcDeaBcDzaBcDeaBcDeaBcDeaBrDeaBcDeaBcDezzzaBcDeFgH";
1853 text[8]=
"aBcDeaBcDeaBczzaBcDeazcDeaBcDezBcDeaBcDzaBcDeaBcDeaBcDeaBczzaBcDeaBcDeaBczeaBcDeaBcDzzBcDeaBcDeaBcDzaBczeaBcDeaBcDzaBcDeaBczeaBcDeaBcDeaBzDeaBcDeaBcDeaBzDeaBcDeaBcDzaBcDeaBcDeazcDeaBcDeaBcDzaBcDeaBcDeaBcDeazcDeaBcDeaBcDeaBcDeazcDeaBcDeaBcDeaBczeaBcDeaBzDeaBcDeaBcDeaBcDeaBcDezzzaBcDeFgHi";
1854 text[9]=
"aBcDeaBcDzaBcDzaBcDeaBcDeaBcDzaBcDeaBcDzaBcDeazcDeaBcDeaBcDzzBcDeaBcDeaBczeaBcDzaBcDezBcDeaBczeaBcDzaBcDezBcDeaBcDzaBczeaBcDeaBcDzaBcDeazcDeaBcDeaBcDzaBczeaBcDeaBcDzaBzDeaBcDeaBczeaBcDeaBcDzaBcDeaBcDeaBzDeaBcDeaBcDeaBczeaBcDeaBcDeaBcDeaBzDeaBcDeaBcDeazcDeaBcDeaBcDeaBcDeaBcDezzzaBcDeFgHiJ";
1855 text[10]=
"aBcDeaBcDeaBczeaBcDzaBczeaBcDeaBczeaBcDeaBcDzaBcDeaBcDeazcDeaBcDeaBcDeaBzDzaBcDeazcDeaBcDeazcDeaBcDzaBcDeazcDeaBcDeaBczzaBcDeaBcDeaBzDeaBcDeaBcDzaBczeaBcDeaBcDeaBcDeaBczeaBcDeaBcDeaBcDzaBcDeaBcDeaBcDezBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDezBcDeaBcDeaBcDeaBzDeaBcDeaBcDezzzaBcDeFgHiJk";
1856 text[11]=
"aBcDeaBcDeaBcDeaBcDeaBzDeaBcDeaBcDzaBcDzaBcDeaBcDeaBcDeaBcDeazcDeaBcDzaBcDeaBcDeaBcDeaBcDzaBcDeaBcDzaBcDzaBcDeaBcDeaBcDeaBcDzzBcDeaBcDeaBcDeaBcDzaBcDzaBcDeaBzDeaBcDeaBcDezBcDeaBcDeazcDeaBcDeaBcDezBcDeaBcDeaBcDeazcDeaBcDeaBzDeaBcDeaBczeaBcDeazcDeaBcDezBcDeaBcDeaBcDeaBcDeaBcDezzzaBcDeFgHiJkL";
1857 text[12]=
"aBcDeaBcDeaBcDeaBcDeaBzDeaBcDeaBzDeaBcDeaBcDezBcDeaBcDeazcDeaBcDeaBcDeazcDeaBcDeaBczeaBcDeaBcDeaBcDezBcDeaBcDzaBcDeaBcDzaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDzaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDeaBcDeaBcDeaBcDezzzaBcDeFgHiJkLm";
1858 text[13]=
"aBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDeaBcDezzzaBcDeFgHiJkLmN";
1859 text[14]=
"aBcDeaBcDeaBcDzaBcDeaBcDeaBcDeaBcDzaBcDeaBcDeaBcDeaBcDzaBcDeaBcDeaBcDeaBcDzaBcDeaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDzaBcDezzzaBcDeFgHiJkLmNo";
1860 text[15]=
"aBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDzaBcDeaBcDzaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDzaBcDeaBcDeaBcDzaBcDeaBcDzaBcDeaBcDzaBcDeaBcDzaBcDeaBcDzaBcDeaBcDzaBcDeaBcDzaBcDeaBcDeaBcDeaBcDezzzaBcDeFgHiJkLmNoP";
1870 needle[6]=
"aBcDeFg";
1871 needle[7]=
"aBcDeFgH";
1872 needle[8]=
"aBcDeFgHi";
1873 needle[9]=
"aBcDeFgHiJ";
1874 needle[10]=
"aBcDeFgHiJk";
1875 needle[11]=
"aBcDeFgHiJkL";
1876 needle[12]=
"aBcDeFgHiJkLm";
1877 needle[13]=
"aBcDeFgHiJkLmN";
1878 needle[14]=
"aBcDeFgHiJkLmNo";
1879 needle[15]=
"aBcDeFgHiJkLmNoP";
1882 uint8_t *found = NULL;
1883 printf(
"\nStats for text of greater length:\n");
1884 for (i = 0; i < 16; i++) {
1885 printf(
"Pattern length %d with BasicSearch (Building Context):", i + 1);
1886 found = BasicSearchCtxWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
1888 printf(
"Error1 searching for %s in text %s\n", needle[i], text[i]);
1891 printf(
"Pattern length %d with Bs2BmSearch (Building Context):", i + 1);
1892 found = Bs2bmCtxWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
1894 printf(
"Error2 searching for %s in text %s\n", needle[i], text[i]);
1897 printf(
"Pattern length %d with BoyerMooreSearch (Building Context):", i + 1);
1898 found = BoyerMooreCtxWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
1900 printf(
"Error3 searching for %s in text %s\n", needle[i], text[i]);
1903 printf(
"Pattern length %d with SpmSearch (Building Context):", i + 1);
1904 found = RawCtxWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
1906 printf(
"Error3 searching for %s in text %s\n", needle[i], text[i]);
1917 static int UtilSpmSearchStatsTest05(
void)
1920 text[0]=
"zzzzzzzzzzzzzzzzzza";
1921 text[1]=
"zzzzzzzzzzzzzzzzzzaB";
1922 text[2]=
"zzzzzzzzzzzzzzzzzzaBc";
1923 text[3]=
"zzzzzzzzzzzzzzzzzzaBcD";
1924 text[4]=
"zzzzzzzzzzzzzzzzzzaBcDe";
1925 text[5]=
"zzzzzzzzzzzzzzzzzzzzaBcDeF";
1926 text[6]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFg";
1927 text[7]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgH";
1928 text[8]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgHi";
1929 text[9]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgHiJ";
1930 text[10]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgHiJk";
1931 text[11]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgHiJkL";
1932 text[12]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgHiJkLm";
1933 text[13]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgHiJkLmN";
1934 text[14]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgHiJkLmNo";
1935 text[15]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgHiJkLmNoP";
1944 needle[6]=
"aBcDeFg";
1945 needle[7]=
"aBcDeFgH";
1946 needle[8]=
"aBcDeFgHi";
1947 needle[9]=
"aBcDeFgHiJ";
1948 needle[10]=
"aBcDeFgHiJk";
1949 needle[11]=
"aBcDeFgHiJkL";
1950 needle[12]=
"aBcDeFgHiJkLm";
1951 needle[13]=
"aBcDeFgHiJkLmN";
1952 needle[14]=
"aBcDeFgHiJkLmNo";
1953 needle[15]=
"aBcDeFgHiJkLmNoP";
1956 uint8_t *found = NULL;
1957 printf(
"\nStats for text of lower length:\n");
1958 for (i = 0; i < 16; i++) {
1959 printf(
"Pattern length %d with BasicSearch (Building Context):", i+1);
1960 found = BasicSearchCtxWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
1962 printf(
"Error1 searching for %s in text %s\n", needle[i], text[i]);
1965 printf(
"Pattern length %d with Bs2BmSearch (Building Context):", i+1);
1966 found = Bs2bmCtxWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
1968 printf(
"Error2 searching for %s in text %s\n", needle[i], text[i]);
1971 printf(
"Pattern length %d with BoyerMooreSearch (Building Context):", i+1);
1972 found = BoyerMooreCtxWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
1974 printf(
"Error3 searching for %s in text %s\n", needle[i], text[i]);
1983 static int UtilSpmSearchStatsTest06(
void)
1986 text[0]=
"zzzzkzzzzzzzkzzzzzza";
1987 text[1]=
"BBBBkBBBBBBBkBBBBBaB";
1988 text[2]=
"BcBckcBcBcBckcBcBcaBc";
1989 text[3]=
"BcDBkDBcDBcDkcDBcDaBcD";
1990 text[4]=
"BcDekcDeBcDekcDezzaBcDe";
2000 uint8_t *found = NULL;
2001 printf(
"\nStats for text of lower length (badcase for):\n");
2002 for (i = 0; i < 5; i++) {
2003 printf(
"Pattern length %d with BasicSearch (Building Context):", i+1);
2004 found = BasicSearchCtxWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
2006 printf(
"Error1 searching for %s in text %s\n", needle[i], text[i]);
2009 printf(
"Pattern length %d with Bs2BmSearch (Building Context):", i+1);
2010 found = Bs2bmCtxWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
2012 printf(
"Error2 searching for %s in text %s\n", needle[i], text[i]);
2015 printf(
"Pattern length %d with BoyerMooreSearch (Building Context):", i+1);
2016 found = BoyerMooreCtxWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
2018 printf(
"Error3 searching for %s in text %s\n", needle[i], text[i]);
2026 static int UtilSpmSearchStatsTest07(
void)
2043 uint8_t *found = NULL;
2044 printf(
"\nStats for text of real lower length (badcase for):\n");
2045 for (i = 0; i < 5; i++) {
2046 printf(
"Pattern length %d with BasicSearch (Building Context):", i+1);
2047 found = BasicSearchCtxWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
2049 printf(
"Error1 searching for %s in text %s\n", needle[i], text[i]);
2052 printf(
"Pattern length %d with Bs2BmSearch (Building Context):", i+1);
2053 found = Bs2bmCtxWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
2055 printf(
"Error2 searching for %s in text %s\n", needle[i], text[i]);
2058 printf(
"Pattern length %d with BoyerMooreSearch (Building Context):", i+1);
2059 found = BoyerMooreCtxWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
2061 printf(
"Error3 searching for %s in text %s\n", needle[i], text[i]);
2072 static int UtilSpmNocaseSearchStatsTest01(
void)
2075 text[0]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzza";
2076 text[1]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaB";
2077 text[2]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaBc";
2078 text[3]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaBcD";
2079 text[4]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaBcDe";
2080 text[5]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaBcDeF";
2081 text[6]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaBcDeFg";
2082 text[7]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaBcDeFgH";
2083 text[8]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaBcDeFgHi";
2084 text[9]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaBcDeFgHiJ";
2085 text[10]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaBcDeFgHiJk";
2086 text[11]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaBcDeFgHiJkL";
2087 text[12]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaBcDeFgHiJkLm";
2088 text[13]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaBcDeFgHiJkLmN";
2089 text[14]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaBcDeFgHiJkLmNo";
2090 text[15]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaBcDeFgHiJkLmNoP";
2099 needle[6]=
"aBcDeFg";
2100 needle[7]=
"aBcDeFgH";
2101 needle[8]=
"aBcDeFgHi";
2102 needle[9]=
"aBcDeFgHiJ";
2103 needle[10]=
"aBcDeFgHiJk";
2104 needle[11]=
"aBcDeFgHiJkL";
2105 needle[12]=
"aBcDeFgHiJkLm";
2106 needle[13]=
"aBcDeFgHiJkLmN";
2107 needle[14]=
"aBcDeFgHiJkLmNo";
2108 needle[15]=
"aBcDeFgHiJkLmNoP";
2111 uint8_t *found = NULL;
2112 printf(
"\nStats for text of greater length:\n");
2113 for (i = 0; i < 16; i++) {
2114 printf(
"Pattern length %d with BasicSearch:", i+1);
2115 found = BasicSearchNocaseWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
2117 printf(
"Error1 searching for %s in text %s\n", needle[i], text[i]);
2120 printf(
"Pattern length %d with Bs2BmSearch:", i+1);
2121 found = Bs2bmNocaseWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
2123 printf(
"Error2 searching for %s in text %s\n", needle[i], text[i]);
2126 printf(
"Pattern length %d with BoyerMooreSearch:", i+1);
2127 found = BoyerMooreNocaseWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
2129 printf(
"Error3 searching for %s in text %s\n", needle[i], text[i]);
2137 static int UtilSpmNocaseSearchStatsTest02(
void)
2140 text[0]=
"zzzzzzzzzzzzzzzzzza";
2141 text[1]=
"zzzzzzzzzzzzzzzzzzaB";
2142 text[2]=
"zzzzzzzzzzzzzzzzzzaBc";
2143 text[3]=
"zzzzzzzzzzzzzzzzzzaBcD";
2144 text[4]=
"zzzzzzzzzzzzzzzzzzaBcDe";
2145 text[5]=
"zzzzzzzzzzzzzzzzzzzzaBcDeF";
2146 text[6]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFg";
2147 text[7]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgH";
2148 text[8]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgHi";
2149 text[9]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgHiJ";
2150 text[10]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgHiJk";
2151 text[11]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgHiJkL";
2152 text[12]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgHiJkLm";
2153 text[13]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgHiJkLmN";
2154 text[14]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgHiJkLmNo";
2155 text[15]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgHiJkLmNoP";
2164 needle[6]=
"aBcDeFg";
2165 needle[7]=
"aBcDeFgH";
2166 needle[8]=
"aBcDeFgHi";
2167 needle[9]=
"aBcDeFgHiJ";
2168 needle[10]=
"aBcDeFgHiJk";
2169 needle[11]=
"aBcDeFgHiJkL";
2170 needle[12]=
"aBcDeFgHiJkLm";
2171 needle[13]=
"aBcDeFgHiJkLmN";
2172 needle[14]=
"aBcDeFgHiJkLmNo";
2173 needle[15]=
"aBcDeFgHiJkLmNoP";
2176 uint8_t *found = NULL;
2177 printf(
"\nStats for text of lower length:\n");
2178 for (i = 0; i < 16; i++) {
2179 printf(
"Pattern length %d with BasicSearch:", i+1);
2180 found = BasicSearchNocaseWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
2182 printf(
"Error1 searching for %s in text %s\n", needle[i], text[i]);
2185 printf(
"Pattern length %d with Bs2BmSearch:", i+1);
2186 found = Bs2bmNocaseWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
2188 printf(
"Error2 searching for %s in text %s\n", needle[i], text[i]);
2191 printf(
"Pattern length %d with BoyerMooreSearch:", i+1);
2192 found = BoyerMooreNocaseWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
2194 printf(
"Error3 searching for %s in text %s\n", needle[i], text[i]);
2203 static int UtilSpmNocaseSearchStatsTest03(
void)
2206 text[0]=
"zzzzkzzzzzzzkzzzzzza";
2207 text[1]=
"BBBBkBBBBBBBkBBBBBaB";
2208 text[2]=
"BcBckcBcBcBckcBcBcaBc";
2209 text[3]=
"BcDBkDBcDBcDkcDBcDaBcD";
2210 text[4]=
"BcDekcDeBcDekcDezzaBcDe";
2220 uint8_t *found = NULL;
2221 printf(
"\nStats for text of lower length (badcase for):\n");
2222 for (i = 0; i < 5; i++) {
2223 printf(
"Pattern length %d with BasicSearch:", i+1);
2224 found = BasicSearchNocaseWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
2226 printf(
"Error1 searching for %s in text %s\n", needle[i], text[i]);
2229 printf(
"Pattern length %d with Bs2BmSearch:", i+1);
2230 found = Bs2bmNocaseWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
2232 printf(
"Error2 searching for %s in text %s\n", needle[i], text[i]);
2235 printf(
"Pattern length %d with BoyerMooreSearch:", i+1);
2236 found = BoyerMooreNocaseWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
2238 printf(
"Error3 searching for %s in text %s\n", needle[i], text[i]);
2249 static int UtilSpmNocaseSearchStatsTest04(
void)
2252 text[0]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzza";
2253 text[1]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaB";
2254 text[2]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaBc";
2255 text[3]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaBcD";
2256 text[4]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaBcDe";
2257 text[5]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaBcDeF";
2258 text[6]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaBcDeFg";
2259 text[7]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaBcDeFgH";
2260 text[8]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaBcDeFgHi";
2261 text[9]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaBcDeFgHiJ";
2262 text[10]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaBcDeFgHiJk";
2263 text[11]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaBcDeFgHiJkL";
2264 text[12]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaBcDeFgHiJkLm";
2265 text[13]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaBcDeFgHiJkLmN";
2266 text[14]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaBcDeFgHiJkLmNo";
2267 text[15]=
"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzaBcDeFgHiJkLmNoP";
2276 needle[6]=
"aBcDeFg";
2277 needle[7]=
"aBcDeFgH";
2278 needle[8]=
"aBcDeFgHi";
2279 needle[9]=
"aBcDeFgHiJ";
2280 needle[10]=
"aBcDeFgHiJk";
2281 needle[11]=
"aBcDeFgHiJkL";
2282 needle[12]=
"aBcDeFgHiJkLm";
2283 needle[13]=
"aBcDeFgHiJkLmN";
2284 needle[14]=
"aBcDeFgHiJkLmNo";
2285 needle[15]=
"aBcDeFgHiJkLmNoP";
2288 uint8_t *found = NULL;
2289 printf(
"\nStats for text of greater length:\n");
2290 for (i = 0; i < 16; i++) {
2291 printf(
"Pattern length %d with BasicSearch (Building Context):", i+1);
2292 found = BasicSearchNocaseCtxWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
2294 printf(
"Error1 searching for %s in text %s\n", needle[i], text[i]);
2297 printf(
"Pattern length %d with Bs2BmSearch (Building Context):", i+1);
2298 found = Bs2bmNocaseCtxWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
2300 printf(
"Error2 searching for %s in text %s\n", needle[i], text[i]);
2303 printf(
"Pattern length %d with BoyerMooreSearch (Building Context):", i+1);
2304 found = BoyerMooreNocaseCtxWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
2306 printf(
"Error3 searching for %s in text %s\n", needle[i], text[i]);
2314 static int UtilSpmNocaseSearchStatsTest05(
void)
2317 text[0]=
"zzzzzzzzzzzzzzzzzza";
2318 text[1]=
"zzzzzzzzzzzzzzzzzzaB";
2319 text[2]=
"zzzzzzzzzzzzzzzzzzaBc";
2320 text[3]=
"zzzzzzzzzzzzzzzzzzaBcD";
2321 text[4]=
"zzzzzzzzzzzzzzzzzzaBcDe";
2322 text[5]=
"zzzzzzzzzzzzzzzzzzzzaBcDeF";
2323 text[6]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFg";
2324 text[7]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgH";
2325 text[8]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgHi";
2326 text[9]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgHiJ";
2327 text[10]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgHiJk";
2328 text[11]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgHiJkL";
2329 text[12]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgHiJkLm";
2330 text[13]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgHiJkLmN";
2331 text[14]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgHiJkLmNo";
2332 text[15]=
"zzzzzzzzzzzzzzzzzzzzaBcDeFgHiJkLmNoP";
2341 needle[6]=
"aBcDeFg";
2342 needle[7]=
"aBcDeFgH";
2343 needle[8]=
"aBcDeFgHi";
2344 needle[9]=
"aBcDeFgHiJ";
2345 needle[10]=
"aBcDeFgHiJk";
2346 needle[11]=
"aBcDeFgHiJkL";
2347 needle[12]=
"aBcDeFgHiJkLm";
2348 needle[13]=
"aBcDeFgHiJkLmN";
2349 needle[14]=
"aBcDeFgHiJkLmNo";
2350 needle[15]=
"aBcDeFgHiJkLmNoP";
2353 uint8_t *found = NULL;
2354 printf(
"\nStats for text of lower length:\n");
2355 for (i = 0; i < 16; i++) {
2356 printf(
"Pattern length %d with BasicSearch (Building Context):", i+1);
2357 found = BasicSearchNocaseCtxWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
2359 printf(
"Error1 searching for %s in text %s\n", needle[i], text[i]);
2362 printf(
"Pattern length %d with Bs2BmSearch (Building Context):", i+1);
2363 found = Bs2bmNocaseCtxWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
2365 printf(
"Error2 searching for %s in text %s\n", needle[i], text[i]);
2368 printf(
"Pattern length %d with BoyerMooreSearch (Building Context):", i+1);
2369 found = BoyerMooreNocaseCtxWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
2371 printf(
"Error3 searching for %s in text %s\n", needle[i], text[i]);
2380 static int UtilSpmNocaseSearchStatsTest06(
void)
2383 text[0]=
"zzzzkzzzzzzzkzzzzzza";
2384 text[1]=
"BBBBkBBBBBBBkBBBBBaB";
2385 text[2]=
"BcBckcBcBcBckcBcBcaBc";
2386 text[3]=
"BcDBkDBcDBcDkcDBcDaBcD";
2387 text[4]=
"BcDekcDeBcDekcDezzaBcDe";
2397 uint8_t *found = NULL;
2398 printf(
"\nStats for text of lower length (badcase for):\n");
2399 for (i = 0; i < 5; i++) {
2400 printf(
"Pattern length %d with BasicSearch (Building Context):", i+1);
2401 found = BasicSearchNocaseCtxWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
2403 printf(
"Error1 searching for %s in text %s\n", needle[i], text[i]);
2406 printf(
"Pattern length %d with Bs2BmSearch (Building Context):", i+1);
2407 found = Bs2bmNocaseCtxWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
2409 printf(
"Error2 searching for %s in text %s\n", needle[i], text[i]);
2412 printf(
"Pattern length %d with BoyerMooreSearch (Building Context):", i+1);
2413 found = BoyerMooreNocaseCtxWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
2415 printf(
"Error3 searching for %s in text %s\n", needle[i], text[i]);
2423 static int UtilSpmNocaseSearchStatsTest07(
void)
2440 uint8_t *found = NULL;
2441 printf(
"\nStats for text of real lower length (badcase for):\n");
2442 for (i = 0; i < 5; i++) {
2443 printf(
"Pattern length %d with BasicSearch (Building Context):", i+1);
2444 found = BasicSearchNocaseCtxWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
2446 printf(
"Error1 searching for %s in text %s\n", needle[i], text[i]);
2449 printf(
"Pattern length %d with Bs2BmSearch (Building Context):", i+1);
2450 found = Bs2bmNocaseCtxWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
2452 printf(
"Error2 searching for %s in text %s\n", needle[i], text[i]);
2455 printf(
"Pattern length %d with BoyerMooreSearch (Building Context):", i+1);
2456 found = BoyerMooreNocaseCtxWrapper((uint8_t *)text[i], (uint8_t *)needle[i],
STATS_TIMES);
2458 printf(
"Error3 searching for %s in text %s\n", needle[i], text[i]);
2469 #define SPM_NO_MATCH UINT32_MAX
2482 static int SpmTestSearch(
const SpmTestData *d, uint16_t matcher)
2488 uint8_t *found = NULL;
2491 if (global_thread_ctx == NULL) {
2504 if (thread_ctx == NULL) {
2511 if (found == NULL) {
2513 printf(
" should have matched at %" PRIu32
" but didn't\n",
2518 uint32_t
offset = (uint32_t)(found - (
const uint8_t *)d->
haystack);
2520 printf(
" should have matched at %" PRIu32
2521 " but matched at %" PRIu32
"\n",
2534 static int SpmSearchTest01(
void) {
2543 {
"a", 1,
"a", 1, 0, 0},
2544 {
"a", 1,
"A", 1, 1, 0},
2545 {
"A", 1,
"A", 1, 0, 0},
2546 {
"A", 1,
"a", 1, 1, 0},
2550 {
"\x00", 1,
"test\x00test", 9, 0, 4},
2552 {
"\n", 1,
"new line\n", 9, 0, 8},
2553 {
"\n", 1,
"new line\x00\n", 10, 0, 9},
2554 {
"\xff", 1,
"abcdef\xff", 7, 0, 6},
2555 {
"\xff", 1,
"abcdef\xff", 7, 1, 6},
2556 {
"$", 1,
"dollar$", 7, 0, 6},
2557 {
"^", 1,
"caret^", 6, 0, 5},
2559 {
"Suricata", 8,
"This is a Suricata test", 23, 0, 10},
2560 {
"Suricata", 8,
"This is a suricata test", 23, 1, 10},
2561 {
"Suricata", 8,
"This is a suriCATA test", 23, 1, 10},
2562 {
"suricata", 8,
"This is a Suricata test", 23, 0,
SPM_NO_MATCH},
2563 {
"Suricata", 8,
"This is a Suricat_ test", 23, 0,
SPM_NO_MATCH},
2564 {
"Suricata", 8,
"This is a _uricata test", 23, 0,
SPM_NO_MATCH},
2566 {
"foo", 3,
"foofoofoo", 9, 0, 0},
2567 {
"foo", 3,
"_foofoofoo", 9, 0, 1},
2568 {
"FOO", 3,
"foofoofoo", 9, 1, 0},
2569 {
"FOO", 3,
"_foofoofoo", 9, 1, 1},
2570 {
"FOO", 3,
"foo Foo FOo fOo foO FOO", 23, 0, 20},
2571 {
"foo", 3,
"Foo FOo fOo foO FOO foo", 23, 0, 20},
2579 if (
m->name == NULL) {
2582 printf(
"matcher: %s\n",
m->name);
2585 for (i = 0; i <
sizeof(data)/
sizeof(data[0]); i++) {
2587 if (SpmTestSearch(d, matcher) == 0) {
2588 printf(
" test %" PRIu32
": fail\n", i);
2592 printf(
" %" PRIu32
" tests passed\n", i);
2598 static int SpmSearchTest02(
void) {
2605 static const char* needles[] = {
2607 "a",
"b",
"c",
":",
"/",
"\x7f",
"\xff",
2609 "aa",
"aaa",
"aaaaaaaaaaaaaaaaaaaaaaa",
2611 "suricata",
"meerkat",
"aardvark",
"raptor",
"marmot",
"lemming",
2613 "Suricata",
"CAPS LOCK",
"mIxEd cAsE",
2621 if (
m->name == NULL) {
2624 printf(
"matcher: %s\n",
m->name);
2629 for (i = 0; i <
sizeof(needles) /
sizeof(needles[0]); i++) {
2630 const char *needle = needles[i];
2632 for (prefix = 0; prefix < 32; prefix++) {
2635 uint16_t haystack_len = prefix + d.
needle_len;
2636 char *haystack =
SCMalloc(haystack_len);
2637 if (haystack == NULL) {
2638 printf(
"alloc failure\n");
2641 memset(haystack,
' ', haystack_len);
2649 if (SpmTestSearch(&d, matcher) == 0) {
2650 printf(
" test %" PRIu32
": fail (case-sensitive)\n", i);
2657 for (j = 0; j < haystack_len; j++) {
2660 if (SpmTestSearch(&d, matcher) == 0) {
2661 printf(
" test %" PRIu32
": fail (case-insensitive)\n", i);
2668 printf(
" %" PRIu32
" tests passed\n", i);
2678 UtRegisterTest(
"UtilSpmBasicSearchTest01", UtilSpmBasicSearchTest01);
2680 UtilSpmBasicSearchNocaseTest01);
2682 UtRegisterTest(
"UtilSpmBs2bmSearchTest01", UtilSpmBs2bmSearchTest01);
2684 UtilSpmBs2bmSearchNocaseTest01);
2687 UtilSpmBoyerMooreSearchTest01);
2689 UtilSpmBoyerMooreSearchNocaseTest01);
2691 UtilSpmBoyerMooreSearchNocaseTestIssue130);
2693 UtRegisterTest(
"UtilSpmBs2bmSearchTest02", UtilSpmBs2bmSearchTest02);
2695 UtilSpmBs2bmSearchNocaseTest02);
2697 UtRegisterTest(
"UtilSpmBasicSearchTest02", UtilSpmBasicSearchTest02);
2699 UtilSpmBasicSearchNocaseTest02);
2702 UtilSpmBoyerMooreSearchTest02);
2704 UtilSpmBoyerMooreSearchNocaseTest02);
2707 UtRegisterTest(
"UtilSpmSearchOffsetsTest01", UtilSpmSearchOffsetsTest01);
2709 UtilSpmSearchOffsetsNocaseTest01);
2715 #ifdef ENABLE_SEARCH_STATS
2717 UtRegisterTest(
"UtilSpmSearchStatsTest01", UtilSpmSearchStatsTest01);
2718 UtRegisterTest(
"UtilSpmSearchStatsTest02", UtilSpmSearchStatsTest02);
2719 UtRegisterTest(
"UtilSpmSearchStatsTest03", UtilSpmSearchStatsTest03);
2722 UtilSpmNocaseSearchStatsTest01);
2724 UtilSpmNocaseSearchStatsTest02);
2726 UtilSpmNocaseSearchStatsTest03);
2729 UtRegisterTest(
"UtilSpmSearchStatsTest04", UtilSpmSearchStatsTest04);
2730 UtRegisterTest(
"UtilSpmSearchStatsTest05", UtilSpmSearchStatsTest05);
2731 UtRegisterTest(
"UtilSpmSearchStatsTest06", UtilSpmSearchStatsTest06);
2732 UtRegisterTest(
"UtilSpmSearchStatsTest07", UtilSpmSearchStatsTest07);
2735 UtilSpmNocaseSearchStatsTest04);
2737 UtilSpmNocaseSearchStatsTest05);
2739 UtilSpmNocaseSearchStatsTest06);
2741 UtilSpmNocaseSearchStatsTest07);