Changeset 1831 for trunk/lib/test


Ignore:
Timestamp:
Jan 7, 2012, 1:34:35 PM (7 years ago)
Author:
ksherdy
Message:

Update overlap compare template specialized on BitBlock? type to
load_unaligned. Updated test generator. Added template file.

Location:
trunk/lib/test
Files:
1 added
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/lib/test/byte_compare_generator.cpp

    r1829 r1831  
    66using namespace std;
    77
    8 string gen_prolog() {
     8string read_file(string filename) {
     9
     10    ifstream file(filename.c_str());
     11
     12    if (!file) {
     13        cerr << "Error: " << filename << endl;
     14        abort();
     15    }
     16
     17    std::stringstream buffer;
     18    buffer << file.rdbuf();
     19    file.close();
     20    return buffer.str();
     21}
     22
     23void write_file(string filename, string contents) {
     24    ofstream file(filename.c_str());
     25
     26    if (!file) {
     27        cerr << "Error: " << filename << endl;
     28        abort();
     29    }
     30
     31    file << contents;
     32    file.close();
     33}
     34
     35string gen_data_array(string name, int size) {
    936
    1037    ostringstream ostr;
    11 
    12     ostr << "#include \"../byte_compare.hpp\"" << endl;
    13     ostr << "#include <iostream>" << endl;
    14     ostr << "using namespace std;" << endl;
    15     ostr << "int main() {" << endl;
    16 
    17     return ostr.str();
    18 }
    19 
    20 string gen_epilog() {
    21 
    22     ostringstream ostr;
    23 
    24     ostr << "return 1;" << endl;
    25     ostr << "}" << endl;
    26 
    27     return ostr.str();
    28 }
    29 
    30 
    31 
    32 string gen_data(string name, int size) {
    33 
    34     ostringstream ostr;
    35 
    3638    ostr << "const char *" << name << "[] = {" << endl;
    3739
     
    4951
    5052    ostr << "};" << endl;
    51 
    5253    return ostr.str();
    5354}
    5455
    55 string gen_data_ne(string name, int size) {
     56string gen_data_array_not_equal(string name, int size) {
    5657
    5758    ostringstream ostr;
    58 
    5959    ostr << "const char *" << name << "[] = {" << endl;
    6060
     
    7373
    7474    ostr << "};" << endl;
    75 
    7675    return ostr.str();
    7776}
    7877
    7978
    80 string gen_test(string type, int lgth, string x, int idx_x, string y, int idx_y) {
     79string gen_overlap_compare_test(string type, int lgth, string x, int idx_x, string y, int idx_y) {
    8180
    8281    ostringstream ostr;
    83 
    8482    ostr << "cout << \""
    8583         << "x=\\\"\" << " << x << "[" << idx_x << "]" << "<< \"\\\""
     
    9492}
    9593
     94
    9695int main() {
    9796
    98     const int size = 33;
     97    const int size = 69;
    9998    const char * x = "x";
    10099    const char * y = "y";
    101100
    102     ofstream fout;
    103     fout.open ("test.cpp");
     101    ostringstream buffer;
    104102
    105     fout << gen_prolog();
    106     fout << gen_data(x, size);
    107     fout << gen_data_ne(y, size);       
    108 
    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
     103    buffer << gen_data_array(x, size);
     104    buffer << gen_data_array_not_equal(y, size);
    114105   
    115     // uint8_t 
     106    buffer << "cout << \"overlap_compare<uint8_t,i>(x,y)\" << endl;" << endl;
    116107    for(int i=sizeof(uint8_t);i<=size;i++) {
    117         fout << gen_test("uint8_t", i, x, i, x, i);
     108        buffer << gen_overlap_compare_test("uint8_t", i, x, i, x, i);
    118109    }
    119110
    120111    for(int i=sizeof(uint8_t);i<=size;i++) {
    121         fout << gen_test("uint8_t", i, x, i, y, i);
     112        buffer << gen_overlap_compare_test("uint8_t", i, x, i, y, i);
    122113    }
    123114
    124     // uint16_t
     115    buffer << "cout << \"overlap_compare<uint16_t,i>(x,y)\" << endl;" << endl;
    125116    for(int i=sizeof(uint16_t);i<=size;i++) {
    126         fout << gen_test("uint16_t", i, x, i, x, i);
     117        buffer << gen_overlap_compare_test("uint16_t", i, x, i, x, i);
    127118    }
    128119
    129120    for(int i=sizeof(uint16_t);i<=size;i++) {
    130         fout << gen_test("uint16_t", i, x, i, y, i);
     121        buffer << gen_overlap_compare_test("uint16_t", i, x, i, y, i);
    131122    }
    132123
    133     // uint32_t
     124    buffer << "cout << \"overlap_compare<uint32_t,i>(x,y)\" << endl;" << endl;
    134125    for(int i=sizeof(uint32_t);i<=size;i++) {
    135         fout << gen_test("uint32_t", i, x, i, x, i);
     126        buffer << gen_overlap_compare_test("uint32_t", i, x, i, x, i);
    136127    }
    137128
    138129    for(int i=sizeof(uint32_t);i<=size;i++) {
    139         fout << gen_test("uint32_t", i, x, i, y, i);
     130        buffer << gen_overlap_compare_test("uint32_t", i, x, i, y, i);
    140131    }
    141132
    142     // uint64_t
     133    buffer << "cout << \"overlap_compare<uint64_t,i>(x,y)\" << endl;" << endl;
    143134    for(int i=sizeof(uint64_t);i<=size;i++) {
    144         fout << gen_test("uint64_t", i, x, i, x, i);
     135        buffer << gen_overlap_compare_test("uint64_t", i, x, i, x, i);
    145136    }
    146137
    147138    for(int i=sizeof(uint64_t);i<=size;i++) {
    148         fout << gen_test("uint64_t", i, x, i, y, i);
     139        buffer << gen_overlap_compare_test("uint64_t", i, x, i, y, i);
    149140    }
    150141
    151     // BitBlock
     142    buffer << "cout << \"overlap_compare<BitBlock,i>(x,y)\" << endl;" << endl;
    152143    for(int i=sizeof(BitBlock);i<=size;i++) {
    153         fout << gen_test("BitBlock", i, x, i, x, i);
    154         fout << endl;
     144        buffer << gen_overlap_compare_test("BitBlock", i, x, i, x, i);
    155145    }
    156146
    157147    for(int i=sizeof(BitBlock);i<=size;i++) {
    158         fout << gen_test("BitBlock", i, x, i, y, i);
    159         fout << endl;
     148        buffer << gen_overlap_compare_test("BitBlock", i, x, i, y, i);
    160149    }
     150    string test_cases = buffer.str();
    161151
    162     fout << gen_epilog();
    163     fout.close();
     152    string template_filename("byte_compare_template.cpp");
     153    string test_filename("byte_compare_test.cpp");
     154    string target("@tests");
     155
     156    string template_buffer = read_file(template_filename);
     157    template_buffer.replace(template_buffer.find(target), target.length(), test_cases);
     158    write_file(test_filename, template_buffer);
    164159
    165160    return 1;
Note: See TracChangeset for help on using the changeset viewer.