#include <iostream>
#include <ctime>
using std::cout;
using std::endl;
enum class func_method {log_or, mult};
template <typename test_type, func_method method>
void test_func()
{
const unsigned long end = 2000000000;
volatile test_type x = 0;
volatile test_type y = 1;
unsigned int sum = 0;
auto clock_begin = std::clock();
if (method == func_method::log_or)
for (unsigned long i = 0; i < end; ++i)
{
test_type a = x;
test_type b = y;
if (a == 0 || b == 0)
++sum;
}
else if (method == func_method::mult)
for (unsigned long i = 0; i < end; ++i)
{
test_type a = x;
test_type b = y;
if (a * b == 0)
++sum;
}
else
cout << "Invalid method" << endl;
auto clock_end = std::clock();
cout << "sum: " << sum << endl;
cout << "time: " << double(clock_end - clock_begin) / CLOCKS_PER_SEC << endl;
}
int main()
{
typedef long long test_type;
test_func<test_type, func_method::mult>();
test_func<test_type, func_method::log_or>();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3RpbWU+CnVzaW5nIHN0ZDo6Y291dDsKdXNpbmcgc3RkOjplbmRsOwoKZW51bSBjbGFzcyBmdW5jX21ldGhvZCB7bG9nX29yLCBtdWx0fTsKCnRlbXBsYXRlIDx0eXBlbmFtZSB0ZXN0X3R5cGUsIGZ1bmNfbWV0aG9kIG1ldGhvZD4Kdm9pZCB0ZXN0X2Z1bmMoKQp7Cgljb25zdCB1bnNpZ25lZCBsb25nIGVuZCA9IDIwMDAwMDAwMDA7CgoJdm9sYXRpbGUgdGVzdF90eXBlIHggPSAwOwoJdm9sYXRpbGUgdGVzdF90eXBlIHkgPSAxOwoJdW5zaWduZWQgaW50IHN1bSA9IDA7CgoJYXV0byBjbG9ja19iZWdpbiA9IHN0ZDo6Y2xvY2soKTsKCWlmIChtZXRob2QgPT0gZnVuY19tZXRob2Q6OmxvZ19vcikKCQlmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgPCBlbmQ7ICsraSkKCQl7CgkJCXRlc3RfdHlwZSBhID0geDsKCQkJdGVzdF90eXBlIGIgPSB5OwoJCQlpZiAoYSA9PSAwIHx8IGIgPT0gMCkKCQkJCSsrc3VtOwoJCX0KCWVsc2UgaWYgKG1ldGhvZCA9PSBmdW5jX21ldGhvZDo6bXVsdCkKCQlmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgPCBlbmQ7ICsraSkKCQl7CgkJCXRlc3RfdHlwZSBhID0geDsKCQkJdGVzdF90eXBlIGIgPSB5OwoJCQlpZiAoYSAqIGIgPT0gMCkKCQkJCSsrc3VtOwoJCX0KCWVsc2UKCQljb3V0IDw8ICJJbnZhbGlkIG1ldGhvZCIgPDwgZW5kbDsKCWF1dG8gY2xvY2tfZW5kID0gc3RkOjpjbG9jaygpOwoKCWNvdXQgPDwgInN1bTogICIgPDwgc3VtIDw8IGVuZGw7Cgljb3V0IDw8ICJ0aW1lOiAiIDw8IGRvdWJsZShjbG9ja19lbmQgLSBjbG9ja19iZWdpbikgLyBDTE9DS1NfUEVSX1NFQyA8PCBlbmRsOwp9CgppbnQgbWFpbigpCnsKCXR5cGVkZWYgbG9uZyBsb25nIHRlc3RfdHlwZTsKCSAgCgl0ZXN0X2Z1bmM8dGVzdF90eXBlLCBmdW5jX21ldGhvZDo6bXVsdD4oKTsKCXRlc3RfZnVuYzx0ZXN0X3R5cGUsIGZ1bmNfbWV0aG9kOjpsb2dfb3I+KCk7CiAgICAKCXJldHVybiAwOwp9