source: trunk/lib/test/gen.cpp @ 1827

Last change on this file since 1827 was 1827, checked in by ksherdy, 8 years ago

Update byte compare routine. Added generatated test cases.

File size: 3.3 KB
Line 
1#include "../byte_compare.hpp"
2#include <stdint.h>
3#include <iostream>
4#include <fstream>
5#include <sstream>
6using namespace std;
7
8string gen_prolog() {
9
10    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
20string gen_epilog() {
21
22    ostringstream ostr;
23
24    ostr << "return 1;" << endl;
25    ostr << "}" << endl;
26
27    return ostr.str();
28}
29
30
31
32string gen_data(string name, int size) {
33
34    ostringstream ostr;
35
36    ostr << "const char *" << name << "[] = {" << endl;
37
38    for(int i=0; i <= size; i++) {
39        ostr << "\"";
40        for(int j=1; j<=i;j++) {
41            ostr << j % 10;
42        }
43        ostr << "\"";
44        if(i<size) {
45            ostr << ",";
46        }
47        ostr << endl;
48    }
49
50    ostr << "};" << endl;
51
52    return ostr.str();
53}
54
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
80string gen_test(string type, int lgth, string x, int idx_x, string y, int idx_y) {
81
82    ostringstream ostr;
83
84    ostr << "cout << \""
85         << "x=\\\"\" << " << x << "[" << idx_x << "]" << "<< \"\\\""
86         << " y=\\\"\" << " << y << "[" << idx_y << "]" << "<< \"\\\""
87         << " L=" << lgth << " "
88         << " R=\" << overlap_compare<" << type << "," << lgth << ">(" << "(" << type << "*)&"
89         << x << "[" << idx_x << "]"<< ",(" << type << "*)&"
90         << y << "[" << idx_y << "]"<< ")"
91         << " << endl;" <<endl;
92
93    return ostr.str();
94}
95
96int main() {
97
98    const int size = 33;
99    const char * x = "x";
100    const char * y = "y";
101
102    ofstream fout;
103    fout.open ("test.cpp");
104
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
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);
118    }
119
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;
160    }
161
162    fout << gen_epilog();
163    fout.close();
164
165    return 1;
166}
167
Note: See TracBrowser for help on using the repository browser.