BitVector Test Client
/*
fbitvect.cpp
testing BitVector
*/
#include <bitvect.h>
void DisplayMenu (size_t size);
void CopyTest (const fsu::BitVector& bv1, fsu::BitVector bv2);
void AssignTest (const fsu::BitVector& bv1);
typedef fsu::BitVector BitVector;
int main(int argc, char* argv[])
{
std::cout << " ***********************************************************\n"
<< " * fbitvect.x command line arguments expected (optional): *\n"
<< " * 1: size requested in bits [enter 0 for default] *\n"
<< " * 2: command file for batch processing *\n"
<< " ***********************************************************\n";
size_t size(0);
if (argc > 1)
{
size = atoi(argv[1]);
}
std::ifstream ifs;
std::istream* isptr = &std::cin;
bool BATCH = 0;
if (argc > 2)
{
ifs.open(argv[2]);
if (ifs.fail())
{
std::cout << " ** unable to read file \"" << argv[2] << "\"\n"
<< " try again\n";
return EXIT_FAILURE;
}
isptr = &ifs;
BATCH = 1;
}
BitVector * bvptr;
if (size == 0)
{
bvptr = new BitVector; // default constructor
}
else
{
bvptr = new BitVector (size); // 1-arg constructor
}
char selection;
size_t index;
std::cout << "Welcome to fbitvect\n";
DisplayMenu(size);
do
{
std::cout << " Enter [op][index] (\'M\' for menu, \'Q\' to quit): ";
*isptr >> selection;
if (BATCH) std::cout << selection; // echo input
switch(selection)
{
case '=':
if (BATCH) std::cout << '\n'; // echo input
CopyTest(*bvptr,*bvptr);
AssignTest(*bvptr);
break;
case 'S':
if (BATCH) std::cout << '\n'; // echo input
bvptr->Set();
break;
case 's':
*isptr >> index;
if (BATCH) std::cout << index << '\n'; // echo input
bvptr->Set(index);
break;
case 'U':
if (BATCH) std::cout << '\n'; // echo input
bvptr->Unset();
break;
case 'u':
*isptr >> index;
if (BATCH) std::cout << index << '\n'; // echo input
bvptr->Unset(index);
break;
case 'F':
if (BATCH) std::cout << '\n'; // echo input
bvptr->Flip();
break;
case 'f':
*isptr >> index;
if (BATCH) std::cout << index << '\n'; // echo input
bvptr->Flip(index);
break;
case 't': case 'T':
*isptr >> index;
if (BATCH) std::cout << index << '\n'; // echo input
std::cout << " v.Test(" << index << ") == ";
if (bvptr->Test(index))
std::cout << "1\n";
else
std::cout << "0\n";
break;
case '[':
*isptr >> index >> selection;
if (BATCH) std::cout << index << selection << '\n'; // echo input
std::cout << " v[" << index << "] == "
<< (size_t)bvptr->operator[](index)
<< '\n';
break;
case 'e': case 'E':
*isptr >> index;
if (BATCH) std::cout << index << '\n'; // echo input
std::cout << " v.Expand(" << index << ")\n";
bvptr->Expand(index);
break;
case 'd': case 'D':
if (BATCH) std::cout << '\n'; // echo input
std::cout << " v.Size(): " << bvptr -> Size() << " ; v.Dump(std::cout):\n";
bvptr->Dump(std::cout);
break;
case 'o': case 'O':
if (BATCH) std::cout << '\n'; // echo input
std::cout << " std::cout << v: " << *bvptr << '\n';
break;
case 'm': case 'M':
if (BATCH) std::cout << '\n'; // echo input
DisplayMenu(size);
break;
case 'x': case 'X':
if (BATCH)
{
std::cout << '\n'; // echo input
isptr = &std::cin;
ifs.close();
BATCH = 0;
std::cout << " ** switched to interactive mode\n";
}
else
{
std::cout << " ** already in interactive mode\n";
}
break;
case 'q': case 'Q':
if (BATCH) std::cout << '\n'; // echo input
selection = 'Q';
if (BATCH)
ifs.close();
break;
default:
if (BATCH) std::cout << '\n'; // echo input
std::cout << " command not found\n";
}
}
while (selection != 'Q');
delete bvptr;
std::cout << "Thank you for testing BitVector\n";
return 0;
}
(continued next slide)
|