in src/benchmarks/mwcas_benchmark.cc [116:151]
void Teardown() {
if(FLAGS_array_size > 100) {
return;
}
// Check the array for correctness
unique_ptr_t<int64_t> found = alloc_unique<int64_t>(
sizeof(int64_t) * FLAGS_array_size);
for(uint32_t i = 0; i < FLAGS_array_size; i++) {
found.get()[i] = 0;
}
for(uint32_t i = 0; i < FLAGS_array_size; i++) {
uint32_t idx =
uint32_t((uint64_t(test_array_[i]) % (4 * FLAGS_array_size)) / 4);
LOG(INFO) << "idx=" << idx << ", pos=" << i << ", val=" <<
(uint64_t)test_array_[i];
if(!(idx >= 0 && idx < FLAGS_array_size)) {
LOG(INFO) << "Invalid: pos=" << i << "val=" << uint64_t(test_array_[i]);
continue;
}
found.get()[idx]++;
}
uint32_t missing = 0;
uint32_t duplicated = 0;
for(uint32_t i = 0; i < FLAGS_array_size; i++) {
if(found.get()[i] == 0) missing++;
if(found.get()[i] > 1) duplicated++;
}
CHECK(0 == missing && 0 == duplicated) <<
"Failed final sanity test, missing: " << missing << " duplicated: " <<
duplicated;
}