Ignore:
Timestamp:
Nov 21, 2005 5:01:50 PM (18 years ago)
Author:
bennylp
Message:

Added pj_stricmp_alnum() to speedup the parser!!!

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjlib/src/pjlib-test/string.c

    r65 r72  
    2020#include <pj/pool.h> 
    2121#include <pj/log.h> 
     22#include <pj/os.h> 
    2223#include "test.h" 
    2324 
     
    6465#define UL_VALUE        3456789012UL 
    6566 
     67static int stricmp_test(void) 
     68{ 
     69#define STRTEST(res,S1,S2,code) \ 
     70            do { \ 
     71                s1.ptr=S1; s1.slen=len; \ 
     72                s2.ptr=S2; s2.slen=len; \ 
     73                pj_get_timestamp(&t1); \ 
     74                if (pj_stricmp(&s1,&s2)!=res) return code; \ 
     75                pj_get_timestamp(&t2); \ 
     76                pj_sub_timestamp(&t2, &t1); \ 
     77                pj_add_timestamp(&e1, &t2); \ 
     78                pj_get_timestamp(&t1); \ 
     79                if (pj_stricmp_alnum(&s1,&s2)!=res) return code-1; \ 
     80                pj_get_timestamp(&t2); \ 
     81                pj_sub_timestamp(&t2, &t1); \ 
     82                pj_add_timestamp(&e2, &t2); \ 
     83            } while (0) 
     84 
     85    char *buf; 
     86    pj_str_t s1, s2; 
     87    pj_timestamp t1, t2, e1, e2, zero; 
     88    pj_uint32_t c1, c2; 
     89    int len; 
     90 
     91    e1.u32.hi = e1.u32.lo = e2.u32.hi = e2.u32.lo = 0; 
     92 
     93    pj_thread_sleep(0); 
     94 
     95    /* Compare empty strings. */ 
     96    len=0; 
     97    STRTEST( 0, "","",-500); 
     98 
     99    /* equal, length=1  
     100     * use buffer to simulate non-aligned string. 
     101     */ 
     102    buf = "a""A"; 
     103    len=1; 
     104    STRTEST( 0, "a",buf+0,-510); 
     105    STRTEST( 0, "a",buf+1,-512); 
     106 
     107    /* equal, length=2  
     108     * use buffer to simulate non-aligned string. 
     109     */ 
     110    buf = "aa""Aa""aA""AA"; 
     111    len=2; 
     112    STRTEST( 0, "aa",buf+0,-520); 
     113    STRTEST( 0, "aa",buf+2,-522); 
     114    STRTEST( 0, "aa",buf+4,-524); 
     115    STRTEST( 0, "aa",buf+6,-524); 
     116 
     117    /* equal, length=3  
     118     * use buffer to simulate non-aligned string. 
     119     */ 
     120    buf = "aaa""Aaa""aAa""aaA""AAa""aAA""AaA""AAA"; 
     121    len=3; 
     122    STRTEST( 0, "aaa",buf+0,-530); 
     123    STRTEST( 0, "aaa",buf+3,-532); 
     124    STRTEST( 0, "aaa",buf+6,-534); 
     125    STRTEST( 0, "aaa",buf+9,-536); 
     126    STRTEST( 0, "aaa",buf+12,-538); 
     127    STRTEST( 0, "aaa",buf+15,-540); 
     128    STRTEST( 0, "aaa",buf+18,-542); 
     129    STRTEST( 0, "aaa",buf+21,-534); 
     130 
     131    /* equal, length=4 */ 
     132    len=4; 
     133    STRTEST( 0, "aaaa","aaaa",-540); 
     134    STRTEST( 0, "aaaa","Aaaa",-542); 
     135    STRTEST( 0, "aaaa","aAaa",-544); 
     136    STRTEST( 0, "aaaa","aaAa",-546); 
     137    STRTEST( 0, "aaaa","aaaA",-548); 
     138    STRTEST( 0, "aaaa","AAaa",-550); 
     139    STRTEST( 0, "aaaa","aAAa",-552); 
     140    STRTEST( 0, "aaaa","aaAA",-554); 
     141    STRTEST( 0, "aaaa","AaAa",-556); 
     142    STRTEST( 0, "aaaa","aAaA",-558); 
     143    STRTEST( 0, "aaaa","AaaA",-560); 
     144    STRTEST( 0, "aaaa","AAAa",-562); 
     145    STRTEST( 0, "aaaa","aAAA",-564); 
     146    STRTEST( 0, "aaaa","AAaA",-566); 
     147    STRTEST( 0, "aaaa","AaAA",-568); 
     148    STRTEST( 0, "aaaa","AAAA",-570); 
     149 
     150    /* equal, length=5 */ 
     151    buf = "aaaAa""AaaaA""AaAaA""AAAAA"; 
     152    len=5; 
     153    STRTEST( 0, "aaaaa",buf+0,-580); 
     154    STRTEST( 0, "aaaaa",buf+5,-582); 
     155    STRTEST( 0, "aaaaa",buf+10,-584); 
     156    STRTEST( 0, "aaaaa",buf+15,-586); 
     157 
     158    /* not equal, length=1 */ 
     159    len=1; 
     160    STRTEST( -1, "a", "b", -600); 
     161 
     162    /* not equal, length=2 */ 
     163    buf = "ab""ba"; 
     164    len=2; 
     165    STRTEST( -1, "aa", buf+0, -610); 
     166    STRTEST( -1, "aa", buf+2, -612); 
     167 
     168    /* not equal, length=3 */ 
     169    buf = "aab""aba""baa"; 
     170    len=3; 
     171    STRTEST( -1, "aaa", buf+0, -620); 
     172    STRTEST( -1, "aaa", buf+3, -622); 
     173    STRTEST( -1, "aaa", buf+6, -624); 
     174 
     175    /* not equal, length=4 */ 
     176    buf = "aaab""aaba""abaa""baaa"; 
     177    len=4; 
     178    STRTEST( -1, "aaaa", buf+0, -630); 
     179    STRTEST( -1, "aaaa", buf+4, -632); 
     180    STRTEST( -1, "aaaa", buf+8, -634); 
     181    STRTEST( -1, "aaaa", buf+12, -636); 
     182 
     183    /* not equal, length=5 */ 
     184    buf="aaaab""aaaba""aabaa""abaaa""baaaa"; 
     185    len=5; 
     186    STRTEST( -1, "aaaaa", buf+0, -640); 
     187    STRTEST( -1, "aaaaa", buf+5, -642); 
     188    STRTEST( -1, "aaaaa", buf+10, -644); 
     189    STRTEST( -1, "aaaaa", buf+15, -646); 
     190    STRTEST( -1, "aaaaa", buf+20, -648); 
     191 
     192    zero.u32.hi = zero.u32.lo = 0; 
     193    c1 = pj_elapsed_cycle(&zero, &e1); 
     194    c2 = pj_elapsed_cycle(&zero, &e2); 
     195 
     196    if (c1 < c2) { 
     197        PJ_LOG(3,("", "  error: pj_stricmp_alnum is slower than pj_stricmp!")); 
     198        return -700; 
     199    } 
     200 
     201    PJ_LOG(3, ("", "  time: stricmp=%u, stricmp_alnum=%u (speedup=%d.%02dx)",  
     202                   c1, c2, 
     203                   (c1 * 100 / c2) / 100, 
     204                   (c1 * 100 / c2) % 100)); 
     205    return 0; 
     206#undef STRTEST 
     207} 
     208 
    66209int string_test(void) 
    67210{ 
     
    163306    /* Done. */ 
    164307    pj_pool_release(pool); 
    165     return 0; 
     308 
     309    return stricmp_test(); 
    166310} 
    167311 
Note: See TracChangeset for help on using the changeset viewer.