8 void compare_num_data(const string&vector1_file, const string&vector2_file){
9 vector<T>vector1 = load_vector<T>(vector1_file);
10 vector<T>vector2 = load_vector<T>(vector2_file);
12 if(vector1.size() < vector2.size()){
13 cout << "\""<< vector1_file<< "\" has only " << vector1.size() << " elements while \""<< vector2_file<< "\" has "<<vector2.size() << ". Can only compare vectors of equal size." << endl;
14 }else if(vector2.size() < vector1.size()){
15 cout << "\""<< vector2_file<< "\" has only " << vector2.size() << " elements while \""<< vector1_file<< "\" has "<<vector1.size() << ". Can only compare vectors of equal size." << endl;
17 unsigned vector1_smaller_count = 0;
18 unsigned vector2_smaller_count = 0;
20 unsigned first_difference = (unsigned)-1;
22 for(unsigned i=0; i<vector1.size(); ++i){
23 if(vector1[i] < vector2[i])
24 ++vector1_smaller_count;
25 if(vector2[i] < vector1[i])
26 ++vector2_smaller_count;
27 if(vector1[i] != vector2[i] && first_difference == (unsigned)-1)
31 if(vector1_smaller_count == 0 && vector2_smaller_count == 0){
32 cout << "The vectors are the same and have "<<vector1.size()<<" elements." << endl;
35 << "The vectors differ. "
36 << vector1_smaller_count <<" elements are smaller in \""<<vector1_file<<"\". "
37 << vector2_smaller_count <<" elements are smaller in \""<<vector2_file<<"\". "
38 << (vector1.size()-vector1_smaller_count-vector2_smaller_count) <<" elements are the same. "
39 << (vector1_smaller_count+vector2_smaller_count) <<" elements are different. "
40 << "The vectors have "<<vector1.size() <<" elements."
41 << "The first element that differ is at index "<< first_difference << "."
49 void compare_string_data(const std::string&vector1_file, const std::string&vector2_file){
50 vector<string>vector1 = load_vector<string>(vector1_file);
51 vector<string>vector2 = load_vector<string>(vector2_file);
53 if(vector1.size() < vector2.size()){
54 cout << "\""<< vector1_file<< "\" has only " << vector1.size() << " elements while \""<< vector2_file<< "\" has "<<vector2.size() << ". Can only compare vectors of equal size." << endl;
55 }else if(vector2.size() < vector1.size()){
56 cout << "\""<< vector2_file<< "\" has only " << vector2.size() << " elements while \""<< vector1_file<< "\" has "<<vector1.size() << ". Can only compare vectors of equal size." << endl;
58 unsigned equal_count = 0;
60 for(unsigned i=0; i<vector1.size(); ++i){
61 if(vector1[i] == vector2[i])
65 if(equal_count == vector1.size()){
66 cout << "The vectors are the same and have "<<vector1.size()<<" elements." << endl;
69 << "The vectors differ. "
70 << equal_count <<" elements are the same. "
71 << vector1.size()-equal_count <<" elements are different. "
72 << "The vectors have "<<vector1.size() <<" elements."
80 int main(int argc, char*argv[]){
86 cerr << "Usage: "<< argv[0] << " type vector1 vector2\n"
88 << "Compares two vectors of elements in binary format. data_type can be one of\n"
99 << " * string" << endl;
103 vector1_file = argv[2];
104 vector2_file = argv[3];
107 if(data_type == "int8")
108 compare_num_data<signed char>(vector1_file, vector2_file);
109 else if(data_type == "uint8")
110 compare_num_data<unsigned char>(vector1_file, vector2_file);
111 else if(data_type == "int16")
112 compare_num_data<signed short>(vector1_file, vector2_file);
113 else if(data_type == "uint16")
114 compare_num_data<unsigned short>(vector1_file, vector2_file);
115 else if(data_type == "int32")
116 compare_num_data<signed int>(vector1_file, vector2_file);
117 else if(data_type == "uint32")
118 compare_num_data<unsigned int>(vector1_file, vector2_file);
119 else if(data_type == "int64")
120 compare_num_data<signed long long>(vector1_file, vector2_file);
121 else if(data_type == "uint64")
122 compare_num_data<unsigned long long>(vector1_file, vector2_file);
123 else if(data_type == "float32")
124 compare_num_data<float>(vector1_file, vector2_file);
125 else if(data_type == "float64")
126 compare_num_data<double>(vector1_file, vector2_file);
127 else if(data_type == "string")
128 compare_string_data(vector1_file, vector2_file);
130 throw runtime_error("Unknown data type \""+data_type+"\"");
131 }catch(exception&err){
132 cerr << "Stopped on exception : " << err.what() << endl;