Skip to content

Commit e453e5b

Browse files
authored
Merge pull request #17 from HossamSaberr/master
Fix: Implement = and hash
2 parents 536f974 + e5fa021 commit e453e5b

2 files changed

Lines changed: 65 additions & 21 deletions

File tree

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

Lines changed: 41 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,47 @@ CTQueueTest >> testEnqueueSingleElement [
268268
self assert: queue front equals: 'first'
269269
]
270270

271+
{ #category : 'tests' }
272+
CTQueueTest >> testEnqueueUnlessAdds [
273+
queue enqueue: 1 unless: [ :v | (v rem: 2) = 0 ].
274+
self assert: (queue includes: 1).
275+
self assert: queue size equals: 1.
276+
277+
queue enqueue: 2 unless: [ :v | (v rem: 2) = 0 ].
278+
self assert: (queue includes: 1).
279+
self assert: (queue includes: 2).
280+
self assert: queue size equals: 2.
281+
]
282+
283+
{ #category : 'tests' }
284+
CTQueueTest >> testEnqueueUnlessIgnores [
285+
queue enqueue: 1 unless: [ :v | (v rem: 2) = 0 ].
286+
queue enqueue: 2 unless: [ :v | (v rem: 2) = 0 ].
287+
288+
queue enqueue: 4 unless: [ :v | (v rem: 2) = 0 ].
289+
self assert: (queue includes: 1).
290+
self assert: (queue includes: 2).
291+
self assert: queue size equals: 2.
292+
293+
queue enqueue: 3 unless: [ :v | (v rem: 2) = 0 ].
294+
self assert: (queue includes: 1).
295+
self assert: (queue includes: 2).
296+
self assert: queue size equals: 2.
297+
]
298+
299+
{ #category : 'tests' }
300+
CTQueueTest >> testEquality [
301+
| q1 q2 |
302+
q1 := CTQueue new.
303+
q2 := CTQueue new.
304+
305+
q1 enqueue: 'A'; enqueue: 'B'.
306+
q2 enqueue: 'A'; enqueue: 'B'.
307+
308+
self assert: q1 equals: q2.
309+
self assert: q1 hash equals: q2 hash.
310+
]
311+
271312
{ #category : 'tests' }
272313
CTQueueTest >> testErrorHandling [
273314

@@ -421,22 +462,3 @@ CTQueueTest >> testSize [
421462
queue dequeue.
422463
self assert: queue size equals: 2
423464
]
424-
425-
{ #category : 'tests' }
426-
CTQueueTest >> testEnqueueUnless [
427-
queue enqueue: 1 unless: [ :v | (v rem: 2) = 0].
428-
self assert: (queue includes: 1).
429-
self assert: queue size equals: 1 .
430-
queue enqueue: 2 unless: [ :v | (v rem: 2) = 0].
431-
self assert: (queue includes: 1).
432-
self assert: (queue includes: 2) .
433-
self assert: queue size equals: 2 .
434-
queue enqueue: 4 unless: [ :v | (v rem: 2) = 0].
435-
self assert: (queue includes: 1).
436-
self assert: (queue includes: 2) .
437-
self assert: queue size equals: 2 .
438-
queue enqueue: 3 unless: [ :v | (v rem: 2) = 0].
439-
self assert: (queue includes: 1).
440-
self assert: (queue includes: 2) .
441-
self assert: queue size equals: 2
442-
]

src/Containers-Queue/CTQueue.class.st

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,15 @@ CTQueue class >> new: anInteger [
3434
yourself
3535
]
3636

37+
{ #category : 'comparing' }
38+
CTQueue >> = anObject [
39+
40+
self class = anObject class ifFalse: [ ^ false ].
41+
self size = anObject size ifFalse: [ ^ false ].
42+
43+
^ self elements = anObject elements
44+
]
45+
3746
{ #category : 'converting' }
3847
CTQueue >> asArray [
3948

@@ -95,6 +104,12 @@ CTQueue >> do: aBlock [
95104
]
96105
]
97106

107+
{ #category : 'accessing' }
108+
CTQueue >> elements [
109+
110+
^ elements
111+
]
112+
98113
{ #category : 'adding' }
99114
CTQueue >> enqueue: anObject [
100115

@@ -105,6 +120,7 @@ CTQueue >> enqueue: anObject [
105120
size := size + 1.
106121
^ self
107122
]
123+
108124
{ #category : 'adding' }
109125
CTQueue >> enqueue: anObject unless: thisTestIsTrue [
110126
1 to: self size do: [ :i |
@@ -118,7 +134,6 @@ CTQueue >> enqueue: anObject unless: thisTestIsTrue [
118134
^ self
119135
]
120136

121-
122137
{ #category : 'adding' }
123138
CTQueue >> enqueueAll: aCollection [
124139

@@ -149,6 +164,14 @@ CTQueue >> grow [
149164
rearIndex := size + 1
150165
]
151166

167+
{ #category : 'comparing' }
168+
CTQueue >> hash [
169+
| hashValue |
170+
hashValue := 131.
171+
1 to: size do: [ :i | hashValue := hashValue bitXor: (elements at: i) hash ].
172+
^ hashValue
173+
]
174+
152175
{ #category : 'testing' }
153176
CTQueue >> includes: anElement [
154177

@@ -230,4 +253,3 @@ CTQueue >> size [
230253

231254
^ size
232255
]
233-

0 commit comments

Comments
 (0)