The Trunk: CollectionsTests-dtl.418.mcz
| Newsgroups | gmane.comp.lang.smalltalk.squeak.general |
|---|---|
| Message-ID | <[email protected]> |
David T. Lewis uploaded a new version of CollectionsTests to project The Trunk: http://source.squeak.org/trunk/CollectionsTests-dtl.418.mcz ==================== Summary ==================== Name: CollectionsTests-dtl.418 Author: dtl Time: 29 April 2026, 6:19:17.620474 pm UUID: fb5879fe-7134-4f8c-a9f9-13dd4d448cbd Ancestors: CollectionsTests-ct.417 SharedQueueTest methods to document the management of the internal contents array in a SharedQueue, which will grow and contract as needed. The tests cover private internal behavior, and will fail if private method #makeRoomAtEnd is changed. =============== Diff against CollectionsTests-ct.417 =============== Item was added: + ----- Method: SharedQueueTest>>testMakeRoomAtEndLargerArrayWrapAround (in category 'tests') ----- + testMakeRoomAtEndLargerArrayWrapAround + | queue | + queue := self queueClass new. + self assert: (queue instVarNamed: #contentsArray) size = 10 + description: 'initial contentsArray has size 10'. + 18 timesRepeat: [queue nextPut: #something]. + 18 timesRepeat: [queue nextOrNil]. + queue nextPut: #ONE. + queue nextPut: #TWO. + self assert: (queue instVarNamed: #contentsArray) size = 20 + description: 'contentsArray has grown to size 20'. + self assert: (queue instVarNamed: #writePosition) = 21. + "next insert will trigger makeRoomAtBeginning" + queue nextPut: #THREE. + self assert: (queue instVarNamed: #contentsArray) size = 10 + description: 'new contentsArray with smaller size sufficient for queue contents'. + self assert: (queue instVarNamed: #writePosition) = 4. "wrapped around in new small collection" + self assert: (queue instVarNamed: #readPosition) = 1. + "verify nothing lost from the queue after running makeRoomAtBeginning" + self assert: #ONE equals: queue nextOrNil. + self assert: #TWO equals: queue nextOrNil. + self assert: #THREE equals: queue nextOrNil. + self assert: nil equals: queue nextOrNil. + self assert: 0 equals: queue size. + ! Item was added: + ----- Method: SharedQueueTest>>testMakeRoomAtEndSmallArrayExtend (in category 'tests') ----- + testMakeRoomAtEndSmallArrayExtend + | queue | + queue := self queueClass new. + self assert: (queue instVarNamed: #contentsArray) size = 10 + description: 'initial contentsArray has size 10'. + 8 timesRepeat: [queue nextPut: #something]. + queue nextPut: #ONE. + queue nextPut: #TWO. + self assert: (queue instVarNamed: #contentsArray) size = 10 + description: 'using initial contentsArray with size 10'. + self assert: (queue instVarNamed: #writePosition) = 11. + "next insert will trigger makeRoomAtBeginning" + queue nextPut: #THREE. + self assert: (queue instVarNamed: #contentsArray) size = 20 + description: 'new contentsArray, size has been doubled'. + self assert: (queue instVarNamed: #writePosition) = 12. + "verify nothing lost from the queue after running makeRoomAtBeginning" + 8 timesRepeat: [self assert: #something equals: queue nextOrNil]. + self assert: #ONE equals: queue nextOrNil. + self assert: #TWO equals: queue nextOrNil. + self assert: #THREE equals: queue nextOrNil. + self assert: nil equals: queue nextOrNil. + self assert: 0 equals: queue size. + ! Item was added: + ----- Method: SharedQueueTest>>testMakeRoomAtEndSmallArrayWrapAround (in category 'tests') ----- + testMakeRoomAtEndSmallArrayWrapAround + | queue | + queue := self queueClass new. + self assert: (queue instVarNamed: #contentsArray) size = 10 + description: 'initial contentsArray has size 10'. + 8 timesRepeat: [queue nextPut: #something]. + 8 timesRepeat: [queue nextOrNil]. + queue nextPut: #ONE. + queue nextPut: #TWO. + self assert: (queue instVarNamed: #contentsArray) size = 10 + description: 'using initial contentsArray with size 10'. + self assert: (queue instVarNamed: #writePosition) = 11. + "next insert will trigger makeRoomAtBeginning" + queue nextPut: #THREE. + self assert: (queue instVarNamed: #contentsArray) size = 10 + description: 'initial contentsArray has room, continue using it'. + self assert: (queue instVarNamed: #writePosition) = 4. "wrapped around in same collection" + self assert: (queue instVarNamed: #readPosition) = 1. + "verify nothing lost from the queue after running makeRoomAtBeginning" + self assert: #ONE equals: queue nextOrNil. + self assert: #TWO equals: queue nextOrNil. + self assert: #THREE equals: queue nextOrNil. + self assert: nil equals: queue nextOrNil. + self assert: 0 equals: queue size. + ! Item was added: + ----- Method: SharedQueueTest>>testMakeRoomAtEndVeryLargeArrayExtend (in category 'tests') ----- + testMakeRoomAtEndVeryLargeArrayExtend + | queue | + queue := self queueClass new: 10000. + self assert: (queue instVarNamed: #contentsArray) size = 10000 + description: 'large initiaol contentsArray'. + 9998 timesRepeat: [queue nextPut: #something]. + 400 timesRepeat: [queue nextOrNil]. + queue nextPut: #ONE. + queue nextPut: #TWO. + self assert: (queue instVarNamed: #contentsArray) size = 10000 + description: 'contentsArray filled to end'. + self assert: (queue instVarNamed: #writePosition) = 10001. + "next insert will trigger makeRoomAtBeginning" + queue nextPut: #THREE. + self assert: (queue instVarNamed: #contentsArray) size = 20000 + description: 'new contentsArray with smaller size sufficient for queue contents'. + self assert: (queue instVarNamed: #writePosition) = 9602. "wrapped around in new collection of increased size" + self assert: (queue instVarNamed: #readPosition) = 1. + "verify nothing lost from the queue after running makeRoomAtBeginning" + 9998 - 400 timesRepeat: [self assert: #something equals: queue nextOrNil]. + self assert: #ONE equals: queue nextOrNil. + self assert: #TWO equals: queue nextOrNil. + self assert: #THREE equals: queue nextOrNil. + self assert: nil equals: queue nextOrNil. + self assert: 0 equals: queue size. + ! Item was added: + ----- Method: SharedQueueTest>>testMakeRoomAtEndVeryLargeArrayWrapAround (in category 'tests') ----- + testMakeRoomAtEndVeryLargeArrayWrapAround + | queue | + queue := self queueClass new: 10000. + self assert: (queue instVarNamed: #contentsArray) size = 10000 + description: 'large initiaol contentsArray'. + 9998 timesRepeat: [queue nextPut: #something]. + 9998 timesRepeat: [queue nextOrNil]. + queue nextPut: #ONE. + queue nextPut: #TWO. + self assert: (queue instVarNamed: #contentsArray) size = 10000 + description: 'contentsArray filled to end'. + self assert: (queue instVarNamed: #writePosition) = 10001. + "next insert will trigger makeRoomAtBeginning" + queue nextPut: #THREE. + self assert: (queue instVarNamed: #contentsArray) size = 10 + description: 'new contentsArray with smaller size sufficient for queue contents'. + self assert: (queue instVarNamed: #writePosition) = 4. "wrapped around in new small collection" + self assert: (queue instVarNamed: #readPosition) = 1. + "verify nothing lost from the queue after running makeRoomAtBeginning" + self assert: #ONE equals: queue nextOrNil. + self assert: #TWO equals: queue nextOrNil. + self assert: #THREE equals: queue nextOrNil. + self assert: nil equals: queue nextOrNil. + self assert: 0 equals: queue size. + ! Squeak-dev mailing list -- [email protected] To unsubscribe send an email to [email protected]