#include "Stack.h"
#include "test.h"
#include <iostream>
using namespace std;
class StackTest : public Test
{
enum {SIZE = 5};
Stack<int> stk;
public:
StackTest() : stk(SIZE)
{}
void run()
{
testUnderflow();
testPopulate();
testOverflow();
testPop();
testBadSize();
}
void testBadSize()
{
try
{
Stack<int> s(0);
_fail("Bad Size");
}
catch (StackError&)
{
_succeed();
}
}
void testUnderflow()
{
_test(stk.size() == 0);
try
{
stk.top();
_fail("Underflow");
}
catch (StackError&)
{
_succeed();
}
try
{
stk.pop();
_fail("Underflow");
}
catch (StackError&)
{
_succeed();
}
}
void testPopulate()
{
try
{
for (int i = 0; i < SIZE; ++i)
stk.push(i);
_succeed();
}
catch (StackError&)
{
_fail("Populate");
}
_test(stk.size() == SIZE);
_test(stk.top() == SIZE-1);
}
void testOverflow()
{
try
{
stk.push(SIZE);
_fail("Overflow");
}
catch (StackError&)
{
_succeed();
}
}
void testPop()
{
for (int i = 0; i < SIZE; ++i)
_test(stk.pop() == SIZE-i-1);
_test(stk.size() == 0);
}
};
int main()
{
StackTest t;
t.setStream(&cout);
t.run();
t.report();
}
/* Output:
Test "class StackTest":
Passed: 14 Failed: 0
*/