[squeak-dev] The Trunk: CollectionsTests-jar.349.mcz

Levente Uzonyi leves at caesar.elte.hu
Sat Feb 13 21:12:39 UTC 2021


Hi David,

While these tests pass now and document something about shared queues, I 
don't think we should have them in the Trunk.
I prefer the design-by-contract approach for tests where there are 
actual requirements to be satisfied by the subject of the tests to make 
them pass.
These tests do not describe such requirements, so if the implementations 
change, they'll start failing, which some may interpret wrongly as actual 
errors.
Another problem with them is that people may feel like they can relying on 
the behavior described by these tests since there are tests for them.


Levente

On Sat, 13 Feb 2021, commits at source.squeak.org wrote:

> David T. Lewis uploaded a new version of CollectionsTests to project The Trunk:
> http://source.squeak.org/trunk/CollectionsTests-jar.349.mcz
>
> ==================== Summary ====================
>
> Name: CollectionsTests-jar.349
> Author: jar
> Time: 8 February 2021, 8:25:19.407373 pm
> UUID: f484ba2b-2035-b046-9222-c3e4e42a7ad4
> Ancestors: CollectionsTests-ul.348
>
> Test to show differing SharedQueue and SharedQueue2 semantics
>
> =============== Diff against CollectionsTests-ul.348 ===============
>
> Item was added:
> + ----- Method: AbstractSharedQueueTest>>testContention2 (in category 'tests') -----
> + testContention2
> + 	"and here's a test case that distunguishes SharedQueue from SharedQueue2 semantics:
> + 	SharedQueue2 produces a sequence #(5 10 15) while SharedQueue produces #(5 15 10)"
> + 
> + 	| q r1 r2 r3 |
> + 	q := self queueClass new.
> + 
> + 	[ r1 := q next. q nextPut: 15. r3 := q next ] fork.
> + 	[ r2 := q next ] fork.
> + 
> + 	Processor  yield.   "let the above two threads block"
> + 
> + 	q nextPut: 5.
> + 	Processor yield.    "let the first thread above proceed"
> + 
> + 	q nextPut: 10.
> + 	Processor yield.    "let the unfinished thread above finish"
> + 
> + 	q class = SharedQueue2 ifTrue: [
> + 		self assert: 5 equals: r1.
> + 		self assert: 10 equals: r2.
> + 		self assert: 15 equals: r3.
> + 		self assert: nil equals: q nextOrNil ].
> + 
> + 	q class = SharedQueue ifTrue: [
> + 		self assert: 5 equals: r1.
> + 		self assert: 15 equals: r2.
> + 		self assert: 10 equals: r3.
> + 		self assert: nil equals: q nextOrNil ].
> + 
> + "SharedQueue2 implementation using a Monitor checks the queue for available data while 
> + the SharedQueue implementation based on a Semaphore checks for excessSignals > 0, 
> + which results in these two different outcomes"!


More information about the Squeak-dev mailing list