const int NUM_IN = 4;
const int NUM_REC = 2; // recovery
#define BUF_SIZE 1024
函数定义的地方
template<typename gtype, typename utype>
int test4(int NUM_IN, int *expected_bases) {
//const int NUM_IN = 10;
const int NUM_REC = 1; // recovery
const int LOW_EXPONENT = 1;
u8 data[NUM_IN + NUM_REC][BUF_SIZE];
int high_exponent = LOW_EXPONENT + NUM_REC - 1;
for (int i = 0; i < NUM_IN; i++) {
// fill with zeros,
for (int k = 0; k < BUF_SIZE; k++) {
data[i][k] = (u8)0;
}
// EXCEPT write a (little endian) 1 in a different place for each file
// In the i-th file, it is written into the i-th location
data[i][sizeof(utype)*i] = (u8) 1;
}
// zero recovery
for (int j = 0; j < NUM_REC; j++) {
for (int k = 0; k < BUF_SIZE; k++) {
data[NUM_IN + j][k] = (u8)0;
}
}
for (int i = 0; i < NUM_IN; i++) {
for (int j = 0; j < NUM_REC; j++) {
//cout << "creator.process " << BUF_SIZE << " " << i << " " << j <<
endl;
rs_creator.Process(BUF_SIZE, i, &(data[i][0]), j, &(data[NUM_IN + j][0])
);
}
}
// The recovery file has exponent 1 and should
// contain each base to the power 1.
for (int i = 0; i < NUM_IN; i++) {
// read little-endian value
utype v = 0;
for (int byte_index = 0; byte_index < sizeof(utype); byte_index++) {
u8 byte = data[NUM_IN+0][sizeof(utype)*i + byte_index];
v |= (((utype)byte) << (byte_index*8));
}
int base = v;
if (base != expected_bases[i]) {
cerr << "base at location " << i << " did not match expected." << endl;
cerr << " base = " << base << endl;
cerr << " expected = " << expected_bases[i] << endl;
return 1;
}
}
return 0;
}