source: trunk/libtest/byte_compare_generator.cpp @ 4063

Last change on this file since 4063 was 2047, checked in by ksherdy, 7 years ago

Revered TYPE and LGTH template parameters.

File size: 4.7 KB
Line 
1#include "../lib/byte_compare.hpp"
2#include <stdint.h>
3#include <iostream>
4#include <fstream>
5#include <sstream>
6using namespace std;
7
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) {
36
37    ostringstream ostr;
38    ostr << "const char *" << name << "[] = {" << endl;
39
40    for(int i=0; i <= size; i++) {
41        ostr << "\"";
42        for(int j=1; j<=i;j++) {
43            ostr << j % 10;
44        }
45        ostr << "\"";
46        if(i<size) {
47            ostr << ",";
48        }
49        ostr << endl;
50    }
51
52    ostr << "};" << endl;
53    return ostr.str();
54}
55
56string gen_data_array_not_equal(string name, int size) {
57
58    ostringstream ostr;
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    return ostr.str();
76}
77
78
79string gen_overlap_compare_call(int lgth, string type, string x_param, string y_param) {
80
81    ostringstream ostr;
82    ostr << "cout << "
83                 << x_param << "[" << lgth << "]" 
84                 << "<< \" == \" << " 
85                 << y_param << "[" << lgth << "]" 
86                 << "<< \" is \" << " 
87                 << "overlap_compare<" << lgth << "," << type  << ">("
88                 << "(uint8_t *)&" << x_param << "[" << lgth << "]"<< ", "
89                 << "(uint8_t *)&" << y_param << "[" << lgth << "]"<< ")"
90                 << " << endl;" <<endl;
91    return ostr.str();
92}
93
94string gen_overlap_compare_call(int lgth, string type, string x_param, string y_param, int lgth_param) {
95
96    ostringstream ostr;
97    ostr << "cout << "
98                 << x_param << "[" << lgth << "]" 
99                 << "<< \" == \" << " 
100                 << y_param << "[" << lgth << "]" 
101                 << "<< \" is \" << " 
102                 << "overlap_compare<" << type << ">(" 
103                 << "(uint8_t *)&" << x_param << "[" << lgth << "]"<< ", "
104                 << "(uint8_t *)&" << y_param << "[" << lgth << "]"<< ", " 
105                 << lgth_param << ")"
106                 << " << endl;" <<endl;
107    return ostr.str();
108}
109
110int main() {
111
112    const int size = 33;
113    const char * x = "x";
114    const char * y = "y";
115
116    ostringstream buffer;
117
118    buffer << gen_data_array(x, size);
119    buffer << gen_data_array_not_equal(y, size);
120   
121    buffer << "cout << endl << \"overlap_compare<uint8_t,i>(x,y)\" << endl;" << endl;
122    for(int i=sizeof(uint8_t);i<=size;i++) {
123        buffer << gen_overlap_compare_call(i, "uint8_t", x, x);
124    }
125
126    for(int i=sizeof(uint8_t);i<=size;i++) {
127        buffer << gen_overlap_compare_call(i, "uint8_t", x, y);
128    }
129
130    buffer << "cout << endl << \"overlap_compare<uint16_t,i>(x,y)\" << endl;" << endl;
131    for(int i=sizeof(uint16_t);i<=size;i++) {
132        buffer << gen_overlap_compare_call(i, "uint16_t", x, x);
133    }
134
135    for(int i=sizeof(uint16_t);i<=size;i++) {
136        buffer << gen_overlap_compare_call(i, "uint16_t", x, y);
137    }
138
139    buffer << "cout << endl << \"overlap_compare<uint32_t,i>(x,y)\" << endl;" << endl;
140    for(int i=sizeof(uint32_t);i<=size;i++) {
141        buffer << gen_overlap_compare_call(i, "uint32_t", x, x);
142    }
143
144    for(int i=sizeof(uint32_t);i<=size;i++) {
145        buffer << gen_overlap_compare_call(i, "uint32_t", x, y);
146    }
147
148    buffer << "cout << endl << \"overlap_compare<uint64_t,i>(x,y)\" << endl;" << endl;
149    for(int i=sizeof(uint64_t);i<=size;i++) {
150        buffer << gen_overlap_compare_call(i, "uint64_t", x, x);
151    }
152
153    for(int i=sizeof(uint64_t);i<=size;i++) {
154        buffer << gen_overlap_compare_call(i, "uint64_t", x, y);
155    }
156
157    buffer << "cout << endl << \"overlap_compare<BitBlock,i>(x,y)\" << endl;" << endl;
158    for(int i=sizeof(BitBlock);i<=size;i++) {
159        buffer << gen_overlap_compare_call(i, "BitBlock", x, x);
160    }
161
162    for(int i=sizeof(BitBlock);i<=size;i++) {
163        buffer << gen_overlap_compare_call(i, "BitBlock", x, y);
164    }
165
166    buffer << "cout << endl << \"overlap_compare<BitBlock>(x,y,lgth)\" << endl;" << endl;
167    for(int i=sizeof(BitBlock);i<=size;i++) {
168        buffer << gen_overlap_compare_call(i, "BitBlock", x, x, i);
169    }
170
171    for(int i=sizeof(BitBlock);i<=size;i++) {
172        buffer << gen_overlap_compare_call(i, "BitBlock", x, y, i);
173    }
174
175    string test_cases = buffer.str();
176
177    string template_filename("byte_compare_template.cpp");
178    string test_filename("byte_compare_test.cpp");
179    string target("@tests");
180
181    string template_buffer = read_file(template_filename);
182    template_buffer.replace(template_buffer.find(target), target.length(), test_cases);
183    write_file(test_filename, template_buffer);
184
185    return 1;
186}
187
Note: See TracBrowser for help on using the repository browser.