1 #ifndef STACK_TEST_H
2 #define STACK_TEST_H
3 
4 #include <cxxtest/TestSuite.h>
5 #include <stack.h>
6 
7 class stack_test : public CxxTest::TestSuite
8 {
9 
10   private:
11     stack_t* stack;
12   public:
13 
setUp()14     void setUp() {
15       stack = stack_create();
16     }
17 
tearDown()18     void tearDown() {
19       stack_free(stack);
20     }
21 
test_create_stack()22     void test_create_stack() {
23       TS_ASSERT_DIFFERS((stack_t*)0, stack);
24     }
25 
test_new_stack_is_empty()26     void test_new_stack_is_empty() {
27       TS_ASSERT_EQUALS(0, stack_size(stack));
28     }
29 
test_one_push_add_one_to_size()30     void test_one_push_add_one_to_size() {
31       stack_push(stack, 1);
32       TS_ASSERT_EQUALS(1, stack_size(stack));
33     }
34 
test_push_pop_doesnt_change_size()35     void test_push_pop_doesnt_change_size() {
36       stack_push(stack, 1);
37       (void)stack_pop(stack);
38       TS_ASSERT_EQUALS(0, stack_size(stack));
39     }
40 
test_peak_after_push()41     void test_peak_after_push() {
42       stack_push(stack, 1);
43       TS_ASSERT_EQUALS(1, stack_peak(stack))
44     }
45 
test_initial_capacity_is_positive()46     void test_initial_capacity_is_positive() {
47       TS_ASSERT(stack_capacity(stack) > 0);
48     }
49 
test_pop_on_empty()50     void test_pop_on_empty() {
51       TS_ASSERT_EQUALS(0, stack_pop(stack));
52       TS_ASSERT_EQUALS(0, stack_size(stack));
53     }
54 
test_peak_on_empty()55     void test_peak_on_empty() {
56       TS_ASSERT_EQUALS(0, stack_peak(stack));
57     }
58 
test_capacity_gte_size()59     void test_capacity_gte_size() {
60       TS_ASSERT_LESS_THAN_EQUALS(stack_size(stack), stack_capacity(stack));
61       int init_capacity = stack_capacity(stack);
62       for (int i=0; i < init_capacity + 1; i++) {
63         stack_push(stack, i);
64       }
65       TS_ASSERT_LESS_THAN_EQUALS(stack_size(stack), stack_capacity(stack));
66     }
67 
68 };
69 
70 #endif // STACK_TEST_H
71 
72