C/C++

Тестирование метода Stack

Приветствую, друзья.
Нужна помощь с программой.
Есть прога на C++, в ней нужно протестировать Top() и Pop(), Push() уже протестирован, но как протестировать Top и Pop я не знаю. Спасибо заранее.

// Стэк. cpp: главный файл проекта.
//Пример реализации стэка на различных структурах

#include "stdafx.h"
#include
#include

//using namespace System;
using namespace std;

const int MAX_STACK = 2;//эти константы лучше занести в класс, смотри StackA
const int EMPTY_STACK = -1;

class Stack{
private:
int stack[MAX_STACK];
int top;
inline bool IsOverflow(){return top == MAX_STACK-1;}
public:
Stack():top(EMPTY_STACK){}
void Push(int pValue);
int Pop();
int Top();
inline bool IsEmpty(){return top == EMPTY_STACK;}
};

void Stack::Push(int pValue){
if (IsOverflow()) throw "Stack::Push overflow";
stack[++top] = pValue;
}

int Stack::Pop(){
if (IsEmpty()) throw "Stack::Pop empty";
return stack[top--];
}

int Stack::Top(){
if (IsEmpty()) throw "Stack::Top empty";
return stack[top];
}

void TestStackConstructor(){
Stack s;
if (!s.IsEmpty()) throw "TestStackConstructor() is not empty";
}

void TestStackPush(){
{Stack s;
s.Push(1);
if (s.IsEmpty()) throw "TestStackPush() is empty";
}//1

{Stack s1;
try{//нет ошибок до предельного значение
for (int i = 1; i<=MAX_STACK; i++) s1.Push(i);
}
catch (...) {
throw "TestStackPush() error befor MAX_STACK";
}

try{//проверка сообщения при переполнении
s1.Push(999);
throw "TestStackPush() no error message";
}
catch (const char* mess) {
if (!strcmp(mess,"Stack::Push overflow")==0)
throw "TestStackPush() bad error message";
}
}//2
}//void TestStackPush()

void TestStackTop()
{
{Stack s;
try{
int result = s.Top();
throw "TestStackPush() no error message";
}
catch(const int = 1
{

}

}

//if (s.IsEmpty()) throw "TestStackPush() is empty";
////return reference top();
//}
//{Stack s1;
//try{
//s1.Top();
//throw "TestStackPush() no error message";
//}
//catch(const int = 1) {
//throw "Error: ==1";
//}
////int Top(3);
//}
}

void TestStack(void){
cout<< "TestStack(void)\n" <<endl;

TestStackConstructor();
TestStackPush();
TestStackTop();
//TestStackPop();
//Stack s;
//if (!s.IsEmpty())
//int result = s.Top();
}
int main()
{
setlocale(LC_CTYPE, "Russian");
try {
TestStack();
cout << "*** Тестирование TestStack ОК ***" << endl;
}
catch (const char* S) {
cout << "*** Тестирование TestStack завершилось с ошибкой " << S << endl;
}
catch (...) {
cout << "*** Тестирование TestStack завершилось с неизвестной ошибкой ***" << endl;
}

system("pause");
//int *arr = new int[1000000];
_CrtDumpMemoryLeaks();
return 0;
}
#include <iostream>
#include <string>
#include <deque>
#include <list>
using namespace std;
template<typename Type, class Container = deque<Type>>
class Stack {
public:
using container_type = Container;
using size_type = size_t;
using value_type = Type;
using reference = Type&;
using const_reference = const Type&;
Stack() = default;
explicit Stack(const container_type& right) : stack_(right) {}
bool empty()const {
return stack_.size() == 0;
}
void pop() {
stack_.pop_back();
}
void push(const Type& value) {
stack_.push_back(value);
}
size_type size()const {
return stack_.size();
}
reference top() {
return stack_.back();
}
const_reference top()const {
return stack_.back();
}
private:
container_type stack_;
friend bool operator<(const Stack<Type, Container>& a, const Stack<Type, Container>& b) {
return a.stack_ < b.stack_;
}
friend bool operator<=(const Stack<Type, Container>& a, const Stack<Type, Container>& b) {
return a.stack_ <= b.stack_;
}
friend bool operator==(const Stack<Type, Container>& a, const Stack<Type, Container>& b) {
return a.stack_ == b.stack_;
}
friend bool operator!=(const Stack<Type, Container>& a, const Stack<Type, Container>& b) {
return a.stack_ != b.stack_;
}
friend bool operator>=(const Stack<Type, Container>& a, const Stack<Type, Container>& b) {
return a.stack_ >= b.stack_;
}
friend bool operator>(const Stack<Type, Container>& a, const Stack<Type, Container>& b) {
return a.stack_ > b.stack_;
}
};
int main() {
Stack<long> a;
Stack<int, list<int>> b;
// Тестируйте!
system("pause");
}
АР
Александр Рогачёв
84 626
Лучший ответ
Михаил Зимин Спасибо большое.