/
Stack.cpp
129 lines (105 loc) · 2.76 KB
/
Stack.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include <ds/Stack.hpp>
#include <igloo/igloo.h>
#include <igloo/igloo_alt.h>
#include "common.hpp"
namespace
{
using namespace igloo;
Describe(AStack)
{
It(should_be_instantiated)
{
ds::Stack<int> stack;
}
It(should_be_empty_on_creation)
{
// Arrange
ds::Stack<int> stack;
// Act && Assert
AssertThat(stack.isEmpty(), Equals(true));
}
It(should_return_the_pushed_element)
{
// Arrange
ds::Stack<int> stack;
stack.push(42);
// Act
int poppedItem = stack.pop();
// Assert
AssertThat(poppedItem, Equals(42));
}
It(should_return_multiple_pushed_elements_in_reversed_order)
{
// Arrange
ds::Stack<int> stack;
stack.push(42);
stack.push(76);
stack.push(4);
// Act && Assert
AssertThat(stack.pop(), Equals(4));
AssertThat(stack.pop(), Equals(76));
AssertThat(stack.pop(), Equals(42));
AssertThat(stack.isEmpty(), Equals(true));
}
It(should_return_lot_of_pushed_elements_in_reversed_order)
{
// Arrange
ds::Stack<int> stack;
std::vector<int> numbers = generateRandomVector(100);
for (const auto & i : numbers)
stack.push(i);
// Act && Assert
std::for_each(numbers.rbegin(), numbers.rend(),
[&stack](int i)
{
AssertThat(stack.pop(), Equals(i));
});
}
It(should_return_the_front_element)
{
// Arrange
ds::Stack<int> stack;
stack.push(15);
// Act && Assert
AssertThat(stack.getFront(), Equals(15));
stack.push(66);
AssertThat(stack.getFront(), Equals(66));
}
Spec(pushes_and_pops_can_be_mixed)
{
ds::Stack<int> stack;
stack.push(42);
// ->[ 42 ]
AssertThat(stack.isEmpty(), Equals(false));
AssertThat(stack.getFront(), Equals(42));
AssertThat(stack.pop(), Equals(42));
// ->[ ]
AssertThat(stack.isEmpty(), Equals(true));
stack.push(99);
// ->[ 99 ]
stack.push(64);
// ->[ 64, 99 ]
AssertThat(stack.getFront(), Equals(64));
stack.push(95);
// ->[ 95, 64, 99 ]
AssertThat(stack.getFront(), Equals(95));
stack.push(44);
// ->[ 44, 95, 64, 99 ]
AssertThat(stack.getFront(), Equals(44));
AssertThat(stack.pop(), Equals(44));
// ->[ 95, 64, 99 ]
AssertThat(stack.pop(), Equals(95));
// ->[ 64, 99 ]
stack.push(1000);
// ->[ 1000, 64, 99 ]
AssertThat(stack.getFront(), Equals(1000));
AssertThat(stack.pop(), Equals(1000));
// ->[ 64, 99 ]
AssertThat(stack.pop(), Equals(64));
// ->[ 99 ]
AssertThat(stack.pop(), Equals(99));
// ->[ ]
AssertThat(stack.isEmpty(), Equals(true));
}
};
}