#include <iostream>
#include <vector>
#include <utility>
#include <cctype>
using namespace std;
typedef pair<int,int> out_in;
template<typename F>
bool check(F&& f, vector<out_in> const& tests)
{
for(auto const& p : tests){
int result;
if((result = f(p.second)) != p.first){
cout << "Test failed! F(" << p.second << ") = " << result << ". Expected: " << p.first << endl;
return false;
}
}
return true;
}
int main()
{
vector<out_in> toUpper = {
{'A','a'},
{'A','A'},
{'0','0'},
{'B','A'}
};
cout << "testing std::toupper()..." << endl;
if(check(&::toupper,toUpper)) cout << "Passed!" << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8dXRpbGl0eT4KI2luY2x1ZGUgPGNjdHlwZT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0eXBlZGVmIHBhaXI8aW50LGludD4gb3V0X2luOwoKdGVtcGxhdGU8dHlwZW5hbWUgRj4KYm9vbCBjaGVjayhGJiYgZiwgdmVjdG9yPG91dF9pbj4gY29uc3QmIHRlc3RzKQp7Cglmb3IoYXV0byBjb25zdCYgcCA6IHRlc3RzKXsKCQlpbnQgcmVzdWx0OwoJCWlmKChyZXN1bHQgPSBmKHAuc2Vjb25kKSkgIT0gcC5maXJzdCl7CgkJCWNvdXQgPDwgIlRlc3QgZmFpbGVkISBGKCIgPDwgcC5zZWNvbmQgPDwgIikgPSAiIDw8IHJlc3VsdCA8PCAiLiBFeHBlY3RlZDogIiA8PCBwLmZpcnN0IDw8IGVuZGw7CgkJCXJldHVybiBmYWxzZTsKCQl9Cgl9CglyZXR1cm4gdHJ1ZTsKfQoKaW50IG1haW4oKQp7Cgl2ZWN0b3I8b3V0X2luPiB0b1VwcGVyID0gewoJCXsnQScsJ2EnfSwKCQl7J0EnLCdBJ30sCgkJeycwJywnMCd9LAoJCXsnQicsJ0EnfQoJfTsKCQoJCgljb3V0IDw8ICJ0ZXN0aW5nIHN0ZDo6dG91cHBlcigpLi4uIiA8PCBlbmRsOwoJaWYoY2hlY2soJjo6dG91cHBlcix0b1VwcGVyKSkgY291dCA8PCAiUGFzc2VkISIgPDwgZW5kbDsKCn0=