Changeset 1827 for trunk/lib


Ignore:
Timestamp:
Jan 6, 2012, 6:19:33 PM (7 years ago)
Author:
ksherdy
Message:

Update byte compare routine. Added generatated test cases.

Location:
trunk/lib
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/byte_compare.hpp

    r1816 r1827  
    77    Licensed to International Characters Inc.
    88       under the Academic Free License version 3.0.
    9 
    109*/
    1110
     
    1716#include "bitblock.hpp"
    1817
     18#include <iostream>
     19using namespace std;
    1920
    2021template<class T>
     
    3031IDISA_ALWAYS_INLINE bool overlap_compare(const T * x, const T * y) {
    3132    bool accum = true;
     33//cout << "accum: " << accum << endl;
     34
     35    uint8_t * p_x = (uint8_t *)x;
     36    uint8_t * p_y = (uint8_t *)y;
     37
    3238    for(int i=0; i < L/sizeof(T); i++) {
    33         accum &= compare(x,y,0);
    34         x++;
    35         y++;
     39
     40//cout << "x " << *( (T*)(p_x) ) << endl;
     41//cout << "y " << *( (T*)(p_y) ) << endl;
     42//      cout << compare(p_x,p_y,0) << endl;
     43        accum = accum && compare(p_x,p_y,0);
     44        p_x += sizeof(T);
     45        p_y += sizeof(T);
     46//cout << (void *)p_x << endl;
     47//cout << (void *)p_y << endl;
     48//cout << "accum: " << accum << endl;
    3649    }
    3750    if(L & (sizeof(T)-1)) {
    38         accum &= compare(x,y,L-sizeof(T));
    39     }
     51//      cout << L - sizeof(T) << endl;
     52        accum = accum && compare(x,y,L-sizeof(T));
     53
     54//cout << "x " << *( (T*)( (uint8_t *)x + L-sizeof(T)) ) << endl;
     55//cout << "y " << *( (T*)( (uint8_t *)y + L-sizeof(T)) ) << endl;
     56
     57//cout << "accum: " << accum << endl; 
     58  }
    4059    return accum;
    4160}
     
    4362template<class T>
    4463IDISA_ALWAYS_INLINE bool compare(const T * x, const T * y, const uint32_t offset) {
     64 
    4565    return !((*((T*)((uint8_t *)x + offset))) ^
    4666             (*((T*)((uint8_t *)y + offset))));
  • trunk/lib/test/Makefile

    r1820 r1827  
    2020
    2121clean:
    22         rm -f gen test
     22        rm -f gen test test.cpp
  • trunk/lib/test/gen.cpp

    r1820 r1827  
    2828}
    2929
     30
     31
    3032string gen_data(string name, int size) {
    3133
    3234    ostringstream ostr;
    3335
    34     ostr << "const int ary_size=" << size << ";" << endl;
    3536    ostr << "const char *" << name << "[] = {" << endl;
    3637
     
    5253}
    5354
     55string gen_data_ne(string name, int size) {
     56
     57    ostringstream ostr;
     58
     59    ostr << "const char *" << name << "[] = {" << endl;
     60
     61    for(int i=0; i <= size; i++) {
     62        ostr << "\"";
     63        for(int j=1; j<=(i-1);j++) {
     64            ostr << j % 10;
     65        }
     66        ostr << 'b';
     67        ostr << "\"";
     68        if(i<size) {
     69            ostr << ",";
     70        }
     71        ostr << endl;
     72    }
     73
     74    ostr << "};" << endl;
     75
     76    return ostr.str();
     77}
     78
     79
    5480string gen_test(string type, int lgth, string x, int idx_x, string y, int idx_y) {
    5581
     
    6086         << " y=\\\"\" << " << y << "[" << idx_y << "]" << "<< \"\\\""
    6187         << " L=" << lgth << " "
    62          << " R=\" << overlap_compare<" << type << "," << lgth << ">(" << "(" << type << "*)"
    63          << x << "[" << idx_x << "]"<< ",(" << type << "*)"
     88         << " R=\" << overlap_compare<" << type << "," << lgth << ">(" << "(" << type << "*)&"
     89         << x << "[" << idx_x << "]"<< ",(" << type << "*)&"
    6490         << y << "[" << idx_y << "]"<< ")"
    6591         << " << endl;" <<endl;
     
    7096int main() {
    7197
    72     const int size = 32;
     98    const int size = 33;
    7399    const char * x = "x";
     100    const char * y = "y";
    74101
    75102    ofstream fout;
    76103    fout.open ("test.cpp");
    77104
     105    fout << gen_prolog();
     106    fout << gen_data(x, size);
     107    fout << gen_data_ne(y, size);       
    78108
    79     fout << gen_prolog();
    80 
    81 
    82 
    83     fout << gen_data(x, size);
    84     for(int i=1;i<size;i++) {
    85         fout << gen_test("uint64_t",i, x, i, x, i);
     109// if L is 1, choose T = uint8_t
     110// if L in [2,3], choose T = uint16_t
     111// if L in [4,7], choose T = uint32_t
     112// if L in [8,15], choose = uint64_t
     113// if L in [16,00), T = SIMD_type
     114   
     115    // uint8_t 
     116    for(int i=sizeof(uint8_t);i<=size;i++) {
     117        fout << gen_test("uint8_t", i, x, i, x, i);
    86118    }
    87119
    88     for(int i=size;i>0;i--) {
    89         fout << gen_test("uint64_t",i, x, i, x, i-1);
     120    for(int i=sizeof(uint8_t);i<=size;i++) {
     121        fout << gen_test("uint8_t", i, x, i, y, i);
     122    }
     123
     124    // uint16_t
     125    for(int i=sizeof(uint16_t);i<=size;i++) {
     126        fout << gen_test("uint16_t", i, x, i, x, i);
     127    }
     128
     129    for(int i=sizeof(uint16_t);i<=size;i++) {
     130        fout << gen_test("uint16_t", i, x, i, y, i);
     131    }
     132
     133    // uint32_t
     134    for(int i=sizeof(uint32_t);i<=size;i++) {
     135        fout << gen_test("uint32_t", i, x, i, x, i);
     136    }
     137
     138    for(int i=sizeof(uint32_t);i<=size;i++) {
     139        fout << gen_test("uint32_t", i, x, i, y, i);
     140    }
     141
     142    // uint64_t
     143    for(int i=sizeof(uint64_t);i<=size;i++) {
     144        fout << gen_test("uint64_t", i, x, i, x, i);
     145    }
     146
     147    for(int i=sizeof(uint64_t);i<=size;i++) {
     148        fout << gen_test("uint64_t", i, x, i, y, i);
     149    }
     150
     151    // BitBlock
     152    for(int i=sizeof(BitBlock);i<=size;i++) {
     153        fout << gen_test("BitBlock", i, x, i, x, i);
     154        fout << endl;
     155    }
     156
     157    for(int i=sizeof(BitBlock);i<=size;i++) {
     158        fout << gen_test("BitBlock", i, x, i, y, i);
     159        fout << endl;
    90160    }
    91161
Note: See TracChangeset for help on using the changeset viewer.