forked from PiotrPrus/kotlin-coding-challenges
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchallenge.kt
135 lines (113 loc) · 2.78 KB
/
challenge.kt
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
130
131
132
133
134
135
package com.igorwojda.stack.basic
import org.amshove.kluent.shouldBeEqualTo
import org.junit.jupiter.api.Test
private class Stack<E> {
var size = 0
fun add(element: E) {
TODO("not implemented")
}
fun remove(): E? {
TODO("not implemented")
}
fun peek(): E? {
TODO("not implemented")
}
fun isEmpty(): Boolean {
TODO("not implemented")
}
}
private class Test {
@Test
fun `stack can add and remove items`() {
Stack<Int>().apply {
add(1)
remove() shouldBeEqualTo 1
add(2)
remove() shouldBeEqualTo 2
}
}
@Test
fun `stack can follows first in, last out`() {
Stack<Int>().apply {
add(1)
add(2)
add(3)
remove() shouldBeEqualTo 3
remove() shouldBeEqualTo 2
remove() shouldBeEqualTo 1
}
}
@Test
fun `peek returns the first element but does not remove it`() {
Stack<Char>().apply {
add('A')
add('B')
add('C')
peek() shouldBeEqualTo 'C'
remove() shouldBeEqualTo 'C'
peek() shouldBeEqualTo 'B'
remove() shouldBeEqualTo 'B'
peek() shouldBeEqualTo 'A'
remove() shouldBeEqualTo 'A'
peek() shouldBeEqualTo null
remove() shouldBeEqualTo null
}
}
@Test
fun `newly created stack is empty`() {
Stack<Char>().apply {
isEmpty() shouldBeEqualTo true
}
}
@Test
fun `stack is empty after removing all items`() {
Stack<Char>().apply {
add('A')
add('B')
add('C')
peek()
remove()
peek()
remove()
peek()
remove()
isEmpty() shouldBeEqualTo true
}
}
@Test
fun `stack with items is not empty`() {
Stack<Char>().apply {
add('A')
isEmpty() shouldBeEqualTo false
add('B')
isEmpty() shouldBeEqualTo false
add('C')
isEmpty() shouldBeEqualTo false
}
}
@Test
fun `stack has correct size`() {
Stack<Char>().apply {
size shouldBeEqualTo 0
add('A')
size shouldBeEqualTo 1
add('B')
size shouldBeEqualTo 2
add('C')
size shouldBeEqualTo 3
remove()
size shouldBeEqualTo 2
remove()
size shouldBeEqualTo 1
remove()
size shouldBeEqualTo 0
}
}
@Test
fun `remove item from empty stack`() {
Stack<Char>().apply {
remove()
size shouldBeEqualTo 0
}
}
}