blob: 721096346b3d954e54785c472bc1b682dbac9431 [file] [log] [blame]
#include "cache_size.h"
#include <iostream>
// Measure how often measuring time is able to accurately determine cache hits
// and cache misses based on the buffer size under analysis and the cache size
// it checks whether buffer sizes that fit in cache have less reading time or
// not
int main(int argc, char* argv[]) {
static constexpr long kCacheSize = 8 * 1024 * 1024;
static constexpr long kIterations = 2;
static constexpr long kTestSizes = 4;
// generates a list of numbers that are used to determine the size of buffers
std::vector<int> candidates;
for (int i = 0; i < kTestSizes; ++i) {
candidates.push_back(20 * (i + 1));
}
int total_passed_tests = 0;
for (int i = 0; i < kIterations; i++) {
int passed_tests = 0;
for (int candidate_large : candidates) {
uint64_t res_large = FindMaxReadingTime(kCacheSize * candidate_large);
for (int candidate_small : candidates) {
uint64_t res_small = FindMaxReadingTime(kCacheSize / candidate_small);
// we expect that buffer sizes < cache size always have less reading
// times as they all should result in cache hits while buffer sizes >
// cache size suffer from cache misses, so they must take longer to be
// read
if (res_large <= res_small) {
std::cout << "test failed" << std::endl;
} else {
std::cout << "test passed" << std::endl;
passed_tests++;
}
}
}
std::cout << "In total out of " << kTestSizes * kTestSizes
<< " comparisons " << passed_tests << " were successfully passed."
<< std::endl;
total_passed_tests += passed_tests;
}
float res =
total_passed_tests * 100 / (kIterations * kTestSizes * kTestSizes);
std::cout << res << "% of tests passed." << std::endl;
if (res > 99) return 0;
return 1;
}