#include #include #include "MyUtil.h" using namespace std; bool TestAndCompare(string orig, string upper, string lower, string stripped); void FailMsg(string bad, string good, string test); // I would use a vector to do this. const size_t RED_SIZE{8}; const string RED[RED_SIZE] {"RED", "REd", "ReD", "Red", "rED", "rEd", "reD","red"}; string MakeAWord(); string PermuteWord(string word); bool StripTest(string good, string bad); char RandomNonLetter(); int main() { size_t i; int failCode{0}; string target; string permuted; string upper; for(i =0; i < RED_SIZE; i++) { if (not TestAndCompare(RED[i],"RED","red",RED[i])) { failCode = 1; } } for(i =0; i < 100; i++) { target = MakeAWord(); permuted = PermuteWord(target); StripTest(target, permuted); } return failCode; } string MakeAWord(){ size_t size; int offset; size_t i; string rv; // all words are at least 1 character long, but could be up to 15 size = rand() % 14 + 1; for( i = 0; i < size; i ++) { offset = rand() % 26; rv += static_cast(static_cast('a')+offset); } return rv; } //between ascii 32 - 64 char RandomNonLetter(){ char i = static_cast(rand() % 32 + 32); return i; } string PermuteWord(string word){ string rv; size_t i; // 50% chance of adding something strange at the begining if (rand() % 2) { rv += RandomNonLetter(); } for(i =0; i < word.size(); i++) { if (rand() % 4 == 0) { rv += RandomNonLetter(); } if (rand() % 2) { rv += static_cast(toupper(word[i])); } else { rv += word[i]; } } // 50% chance of adding something strange at the end if (rand() %2) { rv += RandomNonLetter(); } return rv; } bool StripTest(string good, string bad){ string tmp; bool fail = false; tmp = Strip(bad); tmp = MakeLower(tmp); if (tmp != good){ fail = true; FailMsg(tmp, good, "Strip"); } return fail; } void FailMsg(string bad, string good, string test){ cout << "Error in " << test << ". " << endl; cout <<"\"" << bad << "\" is not \"" << good << "\" but should be." << endl; return; } bool TestAndCompare(string orig, string upper, string lower, string stripped){ string tmp; bool fail = false; tmp = MakeUpper(orig); if (tmp != upper){ fail = true; FailMsg("MakeUpper", tmp, upper); } tmp = MakeLower(orig); if (tmp != lower) { fail = true; FailMsg("MakeLower", tmp, lower); } tmp = Strip(orig); if (tmp != stripped){ fail = true; FailMsg("Strip", tmp, stripped); } return fail; }