Skip to content

Commit b748a33

Browse files
authored
Merge pull request #8 from AhmedHamdiy/master
Fixes #2 , #3 , #4 , #6
2 parents a28a5ac + 0ea6c45 commit b748a33

File tree

2 files changed

+111
-49
lines changed

2 files changed

+111
-49
lines changed

src/Containers-Queue-Tests/CTQueueTest.class.st

+83-15
Original file line numberDiff line numberDiff line change
@@ -27,23 +27,16 @@ CTQueueTest >> testAdd [
2727

2828
{ #category : #tests }
2929
CTQueueTest >> testAddGarantyFIFOOrder [
30+
"Ensure elements are dequeued in FIFO order."
3031
| queue |
3132
queue := self queueClass new.
32-
queue add: 'first added element'.
33-
queue add: 'second added element'.
34-
self assert: (queue at: 1) equals: 'first added element'.
35-
self assert: (queue at: 2) equals: 'second added element'
36-
]
37-
38-
{ #category : #tests }
39-
CTQueueTest >> testDequeue [
40-
| queue |
41-
queue := self queueClass new.
42-
queue queue: 1.
43-
queue queue: 2.
44-
queue queue: 3.
45-
self assert: queue dequeue equals: 1.
46-
self assert: queue dequeue equals: 2
33+
queue add: 'first'.
34+
queue add: 'second'.
35+
queue add: 'third'.
36+
self assert: queue remove equals: 'first'.
37+
self assert: queue remove equals: 'second'.
38+
self assert: queue remove equals: 'third'.
39+
self assert: queue isEmpty.
4740
]
4841

4942
{ #category : #tests }
@@ -60,3 +53,78 @@ CTQueueTest >> testQueue [
6053
CTQueueTest >> testQueueGarantyFIFOOrder [
6154
self assert: self queueClass new isEmpty
6255
]
56+
57+
{ #category : #tests }
58+
CTQueueTest >> testAddAll [
59+
"Ensure queueAll adds multiple elements at once."
60+
| queue |
61+
queue := self queueClass new.
62+
queue addAll: #(10 20 30 40).
63+
self assert: queue remove equals: 10.
64+
self assert: queue remove equals: 20.
65+
self assert: queue remove equals: 30.
66+
self assert: queue remove equals: 40.
67+
]
68+
69+
{ #category : #tests }
70+
CTQueueTest >> testEmptyQueueRemove [
71+
| queue |
72+
queue := self queueClass new.
73+
self assert: queue remove isNil.
74+
]
75+
76+
{ #category : #tests }
77+
CTQueueTest >> testIsEmpty [
78+
"Ensure isEmpty works correctly."
79+
| queue |
80+
queue := self queueClass new.
81+
self assert: queue isEmpty.
82+
queue add: 1.
83+
self deny: queue isEmpty.
84+
queue remove.
85+
self assert: queue isEmpty.
86+
]
87+
88+
{ #category : #tests }
89+
CTQueueTest >> testPeek [
90+
"Ensure peek returns the first element without removing it."
91+
| queue |
92+
queue := self queueClass new.
93+
queue add: 42.
94+
queue add: 99.
95+
self assert: queue peek equals: 42.
96+
self assert: queue size equals: 2. "Peek should not remove elements"
97+
]
98+
99+
{ #category : #tests }
100+
CTQueueTest >> testPoll [
101+
"Ensure poll behaves correctly, returning nil when empty."
102+
| queue |
103+
queue := self queueClass new.
104+
queue add: 'A'.
105+
queue add: 'B'.
106+
self assert: queue poll equals: 'A'.
107+
self assert: queue poll equals: 'B'.
108+
self assert: queue poll isNil.
109+
]
110+
111+
{ #category : #tests }
112+
CTQueueTest >> testRemove [
113+
"Ensure remove behaves correctly, returning nil when empty."
114+
| queue |
115+
queue := self queueClass new.
116+
queue add: 1.
117+
queue add: 2.
118+
queue add: 3.
119+
self assert: queue remove equals: 1.
120+
self assert: queue remove equals: 2
121+
]
122+
123+
{ #category : #tests }
124+
CTQueueTest >> testRemoveIfNone[
125+
"Ensure dequeueIfNone works correctly."
126+
| queue result |
127+
queue := self queueClass new.
128+
result := queue removeIfNone: [ 'fallback' ].
129+
self assert: result equals: 'fallback'.
130+
]

src/Containers-Queue/CTQueue.class.st

+28-34
Original file line numberDiff line numberDiff line change
@@ -13,47 +13,27 @@ Class {
1313
#category : #'Containers-Queue'
1414
}
1515

16-
{ #category : #testing }
16+
{ #category : #adding }
1717
CTQueue >> add: anElement [
1818
"Add an element to the receiver. Note that the addition makes sure that when iterating over the receiver added first element are accessed first."
1919

2020
elements addLast: anElement.
2121
^ anElement
2222
]
2323

24-
{ #category : #testing }
24+
{ #category : #adding }
2525
CTQueue >> addAll: aCollection [
2626
"Add the elements contained in the argument to the receiver. Note that the addition makes sure that when iterating over the receiver added first element are accessed first."
2727

2828
elements addAllLast: aCollection.
2929
^ aCollection
3030
]
3131

32-
{ #category : #accessing }
33-
CTQueue >> at: anIndex [
34-
"Accessed the element to the given index in the receiver according to the adding order."
35-
^ elements at: anIndex
36-
]
37-
38-
{ #category : #'adding/removing' }
39-
CTQueue >> dequeue [
40-
"Return the older element of the receiver.."
41-
42-
^ elements removeFirst
43-
]
44-
45-
{ #category : #'adding/removing' }
46-
CTQueue >> dequeueIfNone: aBlock [
47-
"Return the older element of the receiver.."
48-
elements ifEmpty: [ aBlock value ].
49-
^ elements removeFirst
50-
]
51-
5232
{ #category : #iterating }
5333
CTQueue >> do: aBlock [
5434
"iterates the elements of the receiver starting first by first added elements."
5535

56-
self do: aBlock
36+
elements do: aBlock
5737
]
5838

5939
{ #category : #testing }
@@ -74,18 +54,32 @@ CTQueue >> isEmpty [
7454
^ elements isEmpty
7555
]
7656

77-
{ #category : #'adding/removing' }
78-
CTQueue >> queue: anElement [
79-
"Add an element to the receiver. Note that the addition makes sure that when iterating over the receiver added first element are accessed first."
57+
{ #category : #removing }
58+
CTQueue >> remove [
59+
"Return the older element of the receiver.."
8060

81-
elements addLast: anElement.
82-
^ anElement
61+
^ elements ifEmpty: [ nil ] ifNotEmpty: [ elements removeFirst ].
8362
]
8463

85-
{ #category : #'adding/removing' }
86-
CTQueue >> queueAll: aCollection [
87-
"Add the elements contained in the argument to the receiver. Note that the addition makes sure that when iterating over the receiver added first element are accessed first."
88-
89-
elements addAllLast: aCollection.
90-
^ aCollection
64+
{ #category : #removing }
65+
CTQueue >> removeIfNone: aBlock [
66+
"Return the older element of the receiver.."
67+
elements ifEmpty: [ ^ aBlock value ].
68+
^ elements removeFirst
9169
]
70+
71+
{ #category : #removing }
72+
CTQueue >> poll [
73+
"Returns and removes the front element, or nil if empty."
74+
^ elements ifEmpty: [ nil ] ifNotEmpty: [ elements removeFirst ].
75+
]
76+
77+
{ #category : #accessing }
78+
CTQueue >> peek [
79+
^ elements ifEmpty: [ nil ] ifNotEmpty: [ elements first ].
80+
]
81+
82+
{ #category : #accessing }
83+
CTQueue >> size [
84+
^ elements size
85+
]

0 commit comments

Comments
 (0)