diff --git a/src/Containers-Queue-Tests/CTQueueTest.class.st b/src/Containers-Queue-Tests/CTQueueTest.class.st index 702a3be..e3604a4 100644 --- a/src/Containers-Queue-Tests/CTQueueTest.class.st +++ b/src/Containers-Queue-Tests/CTQueueTest.class.st @@ -268,6 +268,47 @@ CTQueueTest >> testEnqueueSingleElement [ self assert: queue front equals: 'first' ] +{ #category : 'tests' } +CTQueueTest >> testEnqueueUnlessAdds [ + queue enqueue: 1 unless: [ :v | (v rem: 2) = 0 ]. + self assert: (queue includes: 1). + self assert: queue size equals: 1. + + queue enqueue: 2 unless: [ :v | (v rem: 2) = 0 ]. + self assert: (queue includes: 1). + self assert: (queue includes: 2). + self assert: queue size equals: 2. +] + +{ #category : 'tests' } +CTQueueTest >> testEnqueueUnlessIgnores [ + queue enqueue: 1 unless: [ :v | (v rem: 2) = 0 ]. + queue enqueue: 2 unless: [ :v | (v rem: 2) = 0 ]. + + queue enqueue: 4 unless: [ :v | (v rem: 2) = 0 ]. + self assert: (queue includes: 1). + self assert: (queue includes: 2). + self assert: queue size equals: 2. + + queue enqueue: 3 unless: [ :v | (v rem: 2) = 0 ]. + self assert: (queue includes: 1). + self assert: (queue includes: 2). + self assert: queue size equals: 2. +] + +{ #category : 'tests' } +CTQueueTest >> testEquality [ + | q1 q2 | + q1 := CTQueue new. + q2 := CTQueue new. + + q1 enqueue: 'A'; enqueue: 'B'. + q2 enqueue: 'A'; enqueue: 'B'. + + self assert: q1 equals: q2. + self assert: q1 hash equals: q2 hash. +] + { #category : 'tests' } CTQueueTest >> testErrorHandling [ @@ -421,22 +462,3 @@ CTQueueTest >> testSize [ queue dequeue. self assert: queue size equals: 2 ] - -{ #category : 'tests' } -CTQueueTest >> testEnqueueUnless [ - queue enqueue: 1 unless: [ :v | (v rem: 2) = 0]. - self assert: (queue includes: 1). - self assert: queue size equals: 1 . - queue enqueue: 2 unless: [ :v | (v rem: 2) = 0]. - self assert: (queue includes: 1). - self assert: (queue includes: 2) . - self assert: queue size equals: 2 . - queue enqueue: 4 unless: [ :v | (v rem: 2) = 0]. - self assert: (queue includes: 1). - self assert: (queue includes: 2) . - self assert: queue size equals: 2 . - queue enqueue: 3 unless: [ :v | (v rem: 2) = 0]. - self assert: (queue includes: 1). - self assert: (queue includes: 2) . - self assert: queue size equals: 2 -] diff --git a/src/Containers-Queue/CTQueue.class.st b/src/Containers-Queue/CTQueue.class.st index d618aab..ebbd947 100644 --- a/src/Containers-Queue/CTQueue.class.st +++ b/src/Containers-Queue/CTQueue.class.st @@ -34,6 +34,15 @@ CTQueue class >> new: anInteger [ yourself ] +{ #category : 'comparing' } +CTQueue >> = anObject [ + + self class = anObject class ifFalse: [ ^ false ]. + self size = anObject size ifFalse: [ ^ false ]. + + ^ self elements = anObject elements +] + { #category : 'converting' } CTQueue >> asArray [ @@ -95,6 +104,12 @@ CTQueue >> do: aBlock [ ] ] +{ #category : 'accessing' } +CTQueue >> elements [ + + ^ elements +] + { #category : 'adding' } CTQueue >> enqueue: anObject [ @@ -105,6 +120,7 @@ CTQueue >> enqueue: anObject [ size := size + 1. ^ self ] + { #category : 'adding' } CTQueue >> enqueue: anObject unless: thisTestIsTrue [ 1 to: self size do: [ :i | @@ -118,7 +134,6 @@ CTQueue >> enqueue: anObject unless: thisTestIsTrue [ ^ self ] - { #category : 'adding' } CTQueue >> enqueueAll: aCollection [ @@ -149,6 +164,14 @@ CTQueue >> grow [ rearIndex := size + 1 ] +{ #category : 'comparing' } +CTQueue >> hash [ + | hashValue | + hashValue := 131. + 1 to: size do: [ :i | hashValue := hashValue bitXor: (elements at: i) hash ]. + ^ hashValue +] + { #category : 'testing' } CTQueue >> includes: anElement [ @@ -230,4 +253,3 @@ CTQueue >> size [ ^ size ] -