SystemOrganization addCategory: #'Container-Tests-Core'! SystemOrganization addCategory: #'Container-Tests-Core-Comparators'! SystemOrganization addCategory: #'Container-Tests-Core-Iterators'! SystemOrganization addCategory: #'Container-Tests-Core-Lists'! SystemOrganization addCategory: #'Container-Tests-Core-Sets'! SystemOrganization addCategory: #'Container-Tests-Core-Maps'! SystemOrganization addCategory: #'Container-Tests-Core-Misc'! !CTTreeMap methodsFor: '*container-tests-core' stamp: 'lr 1/25/2012 08:11'! assertInvariants: anAsserter super assertInvariants: anAsserter. tree assertInvariants: anAsserter! ! !CTUnmodifiableSet methodsFor: '*container-tests-core' stamp: 'lr 4/21/2012 14:17'! assertInvariants: anAsserter super assertInvariants: anAsserter. delegate assertInvariants: anAsserter! ! !CTSubList methodsFor: '*container-tests-core' stamp: 'lr 4/21/2012 14:17'! assertInvariants: anAsserter super assertInvariants: anAsserter. self isEmpty ifFalse: [ delegate at: firstIndex ifAbsent: [ anAsserter fail ]. delegate at: lastIndex ifAbsent: [ anAsserter fail ] ]! ! !CTLinkedHashSet methodsFor: '*container-tests-core' stamp: 'lr 4/21/2012 09:20'! assertInvariants: anAsserter super assertInvariants: anAsserter. root assertInvariants: anAsserter. self assert: table size = root iterator size! ! !CTImmutableMap methodsFor: '*container-tests-core' stamp: 'lr 4/21/2012 19:20'! assertInvariants: anAsserter super assertInvariants: anAsserter. delegate assertInvariants: anAsserter! ! !CTDelegateList methodsFor: '*container-tests-core' stamp: 'lr 4/21/2012 14:17'! assertInvariants: anAsserter super assertInvariants: anAsserter. delegate assertInvariants: anAsserter! ! !CTImmutableSet methodsFor: '*container-tests-core' stamp: 'lr 4/21/2012 14:17'! assertInvariants: anAsserter super assertInvariants: anAsserter. delegate assertInvariants: anAsserter! ! !CTLinkedList methodsFor: '*container-tests-core' stamp: 'lr 1/13/2012 11:08'! assertInvariants: anAsserter super assertInvariants: anAsserter. root assertInvariants: anAsserter! ! !CTTreeSet methodsFor: '*container-tests-core' stamp: 'lr 1/25/2012 08:11'! assertInvariants: anAsserter super assertInvariants: anAsserter. tree assertInvariants: anAsserter! ! !CTHashTable methodsFor: '*container-tests-core' stamp: 'lr 1/24/2012 20:02'! assertInvariants: anAsserter self assert: self size = self iterator size. self assert: self size <= threshold! ! !CTLinkedListRoot methodsFor: '*container-tests-core' stamp: 'lr 4/21/2012 09:21'! assertInvariants: anAsserter self assertInvariants: anAsserter forNode: self. self iterator do: [ :node | self assertInvariants: anAsserter forNode: node ]. self iterator do: [ :node | self assertInvariants: anAsserter forNode: node ]! ! !CTLinkedListRoot methodsFor: '*container-tests-core' stamp: 'lr 1/13/2012 11:07'! assertInvariants: anAsserter forNode: aNode anAsserter assert: aNode before after == aNode. anAsserter assert: aNode after before == aNode! ! !CTVectorList methodsFor: '*container-tests-core' stamp: 'lr 1/21/2012 19:15'! assertInvariants: anAsserter super assertInvariants: anAsserter. size + 1 to: array size do: [ :index | anAsserter assert: (array at: index) isNil ]! ! !CTContainer methodsFor: '*container-tests-core' stamp: 'lr 4/21/2012 09:44'! assertInvariants: anAsserter "Asserts the internal invariants of this container." anAsserter assert: self size = self iterator size description: 'Container and iterator are not of equal size'! ! !CTArrayList methodsFor: '*container-tests-core' stamp: 'lr 4/21/2012 09:51'! assertInvariants: anAsserter super assertInvariants: anAsserter. 1 to: firstIndex - 1 do: [ :index | anAsserter assert: (array at: index) isNil description: 'Element slots smaller than firstIndex must be nil' ]. lastIndex + 1 to: array size do: [ :index | anAsserter assert: (array at: index) isNil description: 'Element slots larger than lastIndex must be nil' ]! ! !CTHashMap methodsFor: '*container-tests-core' stamp: 'lr 1/14/2012 10:28'! assertInvariants: anAsserter super assertInvariants: anAsserter. table assertInvariants: anAsserter! ! !CTUnmodifiableMap methodsFor: '*container-tests-core' stamp: 'lr 4/21/2012 19:20'! assertInvariants: anAsserter super assertInvariants: anAsserter. delegate assertInvariants: anAsserter! ! !CTRedBlackTreeNode methodsFor: '*container-tests-core' stamp: 'lr 3/31/2012 15:18'! assertInvariants: anAsserter owner: aTree comparator: aComparator black: anInteger | black | black := self red ifTrue: [ anInteger ] ifFalse: [ anInteger - 1 ]. self left isNil ifFalse: [ anAsserter assert: (aComparator less: self left key than: self key) description: 'Left node must be smaller than its parent'. self left assertInvariants: anAsserter owner: aTree comparator: aComparator black: black ]. self right isNil ifFalse: [ anAsserter assert: (aComparator less: self key than: self right key) description: 'Right node must be larger than its parent'. self right assertInvariants: anAsserter owner: aTree comparator: aComparator black: black ]. (self left isNil or: [ self right isNil ]) ifTrue: [ anAsserter assert: black = 0 description: 'Every path to a leaf must have the same number of black links' ]. anAsserter deny: (aTree isRed: self right) description: 'No red links to the right'. anAsserter deny: (self red and: [ (aTree isRed: self left) and: [ aTree isRed: self left left ] ]) description: 'At most two red links to the left'! ! !CTRedBlackTree class methodsFor: '*container-tests-core' stamp: 'lr 4/1/2012 11:07'! stress | tree asserter | tree := CTTreeSet new. asserter := TestAsserter new. [ (1 to: 10000) asArray shuffled do: [ :each | tree add: each. each \\ 100 = 0 ifTrue: [ tree assertInvariants: asserter ] ]. tree assertInvariants: asserter. asserter assert: (tree size = 10000). asserter assert: (tree includesAll: (1 to: 10000) asArray shuffled). (1 to: 10000) asArray shuffled do: [ :each | tree remove: each. each \\ 100 = 0 ifTrue: [ tree assertInvariants: asserter ] ]. tree assertInvariants: asserter. asserter assert: tree isEmpty. Transcript show: '.' ] repeat! ! !CTRedBlackTree methodsFor: '*container-tests-core' stamp: 'lr 3/31/2012 15:13'! assertInvariants: anAsserter | black current | anAsserter deny: (self isRed: root) description: 'The root node must be black'. root isNil ifTrue: [ ^ anAsserter assert: size = 0 ]. black := 0. current := root. [ current isNil ] whileFalse: [ (self isRed: current) ifFalse: [ black := black + 1 ]. current := current left ]. root assertInvariants: anAsserter owner: self comparator: comparator black: black! ! TestCase subclass: #CTContainerTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Container-Tests-Core'! CTContainerTest subclass: #CTCollectionTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Container-Tests-Core'! !CTCollectionTest class methodsFor: 'testing' stamp: 'lr 8/7/2011 19:59'! isAbstract ^ self name = #CTCollectionTest! ! !CTCollectionTest methodsFor: 'accessing' stamp: 'lr 4/5/2012 11:00'! collectionClass self subclassResponsibility! ! !CTCollectionTest methodsFor: 'accessing' stamp: 'lr 1/10/2012 07:40'! collectionWithAll: aCollection ^ self collectionClass withAll: aCollection! ! !CTCollectionTest methodsFor: 'accessing' stamp: 'lr 2/6/2012 22:37'! collectionWithRandomElements: anInteger ^ self collectionWithAll: (self randomSequence: anInteger)! ! !CTCollectionTest methodsFor: 'accessing' stamp: 'lr 2/11/2012 11:35'! emptyCollection ^ self collectionWithAll: #()! ! !CTCollectionTest methodsFor: 'tests-copying' stamp: 'lr 2/11/2012 14:41'! testCopyEmpty | old new | old := self emptyCollection. new := old copy. self deny: old == new. self assertIterable: old equals: new. self assertInvariants: old. self assertInvariants: new. (old isKindOf: CTSubList) ifTrue: [ ^ self ]. old add: $a. new add: $b. self assert: old size = 1. self assert: new size = 1. self assert: old iterator next = $a. self assert: new iterator next = $b. self assert: (old iterator anySatisfy: [ :e | e = $a ]). self assert: (new iterator anySatisfy: [ :e | e = $b ]). self assert: (old iterator noneSatisfy: [ :e | e = $b ]). self assert: (new iterator noneSatisfy: [ :e | e = $a ])! ! !CTCollectionTest methodsFor: 'tests-copying' stamp: 'lr 2/11/2012 14:41'! testCopyMany | old new | old := self collectionWithRandomElements: 100. new := old copy. self deny: old == new. self assertIterable: old equals: new. self assertInvariants: old. self assertInvariants: new. (old isKindOf: CTSubList) ifTrue: [ ^ self ]. old add: 101. new add: 102. self assert: old size = 101. self assert: new size = 101. self assert: (old iterator anySatisfy: [ :e | e = 101 ]). self assert: (new iterator anySatisfy: [ :e | e = 102 ]). self assert: (old iterator noneSatisfy: [ :e | e = 102 ]). self assert: (new iterator noneSatisfy: [ :e | e = 101 ])! ! !CTCollectionTest methodsFor: 'tests-exceptions' stamp: 'lr 1/27/2012 22:06'! testElementNotFound [ self emptyCollection remove: $a ] on: CTElementNotFoundError do: [ :exception | self assert: exception element = $a. ^ self ]. self fail! ! !CTCollectionTest methodsFor: 'tests-testing' stamp: 'lr 1/10/2012 07:42'! testIsEmpty self assert: (self collectionWithAll: #()) isEmpty. self deny: (self collectionWithAll: #($a)) isEmpty. self deny: (self collectionWithAll: #($a $b)) isEmpty! ! !CTCollectionTest methodsFor: 'tests-iterators' stamp: 'lr 1/27/2012 22:03'! testIteratorCopy | old new | old := self collectionWithRandomElements: 100. new := old iterator as: self collectionClass. self deny: old == new. self assertIterable: old equals: new. self assertInvariants: old. self assertInvariants: new! ! !CTCollectionTest methodsFor: 'tests-iterators' stamp: 'lr 1/13/2012 11:42'! testIteratorEmpty | collection | collection := self collectionWithAll: #(). self assertIterable: #() equals: collection iterator! ! !CTCollectionTest methodsFor: 'tests-iterators' stamp: 'lr 1/13/2012 11:44'! testIteratorMultiple | collection | collection := self collectionWithAll: #($a $b $c). self assert: collection iterator size = 3. self assert: (collection iterator includes: $a). self assert: (collection iterator includes: $b). self assert: (collection iterator includes: $c)! ! !CTCollectionTest methodsFor: 'tests-iterators' stamp: 'lr 1/13/2012 11:42'! testIteratorSingle | collection | collection := self collectionWithAll: #($a). self assertIterable: #($a) equals: collection iterator! ! !CTCollectionTest methodsFor: 'tests-instantiation' stamp: 'lr 1/26/2012 10:32'! testNew1 | collection | collection := self collectionClass new. self assertInvariants: collection. self assert: collection isEmpty! ! !CTCollectionTest methodsFor: 'tests-instantiation' stamp: 'lr 1/26/2012 10:32'! testNew2 | collection | collection := self collectionClass new: 100. self assertInvariants: collection. self assert: collection isEmpty! ! !CTCollectionTest methodsFor: 'tests-testing' stamp: 'lr 4/5/2012 11:48'! testNotEmpty self deny: (self collectionWithAll: #()) notEmpty. self assert: (self collectionWithAll: #($a)) notEmpty. self assert: (self collectionWithAll: #($a $b)) notEmpty! ! !CTCollectionTest methodsFor: 'tests' stamp: 'lr 1/28/2012 16:37'! testPrinting | collection | collection := self emptyCollection. self assert: collection printString isString. collection := self collectionWithAll: #($a $b $c). self assert: collection printString isString! ! !CTCollectionTest methodsFor: 'tests-removing' stamp: 'lr 1/14/2012 00:21'! testRemove | collection | collection := self collectionWithAll: #($a $b $c $d $e). self should: [ collection remove: $y ] raise: CTElementNotFoundError. self assert: (collection remove: $a) = $a. self assert: (collection remove: $c) = $c. self assert: (collection remove: $e) = $e. self assert: collection size = 2. self assert: (collection iterator includes: $b). self assert: (collection iterator includes: $d). self assertInvariants: collection! ! !CTCollectionTest methodsFor: 'tests-removing' stamp: 'lr 1/11/2012 22:47'! testRemoveAll | collection | collection := self collectionWithRandomElements: 100. collection removeAll. self assert: collection isEmpty. self assertInvariants: collection! ! !CTCollectionTest methodsFor: 'tests-removing' stamp: 'lr 1/14/2012 00:21'! testRemoveIfAbsent | collection | collection := self collectionWithAll: #($a $b $c $d $e). self assert: (collection remove: $y ifAbsent: [ $x ]) = $x. self assert: (collection remove: $a ifAbsent: [ $x ]) = $a. self assert: (collection remove: $c ifAbsent: [ $x ]) = $c. self assert: (collection remove: $e ifAbsent: [ $x ]) = $e. self assert: collection size = 2. self assert: (collection iterator includes: $b). self assert: (collection iterator includes: $d). self assertInvariants: collection! ! !CTCollectionTest methodsFor: 'tests-accessing' stamp: 'lr 1/10/2012 07:41'! testSize self assert: (self collectionWithAll: #()) size = 0. self assert: (self collectionWithAll: #($a)) size = 1. self assert: (self collectionWithAll: #($a $b)) size = 2! ! !CTCollectionTest methodsFor: 'tests-instantiation' stamp: 'lr 1/26/2012 10:32'! testWith1 | collection | collection := self collectionClass with: $a. self assertInvariants: collection. self assert: (collection iterator includes: $a). self assert: (collection size) = 1! ! !CTCollectionTest methodsFor: 'tests-instantiation' stamp: 'lr 1/26/2012 10:32'! testWith2 | collection | collection := self collectionClass with: $a with: $b. self assertInvariants: collection. self assert: (collection iterator includes: $a). self assert: (collection iterator includes: $b). self assert: (collection size) = 2! ! !CTCollectionTest methodsFor: 'tests-instantiation' stamp: 'lr 1/26/2012 10:32'! testWith3 | collection | collection := self collectionClass with: $a with: $b with: $c. self assertInvariants: collection. self assert: (collection iterator includes: $a). self assert: (collection iterator includes: $b). self assert: (collection iterator includes: $c). self assert: (collection size) = 3! ! !CTCollectionTest methodsFor: 'tests-instantiation' stamp: 'lr 1/26/2012 10:32'! testWith4 | collection | collection := self collectionClass with: $a with: $b with: $c with: $d. self assertInvariants: collection. self assert: (collection iterator includes: $a). self assert: (collection iterator includes: $b). self assert: (collection iterator includes: $c). self assert: (collection iterator includes: $d). self assert: (collection size) = 4! ! !CTCollectionTest methodsFor: 'tests-instantiation' stamp: 'lr 4/5/2012 11:17'! testWithAll | old new | old := self collectionWithRandomElements: 100. new := self collectionWithAll: old. self deny: old == new. self assertIterable: old equals: new. self assertInvariants: old. self assertInvariants: new. [ old add: 101 ] on: CTUnsupportedOperationError do: [ :error | ^ self ]. [ new add: 102 ] on: CTUnsupportedOperationError do: [ :error | ^ self ]. self assert: old size = 101. self assert: new size = 101. self assert: (old iterator anySatisfy: [ :e | e = 101 ]). self assert: (new iterator anySatisfy: [ :e | e = 102 ]). self assert: (old iterator noneSatisfy: [ :e | e = 102 ]). self assert: (new iterator noneSatisfy: [ :e | e = 101 ])! ! !CTCollectionTest methodsFor: 'tests' stamp: 'lr 4/5/2012 11:06'! testWorkflow | collection | collection := self collectionWithAll: #(). self assertInvariants: collection. self assert: collection isEmpty. collection addAll: (self randomSequence: self workflowSize). self assertInvariants: collection. self assert: collection size = self workflowSize. 1 to: self workflowSize do: [ :each | self assert: (collection includes: each) ]. (collection isKindOf: CTSet) ifTrue: [ collection addAll: (self randomSequence: self workflowSize). self assertInvariants: collection. self assert: collection size = self workflowSize. 1 to: self workflowSize do: [ :each | self assert: (collection includes: each) ] ]. (self randomSequence: self workflowSize) do: [ :each | collection remove: each ]. self assertInvariants: collection. self assert: collection isEmpty! ! !CTCollectionTest methodsFor: 'accessing' stamp: 'lr 1/28/2012 16:42'! workflowSize ^ 1000! ! CTCollectionTest subclass: #CTListTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Container-Tests-Core'! CTListTest subclass: #CTArrayListTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Container-Tests-Core-Lists'! !CTArrayListTest methodsFor: 'accessing' stamp: 'lr 1/20/2012 22:16'! collectionClass ^ CTArrayList! ! CTListTest subclass: #CTDelegateListTest instanceVariableNames: 'collectionClass' classVariableNames: '' poolDictionaries: '' category: 'Container-Tests-Core-Lists'! !CTDelegateListTest methodsFor: 'accessing' stamp: 'lr 4/5/2012 11:22'! collectionClass ^ collectionClass! ! !CTDelegateListTest methodsFor: 'accessing' stamp: 'lr 4/21/2012 10:59'! collectionClasses ^ Array with: CTArrayList with: CTLinkedList with: CTVectorList! ! !CTDelegateListTest methodsFor: 'accessing' stamp: 'lr 4/20/2012 21:50'! collectionWithAll: aCollection ^ CTDelegateList on: (self collectionClass withAll: aCollection)! ! !CTDelegateListTest methodsFor: 'running' stamp: 'lr 4/21/2012 11:05'! runCase self collectionClasses do: [ :class | collectionClass := class. super runCase ]! ! CTDelegateListTest subclass: #CTMoreImmutableListTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Container-Tests-Core-Lists'! !CTMoreImmutableListTest class methodsFor: 'testing' stamp: 'lr 4/5/2012 12:04'! shouldInheritSelectors ^ false! ! !CTMoreImmutableListTest methodsFor: 'accessing' stamp: 'lr 4/5/2012 12:04'! collectionWithAll: aCollection ^ (super collectionWithAll: aCollection) immutable! ! !CTMoreImmutableListTest methodsFor: 'tests-adding' stamp: 'lr 4/5/2012 12:04'! testAdd self should: [ super testAdd ] raise: CTUnsupportedOperationError! ! !CTMoreImmutableListTest methodsFor: 'tests-adding' stamp: 'lr 4/5/2012 12:04'! testAddAt self should: [ super testAddAt ] raise: CTUnsupportedOperationError! ! !CTMoreImmutableListTest methodsFor: 'tests-adding' stamp: 'lr 4/5/2012 12:04'! testAddFirst self should: [ super testAddFirst ] raise: CTUnsupportedOperationError! ! !CTMoreImmutableListTest methodsFor: 'tests-adding' stamp: 'lr 4/5/2012 12:04'! testAddLast self should: [ super testAddLast ] raise: CTUnsupportedOperationError! ! !CTMoreImmutableListTest methodsFor: 'tests-accessing' stamp: 'lr 4/5/2012 12:04'! testAt super testAt! ! !CTMoreImmutableListTest methodsFor: 'tests-accessing' stamp: 'lr 4/5/2012 12:04'! testAtIfAbsent super testAtIfAbsent! ! !CTMoreImmutableListTest methodsFor: 'tests-accessing' stamp: 'lr 4/5/2012 12:04'! testAtPut self should: [ super testAtPut ] raise: CTUnsupportedOperationError! ! !CTMoreImmutableListTest methodsFor: 'tests-copying' stamp: 'lr 4/5/2012 12:05'! testCopy | collection immutable | collection := self collectionWithAll: #($a $b $c). immutable := collection immutable. self assert: immutable copy == immutable! ! !CTMoreImmutableListTest methodsFor: 'tests-accessing' stamp: 'lr 4/5/2012 12:04'! testFirst super testFirst! ! !CTMoreImmutableListTest methodsFor: 'tests-accessing' stamp: 'lr 4/5/2012 12:05'! testImmutable | collection immutable | collection := self collectionWithAll: #($a $b $c). immutable := collection immutable. self assert: immutable immutable == immutable! ! !CTMoreImmutableListTest methodsFor: 'tests-exceptions' stamp: 'lr 4/5/2012 12:05'! testIndexOutOfBounds super testIndexOutOfBounds! ! !CTMoreImmutableListTest methodsFor: 'tests-testing' stamp: 'lr 4/5/2012 12:05'! testIsEmpty super testIsEmpty! ! !CTMoreImmutableListTest methodsFor: 'tests-iterators' stamp: 'lr 4/21/2012 10:54'! testIterator super testIterator! ! !CTMoreImmutableListTest methodsFor: 'tests-iterators' stamp: 'lr 4/5/2012 12:05'! testIteratorCopy super testIteratorCopy! ! !CTMoreImmutableListTest methodsFor: 'tests-iterators' stamp: 'lr 4/21/2012 10:54'! testIteratorEmpty super testIteratorEmpty! ! !CTMoreImmutableListTest methodsFor: 'tests-iterators' stamp: 'lr 4/21/2012 10:54'! testIteratorIndexed super testIteratorIndexed! ! !CTMoreImmutableListTest methodsFor: 'tests-accessing' stamp: 'lr 4/5/2012 12:04'! testLast super testLast! ! !CTMoreImmutableListTest methodsFor: 'tests-testing' stamp: 'lr 4/5/2012 12:05'! testNotEmpty super testNotEmpty! ! !CTMoreImmutableListTest methodsFor: 'tests' stamp: 'lr 4/5/2012 12:04'! testPrinting super testPrinting! ! !CTMoreImmutableListTest methodsFor: 'tests-removing' stamp: 'lr 4/5/2012 12:05'! testRemove self should: [ super testRemove ] raise: CTUnsupportedOperationError! ! !CTMoreImmutableListTest methodsFor: 'tests-removing' stamp: 'lr 4/5/2012 12:05'! testRemoveAll self should: [ super testRemoveAll ] raise: CTUnsupportedOperationError! ! !CTMoreImmutableListTest methodsFor: 'tests-removing' stamp: 'lr 4/5/2012 12:05'! testRemoveAt self should: [ super testRemoveAt ] raise: CTUnsupportedOperationError! ! !CTMoreImmutableListTest methodsFor: 'tests-removing' stamp: 'lr 4/5/2012 12:05'! testRemoveAtIfAbsent self should: [ super testRemoveAtIfAbsent ] raise: CTUnsupportedOperationError! ! !CTMoreImmutableListTest methodsFor: 'tests-removing' stamp: 'lr 4/5/2012 12:05'! testRemoveFirst self should: [ super testRemoveFirst ] raise: CTUnsupportedOperationError! ! !CTMoreImmutableListTest methodsFor: 'tests-removing' stamp: 'lr 4/5/2012 12:05'! testRemoveIfAbsent self should: [ super testRemoveIfAbsent ] raise: CTUnsupportedOperationError! ! !CTMoreImmutableListTest methodsFor: 'tests-removing' stamp: 'lr 4/5/2012 12:05'! testRemoveLast self should: [ super testRemoveLast ] raise: CTUnsupportedOperationError! ! !CTMoreImmutableListTest methodsFor: 'tests-accessing' stamp: 'lr 4/5/2012 12:04'! testSize super testSize! ! !CTMoreImmutableListTest methodsFor: 'tests-sorting' stamp: 'lr 4/5/2012 12:05'! testSortDefault self should: [ super testSortDefault ] raise: CTUnsupportedOperationError! ! !CTMoreImmutableListTest methodsFor: 'tests-sorting' stamp: 'lr 4/5/2012 12:05'! testSortEmpty self should: [ super testSortEmpty ] raise: CTUnsupportedOperationError! ! !CTMoreImmutableListTest methodsFor: 'tests-sorting' stamp: 'lr 4/5/2012 12:05'! testSortOrder self should: [ super testSortOrder ] raise: CTUnsupportedOperationError! ! !CTMoreImmutableListTest methodsFor: 'tests-accessing' stamp: 'lr 4/5/2012 12:05'! testUnmodifiable | collection immutable | collection := self collectionWithAll: #($a $b $c). immutable := collection immutable. self assert: immutable unmodifiable == immutable! ! CTDelegateListTest subclass: #CTReversedListTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Container-Tests-Core-Lists'! !CTReversedListTest class methodsFor: 'testing' stamp: 'lr 4/21/2012 10:56'! shouldInheritSelectors ^ false! ! !CTReversedListTest methodsFor: 'accessing' stamp: 'lr 4/21/2012 10:18'! collectionWithAll: aCollection ^ (super collectionWithAll: aCollection) reversed! ! CTDelegateListTest subclass: #CTSubListTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Container-Tests-Core-Lists'! !CTSubListTest class methodsFor: 'testing' stamp: 'lr 4/21/2012 10:56'! shouldInheritSelectors ^ false! ! !CTSubListTest methodsFor: 'accessing' stamp: 'lr 2/11/2012 11:35'! collectionWithAll: aCollection ^ self collectionWithAll: aCollection from: 1 to: aCollection size! ! !CTSubListTest methodsFor: 'accessing' stamp: 'lr 2/11/2012 12:14'! collectionWithAll: aCollection from: aStartIndex to: aStopIndex ^ (self collectionClass withAll: aCollection) from: aStartIndex to: aStopIndex! ! !CTSubListTest methodsFor: 'tests-adding' stamp: 'lr 2/11/2012 14:28'! testSubAddAt | collection sub | collection := self collectionWithAll: #($a $b $c $d $e). sub := collection from: 2 to: 4. self should: [ sub add: $x at: 0 ] raise: CTIndexOutOfBoundsError. self assertIterable: sub equals: #($b $c $d). self assertIterable: collection equals: #($a $b $c $d $e). self should: [ sub add: $x at: 5 ] raise: CTIndexOutOfBoundsError. self assertIterable: sub equals: #($b $c $d). self assertIterable: collection equals: #($a $b $c $d $e). self assert: (sub add: $x at: 1) = $x. self assertIterable: sub equals: #($x $b $c $d). self assertIterable: collection equals: #($a $x $b $c $d $e). self assert: (sub add: $y at: 3) = $y. self assertIterable: sub equals: #($x $b $y $c $d). self assertIterable: collection equals: #($a $x $b $y $c $d $e). self assert: (sub add: $z at: 6) = $z. self assertIterable: sub equals: #($x $b $y $c $d $z). self assertIterable: collection equals: #($a $x $b $y $c $d $z $e)! ! !CTSubListTest methodsFor: 'tests-adding' stamp: 'lr 2/11/2012 14:28'! testSubAddFirst | collection sub | collection := self collectionWithAll: #($a $b $c $d $e). sub := collection from: 2 to: 4. self assert: (sub addFirst: $x) = $x. self assertIterable: sub equals: #($x $b $c $d). self assertIterable: collection equals: #($a $x $b $c $d $e)! ! !CTSubListTest methodsFor: 'tests-adding' stamp: 'lr 2/11/2012 14:28'! testSubAddLast | collection sub | collection := self collectionWithAll: #($a $b $c $d $e). sub := collection from: 2 to: 4. self assert: (sub addLast: $x) = $x. self assertIterable: sub equals: #($b $c $d $x ). self assertIterable: collection equals: #($a $b $c $d $x $e)! ! !CTSubListTest methodsFor: 'tests-accessing' stamp: 'lr 2/11/2012 14:18'! testSubAt | collection sub | collection := self collectionWithAll: #($a $b $c $d $e). sub := collection from: 2 to: 4. self should: [ sub at: 0 ] raise: CTIndexOutOfBoundsError. self assert: (sub at: 1) = $b. self assert: (sub at: 2) = $c. self assert: (sub at: 3) = $d. self should: [ sub at: 4 ] raise: CTIndexOutOfBoundsError ! ! !CTSubListTest methodsFor: 'tests-accessing' stamp: 'lr 2/11/2012 14:19'! testSubAtIfAbsent | collection sub | collection := self collectionWithAll: #($a $b $c $d $e). sub := collection from: 2 to: 4. self assert: (sub at: 0 ifAbsent: [ $x ]) = $x. self assert: (sub at: 1 ifAbsent: [ $x ]) = $b. self assert: (sub at: 2 ifAbsent: [ $x ]) = $c. self assert: (sub at: 3 ifAbsent: [ $x ]) = $d. self assert: (sub at: 4 ifAbsent: [ $x ]) = $x! ! !CTSubListTest methodsFor: 'tests-accessing' stamp: 'lr 2/11/2012 14:22'! testSubAtPut | collection sub | collection := self collectionWithAll: #($a $b $c $d $e). sub := collection from: 2 to: 4. self should: [ sub at: 0 put: $x ] raise: CTIndexOutOfBoundsError. self assertIterable: sub equals: #($b $c $d). self assertIterable: collection equals: #($a $b $c $d $e). self assert: (sub at: 1 put: $x) = $x. self assertIterable: sub equals: #($x $c $d). self assertIterable: collection equals: #($a $x $c $d $e). self assert: (sub at: 2 put: $x) = $x. self assertIterable: sub equals: #($x $x $d). self assertIterable: collection equals: #($a $x $x $d $e). self assert: (sub at: 3 put: $x) = $x. self assertIterable: sub equals: #($x $x $x). self assertIterable: collection equals: #($a $x $x $x $e). self should: [ sub at: 4 put: $x ] raise: CTIndexOutOfBoundsError. self assertIterable: sub equals: #($x $x $x). self assertIterable: collection equals: #($a $x $x $x $e)! ! !CTSubListTest methodsFor: 'tests-accessing' stamp: 'lr 2/11/2012 14:16'! testSubFirst | collection sub | collection := self collectionWithAll: #($a $b $c $d $e). sub := collection from: 2 to: 4. self assert: sub first = $b! ! !CTSubListTest methodsFor: 'tests-accessing' stamp: 'lr 2/11/2012 14:16'! testSubLast | collection sub | collection := self collectionWithAll: #($a $b $c $d $e). sub := collection from: 2 to: 4. self assert: sub last = $d! ! !CTSubListTest methodsFor: 'tests-instantiation' stamp: 'lr 2/11/2012 14:30'! testSubNew self should: [ self emptyCollection class new ] raise: CTUnsupportedOperationError. self should: [ self emptyCollection class new: 10 ] raise: CTUnsupportedOperationError! ! !CTSubListTest methodsFor: 'tests-removing' stamp: 'lr 2/11/2012 14:28'! testSubRemoveAll | collection sub | collection := self collectionWithAll: #($a $b $c $d $e). sub := collection from: 2 to: 4. self assert: sub removeAll = sub. self assertIterable: collection equals: #($a $e). self assertIterable: sub equals: #(). self assert: sub removeAll = sub. self assertIterable: collection equals: #($a $e). self assertIterable: sub equals: #()! ! !CTSubListTest methodsFor: 'tests-removing' stamp: 'lr 2/11/2012 14:28'! testSubRemoveAt | collection sub | collection := self collectionWithAll: #($a $b $c $d $e). sub := collection from: 2 to: 4. self assert: (sub removeAt: 2) = $c. self assertIterable: collection equals: #($a $b $d $e). self assertIterable: sub equals: #($b $d). ! ! !CTSubListTest methodsFor: 'tests-removing' stamp: 'lr 2/11/2012 14:28'! testSubRemoveFirst | collection sub | collection := self collectionWithAll: #($a $b $c $d $e). sub := collection from: 2 to: 4. self assert: sub removeFirst = $b. self assertIterable: collection equals: #($a $c $d $e). self assertIterable: sub equals: #($c $d) ! ! !CTSubListTest methodsFor: 'tests-removing' stamp: 'lr 2/11/2012 14:28'! testSubRemoveLast | collection sub | collection := self collectionWithAll: #($a $b $c $d $e). sub := collection from: 2 to: 4. self assert: sub removeLast = $d. self assertIterable: collection equals: #($a $b $c $e). self assertIterable: sub equals: #($b $c) ! ! !CTSubListTest methodsFor: 'tests-instantiation' stamp: 'lr 2/11/2012 14:31'! testSubWith self should: [ self emptyCollection class with: $a ] raise: CTUnsupportedOperationError. self should: [ self emptyCollection class with: $a with: $b ] raise: CTUnsupportedOperationError. self should: [ self emptyCollection class with: $a with: $b with: $c ] raise: CTUnsupportedOperationError. self should: [ self emptyCollection class with: $a with: $b with: $c with: $d ] raise: CTUnsupportedOperationError. self should: [ self emptyCollection class withAll: #() ] raise: CTUnsupportedOperationError! ! CTDelegateListTest subclass: #CTUnmodifiableListTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Container-Tests-Core-Lists'! !CTUnmodifiableListTest class methodsFor: 'testing' stamp: 'lr 4/5/2012 11:30'! shouldInheritSelectors ^ false! ! !CTUnmodifiableListTest methodsFor: 'accessing' stamp: 'lr 4/5/2012 11:09'! collectionWithAll: aCollection ^ (super collectionWithAll: aCollection) unmodifiable! ! !CTUnmodifiableListTest methodsFor: 'tests-adding' stamp: 'lr 2/6/2012 22:39'! testAdd self should: [ super testAdd ] raise: CTUnsupportedOperationError! ! !CTUnmodifiableListTest methodsFor: 'tests-adding' stamp: 'lr 2/6/2012 22:39'! testAddAt self should: [ super testAddAt ] raise: CTUnsupportedOperationError! ! !CTUnmodifiableListTest methodsFor: 'tests-adding' stamp: 'lr 2/6/2012 22:39'! testAddFirst self should: [ super testAddFirst ] raise: CTUnsupportedOperationError! ! !CTUnmodifiableListTest methodsFor: 'tests-adding' stamp: 'lr 2/6/2012 22:39'! testAddLast self should: [ super testAddLast ] raise: CTUnsupportedOperationError! ! !CTUnmodifiableListTest methodsFor: 'tests-accessing' stamp: 'lr 2/6/2012 22:39'! testAt super testAt! ! !CTUnmodifiableListTest methodsFor: 'tests-accessing' stamp: 'lr 2/6/2012 22:39'! testAtIfAbsent super testAtIfAbsent! ! !CTUnmodifiableListTest methodsFor: 'tests-accessing' stamp: 'lr 2/6/2012 22:39'! testAtPut self should: [ super testAtPut ] raise: CTUnsupportedOperationError! ! !CTUnmodifiableListTest methodsFor: 'tests-copying' stamp: 'lr 2/11/2012 13:13'! testCopy | collection unmodifiable | collection := self collectionWithAll: #($a $b $c). unmodifiable := collection unmodifiable. self assert: unmodifiable copy == unmodifiable! ! !CTUnmodifiableListTest methodsFor: 'tests-accessing' stamp: 'lr 2/6/2012 22:39'! testFirst super testFirst! ! !CTUnmodifiableListTest methodsFor: 'tests-copying' stamp: 'lr 2/6/2012 23:23'! testImmutable | collection unmodifiable immutable | collection := CTArrayList withAll: #($a $b $c). unmodifiable := collection unmodifiable. immutable := unmodifiable immutable. collection at: 2 put: $x. self assertIterable: immutable equals: #($a $b $c)! ! !CTUnmodifiableListTest methodsFor: 'tests-exceptions' stamp: 'lr 4/5/2012 11:51'! testIndexOutOfBounds super testIndexOutOfBounds! ! !CTUnmodifiableListTest methodsFor: 'tests-testing' stamp: 'lr 4/5/2012 11:48'! testIsEmpty super testIsEmpty! ! !CTUnmodifiableListTest methodsFor: 'tests-iterators' stamp: 'lr 4/21/2012 10:55'! testIterator super testIterator! ! !CTUnmodifiableListTest methodsFor: 'tests-iterators' stamp: 'lr 4/5/2012 11:47'! testIteratorCopy super testIteratorCopy! ! !CTUnmodifiableListTest methodsFor: 'tests-iterators' stamp: 'lr 4/21/2012 10:55'! testIteratorEmpty super testIteratorEmpty! ! !CTUnmodifiableListTest methodsFor: 'tests-iterators' stamp: 'lr 4/21/2012 10:55'! testIteratorIndexed super testIteratorIndexed! ! !CTUnmodifiableListTest methodsFor: 'tests-accessing' stamp: 'lr 2/6/2012 22:39'! testLast super testLast! ! !CTUnmodifiableListTest methodsFor: 'tests-testing' stamp: 'lr 4/5/2012 11:48'! testNotEmpty super testNotEmpty! ! !CTUnmodifiableListTest methodsFor: 'tests' stamp: 'lr 4/5/2012 11:46'! testPrinting super testPrinting! ! !CTUnmodifiableListTest methodsFor: 'tests-removing' stamp: 'lr 2/6/2012 22:39'! testRemove self should: [ super testRemove ] raise: CTUnsupportedOperationError! ! !CTUnmodifiableListTest methodsFor: 'tests-removing' stamp: 'lr 2/6/2012 22:39'! testRemoveAll self should: [ super testRemoveAll ] raise: CTUnsupportedOperationError! ! !CTUnmodifiableListTest methodsFor: 'tests-removing' stamp: 'lr 2/6/2012 22:39'! testRemoveAt self should: [ super testRemoveAt ] raise: CTUnsupportedOperationError! ! !CTUnmodifiableListTest methodsFor: 'tests-removing' stamp: 'lr 2/6/2012 22:39'! testRemoveAtIfAbsent self should: [ super testRemoveAtIfAbsent ] raise: CTUnsupportedOperationError! ! !CTUnmodifiableListTest methodsFor: 'tests-removing' stamp: 'lr 2/6/2012 22:39'! testRemoveFirst self should: [ super testRemoveFirst ] raise: CTUnsupportedOperationError! ! !CTUnmodifiableListTest methodsFor: 'tests-removing' stamp: 'lr 2/6/2012 22:39'! testRemoveIfAbsent self should: [ super testRemoveIfAbsent ] raise: CTUnsupportedOperationError! ! !CTUnmodifiableListTest methodsFor: 'tests-removing' stamp: 'lr 2/6/2012 22:39'! testRemoveLast self should: [ super testRemoveLast ] raise: CTUnsupportedOperationError! ! !CTUnmodifiableListTest methodsFor: 'tests-accessing' stamp: 'lr 2/6/2012 22:39'! testSize super testSize! ! !CTUnmodifiableListTest methodsFor: 'tests-sorting' stamp: 'lr 4/5/2012 11:51'! testSortDefault self should: [ super testSortDefault ] raise: CTUnsupportedOperationError! ! !CTUnmodifiableListTest methodsFor: 'tests-sorting' stamp: 'lr 4/5/2012 11:51'! testSortEmpty self should: [ super testSortEmpty ] raise: CTUnsupportedOperationError! ! !CTUnmodifiableListTest methodsFor: 'tests-sorting' stamp: 'lr 4/5/2012 11:52'! testSortOrder self should: [ super testSortOrder ] raise: CTUnsupportedOperationError! ! !CTUnmodifiableListTest methodsFor: 'tests-copying' stamp: 'lr 2/6/2012 23:22'! testUnmodifiable | collection unmodifiable | collection := self collectionWithAll: #($a $b $c). unmodifiable := collection unmodifiable. self assert: unmodifiable unmodifiable == unmodifiable! ! CTListTest subclass: #CTImmutableListTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Container-Tests-Core-Lists'! !CTImmutableListTest class methodsFor: 'testing' stamp: 'lr 2/6/2012 20:45'! shouldInheritSelectors ^ false! ! !CTImmutableListTest methodsFor: 'accessing' stamp: 'lr 2/6/2012 20:47'! collectionClass ^ CTImmutableList! ! !CTImmutableListTest methodsFor: 'tests-adding' stamp: 'lr 2/6/2012 20:50'! testAdd self should: [ super testAdd ] raise: CTUnsupportedOperationError! ! !CTImmutableListTest methodsFor: 'tests-adding' stamp: 'lr 2/6/2012 20:50'! testAddAt self should: [ super testAddAt ] raise: CTUnsupportedOperationError! ! !CTImmutableListTest methodsFor: 'tests-adding' stamp: 'lr 2/6/2012 20:50'! testAddFirst self should: [ super testAddFirst ] raise: CTUnsupportedOperationError! ! !CTImmutableListTest methodsFor: 'tests-adding' stamp: 'lr 2/6/2012 20:50'! testAddLast self should: [ super testAddLast ] raise: CTUnsupportedOperationError! ! !CTImmutableListTest methodsFor: 'tests-accessing' stamp: 'lr 2/6/2012 20:46'! testAt super testAt! ! !CTImmutableListTest methodsFor: 'tests-accessing' stamp: 'lr 2/6/2012 20:46'! testAtIfAbsent super testAtIfAbsent! ! !CTImmutableListTest methodsFor: 'tests-accessing' stamp: 'lr 2/6/2012 20:49'! testAtPut self should: [ super testAtPut ] raise: CTUnsupportedOperationError! ! !CTImmutableListTest methodsFor: 'tests-copying' stamp: 'lr 2/12/2012 15:20'! testCopy | collection immutable | collection := self collectionWithAll: #($a $b $c). immutable := collection immutable. self assert: immutable copy == immutable! ! !CTImmutableListTest methodsFor: 'tests-accessing' stamp: 'lr 2/6/2012 20:46'! testFirst super testFirst! ! !CTImmutableListTest methodsFor: 'tests-copying' stamp: 'lr 2/6/2012 23:18'! testImmutable | collection immutable | collection := self collectionWithAll: #($a $b $c). immutable := collection immutable. self assert: immutable immutable == immutable! ! !CTImmutableListTest methodsFor: 'tests-exceptions' stamp: 'lr 4/5/2012 11:57'! testIndexOutOfBounds super testIndexOutOfBounds! ! !CTImmutableListTest methodsFor: 'tests-testing' stamp: 'lr 4/5/2012 11:57'! testIsEmpty super testIsEmpty! ! !CTImmutableListTest methodsFor: 'tests-iterators' stamp: 'lr 4/21/2012 10:53'! testIterator super testIterator! ! !CTImmutableListTest methodsFor: 'tests-iterators' stamp: 'lr 4/21/2012 10:53'! testIteratorEmpty super testIteratorEmpty! ! !CTImmutableListTest methodsFor: 'tests-iterators' stamp: 'lr 4/21/2012 10:53'! testIteratorIndexed super testIteratorIndexed! ! !CTImmutableListTest methodsFor: 'tests-accessing' stamp: 'lr 2/6/2012 20:46'! testLast super testLast! ! !CTImmutableListTest methodsFor: 'tests-instantiation' stamp: 'lr 2/6/2012 22:41'! testNew1 super testNew1! ! !CTImmutableListTest methodsFor: 'tests-testing' stamp: 'lr 4/5/2012 11:57'! testNotEmpty super testNotEmpty! ! !CTImmutableListTest methodsFor: 'tests' stamp: 'lr 4/5/2012 11:56'! testPrinting super testPrinting! ! !CTImmutableListTest methodsFor: 'tests-removing' stamp: 'lr 2/6/2012 22:36'! testRemove self should: [ super testRemove ] raise: CTUnsupportedOperationError! ! !CTImmutableListTest methodsFor: 'tests-removing' stamp: 'lr 2/6/2012 22:36'! testRemoveAll self should: [ super testRemoveAll ] raise: CTUnsupportedOperationError! ! !CTImmutableListTest methodsFor: 'tests-removing' stamp: 'lr 2/6/2012 22:36'! testRemoveAt self should: [ super testRemoveAt ] raise: CTUnsupportedOperationError! ! !CTImmutableListTest methodsFor: 'tests-removing' stamp: 'lr 2/6/2012 22:36'! testRemoveAtIfAbsent self should: [ super testRemoveAtIfAbsent ] raise: CTUnsupportedOperationError! ! !CTImmutableListTest methodsFor: 'tests-removing' stamp: 'lr 2/6/2012 22:36'! testRemoveFirst self should: [ super testRemoveFirst ] raise: CTUnsupportedOperationError! ! !CTImmutableListTest methodsFor: 'tests-removing' stamp: 'lr 2/6/2012 22:36'! testRemoveIfAbsent self should: [ super testRemoveIfAbsent ] raise: CTUnsupportedOperationError! ! !CTImmutableListTest methodsFor: 'tests-removing' stamp: 'lr 2/6/2012 22:36'! testRemoveLast self should: [ super testRemoveLast ] raise: CTUnsupportedOperationError! ! !CTImmutableListTest methodsFor: 'tests-accessing' stamp: 'lr 2/6/2012 22:38'! testSize super testSize! ! !CTImmutableListTest methodsFor: 'tests-sorting' stamp: 'lr 4/5/2012 11:57'! testSortDefault self should: [ super testSortDefault ] raise: CTUnsupportedOperationError! ! !CTImmutableListTest methodsFor: 'tests-sorting' stamp: 'lr 4/5/2012 11:57'! testSortEmpty self should: [ super testSortEmpty ] raise: CTUnsupportedOperationError! ! !CTImmutableListTest methodsFor: 'tests-sorting' stamp: 'lr 4/5/2012 11:57'! testSortOrder self should: [ super testSortOrder ] raise: CTUnsupportedOperationError! ! !CTImmutableListTest methodsFor: 'tests-copying' stamp: 'lr 2/6/2012 23:18'! testUnmodifiable | collection immutable | collection := self collectionWithAll: #($a $b $c). immutable := collection immutable. self assert: immutable unmodifiable == immutable! ! !CTImmutableListTest methodsFor: 'tests-instantiation' stamp: 'lr 2/6/2012 22:41'! testWith1 super testWith1! ! !CTImmutableListTest methodsFor: 'tests-instantiation' stamp: 'lr 2/6/2012 22:41'! testWith2 super testWith2! ! !CTImmutableListTest methodsFor: 'tests-instantiation' stamp: 'lr 2/6/2012 22:41'! testWith3 super testWith3! ! !CTImmutableListTest methodsFor: 'tests-instantiation' stamp: 'lr 2/6/2012 22:41'! testWith4 super testWith4! ! CTListTest subclass: #CTLinkedListTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Container-Tests-Core-Lists'! !CTLinkedListTest methodsFor: 'accessing' stamp: 'lr 8/7/2011 19:21'! collectionClass ^ CTLinkedList! ! !CTListTest class methodsFor: 'testing' stamp: 'lr 8/7/2011 19:59'! isAbstract ^ self name = #CTListTest! ! !CTListTest methodsFor: 'tests-adding' stamp: 'lr 1/11/2012 22:48'! testAdd | collection | collection := self emptyCollection. self assert: (collection add: $a) = $a. self assertIterable: collection equals: #($a). self assert: (collection add: $b) = $b. self assertIterable: collection equals: #($a $b). self assert: (collection add: $c) = $c. self assertIterable: collection equals: #($a $b $c). self assertInvariants: collection ! ! !CTListTest methodsFor: 'tests-adding' stamp: 'lr 1/11/2012 22:48'! testAddAt | collection | collection := self emptyCollection. self should: [ collection add: $a at: 0 ] raise: CTIndexOutOfBoundsError. self should: [ collection add: $a at: 2 ] raise: CTIndexOutOfBoundsError. self assert: (collection add: $a at: 1) = $a. self assertIterable: collection equals: #($a). self assert: (collection add: $b at: 2) = $b. self assertIterable: collection equals: #($a $b). self assert: (collection add: $c at: 2) = $c. self assertIterable: collection equals: #($a $c $b). self assert: (collection add: $d at: 1) = $d. self assertIterable: collection equals: #($d $a $c $b). self assert: (collection add: $e at: 4) = $e. self assertIterable: collection equals: #($d $a $c $e $b). self should: [ collection add: $a at: 0 ] raise: CTIndexOutOfBoundsError. self should: [ collection add: $a at: 7 ] raise: CTIndexOutOfBoundsError. self assertInvariants: collection! ! !CTListTest methodsFor: 'tests-adding' stamp: 'lr 1/11/2012 22:48'! testAddFirst | collection | collection := self emptyCollection. self assert: (collection addFirst: $a) = $a. self assertIterable: collection equals: #($a). self assert: (collection addFirst: $b) = $b. self assertIterable: collection equals: #($b $a). self assert: (collection addFirst: $c) = $c. self assertIterable: collection equals: #($c $b $a). self assertInvariants: collection ! ! !CTListTest methodsFor: 'tests-operations' stamp: 'lr 1/11/2012 22:48'! testAddFirstRemoveLast | collection | collection := self emptyCollection. 0001 to: 1000 do: [ :index | self assert: (collection addFirst: index) = index ]. self assertInvariants: collection. 1001 to: 2000 do: [ :index | self assert: (collection addFirst: index) = index. self assert: collection removeLast = (index - 1000) ]. self assertInvariants: collection. 2001 to: 3000 do: [ :index | self assert: collection removeLast = (index - 1000) ]. self assertInvariants: collection. self assert: collection isEmpty! ! !CTListTest methodsFor: 'tests-adding' stamp: 'lr 1/11/2012 22:48'! testAddLast | collection | collection := self emptyCollection. self assert: (collection addLast: $a) = $a. self assertIterable: collection equals: #($a). self assert: (collection addLast: $b) = $b. self assertIterable: collection equals: #($a $b). self assert: (collection addLast: $c) = $c. self assertIterable: collection equals: #($a $b $c). self assertInvariants: collection ! ! !CTListTest methodsFor: 'tests-operations' stamp: 'lr 1/11/2012 22:48'! testAddLastRemoveFirst | collection | collection := self emptyCollection. 0001 to: 1000 do: [ :index | self assert: (collection addLast: index) = index ]. self assertInvariants: collection. 1001 to: 2000 do: [ :index | self assert: (collection addLast: index) = index. self assert: collection removeFirst = (index - 1000) ]. self assertInvariants: collection. 2001 to: 3000 do: [ :index | self assert: collection removeFirst = (index - 1000) ]. self assertInvariants: collection. self assert: collection isEmpty! ! !CTListTest methodsFor: 'tests-accessing' stamp: 'lr 1/10/2012 22:20'! testAt | collection | collection := self collectionWithAll: #($a $b $c). self should: [ collection at: 0 ] raise: CTIndexOutOfBoundsError. self assert: (collection at: 1) = $a. self assert: (collection at: 2) = $b. self assert: (collection at: 3) = $c. self should: [ collection at: 4 ] raise: CTIndexOutOfBoundsError! ! !CTListTest methodsFor: 'tests-accessing' stamp: 'lr 1/10/2012 07:47'! testAtIfAbsent | collection | collection := self collectionWithAll: #($a $b $c). self assert: (collection at: 0 ifAbsent: [ $x ]) = $x. self assert: (collection at: 1 ifAbsent: [ $x ]) = $a. self assert: (collection at: 2 ifAbsent: [ $x ]) = $b. self assert: (collection at: 3 ifAbsent: [ $x ]) = $c. self assert: (collection at: 4 ifAbsent: [ $x ]) = $x! ! !CTListTest methodsFor: 'tests-accessing' stamp: 'lr 1/11/2012 22:47'! testAtPut | collection | collection := self collectionWithAll: #($a $b $c). self should: [ collection at: 0 put: $x ] raise: CTIndexOutOfBoundsError. self assert: (collection at: 1 put: $x) = $x. self assert: (collection at: 2 put: $x) = $x. self assert: (collection at: 3 put: $x) = $x. self should: [ collection at: 4 put: $x ] raise: CTIndexOutOfBoundsError. self assertInvariants: collection! ! !CTListTest methodsFor: 'tests-accessing' stamp: 'lr 2/6/2012 20:48'! testFirst | collection | collection := self emptyCollection. self should: [ self emptyCollection first ] raise: CTNoSuchElementError. collection := self collectionWithAll: #($a). self assert: collection first = $a. collection := self collectionWithAll: #($b $a). self assert: collection first = $b! ! !CTListTest methodsFor: 'tests-converting' stamp: 'lr 2/6/2012 23:13'! testImmutable | collection immutable | collection := self collectionWithAll: #($a $b $c). immutable := collection immutable. self assertIterable: immutable equals: #($a $b $c). collection at: 2 put: $x. self assertIterable: immutable equals: #($a $b $c). collection addLast: $y. self assertIterable: immutable equals: #($a $b $c)! ! !CTListTest methodsFor: 'tests-exceptions' stamp: 'lr 1/27/2012 22:06'! testIndexOutOfBounds [ self emptyCollection at: 1 ] on: CTIndexOutOfBoundsError do: [ :exception | self assert: exception index = 1. ^ self ]. self fail! ! !CTListTest methodsFor: 'tests-iterators' stamp: 'lr 4/21/2012 09:16'! testIterator | collection | collection := self collectionWithAll: #($a $b $c). self assertIterable: #($a $b $c) equals: collection! ! !CTListTest methodsFor: 'tests-iterators' stamp: 'lr 4/21/2012 09:16'! testIteratorEmpty | collection | collection := self collectionWithAll: #(). self assertIterable: #() equals: collection iterator! ! !CTListTest methodsFor: 'tests-iterators' stamp: 'lr 4/21/2012 22:05'! testIteratorIndexed | collection | collection := self collectionWithAll: #($a $b $c). collection iterator withIndex do: [ :index :value | self assert: (collection at: index) = value ]! ! !CTListTest methodsFor: 'tests-accessing' stamp: 'lr 2/6/2012 20:48'! testLast | collection | collection := self emptyCollection. self should: [ self emptyCollection last ] raise: CTNoSuchElementError. collection := self collectionWithAll: #($a). self assert: collection last = $a. collection := self collectionWithAll: #($a $b). self assert: collection last = $b! ! !CTListTest methodsFor: 'tests-removing' stamp: 'lr 1/10/2012 23:27'! testRemoveAt | collection | collection := self collectionWithAll: #($a $b $c $d $e). self should: [ collection removeAt: 0 ] raise: CTIndexOutOfBoundsError. self should: [ collection removeAt: 6 ] raise: CTIndexOutOfBoundsError. self assert: (collection removeAt: 1) = $a. self assert: (collection removeAt: 4) = $e. self assert: (collection removeAt: 2) = $c. self assertIterable: collection equals: #($b $d)! ! !CTListTest methodsFor: 'tests-removing' stamp: 'lr 1/10/2012 23:28'! testRemoveAtIfAbsent | collection | collection := self collectionWithAll: #($a $b $c $d $e). self assert: (collection removeAt: 0 ifAbsent: [ $x ]) = $x. self assert: (collection removeAt: 6 ifAbsent: [ $x ]) = $x. self assert: (collection removeAt: 1 ifAbsent: [ $x ]) = $a. self assert: (collection removeAt: 4 ifAbsent: [ $x ]) = $e. self assert: (collection removeAt: 2 ifAbsent: [ $x ]) = $c. self assertIterable: collection equals: #($b $d)! ! !CTListTest methodsFor: 'tests-removing' stamp: 'lr 1/10/2012 23:32'! testRemoveFirst | letters collection | letters := #($a $b $c $d $e). collection := self collectionWithAll: letters. letters iterator do: [ :each | self assert: collection removeFirst = each ]. self should: [ collection removeFirst ] raise: CTNoSuchElementError. self assertIterable: collection equals: #()! ! !CTListTest methodsFor: 'tests-removing' stamp: 'lr 4/21/2012 11:06'! testRemoveLast | letters collection | letters := #($a $b $c $d $e). collection := self collectionWithAll: letters. letters reversed iterator do: [ :each | self assert: collection removeLast = each ]. self should: [ collection removeFirst ] raise: CTNoSuchElementError. self assertIterable: collection equals: #()! ! !CTListTest methodsFor: 'tests-sorting' stamp: 'lr 1/23/2012 19:24'! testSortDefault | list | list := self collectionWithAll: #(2 8 6 7 3 9 4 5 1). list sort. self assertIterable: list equals: #(1 2 3 4 5 6 7 8 9)! ! !CTListTest methodsFor: 'tests-sorting' stamp: 'lr 2/6/2012 20:52'! testSortEmpty self emptyCollection sort! ! !CTListTest methodsFor: 'tests-sorting' stamp: 'lr 1/24/2012 19:15'! testSortOrder | list | list := self collectionWithAll: #(2 8 6 7 3 9 4 5 1). list sort: CTNaturalComparator new reverse. self assertIterable: list equals: #(9 8 7 6 5 4 3 2 1)! ! !CTListTest methodsFor: 'tests-converting' stamp: 'lr 2/6/2012 23:16'! testUnmodifiable | collection unmodifiable | collection := self collectionWithAll: #($a $b $c). unmodifiable := collection unmodifiable. self assertIterable: unmodifiable equals: #($a $b $c). collection at: 2 put: $x. self assertIterable: unmodifiable equals: #($a $x $c). collection addLast: $y. self assertIterable: unmodifiable equals: #($a $x $c $y)! ! CTListTest subclass: #CTVectorListTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Container-Tests-Core-Lists'! !CTVectorListTest methodsFor: 'accessing' stamp: 'lr 1/21/2012 19:28'! collectionClass ^ CTVectorList! ! CTCollectionTest subclass: #CTPriorityQueueTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Container-Tests-Core-Misc'! !CTPriorityQueueTest methodsFor: 'accessing' stamp: 'lr 1/26/2012 18:52'! collectionClass ^ CTPriorityQueue! ! !CTPriorityQueueTest methodsFor: 'tests-copying' stamp: 'lr 4/1/2012 16:56'! testImmutable self should: [ self emptyCollection immutable ] raise: CTUnsupportedOperationError! ! !CTPriorityQueueTest methodsFor: 'tests' stamp: 'lr 1/28/2012 13:19'! testPriority | queue | queue := self collectionWithRandomElements: 100. 1 to: 100 do: [ :index | self assert: queue removeFirst = index. self assert: queue size = (100 - index). self assertInvariants: queue ]. self assert: queue isEmpty! ! !CTPriorityQueueTest methodsFor: 'tests-copying' stamp: 'lr 4/1/2012 16:56'! testUnmodifiable self should: [ self emptyCollection unmodifiable ] raise: CTUnsupportedOperationError! ! CTCollectionTest subclass: #CTSetTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Container-Tests-Core'! CTSetTest subclass: #CTHashSetTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Container-Tests-Core-Sets'! !CTHashSetTest methodsFor: 'accessing' stamp: 'lr 1/13/2012 22:47'! collectionClass ^ CTHashSet! ! CTHashSetTest subclass: #CTLinkedHashSetTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Container-Tests-Core-Sets'! !CTLinkedHashSetTest methodsFor: 'accessing' stamp: 'lr 1/13/2012 22:47'! collectionClass ^ CTLinkedHashSet! ! !CTLinkedHashSetTest methodsFor: 'testing' stamp: 'lr 1/14/2012 13:33'! testAddInOrder | collection | collection := self collectionWithAll: #($l $u $k $a $s). self assertIterable: #($l $u $k $a $s) equals: collection.. self assertInvariants: collection. collection add: $k. self assertIterable: #($l $u $a $s $k) equals: collection. self assertInvariants: collection. collection add: $l. self assertIterable: #($u $a $s $k $l) equals: collection. self assertInvariants: collection. collection add: $l. self assertIterable: #($u $a $s $k $l) equals: collection. self assertInvariants: collection. collection add: $x. self assertIterable: #($u $a $s $k $l $x) equals: collection. self assertInvariants: collection! ! !CTLinkedHashSetTest methodsFor: 'testing-iterators' stamp: 'lr 4/21/2012 09:20'! testForwardIterator | collection | collection := self collectionWithAll: #($l $u $k $a $s). self assertIterable: #($l $u $k $a $s) equals: collection iterator! ! !CTLinkedHashSetTest methodsFor: 'testing' stamp: 'lr 1/14/2012 13:33'! testRemoveInOrder | collection | collection := self collectionWithAll: #($l $u $k $a $s). self assertIterable: #($l $u $k $a $s) equals: collection.. self assertInvariants: collection. collection remove: $u. self assertIterable: #($l $k $a $s) equals: collection. self assertInvariants: collection. collection remove: $l. self assertIterable: #($k $a $s) equals: collection. self assertInvariants: collection. collection remove: $s. self assertIterable: #($k $a) equals: collection. self assertInvariants: collection! ! CTSetTest subclass: #CTImmutableSetTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Container-Tests-Core-Sets'! !CTImmutableSetTest class methodsFor: 'testing' stamp: 'lr 2/17/2012 23:43'! shouldInheritSelectors ^ false! ! !CTImmutableSetTest methodsFor: 'accessing' stamp: 'lr 2/17/2012 23:43'! collectionClass ^ CTImmutableSet! ! !CTImmutableSetTest methodsFor: 'tests-adding' stamp: 'lr 2/18/2012 00:03'! testAddDuplicates self should: [ super testAddDuplicates ] raise: CTUnsupportedOperationError! ! !CTImmutableSetTest methodsFor: 'tests-adding' stamp: 'lr 2/18/2012 00:03'! testAddRemove self should: [ super testAddRemove ] raise: CTUnsupportedOperationError! ! !CTImmutableSetTest methodsFor: 'tests-copying' stamp: 'lr 2/17/2012 23:43'! testCopy | collection immutable | collection := self collectionWithAll: #($a $b $c). immutable := collection immutable. self assert: immutable copy == immutable! ! !CTImmutableSetTest methodsFor: 'tests-copying' stamp: 'lr 2/17/2012 23:43'! testImmutable | collection immutable | collection := self collectionWithAll: #($a $b $c). immutable := collection immutable. self assert: immutable immutable == immutable! ! !CTImmutableSetTest methodsFor: 'tests-testing' stamp: 'lr 2/18/2012 00:03'! testIncludes super testIncludesAll! ! !CTImmutableSetTest methodsFor: 'tests-testing' stamp: 'lr 2/18/2012 00:03'! testIsEmpty super testIsEmpty! ! !CTImmutableSetTest methodsFor: 'tests-iterators' stamp: 'lr 2/18/2012 00:03'! testIteratorEmpty super testIteratorEmpty! ! !CTImmutableSetTest methodsFor: 'tests-iterators' stamp: 'lr 2/18/2012 00:03'! testIteratorMultiple super testIteratorMultiple! ! !CTImmutableSetTest methodsFor: 'tests-iterators' stamp: 'lr 2/18/2012 00:03'! testIteratorSingle super testIteratorSingle! ! !CTImmutableSetTest methodsFor: 'tests-instantiation' stamp: 'lr 2/17/2012 23:43'! testNew1 super testNew1! ! !CTImmutableSetTest methodsFor: 'tests-removing' stamp: 'lr 2/18/2012 00:03'! testRemove self should: [ super testRemove ] raise: CTUnsupportedOperationError! ! !CTImmutableSetTest methodsFor: 'tests-removing' stamp: 'lr 2/18/2012 00:03'! testRemoveAll self should: [ super testRemoveAll ] raise: CTUnsupportedOperationError! ! !CTImmutableSetTest methodsFor: 'tests-removing' stamp: 'lr 2/18/2012 00:03'! testRemoveIfAbsent self should: [ super testRemoveIfAbsent ] raise: CTUnsupportedOperationError! ! !CTImmutableSetTest methodsFor: 'tests-accessing' stamp: 'lr 2/18/2012 00:03'! testSize super testSize! ! !CTImmutableSetTest methodsFor: 'tests-copying' stamp: 'lr 2/17/2012 23:43'! testUnmodifiable | collection immutable | collection := self collectionWithAll: #($a $b $c). immutable := collection immutable. self assert: immutable unmodifiable == immutable! ! !CTImmutableSetTest methodsFor: 'tests-instantiation' stamp: 'lr 2/17/2012 23:43'! testWith1 super testWith1! ! !CTImmutableSetTest methodsFor: 'tests-instantiation' stamp: 'lr 2/17/2012 23:43'! testWith2 super testWith2! ! !CTImmutableSetTest methodsFor: 'tests-instantiation' stamp: 'lr 2/17/2012 23:43'! testWith3 super testWith3! ! !CTImmutableSetTest methodsFor: 'tests-instantiation' stamp: 'lr 2/17/2012 23:43'! testWith4 super testWith4! ! !CTSetTest class methodsFor: 'testing' stamp: 'lr 1/13/2012 22:47'! isAbstract ^ self name = #CTSetTest! ! !CTSetTest methodsFor: 'tests-adding' stamp: 'lr 1/14/2012 10:00'! testAddDuplicates | collection | collection := self collectionWithAll: #($a $b $c). self assert: (collection add: $c) = $c. self assert: (collection add: $b) = $b. self assert: (collection add: $a) = $a. self assert: (collection size) = 3. self assert: (collection add: $d) = $d. self assert: (collection size) = 4. self assertInvariants: collection! ! !CTSetTest methodsFor: 'tests-adding' stamp: 'lr 1/14/2012 10:01'! testAddRemove | collection | collection := self emptyCollection. self deny: (collection includes: $a). self assert: (collection add: $a) = $a. self assert: (collection includes: $a). self assert: (collection add: $a) = $a. self assert: (collection includes: $a). self assert: (collection remove: $a) = $a. self deny: (collection includes: $a). self assertInvariants: collection! ! !CTSetTest methodsFor: 'tests-copying' stamp: 'lr 2/18/2012 00:12'! testCopy | one two | one := self collectionWithAll: #($a $b $c). two := one copy. self deny: one == two. self assertIterable: one equalsIgnoringOrder: two. one add: $x. two add: $y. self assertIterable: one equalsIgnoringOrder: #($a $b $c $x). self assertIterable: two equalsIgnoringOrder: #($a $b $c $y)! ! !CTSetTest methodsFor: 'tests-copying' stamp: 'lr 2/18/2012 00:09'! testImmutable | collection immutable | collection := self collectionWithAll: #($a $b $c). immutable := collection immutable. self assertIterable: immutable equalsIgnoringOrder: #($a $b $c). collection add: $x. self assertIterable: immutable equalsIgnoringOrder: #($a $b $c)! ! !CTSetTest methodsFor: 'tests-testing' stamp: 'lr 1/14/2012 09:59'! testIncludes | collection | collection := self collectionWithAll: #($a $b $c). self assert: (collection includes: $a). self assert: (collection includes: $b). self assert: (collection includes: $c). self deny: (collection includes: $d)! ! !CTSetTest methodsFor: 'tests-testing' stamp: 'lr 1/14/2012 09:59'! testIncludesAll | collection | collection := self collectionWithAll: #($a $b $c). self assert: (collection includesAll: #()). self assert: (collection includesAll: #($a)). self assert: (collection includesAll: #($a $b)). self assert: (collection includesAll: #($a $b $c)). self deny: (collection includesAll: #($d)). self deny: (collection includesAll: #($a $d))! ! !CTSetTest methodsFor: 'tests-copying' stamp: 'lr 2/18/2012 00:10'! testUnmodifiable | collection unmodifiable | collection := self collectionWithAll: #($a $b $c). unmodifiable := collection unmodifiable. self assertIterable: unmodifiable equalsIgnoringOrder: #($a $b $c). collection add: $x. self assertIterable: unmodifiable equalsIgnoringOrder: #($a $b $c $x)! ! !CTSetTest methodsFor: 'accessing' stamp: 'lr 2/13/2012 07:09'! workflowSize ^ 10000! ! CTSetTest subclass: #CTTreeSetTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Container-Tests-Core-Sets'! !CTTreeSetTest methodsFor: 'accessing' stamp: 'lr 1/15/2012 15:03'! collectionClass ^ CTTreeSet! ! !CTTreeSetTest methodsFor: 'testing-iterators' stamp: 'lr 4/21/2012 09:20'! testForwardIterator | collection | collection := self collectionWithAll: #($l $u $k $a $s). self assertIterable: #($a $k $l $s $u) equals: collection iterator! ! CTSetTest subclass: #CTUnmodifiableSetTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Container-Tests-Core-Sets'! !CTUnmodifiableSetTest class methodsFor: 'testing' stamp: 'lr 2/17/2012 23:43'! shouldInheritSelectors ^ false! ! !CTUnmodifiableSetTest methodsFor: 'accessing' stamp: 'lr 2/17/2012 23:53'! collectionClass ^ CTUnmodifiableSet! ! !CTUnmodifiableSetTest methodsFor: 'accessing' stamp: 'lr 4/1/2012 16:14'! collectionWithAll: aCollection ^ (CTLinkedHashSet withAll: aCollection) unmodifiable! ! !CTUnmodifiableSetTest methodsFor: 'accessing' stamp: 'lr 4/1/2012 16:14'! emptyCollection ^ CTLinkedHashSet new unmodifiable! ! !CTUnmodifiableSetTest methodsFor: 'tests-adding' stamp: 'lr 2/17/2012 23:56'! testAddDuplicates self should: [ super testAddDuplicates ] raise: CTUnsupportedOperationError! ! !CTUnmodifiableSetTest methodsFor: 'tests-adding' stamp: 'lr 2/17/2012 23:56'! testAddRemove self should: [ super testAddRemove ] raise: CTUnsupportedOperationError! ! !CTUnmodifiableSetTest methodsFor: 'tests-copying' stamp: 'lr 2/17/2012 23:43'! testCopy | collection unmodifiable | collection := self collectionWithAll: #($a $b $c). unmodifiable := collection unmodifiable. self assert: unmodifiable copy == unmodifiable! ! !CTUnmodifiableSetTest methodsFor: 'tests-copying' stamp: 'lr 2/17/2012 23:57'! testImmutable | collection unmodifiable immutable | collection := CTLinkedHashSet withAll: #($a $b $c). unmodifiable := collection unmodifiable. immutable := unmodifiable immutable. collection add: $x. self assertIterable: immutable equals: #($a $b $c)! ! !CTUnmodifiableSetTest methodsFor: 'tests-testing' stamp: 'lr 2/17/2012 23:59'! testIncludes super testIncludesAll! ! !CTUnmodifiableSetTest methodsFor: 'tests-testing' stamp: 'lr 2/18/2012 00:02'! testIsEmpty super testIsEmpty! ! !CTUnmodifiableSetTest methodsFor: 'tests-iterators' stamp: 'lr 2/18/2012 00:00'! testIteratorEmpty super testIteratorEmpty! ! !CTUnmodifiableSetTest methodsFor: 'tests-iterators' stamp: 'lr 2/18/2012 00:00'! testIteratorMultiple super testIteratorMultiple! ! !CTUnmodifiableSetTest methodsFor: 'tests-iterators' stamp: 'lr 2/18/2012 00:00'! testIteratorSingle super testIteratorSingle! ! !CTUnmodifiableSetTest methodsFor: 'tests-removing' stamp: 'lr 2/18/2012 00:01'! testRemove self should: [ super testRemove ] raise: CTUnsupportedOperationError! ! !CTUnmodifiableSetTest methodsFor: 'tests-removing' stamp: 'lr 2/18/2012 00:01'! testRemoveAll self should: [ super testRemoveAll ] raise: CTUnsupportedOperationError! ! !CTUnmodifiableSetTest methodsFor: 'tests-removing' stamp: 'lr 2/18/2012 00:01'! testRemoveIfAbsent self should: [ super testRemoveIfAbsent ] raise: CTUnsupportedOperationError! ! !CTUnmodifiableSetTest methodsFor: 'tests-accessing' stamp: 'lr 2/17/2012 23:43'! testSize super testSize! ! !CTUnmodifiableSetTest methodsFor: 'tests-copying' stamp: 'lr 2/17/2012 23:43'! testUnmodifiable | collection unmodifiable | collection := self collectionWithAll: #($a $b $c). unmodifiable := collection unmodifiable. self assert: unmodifiable unmodifiable == unmodifiable! ! CTContainerTest subclass: #CTComparatorTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Container-Tests-Core-Comparators'! !CTComparatorTest methodsFor: 'utilities' stamp: 'lr 1/26/2012 13:25'! assertPrintString: anOrder self assert: anOrder printString isString. self deny: anOrder printString isEmpty! ! !CTComparatorTest methodsFor: 'tests-operators' stamp: 'lr 1/26/2012 16:15'! testCombined | comparator | comparator := #size asComparator , #first asComparator , #last asComparator. self assertPrintString: comparator! ! !CTComparatorTest methodsFor: 'tests-operators' stamp: 'lr 1/26/2012 16:15'! testCombinedEquality | comparator | comparator := #first asComparator , #last asComparator. self assert: (comparator equals: #('A' 'B') to: #('A' 'B')). self deny: (comparator equals: #('X' 'B') to: #('A' 'B')). self deny: (comparator equals: #('A' 'X') to: #('A' 'B')). self deny: (comparator equals: #('A' 'B') to: #('X' 'B')). self deny: (comparator equals: #('A' 'B') to: #('A' 'X')).! ! !CTComparatorTest methodsFor: 'tests-operators' stamp: 'lr 1/26/2012 16:15'! testCombinedHash | comparator | comparator := #first asComparator , #last asComparator. self assert: (comparator hashOf: #('A' 'B')) = (comparator hashOf: #('A' 'B')). self deny: (comparator hashOf: #('A' 'B')) = (comparator hashOf: #('B' 'A')). self deny: (comparator hashOf: #('A' 'B')) = (comparator hashOf: #('A' 'X')). self deny: (comparator hashOf: #('A' 'B')) = (comparator hashOf: #('B' 'X'))! ! !CTComparatorTest methodsFor: 'tests-operators' stamp: 'lr 1/26/2012 16:15'! testCombinedInequality | comparator | comparator := #size asComparator , #first asComparator , #last asComparator. self assert: (comparator less: #() than: #($a)). self deny: (comparator less: #($a) than: #()). self assert: (comparator less: #($a) than: #($b)). self deny: (comparator less: #($b) than: #($a)). self assert: (comparator less: #($a $c) than: #($b $d)). self deny: (comparator less: #($b $d) than: #($a $c)). self assert: (comparator less: #($a $c) than: #($a $d)). self deny: (comparator less: #($a $d) than: #($a $c)). self deny: (comparator less: #($a $a) than: #($a $a))! ! !CTComparatorTest methodsFor: 'tests' stamp: 'lr 1/27/2012 10:06'! testDelegate | comparator | comparator := CTDelegateComparator on: #size asComparator. self assertPrintString: comparator! ! !CTComparatorTest methodsFor: 'tests' stamp: 'lr 1/27/2012 10:06'! testDelegateEquality | comparator | comparator := CTDelegateComparator on: #size asComparator. self assert: (comparator equals: 'A' to: 'B'). self deny: (comparator equals: 'A' to: 'BC')! ! !CTComparatorTest methodsFor: 'tests' stamp: 'lr 1/27/2012 10:07'! testDelegateHash | comparator | comparator := CTDelegateComparator on: #size asComparator. self assert: (comparator hashOf: 'A') = 1 hash. self assert: (comparator hashOf: 'AB') = 2 hash! ! !CTComparatorTest methodsFor: 'tests' stamp: 'lr 1/27/2012 10:08'! testDelegateInequality | comparator | comparator := CTDelegateComparator on: #size asComparator. self assert: (comparator less: 'B' than: 'AA'). self deny: (comparator less: 'AA' than: 'B')! ! !CTComparatorTest methodsFor: 'tests' stamp: 'lr 1/26/2012 16:07'! testIdentity | comparator | comparator := CTIdentityComparator new. self assert: CTIdentityComparator new = comparator. self assertPrintString: comparator! ! !CTComparatorTest methodsFor: 'tests' stamp: 'lr 1/26/2012 16:08'! testIdentityEquality | comparator object | comparator := CTIdentityComparator new. object := Object new. self assert: (comparator equals: object to: object). self deny: (comparator equals: object to: Object new). self deny: (comparator equals: Object new to: object)! ! !CTComparatorTest methodsFor: 'tests' stamp: 'lr 1/26/2012 16:09'! testIdentityHash | comparator object | comparator := CTIdentityComparator new. object := Object new. self assert: (comparator hashOf: object) = (comparator hashOf: object). self assert: (comparator hashOf: object) = object identityHash! ! !CTComparatorTest methodsFor: 'tests' stamp: 'pmm 2/6/2012 20:43'! testIdentityInequality | comparator | comparator := CTIdentityComparator new. self assert: (comparator less: 1 than: 2). self deny: (comparator less: 2 than: 1). self deny: (comparator less: 2 than: 2)! ! !CTComparatorTest methodsFor: 'tests-searching' stamp: 'lr 2/7/2012 20:52'! testIndexOf | order | order := CTNaturalComparator new. 0 to: 100 do: [ :size | | array | array := Array new: size. 1 to: size do: [ :index | array at: index put: index ]. self assert: (order indexOf: 0 in: array) = 0. 1 to: size do: [ :index | self assert: (order indexOf: index in: array) = index ]. self assert: (order indexOf: size + 1 in: array) = 0 ]! ! !CTComparatorTest methodsFor: 'tests-searching' stamp: 'lr 2/7/2012 20:52'! testInsertionIndexOf | order | order := CTNaturalComparator new. 0 to: 100 do: [ :size | | array | array := Array new: size. 1 to: size do: [ :index | array at: index put: 2 * index - 1 ]. self assert: (order insertionIndexOf: 0 in: array) = 1. 1 to: size do: [ :index | self assert: (order insertionIndexOf: 2 * index in: array) = (index + 1) ] ]! ! !CTComparatorTest methodsFor: 'tests-testing' stamp: 'lr 1/26/2012 16:20'! testIsPartial | comparator | comparator := CTNaturalComparator new. self assert: (comparator isPartial: #()). self assert: (comparator isPartial: #(1)). self assert: (comparator isPartial: #(1 2)). self assert: (comparator isPartial: #(1 2 3)). self assert: (comparator isPartial: #(1 1 2 3)). self assert: (comparator isPartial: #(1 2 2 3)). self assert: (comparator isPartial: #(1 2 3 3)). self deny: (comparator isPartial: #(2 1 2 3)). self deny: (comparator isPartial: #(1 2 3 2))! ! !CTComparatorTest methodsFor: 'tests-testing' stamp: 'lr 1/26/2012 16:20'! testIsStrict | comparator | comparator := CTNaturalComparator new. self assert: (comparator isStrict: #()). self assert: (comparator isStrict: #(1)). self assert: (comparator isStrict: #(1 2)). self assert: (comparator isStrict: #(1 2 3)). self deny: (comparator isStrict: #(1 1 2 3)). self deny: (comparator isStrict: #(1 2 2 3)). self deny: (comparator isStrict: #(1 2 3 3)). self deny: (comparator isStrict: #(2 1 2 3)). self deny: (comparator isStrict: #(1 2 3 2))! ! !CTComparatorTest methodsFor: 'tests-querying' stamp: 'lr 1/26/2012 16:19'! testMaximum | comparator | comparator := CTNaturalComparator new. self should: [ comparator maximum: #() ] raise: CTNoSuchElementError. self assert: (comparator maximum: #(1)) = 1. self assert: (comparator maximum: #(1 2)) = 2. self assert: (comparator maximum: #(2 1)) = 2. self assert: (comparator maximum: #(3 2 1)) = 3. self assert: (comparator maximum: #(3 2 3)) = 3! ! !CTComparatorTest methodsFor: 'tests-querying' stamp: 'lr 1/26/2012 16:20'! testMinimum | comparator | comparator := CTNaturalComparator new. self should: [ comparator minimum: #() ] raise: CTNoSuchElementError. self assert: (comparator minimum: #(1)) = 1. self assert: (comparator minimum: #(1 2)) = 1. self assert: (comparator minimum: #(2 1)) = 1. self assert: (comparator minimum: #(3 2 1)) = 1. self assert: (comparator minimum: #(3 2 2)) = 2! ! !CTComparatorTest methodsFor: 'tests-operators' stamp: 'lr 1/26/2012 16:16'! testMutating | comparator | comparator := #size asComparator. self assertPrintString: comparator! ! !CTComparatorTest methodsFor: 'tests-operators' stamp: 'lr 1/26/2012 16:15'! testMutatingEquality | comparator | comparator := #size asComparator. self assert: (comparator equals: 'Tina' to: 'Ilke'). self assert: (comparator equals: 'Ilke' to: 'Tina'). self deny: (comparator equals: 'Tina' to: 'Kimberley'). self deny: (comparator equals: 'Kimberley' to: 'Tina')! ! !CTComparatorTest methodsFor: 'tests-operators' stamp: 'lr 1/26/2012 16:16'! testMutatingHash | comparator | comparator := #size asComparator. self assert: (comparator hashOf: 'Tina') = (comparator hashOf: 'Tina'). self deny: (comparator hashOf: 'Tina') = (comparator hashOf: 'Kimberley')! ! !CTComparatorTest methodsFor: 'tests-operators' stamp: 'lr 1/26/2012 16:16'! testMutatingInequality | comparator | comparator := #yourself asComparator. self assert: (comparator less: 'a' than: 'b'). self deny: (comparator less: 'b' than: 'a'). self deny: (comparator less: 'a' than: 'a'). comparator := #size asComparator. self assert: (comparator less: 'a' than: 'bb'). self deny: (comparator less: 'bb' than: 'a'). self deny: (comparator less: 'a' than: 'a')! ! !CTComparatorTest methodsFor: 'tests' stamp: 'lr 1/26/2012 16:07'! testNatural | comparator | comparator := CTNaturalComparator new. self assert: CTNaturalComparator new = comparator. self assertPrintString: comparator! ! !CTComparatorTest methodsFor: 'tests' stamp: 'lr 1/26/2012 16:12'! testNaturalEquality | comparator object | comparator := CTNaturalComparator new. object := 'foo'. self assert: (comparator equals: object to: object). self assert: (comparator equals: object to: object copy). self assert: (comparator equals: object copy to: object). self assert: (comparator equals: object copy to: object copy). self deny: (comparator equals: object to: 'bar'). self deny: (comparator equals: 'bar' to: object)! ! !CTComparatorTest methodsFor: 'tests' stamp: 'pmm 2/6/2012 20:43'! testNaturalHash | comparator | comparator := CTNaturalComparator new. self assert: (comparator hashOf: 'foo') = (comparator hashOf: 'foo'). self assert: (comparator hashOf: 'foo') = 'foo' hash! ! !CTComparatorTest methodsFor: 'tests' stamp: 'pmm 2/6/2012 20:43'! testNaturalInequality | comparator | comparator := CTNaturalComparator new. self assert: (comparator less: 1 than: 2). self deny: (comparator less: 2 than: 1). self deny: (comparator less: 2 than: 2)! ! !CTComparatorTest methodsFor: 'tests-operators' stamp: 'lr 1/26/2012 16:17'! testReverse | comparator | comparator := CTNaturalComparator new reverse. self assertPrintString: comparator! ! !CTComparatorTest methodsFor: 'tests-operators' stamp: 'lr 1/26/2012 16:16'! testReverseEquality | comparator | comparator := CTNaturalComparator new reverse. self assert: (comparator equals: 'Gerald' to: 'Gerald'). self deny: (comparator equals: 'Gerald' to: 'Betty'). self deny: (comparator equals: 'Betty' to: 'Gerald'). self assert: (comparator equals: 'Betty' to: 'Betty')! ! !CTComparatorTest methodsFor: 'tests-operators' stamp: 'lr 1/26/2012 16:16'! testReverseHash | comparator reversed | comparator := CTNaturalComparator new. reversed := comparator reverse. self assert: (comparator hashOf: 'Gerald') = (reversed hashOf: 'Gerald'). self assert: (comparator hashOf: 'Betty') = (reversed hashOf: 'Betty')! ! !CTComparatorTest methodsFor: 'tests-operators' stamp: 'lr 1/26/2012 16:16'! testReverseInequality | comparator | comparator := CTNaturalComparator new reverse. self assert: (comparator less: $b than: $a). self deny: (comparator less: $a than: $b). self deny: (comparator less: $a than: $a). comparator := comparator reverse. self assert: (comparator less: $a than: $b). self deny: (comparator less: $b than: $a). self deny: (comparator less: $a than: $a) ! ! !CTComparatorTest methodsFor: 'tests-operators' stamp: 'lr 1/26/2012 16:19'! testReverseMaximum | comparator | comparator := CTNaturalComparator new reverse. self should: [ comparator maximum: #() ] raise: CTNoSuchElementError. self assert: (comparator maximum: #(1)) = 1. self assert: (comparator maximum: #(1 2)) = 1. self assert: (comparator maximum: #(2 1)) = 1. self assert: (comparator maximum: #(3 2 1)) = 1. self assert: (comparator maximum: #(3 2 2)) = 2! ! !CTComparatorTest methodsFor: 'tests-operators' stamp: 'lr 1/26/2012 16:18'! testReverseMinimum | comparator | comparator := CTNaturalComparator new reverse. self should: [ comparator minimum: #() ] raise: CTNoSuchElementError. self assert: (comparator minimum: #(1)) = 1. self assert: (comparator minimum: #(1 2)) = 2. self assert: (comparator minimum: #(2 1)) = 2. self assert: (comparator minimum: #(3 2 1)) = 3. self assert: (comparator minimum: #(3 2 3)) = 3! ! !CTComparatorTest methodsFor: 'tests-sorting' stamp: 'lr 1/24/2012 19:15'! testSortRandomizedArray | array | array := Array new: 10000. 1 to: 10000 do: [ :index | array at: index put: index ]. CTNaturalComparator new sort: array shuffled. 1 to: 10000 do: [ :index | self assert: (array at: index) = index ]! ! !CTComparatorTest methodsFor: 'tests-sorting' stamp: 'lr 1/24/2012 19:15'! testSortReversedArray | array | array := Array new: 10000. 1 to: 10000 do: [ :index | array at: index put: 10001 - index ]. CTNaturalComparator new sort: array. 1 to: 10000 do: [ :index | self assert: (array at: index) = index ]! ! !CTComparatorTest methodsFor: 'tests-sorting' stamp: 'lr 1/24/2012 19:15'! testSortSortedArray | array | array := Array new: 10000. 1 to: 10000 do: [ :index | array at: index put: index ]. CTNaturalComparator new sort: array. 1 to: 10000 do: [ :index | self assert: (array at: index) = index ]! ! !CTContainerTest class methodsFor: 'testing' stamp: 'lr 1/14/2012 11:15'! isAbstract ^ self name = #CTContainerTest! ! !CTContainerTest class methodsFor: 'accessing' stamp: 'lr 1/14/2012 14:37'! packageNamesUnderTest ^ #('Container-Core')! ! !CTContainerTest class methodsFor: 'testing' stamp: 'lr 1/14/2012 14:36'! shouldInheritSelectors ^ true! ! !CTContainerTest methodsFor: 'assertions' stamp: 'lr 1/24/2012 19:25'! assertInvariants: anObject anObject assertInvariants: self! ! !CTContainerTest methodsFor: 'assertions' stamp: 'lr 1/14/2012 12:05'! assertIsEmpty: anIterable self assert: anIterable iterator isEmpty. self deny: anIterable iterator hasNext! ! !CTContainerTest methodsFor: 'assertions' stamp: 'lr 2/12/2012 15:01'! assertIterable: firstCollection equals: secondCollection self assertIterable: firstCollection equals: secondCollection comparator: CTNaturalComparator new! ! !CTContainerTest methodsFor: 'assertions' stamp: 'lr 2/12/2012 15:02'! assertIterable: firstCollection equals: secondCollection comparator: aComparator | firstIterator secondIterator | firstIterator := firstCollection iterator. secondIterator := secondCollection iterator. [ firstIterator hasNext and: [ secondIterator hasNext ] ] whileTrue: [ self assert: (aComparator equals: firstIterator next to: secondIterator next) ]. self deny: firstIterator hasNext; deny: secondIterator hasNext! ! !CTContainerTest methodsFor: 'assertions' stamp: 'lr 2/18/2012 00:09'! assertIterable: firstCollection equalsIgnoringOrder: secondCollection self assert: firstCollection size = secondCollection size. self assert: (firstCollection includesAll: secondCollection)! ! !CTContainerTest methodsFor: 'utilities' stamp: 'lr 1/28/2012 13:19'! randomSequence: anInteger "Adds the randomly shuffled numbers from 1 to anInteger into aCollection: http://en.wikipedia.org/wiki/Fisher Yates_shuffle" | numbers | numbers := Array new: anInteger. 1 to: anInteger do: [ :index | numbers at: index put: index ]. anInteger to: 2 by: -1 do: [ :index | numbers swap: index with: index atRandom ]. ^ numbers! ! CTContainerTest subclass: #CTIteratorTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Container-Tests-Core-Iterators'! !CTIteratorTest methodsFor: 'tests-modifications' stamp: 'lr 1/20/2012 22:16'! testAddTo | collection | collection := CTArrayList new. #(1 2 3 4) iterator addTo: collection. self assertIterable: collection equals: #(1 2 3 4)! ! !CTIteratorTest methodsFor: 'tests-enumerating' stamp: 'lr 4/21/2012 09:17'! testAllSatisfy self assert: (#() iterator allSatisfy: [ :each | each > 2 ]). self deny: (#(1) iterator allSatisfy: [ :each | each > 2 ]). self assert: (#(3) iterator allSatisfy: [ :each | each > 2 ]). self deny: (#(2 3 4) iterator allSatisfy: [ :each | each > 2 ]). self assert: (#(3 4 5) iterator allSatisfy: [ :each | each > 2 ])! ! !CTIteratorTest methodsFor: 'tests-enumerating' stamp: 'lr 4/21/2012 21:52'! testAnySatisfy self deny: (#() iterator anySatisfy: [ :each | each > 2 ]). self assert: (#(3) iterator anySatisfy: [ :each | each > 2 ]). self deny: (#(1) iterator anySatisfy: [ :each | each > 2 ]). self assert: (#(1 2 3) iterator anySatisfy: [ :each | each > 2 ]). self deny: (#(0 1 2) iterator anySatisfy: [ :each | each > 2 ])! ! !CTIteratorTest methodsFor: 'tests-array' stamp: 'lr 4/21/2012 21:41'! testArrayCollect | letters expected | letters := #($a $b $c). expected := #($A $B $C) iterator. (letters iterator collect: [ :each | each asUppercase ]) do: [ :each | self assert: each = expected next ]. self assertIsEmpty: expected! ! !CTIteratorTest methodsFor: 'tests-array' stamp: 'lr 4/21/2012 21:50'! testArrayCollectWithIndex | letters expected | letters := #($a $b $c). expected := #(1 $A 2 $B 3 $C) iterator. (letters iterator collect: [ :each | each asUppercase ]) withIndex do: [ :index :each | self assert: index = expected next. self assert: each = expected next ]. self assertIsEmpty: expected! ! !CTIteratorTest methodsFor: 'tests-array' stamp: 'lr 4/21/2012 21:40'! testArrayDo | expected | expected := #($a $b $c $d) iterator. #($a $b $c $d) iterator do: [ :each | self assert: each = expected next ]. self assertIsEmpty: expected! ! !CTIteratorTest methodsFor: 'tests-array' stamp: 'lr 4/21/2012 21:49'! testArrayInject | letters expected | letters := #($a $b $c). expected := #(0 $a 10 $b 20 $c) iterator. letters iterator inject: 0 into: [ :result :each | self assert: result = expected next. self assert: each = expected next. result + 10 ]. self assertIsEmpty: expected! ! !CTIteratorTest methodsFor: 'tests-array' stamp: 'lr 4/21/2012 21:47'! testArraySelect | letters expected | letters := #($a $b $c $d $e $f $g). expected := #($a $e) iterator. (letters iterator select: [ :each | each isVowel ]) do: [ :each | self assert: each = expected next ]. self assertIsEmpty: expected! ! !CTIteratorTest methodsFor: 'tests-array' stamp: 'lr 4/21/2012 21:46'! testArraySelectWithIndex | letters expected | letters := #($a $b $c $d $e $f $g). expected := #(1 $a 2 $e) iterator. (letters iterator select: [ :each | each isVowel ]) withIndex do: [ :index :each | self assert: index = expected next. self assert: each = expected next ]. self assertIsEmpty: expected! ! !CTIteratorTest methodsFor: 'tests-array' stamp: 'lr 4/21/2012 21:45'! testArrayWithIndexCollect | letters expected | letters := #($a $b $c). expected := #(1 $A 2 $B 3 $C) iterator. (letters iterator withIndex collect: [ :index :each | each asUppercase ]) do: [ :index :each | self assert: index = expected next. self assert: each = expected next ]. self assertIsEmpty: expected! ! !CTIteratorTest methodsFor: 'tests-array' stamp: 'lr 4/21/2012 21:44'! testArrayWithIndexDo | expected | expected := #(1 $a 2 $b 3 $c) iterator. #($a $b $c) iterator withIndex do: [ :index :each | self assert: index = expected next. self assert: each = expected next ]. self assertIsEmpty: expected! ! !CTIteratorTest methodsFor: 'tests-array' stamp: 'lr 4/21/2012 21:49'! testArrayWithIndexInject | letters expected | letters := #($a $b $c). expected := #(0 1 $a 10 2 $b 20 3 $c) iterator. letters iterator withIndex inject: 0 into: [ :result :index :each | self assert: result = expected next. self assert: index = expected next. self assert: each = expected next. result + 10 ]. self assertIsEmpty: expected! ! !CTIteratorTest methodsFor: 'tests-array' stamp: 'lr 4/21/2012 21:47'! testArrayWithIndexSelect | letters expected | letters := #($a $b $c $d $e $f $g). expected := #(1 $a 5 $e) iterator. (letters iterator withIndex select: [ :index :each | each isVowel ]) do: [ :index :each | self assert: index = expected next. self assert: each = expected next ]. self assertIsEmpty: expected! ! !CTIteratorTest methodsFor: 'tests-accessing' stamp: 'lr 4/21/2012 09:20'! testAt self should: [ #($a $b $c) iterator at: 0 ] raise: CTIndexOutOfBoundsError. self assert: (#($a $b $c) iterator at: 1) = $a. self assert: (#($a $b $c) iterator at: 2) = $b. self assert: (#($a $b $c) iterator at: 3) = $c. self should: [ #($a $b $c) iterator at: 4 ] raise: CTIndexOutOfBoundsError! ! !CTIteratorTest methodsFor: 'tests-accessing' stamp: 'lr 4/21/2012 09:20'! testAtIfAbsent self assert: (#($a $b $c) iterator at: 0 ifAbsent: [ $x ]) = $x. self assert: (#($a $b $c) iterator at: 1 ifAbsent: [ $x ]) = $a. self assert: (#($a $b $c) iterator at: 2 ifAbsent: [ $x ]) = $b. self assert: (#($a $b $c) iterator at: 3 ifAbsent: [ $x ]) = $c. self assert: (#($a $b $c) iterator at: 4 ifAbsent: [ $x ]) = $x! ! !CTIteratorTest methodsFor: 'tests-iterators' stamp: 'lr 2/4/2012 20:18'! testChaining2 self assertIterable: #() iterator , #() iterator equals: #(). self assertIterable: #(1) iterator , #() iterator equals: #(1). self assertIterable: #() iterator , #(1) iterator equals: #(1). self assertIterable: #(1 2) iterator , #() iterator equals: #(1 2). self assertIterable: #(1) iterator , #(2) iterator equals: #(1 2). self assertIterable: #() iterator , #(1 2) iterator equals: #(1 2)! ! !CTIteratorTest methodsFor: 'tests-iterators' stamp: 'lr 2/4/2012 20:18'! testChaining3 self assertIterable: #() iterator , #() iterator , #() iterator equals: #(). self assertIterable: #(1) iterator , #() iterator , #() iterator equals: #(1). self assertIterable: #() iterator , #(1) iterator , #() iterator equals: #(1). self assertIterable: #() iterator , #() iterator , #(1) iterator equals: #(1). self assertIterable: #(1 2) iterator , #() iterator , #() iterator equals: #(1 2). self assertIterable: #(1) iterator , #(2) iterator , #() iterator equals: #(1 2). self assertIterable: #(1) iterator , #() iterator , #(2) iterator equals: #(1 2). self assertIterable: #() iterator , #(1 2) iterator , #() iterator equals: #(1 2). self assertIterable: #() iterator , #(1) iterator , #(2) iterator equals: #(1 2). self assertIterable: #() iterator , #() iterator , #(1 2) iterator equals: #(1 2)! ! !CTIteratorTest methodsFor: 'tests-iterators' stamp: 'lr 1/10/2012 22:33'! testCollect self assertIterable: (#() iterator collect: [ :each | 2 * each ]) equals: #(). self assertIterable: (#(1) iterator collect: [ :each | 2 * each ]) equals: #(2). self assertIterable: (#(1 2) iterator collect: [ :each | 2 * each ]) equals: #(2 4). self assertIterable: (#(1 2 3 4) iterator collect: [ :each | 2 * each ]) equals: #(2 4 6 8)! ! !CTIteratorTest methodsFor: 'tests-enumerating' stamp: 'lr 4/21/2012 21:52'! testCount self assert: (#() iterator count: [ :each | each > 2 ]) = 0. self assert: (#(1) iterator count: [ :each | each > 2 ]) = 0. self assert: (#(1 2) iterator count: [ :each | each > 2 ]) = 0. self assert: (#(1 2 3) iterator count: [ :each | each > 2 ]) = 1. self assert: (#(1 2 3 4) iterator count: [ :each | each > 2 ]) = 2! ! !CTIteratorTest methodsFor: 'tests-iterators' stamp: 'lr 1/10/2012 22:33'! testCycle self assertIterable: (#() iterator cycle limit: 5) equals: #(). self assertIterable: (#(1) iterator cycle limit: 5) equals: #(1 1 1 1 1). self assertIterable: (#(1 2) iterator cycle limit: 5) equals: #(1 2 1 2 1). self assertIterable: (#(1 2 3) iterator cycle limit: 5) equals: #(1 2 3 1 2). self assertIterable: (#(1 2 3 4) iterator cycle limit: 5) equals: #(1 2 3 4 1)! ! !CTIteratorTest methodsFor: 'tests-enumerating' stamp: 'lr 4/21/2012 10:22'! testDetect self should: [ #() iterator detect: [ :each | each > 2 ] ] raise: CTNoSuchElementError. self should: [ #(1) iterator detect: [ :each | each > 2 ] ] raise: CTNoSuchElementError. self assert: (#(3) iterator detect: [ :each | each > 2 ]) = 3. self assert: (#(2 3 4) iterator detect: [ :each | each > 2 ]) = 3. self assert: (#(3 4 5) iterator detect: [ :each | each > 2 ]) = 3! ! !CTIteratorTest methodsFor: 'tests-enumerating' stamp: 'lr 4/21/2012 10:22'! testDetectIfNone self assert: (#() iterator detect: [ :each | each > 2 ] ifNone: [ true ]). self assert: (#(1) iterator detect: [ :each | each > 2 ] ifNone: [ true ]). self assert: (#(3) iterator detect: [ :each | each > 2 ] ifNone: [ true ]) = 3. self assert: (#(2 3 4) iterator detect: [ :each | each > 2 ] ifNone: [ true ]) = 3. self assert: (#(3 4 5) iterator detect: [ :each | each > 2 ] ifNone: [ true ]) = 3! ! !CTIteratorTest methodsFor: 'tests-enumerating' stamp: 'lr 1/10/2012 22:30'! testDo | iterator | #() iterator do: [ :each | self assert: false ]. iterator := #(1 2 3 4) iterator. #(1 2 3 4) iterator do: [ :each | self assert: each = iterator next ]. self assertIsEmpty: iterator! ! !CTIteratorTest methodsFor: 'tests-enumerating' stamp: 'lr 1/10/2012 22:30'! testDoSeparatedBy | iterator | #() iterator do: [ :each | self assert: false ] separatedBy: [ self assert: false ]. iterator := #(1 nil 2 nil 3 nil 4) iterator. #(1 2 3 4) iterator do: [ :each | self assert: each = iterator next ] separatedBy: [ self assert: iterator next isNil ]. self assertIsEmpty: iterator! ! !CTIteratorTest methodsFor: 'tests-iterators' stamp: 'lr 1/10/2012 22:33'! testEmpty self assertIterable: CTEmptyIterator new equals: #(). self deny: CTEmptyIterator new hasNext. self should: [ CTEmptyIterator new next ] raise: CTNoSuchElementError ! ! !CTIteratorTest methodsFor: 'tests-enumerating' stamp: 'lr 4/21/2012 10:22'! testFind self assert: (#() iterator find: [ :each | each > 2 ]) = 0. self assert: (#(1) iterator find: [ :each | each > 2 ]) = 0. self assert: (#(3) iterator find: [ :each | each > 2 ]) = 1. self assert: (#(2 3 4) iterator find: [ :each | each > 2 ]) = 2. self assert: (#(3 4 5) iterator find: [ :each | each > 2 ]) = 1! ! !CTIteratorTest methodsFor: 'tests-enumerating' stamp: 'lr 4/21/2012 10:23'! testFindIfAbsent self assert: (#() iterator find: [ :each | each > 2 ] ifAbsent: [ true ]). self assert: (#(1) iterator find: [ :each | each > 2 ] ifAbsent: [ true ]). self assert: (#(3) iterator find: [ :each | each > 2 ] ifAbsent: [ true ]) = 1. self assert: (#(2 3 4) iterator find: [ :each | each > 2 ] ifAbsent: [ true ]) = 2. self assert: (#(3 4 5) iterator find: [ :each | each > 2 ] ifAbsent: [ true ]) = 1! ! !CTIteratorTest methodsFor: 'tests-enumerating' stamp: 'lr 4/21/2012 09:20'! testGroupBy | grouping expected | grouping := #($a $b $c $d $e $f $g $h $i) iterator groupBy: [ :each | each isVowel ]. expected := #((true ($a $e $i) (false ($b $c $d $f $g $h)))). self assertIterable: expected equals: grouping keys comparator: (CTPluggableComparator equals: [ :a :b | self assert: a first = b. ^ true ]). self assertIterable: expected equals: grouping values comparator: (CTPluggableComparator equals: [ :a :b | self assertIterable: a last equals: b. ^ true ])! ! !CTIteratorTest methodsFor: 'tests-enumerating' stamp: 'lr 4/21/2012 21:57'! testIncludes self deny: (#() iterator includes: 2). self deny: (#(1) iterator includes: 2). self deny: (#(3) iterator includes: 2). self deny: (#(3 4 5) iterator includes: 2). self assert: (#(2 3 4) iterator includes: 2)! ! !CTIteratorTest methodsFor: 'tests-enumerating' stamp: 'lr 4/21/2012 10:23'! testIndexOf self assert: (#() iterator indexOf: 2) = 0. self assert: (#(1) iterator indexOf: 2) = 0. self assert: (#(2) iterator indexOf: 2) = 1. self assert: (#(3 4 5) iterator indexOf: 2) = 0. self assert: (#(2 3 4) iterator indexOf: 2) = 1! ! !CTIteratorTest methodsFor: 'tests-enumerating' stamp: 'lr 4/21/2012 10:23'! testIndexOfIfAbsent self assert: (#() iterator indexOf: 2 ifAbsent: [ true ]). self assert: (#(1) iterator indexOf: 2 ifAbsent: [ true ]). self assert: (#(2) iterator indexOf: 2 ifAbsent: [ true ]) = 1. self assert: (#(3 4 5) iterator indexOf: 2 ifAbsent: [ true ]). self assert: (#(2 3 4) iterator indexOf: 2 ifAbsent: [ true ]) = 1! ! !CTIteratorTest methodsFor: 'tests-enumerating' stamp: 'lr 4/21/2012 21:57'! testInjectInto self assert: (#() iterator inject: 1 into: [ :a :b | a - b ]) = 1. self assert: (#(2) iterator inject: 1 into: [ :a :b | a - b ]) = -1. self assert: (#(3 4) iterator inject: 1 into: [ :a :b | a - b ]) = -6. self assert: (#(4 5 6) iterator inject: 1 into: [ :a :b | a - b ]) = -14. self assert: (#(5 6 7 8) iterator inject: 1 into: [ :a :b | a - b ]) = -25! ! !CTIteratorTest methodsFor: 'tests-accessing' stamp: 'lr 4/21/2012 10:23'! testLast self should: [ #() iterator last ] raise: CTNoSuchElementError. self assert: #(1) iterator last = 1. self assert: #(1 2) iterator last = 2. self assert: #(1 2 3) iterator last = 3! ! !CTIteratorTest methodsFor: 'tests-iterators' stamp: 'lr 1/10/2012 22:33'! testLimit self assertIterable: (#() iterator limit: 0) equals: #(). self assertIterable: (#(1) iterator limit: 0) equals: #(). self assertIterable: (#(1 2) iterator limit: 0) equals: #(). self assertIterable: (#(1 2 3) iterator limit: 0) equals: #(). self assertIterable: (#() iterator limit: 1) equals: #(). self assertIterable: (#(1) iterator limit: 1) equals: #(1). self assertIterable: (#(1 2) iterator limit: 1) equals: #(1). self assertIterable: (#(1 2 3) iterator limit: 1) equals: #(1). self assertIterable: (#() iterator limit: 2) equals: #(). self assertIterable: (#(1) iterator limit: 2) equals: #(1). self assertIterable: (#(1 2) iterator limit: 2) equals: #(1 2). self assertIterable: (#(1 2 3) iterator limit: 2) equals: #(1 2). self assertIterable: (#() iterator limit: 3) equals: #(). self assertIterable: (#(1) iterator limit: 3) equals: #(1). self assertIterable: (#(1 2) iterator limit: 3) equals: #(1 2). self assertIterable: (#(1 2 3) iterator limit: 3) equals: #(1 2 3). self assertIterable: (#() iterator limit: 4) equals: #(). self assertIterable: (#(1) iterator limit: 4) equals: #(1). self assertIterable: (#(1 2) iterator limit: 4) equals: #(1 2). self assertIterable: (#(1 2 3) iterator limit: 4) equals: #(1 2 3)! ! !CTIteratorTest methodsFor: 'tests-iterators' stamp: 'lr 4/5/2012 12:19'! testMerge2 | a b | a := #(1 2 5). b := #(3 4 6 7). self assertIterable: (a iterator <> b iterator) equals: #(1 2 3 4 5 6 7). self assertIterable: (b iterator <> a iterator) equals: #(1 2 3 4 5 6 7)! ! !CTIteratorTest methodsFor: 'tests-iterators' stamp: 'lr 4/4/2012 20:03'! testMerge3 | a b c | a := #(5 6 7). b := #(1 2 3). c := #(4 8 9). self assertIterable: (a iterator <> b iterator <> c iterator) equals: #(1 2 3 4 5 6 7 8 9). self assertIterable: (b iterator <> a iterator <> c iterator) equals: #(1 2 3 4 5 6 7 8 9). self assertIterable: (c iterator <> b iterator <> a iterator) equals: #(1 2 3 4 5 6 7 8 9). self assertIterable: (a iterator <> c iterator <> b iterator) equals: #(1 2 3 4 5 6 7 8 9). self assertIterable: (b iterator <> c iterator <> a iterator) equals: #(1 2 3 4 5 6 7 8 9). self assertIterable: (c iterator <> a iterator <> b iterator) equals: #(1 2 3 4 5 6 7 8 9)! ! !CTIteratorTest methodsFor: 'tests-accessing' stamp: 'lr 4/21/2012 09:20'! testNextOr | iterator | iterator := #($a) iterator. self assert: (iterator nextOr: $x) = $a. self assert: (iterator nextOr: $x) = $x. self assert: (iterator nextOr: $y) = $y! ! !CTIteratorTest methodsFor: 'tests-accessing' stamp: 'lr 4/21/2012 09:20'! testNextOrNil | iterator | iterator := #($a) iterator. self assert: iterator nextOrNil = $a. self assert: iterator nextOrNil isNil! ! !CTIteratorTest methodsFor: 'tests-enumerating' stamp: 'lr 4/21/2012 21:57'! testNoneSatisfy self assert: (#() iterator noneSatisfy: [ :each | each > 2 ]). self deny: (#(3) iterator noneSatisfy: [ :each | each > 2 ]). self assert: (#(1) iterator noneSatisfy: [ :each | each > 2 ]). self deny: (#(1 2 3) iterator noneSatisfy: [ :each | each > 2 ]). self assert: (#(0 1 2) iterator noneSatisfy: [ :each | each > 2 ])! ! !CTIteratorTest methodsFor: 'tests-iterators' stamp: 'lr 2/12/2012 15:14'! testPartition | comparator | comparator := CTPluggableComparator equals: [ :a :b | self assertIterable: a equals: b. true ]. self assertIterable: (#() iterator partition: 2) equals: #() comparator: comparator. self assertIterable: (#(1) iterator partition: 2) equals: #((1)) comparator: comparator. self assertIterable: (#(1 2) iterator partition: 2) equals: #((1 2)) comparator: comparator. self assertIterable: (#(1 2 3) iterator partition: 2) equals: #((1 2) (3)) comparator: comparator. self assertIterable: (#(1 2 3 4) iterator partition: 2) equals: #((1 2) (3 4)) comparator: comparator. self assertIterable: (#(1 2 3 4 5) iterator partition: 2) equals: #((1 2) (3 4) (5)) comparator: comparator. self assertIterable: (#(1 2 3 4 5 6) iterator partition: 2) equals: #((1 2) (3 4) (5 6)) comparator: comparator. self assertIterable: (#() iterator partition: 3) equals: #() comparator: comparator. self assertIterable: (#(1) iterator partition: 3) equals: #((1)) comparator: comparator. self assertIterable: (#(1 2) iterator partition: 3) equals: #((1 2)) comparator: comparator. self assertIterable: (#(1 2 3) iterator partition: 3) equals: #((1 2 3)) comparator: comparator. self assertIterable: (#(1 2 3 4) iterator partition: 3) equals: #((1 2 3) (4)) comparator: comparator. self assertIterable: (#(1 2 3 4 5) iterator partition: 3) equals: #((1 2 3) (4 5)) comparator: comparator. self assertIterable: (#(1 2 3 4 5 6) iterator partition: 3) equals: #((1 2 3) (4 5 6)) comparator: comparator ! ! !CTIteratorTest methodsFor: 'tests-iterators' stamp: 'lr 4/4/2012 17:29'! testPeeking | iterator | iterator := #($a $b $c $d) iterator peeking. self assert: iterator peek = $a. self assert: iterator peek = $a. self assert: iterator hasNext. self assert: iterator peek = $a. self assert: iterator peek = $a. self assert: iterator next = $a. self assert: iterator hasNext. self assert: iterator peek = $b. self assert: iterator peek = $b. self assert: iterator next = $b. self assert: iterator peek = $c. self assert: iterator peek = $c. self assert: iterator next = $c. self assert: iterator next = $d. self deny: iterator hasNext. self should: [ iterator peek ] raise: CTNoSuchElementError. self should: [ iterator next ] raise: CTNoSuchElementError! ! !CTIteratorTest methodsFor: 'tests-iterators' stamp: 'lr 2/16/2012 07:30'! testPluggable | current previous fibonacci | current := previous := 1. fibonacci := CTPluggableIterator next: [ | temp | temp := current + previous. previous := current. current := temp ] hasNext: [ current < 100 ]. self assertIterable: fibonacci equals: #(2 3 5 8 13 21 34 55 89 144)! ! !CTIteratorTest methodsFor: 'tests-enumerating' stamp: 'lr 4/21/2012 10:24'! testReduce self should: [ #() iterator reduce: [ :a :b | a - b ] ] raise: CTNoSuchElementError. self assert: (#(2) iterator reduce: [ :a :b | a - b ]) = 2. self assert: (#(3 4) iterator reduce: [ :a :b | a - b ]) = -1. self assert: (#(4 5 6) iterator reduce: [ :a :b | a - b ]) = -7. self assert: (#(5 6 7 8) iterator reduce: [ :a :b | a - b ]) = -16! ! !CTIteratorTest methodsFor: 'tests-iterators' stamp: 'lr 1/10/2012 22:32'! testReject self assertIterable: (#() iterator reject: [ :each | each even ]) equals: #(). self assertIterable: (#(1) iterator reject: [ :each | each even ]) equals: #(1). self assertIterable: (#(1 3) iterator reject: [ :each | each even ]) equals: #(1 3). self assertIterable: (#(1 3 5) iterator reject: [ :each | each even ]) equals: #(1 3 5). self assertIterable: (#(2) iterator reject: [ :each | each even ]) equals: #(). self assertIterable: (#(2 4) iterator reject: [ :each | each even ]) equals: #(). self assertIterable: (#(2 4 6) iterator reject: [ :each | each even ]) equals: #(). self assertIterable: (#(1 2 3 4 5 6) iterator reject: [ :each | each even ]) equals: #(1 3 5). self assertIterable: (#(1 3 5 2 4 6) iterator reject: [ :each | each even ]) equals: #(1 3 5). self assertIterable: (#(2 4 6 1 3 5) iterator reject: [ :each | each even ]) equals: #(1 3 5)! ! !CTIteratorTest methodsFor: 'tests-modifications' stamp: 'lr 1/20/2012 22:16'! testRemoveFrom | collection | collection := CTArrayList new. collection add: 1; add: 2; add: 3; add: 4. #(2 4 3 1) iterator removeFrom: collection. self assert: collection isEmpty! ! !CTIteratorTest methodsFor: 'tests-iterators' stamp: 'lr 1/10/2012 22:31'! testSelect self assertIterable: (#() iterator select: [ :each | each even ]) equals: #(). self assertIterable: (#(1) iterator select: [ :each | each even ]) equals: #(). self assertIterable: (#(1 3) iterator select: [ :each | each even ]) equals: #(). self assertIterable: (#(1 3 5) iterator select: [ :each | each even ]) equals: #(). self assertIterable: (#(2) iterator select: [ :each | each even ]) equals: #(2). self assertIterable: (#(2 4) iterator select: [ :each | each even ]) equals: #(2 4). self assertIterable: (#(2 4 6) iterator select: [ :each | each even ]) equals: #(2 4 6). self assertIterable: (#(1 2 3 4 5 6) iterator select: [ :each | each even ]) equals: #(2 4 6). self assertIterable: (#(1 3 5 2 4 6) iterator select: [ :each | each even ]) equals: #(2 4 6). self assertIterable: (#(2 4 6 1 3 5) iterator select: [ :each | each even ]) equals: #(2 4 6) ! ! !CTIteratorTest methodsFor: 'tests-enumerating' stamp: 'lr 1/1/2012 00:50'! testSize self assert: #() iterator size = 0. self assert: #(1) iterator size = 1. self assert: #(1 2) iterator size = 2. self assert: #(1 2 3) iterator size = 3! ! !CTIteratorTest methodsFor: 'tests-iterators' stamp: 'lr 4/3/2012 20:10'! testZipping2 | a b | a := #($a $b $c $d). b := #($x $y $z). self assertIterable: a iterator | b iterator equals: #(($a $x) ($b $y) ($c $z)). self assertIterable: b iterator | a iterator equals: #(($x $a ) ($y $b) ($z $c)). self assertIterable: (a := a iterator) | a equals: #(($a $b) ($c $d))! ! !CTIteratorTest methodsFor: 'tests-iterators' stamp: 'lr 4/3/2012 20:12'! testZipping3 | a b c | a := #($a $b $c $d). b := #($x $y $z). c := #(2 3 4 5 6). self assertIterable: a iterator | b iterator | c iterator equals: #(($a $x 2) ($b $y 3) ($c $z 4)). self assertIterable: c iterator | b iterator | a iterator equals: #((2 $x $a) (3 $y $b) (4 $z $c))! ! CTContainerTest subclass: #CTMapTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Container-Tests-Core'! CTMapTest subclass: #CTHashMapTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Container-Tests-Core-Maps'! !CTHashMapTest methodsFor: 'accessing' stamp: 'lr 1/14/2012 11:28'! mapClass ^ CTHashMap! ! CTHashMapTest subclass: #CTLinkedHashMapTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Container-Tests-Core-Maps'! !CTLinkedHashMapTest methodsFor: 'accessing' stamp: 'lr 1/14/2012 11:28'! mapClass ^ CTLinkedHashMap! ! !CTLinkedHashMapTest methodsFor: 'testing' stamp: 'lr 1/14/2012 13:33'! testAddInOrder | map | map := self emptyMap. map at: $l put: 1; at: $u put: 2; at: $k put: 3; at: $a put: 4; at: $s put: 5. self assertIterable: map keys equals: #($l $u $k $a $s). self assertIterable: map values equals: #(1 2 3 4 5). self assertInvariants: map. map at: $k put: 6. self assertIterable: map keys equals: #($l $u $a $s $k). self assertIterable: map values equals: #(1 2 4 5 6). self assertInvariants: map. map at: $l put: 7. self assertIterable: map keys equals: #($u $a $s $k $l). self assertIterable: map values equals: #(2 4 5 6 7). self assertInvariants: map. map at: $l put: 8. self assertIterable: map keys equals: #($u $a $s $k $l). self assertIterable: map values equals: #(2 4 5 6 8). self assertInvariants: map. map at: $x put: 9. self assertIterable: map keys equals: #($u $a $s $k $l $x). self assertIterable: map values equals: #(2 4 5 6 8 9). self assertInvariants: map! ! !CTLinkedHashMapTest methodsFor: 'testing-iterators' stamp: 'lr 4/21/2012 09:20'! testForwardIterator | map | map := self emptyMap. map at: $l put: 1; at: $u put: 2; at: $k put: 3; at: $a put: 4; at: $s put: 5. self assertIterable: #(1 2 3 4 5) equals: (map iterator collect: [ :key :value | value ])! ! !CTLinkedHashMapTest methodsFor: 'testing' stamp: 'lr 1/14/2012 13:35'! testRemoveInOrder| map | map := self emptyMap. map at: $l put: 1; at: $u put: 2; at: $k put: 3; at: $a put: 4; at: $s put: 5. self assertIterable: map keys equals: #($l $u $k $a $s). self assertIterable: map values equals: #(1 2 3 4 5). self assertInvariants: map. map removeKey: $k. self assertIterable: map keys equals: #($l $u $a $s). self assertIterable: map values equals: #(1 2 4 5). self assertInvariants: map. map removeKey: $l. self assertIterable: map keys equals: #($u $a $s). self assertIterable: map values equals: #(2 4 5). self assertInvariants: map. map removeKey: $s. self assertIterable: map keys equals: #($u $a). self assertIterable: map values equals: #(2 4). self assertInvariants: map! ! CTMapTest subclass: #CTImmutableMapTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Container-Tests-Core-Maps'! !CTImmutableMapTest class methodsFor: 'testing' stamp: 'lr 2/18/2012 22:19'! shouldInheritSelectors ^ false! ! !CTImmutableMapTest methodsFor: 'accessing' stamp: 'lr 2/18/2012 22:54'! mapClass ^ CTImmutableMap! ! !CTImmutableMapTest methodsFor: 'tests-accessing' stamp: 'lr 2/18/2012 23:24'! testAt super testAt! ! !CTImmutableMapTest methodsFor: 'tests-accessing' stamp: 'lr 2/18/2012 23:24'! testAtIfAbsent super testAtIfAbsent! ! !CTImmutableMapTest methodsFor: 'tests-accessing' stamp: 'lr 4/5/2012 13:09'! testAtIfAbsentPut self should: [ super testAtIfAbsentPut ] raise: CTUnsupportedOperationError! ! !CTImmutableMapTest methodsFor: 'tests-accessing' stamp: 'lr 2/18/2012 23:25'! testAtIfPresent super testAtIfPresent! ! !CTImmutableMapTest methodsFor: 'tests-accessing' stamp: 'lr 2/18/2012 23:25'! testAtPut self should: [ super testAtPut ] raise: CTUnsupportedOperationError! ! !CTImmutableMapTest methodsFor: 'tests-copying' stamp: 'lr 2/18/2012 22:32'! testCopy | map immutable | map := self mapClass key: $a value: $b. immutable := map immutable. self assert: immutable copy == immutable! ! !CTImmutableMapTest methodsFor: 'tests-copying' stamp: 'lr 2/18/2012 22:32'! testImmutable | map immutable | map := self mapClass key: $a value: $b. immutable := map immutable. self assert: immutable immutable == immutable! ! !CTImmutableMapTest methodsFor: 'tests-testing' stamp: 'lr 2/19/2012 11:01'! testIncludesAllKeys super testIncludesAllKeys! ! !CTImmutableMapTest methodsFor: 'tests-testing' stamp: 'lr 2/19/2012 11:01'! testIncludesKeys super testIncludesKeys! ! !CTImmutableMapTest methodsFor: 'tests-iterating' stamp: 'lr 2/18/2012 23:29'! testInjectInto super testInjectInto! ! !CTImmutableMapTest methodsFor: 'tests-testing' stamp: 'lr 2/19/2012 00:51'! testIsEmpty super testIsEmpty! ! !CTImmutableMapTest methodsFor: 'as yet unclassified' stamp: 'lr 4/21/2012 21:01'! testIterator super testIterator! ! !CTImmutableMapTest methodsFor: 'tests-exceptions' stamp: 'lr 4/1/2012 16:16'! testKeyNotFound super testKeyNotFound! ! !CTImmutableMapTest methodsFor: 'tests-instantiation' stamp: 'lr 2/18/2012 22:53'! testKeyValue1 super testKeyValue1! ! !CTImmutableMapTest methodsFor: 'tests-instantiation' stamp: 'lr 2/18/2012 22:53'! testKeyValue2 super testKeyValue2! ! !CTImmutableMapTest methodsFor: 'tests-instantiation' stamp: 'lr 2/18/2012 22:53'! testKeyValue3 super testKeyValue3! ! !CTImmutableMapTest methodsFor: 'tests-instantiation' stamp: 'lr 2/18/2012 22:53'! testKeyValue4 super testKeyValue4! ! !CTImmutableMapTest methodsFor: 'tests-iterating' stamp: 'lr 2/19/2012 00:43'! testKeys super testKeys! ! !CTImmutableMapTest methodsFor: 'tests-instantiation' stamp: 'lr 4/1/2012 16:38'! testKeysValues super testKeysValues! ! !CTImmutableMapTest methodsFor: 'tests-instantiation' stamp: 'lr 2/18/2012 23:15'! testNew1 super testNew1! ! !CTImmutableMapTest methodsFor: 'tests-instantiation' stamp: 'lr 2/18/2012 23:15'! testNew2 super testNew2! ! !CTImmutableMapTest methodsFor: 'tests-printing' stamp: 'lr 2/19/2012 00:49'! testPrintEmpty super testPrintEmpty! ! !CTImmutableMapTest methodsFor: 'tests-printing' stamp: 'lr 2/19/2012 00:49'! testPrintFull super testPrintFull! ! !CTImmutableMapTest methodsFor: 'tests-removing' stamp: 'lr 2/19/2012 00:46'! testRemoveAll self should: [ super testRemoveAll ] raise: CTUnsupportedOperationError! ! !CTImmutableMapTest methodsFor: 'tests-removing' stamp: 'lr 2/19/2012 00:46'! testRemoveKey self should: [ super testRemoveKey ] raise: CTUnsupportedOperationError! ! !CTImmutableMapTest methodsFor: 'tests-removing' stamp: 'lr 2/19/2012 00:46'! testRemoveKeyIfAbsent self should: [ super testRemoveKeyIfAbsent ] raise: CTUnsupportedOperationError! ! !CTImmutableMapTest methodsFor: 'tests-accessing' stamp: 'lr 2/18/2012 23:27'! testSize super testSize! ! !CTImmutableMapTest methodsFor: 'tests-copying' stamp: 'lr 2/18/2012 22:33'! testUnmodifiable | map immutable | map := self mapClass key: $a value: $b. immutable := map immutable. self assert: immutable unmodifiable == immutable! ! !CTImmutableMapTest methodsFor: 'tests-iterating' stamp: 'lr 2/19/2012 00:43'! testValues super testValues! ! !CTMapTest class methodsFor: 'testing' stamp: 'lr 1/14/2012 11:14'! isAbstract ^ self name = #CTMapTest! ! !CTMapTest methodsFor: 'accessing' stamp: 'lr 1/14/2012 11:26'! emptyMap ^ self mapClass new! ! !CTMapTest methodsFor: 'accessing' stamp: 'lr 2/18/2012 22:46'! mapClass self subclassResponsibility! ! !CTMapTest methodsFor: 'accessing' stamp: 'lr 4/1/2012 16:39'! mapKeys: aKeysCollection values: aValuesCollection ^ self mapClass keys: aKeysCollection values: aValuesCollection! ! !CTMapTest methodsFor: 'tests-accessing' stamp: 'lr 4/1/2012 16:43'! testAt | map | map := self mapKeys: #($a $b $c) values: #($x $y $z). self assert: (map at: $a) = $x. self assert: (map at: $b) = $y. self assert: (map at: $c) = $z. self should: [ map at: $x ] raise: CTKeyNotFoundError! ! !CTMapTest methodsFor: 'tests-accessing' stamp: 'lr 4/1/2012 16:43'! testAtIfAbsent | map | map := self mapKeys: #($a $b $c) values: #($x $y $z). self assert: (map at: $a ifAbsent: [ $0 ]) = $x. self assert: (map at: $b ifAbsent: [ $0 ]) = $y. self assert: (map at: $c ifAbsent: [ $0 ]) = $z. self assert: (map at: $x ifAbsent: [ $0 ]) = $0! ! !CTMapTest methodsFor: 'tests-accessing' stamp: 'lr 4/5/2012 13:07'! testAtIfAbsentPut | map | map := self mapKeys: #($a) values: #($x). self assert: (map at: $a ifAbsentPut: [ $0 ]) = $x. self assert: (map at: $a ifAbsentPut: [ $0 ]) = $x. self assert: (map at: $b ifAbsentPut: [ $y ]) = $y. self assert: (map at: $b ifAbsentPut: [ $0 ]) = $y! ! !CTMapTest methodsFor: 'tests-accessing' stamp: 'lr 4/1/2012 16:44'! testAtIfPresent | map | map := self mapKeys: #($a $b $c) values: #($x $y $z). self assert: (map at: $a ifPresent: [ :v | v asUppercase ]) = $X. self assert: (map at: $b ifPresent: [ :v | v asUppercase ]) = $Y. self assert: (map at: $c ifPresent: [ :v | v asUppercase ]) = $Z. self assert: (map at: $d ifPresent: [ :v | v asUppercase ]) isNil! ! !CTMapTest methodsFor: 'tests-accessing' stamp: 'lr 4/1/2012 16:45'! testAtPut | map | map := self emptyMap. self assert: (map at: $a put: $x) = $x. self assert: (map at: $b put: $y) = $y. self assert: (map at: $c put: $z) = $z. self assert: (map at: $a put: $0) = $0. self assert: (map at: $a) = $0. self assertInvariants: map! ! !CTMapTest methodsFor: 'tests-copying' stamp: 'lr 1/14/2012 12:07'! testCopyEmpty | old new | old := self emptyMap. new := old copy. self deny: old == new. self assertInvariants: old. self assertInvariants: new. old at: $a put: $b. new at: $c put: $d. self assert: old size = 1. self assert: new size = 1. self assert: old keys next = $a. self assert: new keys next = $c. self assert: old values next = $b. self assert: new values next = $d! ! !CTMapTest methodsFor: 'tests-copying' stamp: 'lr 1/25/2012 23:00'! testCopyMany | old new | old := self emptyMap. 1 to: 100 do: [ :index | old at: index put: 2 * index ]. new := old copy. self deny: old == new. self assertInvariants: old. self assertInvariants: new. 1 to: 100 do: [ :index | self assert: (old at: index) = (2 * index). self assert: (new at: index) = (2 * index) ]. old at: 101 put: 202. new at: 102 put: 204. self assert: old size = 101. self assert: new size = 101. self assert: (old at: 101) = 202. self assert: (new at: 102) = 204. self deny: (old includesKey: 102). self deny: (new includesKey: 101)! ! !CTMapTest methodsFor: 'tests-testing' stamp: 'lr 4/1/2012 16:53'! testIncludesAllKeys | map | map := self mapKeys: #($a $b) values: #($x $y). self assert: (map includesAllKeys: #($a $b)). self assert: (map includesAllKeys: #($b $a)). self deny: (map includesAllKeys: #($a $x)). self deny: (map includesAllKeys: #($x))! ! !CTMapTest methodsFor: 'tests-testing' stamp: 'lr 4/1/2012 16:54'! testIncludesKeys | map | map := self mapKeys: #($a $b) values: #($x $y). self assert: (map includesKey: $a). self assert: (map includesKey: $b). self deny: (map includesKey: $x). self deny: (map includesKey: $y)! ! !CTMapTest methodsFor: 'tests-iterating' stamp: 'lr 4/1/2012 16:49'! testInjectInto | map | map := self mapKeys: #(1 2 3) values: #(10 20 30). self assert: (map iterator inject: 0 into: [ :result :key :value | result + key + value ]) = 66! ! !CTMapTest methodsFor: 'tests-testing' stamp: 'lr 4/1/2012 16:52'! testIsEmpty | map | map := self emptyMap. self assert: map isEmpty. map := self mapKeys: #($a) values: #($x). self deny: map isEmpty! ! !CTMapTest methodsFor: 'tests-iterating' stamp: 'lr 4/21/2012 21:01'! testIterator | map keys values | map := self mapKeys: #($a $b $c) values: #($x $y $z). keys := CTArrayList new. values := CTArrayList new. map iterator do: [ :key :value | keys add: key. values add: value ]. self assert: keys size = 3. self assert: (keys iterator includes: $a). self assert: (keys iterator includes: $b). self assert: (keys iterator includes: $c). self assert: values size = 3. self assert: (values iterator includes: $x). self assert: (values iterator includes: $y). self assert: (values iterator includes: $z)! ! !CTMapTest methodsFor: 'tests-exceptions' stamp: 'lr 1/27/2012 22:05'! testKeyNotFound [ self emptyMap at: $b ] on: CTKeyNotFoundError do: [ :exception | self assert: exception key = $b. ^ self ]. self fail! ! !CTMapTest methodsFor: 'tests-instantiation' stamp: 'lr 4/1/2012 16:47'! testKeyValue1 | map | map := self mapClass key: $a value: $x. self assertInvariants: map. self assert: (map size = 1). self assert: (map at: $a) = $x! ! !CTMapTest methodsFor: 'tests-instantiation' stamp: 'lr 4/1/2012 16:47'! testKeyValue2 | map | map := self mapClass key: $a value: $x key: $b value: $y. self assertInvariants: map. self assert: (map size = 2). self assert: (map at: $a) = $x. self assert: (map at: $b) = $y! ! !CTMapTest methodsFor: 'tests-instantiation' stamp: 'lr 4/1/2012 16:48'! testKeyValue3 | map | map := self mapClass key: $a value: $x key: $b value: $y key: $c value: $z. self assertInvariants: map. self assert: (map size = 3). self assert: (map at: $a) = $x. self assert: (map at: $b) = $y. self assert: (map at: $c) = $z! ! !CTMapTest methodsFor: 'tests-instantiation' stamp: 'lr 4/1/2012 16:48'! testKeyValue4 | map | map := self mapClass key: $a value: $x key: $b value: $y key: $c value: $z key: $d value: $0. self assertInvariants: map. self assert: (map size = 4). self assert: (map at: $a) = $x. self assert: (map at: $b) = $y. self assert: (map at: $c) = $z. self assert: (map at: $d) = $0! ! !CTMapTest methodsFor: 'tests-iterating' stamp: 'lr 4/21/2012 21:02'! testKeys | map keys | map := self mapKeys: #($a $b $c) values: #($x $y $z). keys := CTArrayList new. map keys iterator do: [ :key | keys add: key ]. self assertIterable: keys equalsIgnoringOrder: #($a $b $c)! ! !CTMapTest methodsFor: 'tests-instantiation' stamp: 'lr 4/1/2012 16:37'! testKeysValues | map | map := self mapClass keys: #($a $b $c) values: #($x $y). self assertInvariants: map. self assert: (map size = 3). self assert: (map at: $a) = $x. self assert: (map at: $b) = $y. self assert: (map at: $c) isNil! ! !CTMapTest methodsFor: 'tests-instantiation' stamp: 'lr 1/26/2012 10:31'! testNew1 | map | map := self mapClass new. self assert: map isEmpty! ! !CTMapTest methodsFor: 'tests-instantiation' stamp: 'lr 1/26/2012 10:31'! testNew2 | map | map := self mapClass new: 100. self assertInvariants: map. self assert: map isEmpty! ! !CTMapTest methodsFor: 'tests-printing' stamp: 'lr 2/19/2012 00:48'! testPrintEmpty | map | map := self emptyMap. self assert: map printString isString! ! !CTMapTest methodsFor: 'tests-printing' stamp: 'lr 4/1/2012 16:51'! testPrintFull | map | map := self mapKeys: #($a $b $c) values: #($x $y $z). self assert: map printString isString! ! !CTMapTest methodsFor: 'tests-removing' stamp: 'lr 4/1/2012 16:51'! testRemoveAll | map | map := self mapKeys: #($a $b $c) values: #($x $y $z). map removeAll. self assert: map isEmpty. self assertInvariants: map! ! !CTMapTest methodsFor: 'tests-removing' stamp: 'lr 4/1/2012 16:51'! testRemoveKey | map | map := self mapKeys: #($a $b $c) values: #($x $y $z). self should: [ map removeKey: $x ] raise: CTKeyNotFoundError. self assert: (map removeKey: $a) = $x. self assert: map size = 2. self assertInvariants: map! ! !CTMapTest methodsFor: 'tests-removing' stamp: 'lr 4/1/2012 16:52'! testRemoveKeyIfAbsent | map | map := self mapKeys: #($a $b $c) values: #($x $y $z). self assert: (map removeKey: $x ifAbsent: [ $0 ]) = $0. self assert: (map removeKey: $a) = $x. self assert: map size = 2. self assertInvariants: map! ! !CTMapTest methodsFor: 'tests-accessing' stamp: 'lr 4/1/2012 16:46'! testSize | map | map := self emptyMap. self assert: map size = 0. map := self mapKeys: #($a) values: #($x). self assert: map size = 1. map := self mapKeys: #($a $b) values: #($x $y). self assert: map size = 2! ! !CTMapTest methodsFor: 'tests-iterating' stamp: 'lr 4/21/2012 21:02'! testValues | map values | map := self mapKeys: #($a $b $c) values: #($x $y $z). values := CTArrayList new. map values iterator do: [ :value | values add: value ]. self assertIterable: values equalsIgnoringOrder: #($x $y $z)! ! !CTMapTest methodsFor: 'tests-instantiation' stamp: 'lr 1/25/2012 22:52'! testWithAll | old new | old := self emptyMap. 1 to: 100 do: [ :index | old at: index put: 2 * index ]. new := self mapClass withAll: old. self deny: old == new. self assertInvariants: old. self assertInvariants: new. 1 to: 100 do: [ :index | self assert: (old at: index) = (2 * index). self assert: (new at: index) = (2 * index) ]. old at: 101 put: 202. new at: 102 put: 204. self assert: old size = 101. self assert: new size = 101. self assert: (old at: 101) = 202. self assert: (new at: 102) = 204. self deny: (old includesKey: 102). self deny: (new includesKey: 101)! ! !CTMapTest methodsFor: 'tests' stamp: 'lr 1/28/2012 16:38'! testWorkflow | map | map := self mapClass new. self assertInvariants: map. self assert: map isEmpty. (self randomSequence: self workflowSize) do: [ :each | map at: each put: each ]. self assertInvariants: map. self assert: map size = self workflowSize. 1 to: self workflowSize do: [ :each | self assert: (map includesKey: each) ]. (self randomSequence: self workflowSize) do: [ :each | map at: each put: each ]. self assertInvariants: map. self assert: map size = self workflowSize. 1 to: self workflowSize do: [ :each | self assert: (map includesKey: each) ]. (self randomSequence: self workflowSize) do: [ :each | map removeKey: each ]. self assertInvariants: map. self assert: map isEmpty! ! !CTMapTest methodsFor: 'tests' stamp: 'lr 2/13/2012 07:09'! workflowSize ^ 10000! ! CTMapTest subclass: #CTTreeMapTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Container-Tests-Core-Maps'! !CTTreeMapTest methodsFor: 'accessing' stamp: 'lr 1/24/2012 20:45'! mapClass ^ CTTreeMap! ! !CTTreeMapTest methodsFor: 'testing-iterators' stamp: 'lr 4/21/2012 09:20'! testForwardIterator | map | map := self emptyMap. map at: $l put: 1; at: $u put: 2; at: $k put: 3; at: $a put: 4; at: $s put: 5. self assertIterable: #(4 3 1 5 2) equals: (map iterator collect: [ :key :value | value ])! ! CTMapTest subclass: #CTUnmodifiableMapTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Container-Tests-Core-Maps'! !CTUnmodifiableMapTest class methodsFor: 'testing' stamp: 'lr 2/18/2012 22:19'! shouldInheritSelectors ^ false! ! !CTUnmodifiableMapTest methodsFor: 'accessing' stamp: 'lr 4/1/2012 16:22'! emptyMap ^ CTLinkedHashMap new unmodifiable! ! !CTUnmodifiableMapTest methodsFor: 'accessing' stamp: 'lr 2/18/2012 22:44'! mapClass ^ CTUnmodifiableMap! ! !CTUnmodifiableMapTest methodsFor: 'accessing' stamp: 'lr 4/1/2012 16:40'! mapKeys: aKeysCollection values: aValuesCollection ^ (CTLinkedHashMap keys: aKeysCollection values: aValuesCollection) unmodifiable! ! !CTUnmodifiableMapTest methodsFor: 'tests-accessing' stamp: 'lr 4/1/2012 16:12'! testAt super testAt! ! !CTUnmodifiableMapTest methodsFor: 'tests-accessing' stamp: 'lr 4/1/2012 16:12'! testAtIfAbsent super testAtIfAbsent! ! !CTUnmodifiableMapTest methodsFor: 'tests-accessing' stamp: 'lr 4/5/2012 13:08'! testAtIfAbsentPut self should: [ super testAtIfAbsentPut ] raise: CTUnsupportedOperationError! ! !CTUnmodifiableMapTest methodsFor: 'tests-accessing' stamp: 'lr 4/1/2012 16:12'! testAtIfPresent super testAtIfPresent! ! !CTUnmodifiableMapTest methodsFor: 'tests-accessing' stamp: 'lr 4/1/2012 16:12'! testAtPut self should: [ super testAtPut ] raise: CTUnsupportedOperationError! ! !CTUnmodifiableMapTest methodsFor: 'tests-copying' stamp: 'lr 2/18/2012 22:56'! testCopy | map unmodifiable | map := CTHashMap key: $a value: $b. unmodifiable := map unmodifiable. self assert: unmodifiable copy == unmodifiable! ! !CTUnmodifiableMapTest methodsFor: 'tests-copying' stamp: 'lr 4/1/2012 11:21'! testImmutable | map unmodifiable immutable | map := CTHashMap key: $a value: $b. unmodifiable := map unmodifiable. immutable := unmodifiable immutable. map at: $x put: $y. self assertIterable: immutable keys equals: #($a). self assertIterable: immutable values equals: #($b)! ! !CTUnmodifiableMapTest methodsFor: 'tests-testing' stamp: 'lr 4/1/2012 16:16'! testIncludesAllKeys super testIncludesAllKeys! ! !CTUnmodifiableMapTest methodsFor: 'tests-testing' stamp: 'lr 4/1/2012 16:16'! testIncludesKeys super testIncludesKeys! ! !CTUnmodifiableMapTest methodsFor: 'tests-iterating' stamp: 'lr 4/1/2012 16:16'! testInjectInto super testInjectInto! ! !CTUnmodifiableMapTest methodsFor: 'tests-testing' stamp: 'lr 4/1/2012 16:16'! testIsEmpty super testIsEmpty! ! !CTUnmodifiableMapTest methodsFor: 'as yet unclassified' stamp: 'lr 4/21/2012 21:01'! testIterator super testIterator! ! !CTUnmodifiableMapTest methodsFor: 'tests-exceptions' stamp: 'lr 4/1/2012 16:15'! testKeyNotFound super testKeyNotFound! ! !CTUnmodifiableMapTest methodsFor: 'tests-iterating' stamp: 'lr 4/1/2012 16:16'! testKeys super testKeys! ! !CTUnmodifiableMapTest methodsFor: 'tests-printing' stamp: 'lr 4/1/2012 16:16'! testPrintEmpty super testPrintEmpty! ! !CTUnmodifiableMapTest methodsFor: 'tests-printing' stamp: 'lr 4/1/2012 16:16'! testPrintFull super testPrintFull! ! !CTUnmodifiableMapTest methodsFor: 'tests-removing' stamp: 'lr 4/1/2012 16:16'! testRemoveAll self should: [ super testRemoveAll ] raise: CTUnsupportedOperationError! ! !CTUnmodifiableMapTest methodsFor: 'tests-removing' stamp: 'lr 4/1/2012 16:16'! testRemoveKey self should: [ super testRemoveKey ] raise: CTUnsupportedOperationError! ! !CTUnmodifiableMapTest methodsFor: 'tests-removing' stamp: 'lr 4/1/2012 16:16'! testRemoveKeyIfAbsent self should: [ super testRemoveKeyIfAbsent ] raise: CTUnsupportedOperationError! ! !CTUnmodifiableMapTest methodsFor: 'tests-accessing' stamp: 'lr 4/1/2012 16:10'! testSize super testSize! ! !CTUnmodifiableMapTest methodsFor: 'tests-copying' stamp: 'lr 2/18/2012 23:08'! testUnmodifiable | map unmodifiable | map := (CTHashMap key: $a value: $b) unmodifiable. unmodifiable := map unmodifiable. self assert: unmodifiable unmodifiable == unmodifiable! ! !CTUnmodifiableMapTest methodsFor: 'tests-iterating' stamp: 'lr 4/1/2012 16:16'! testValues super testValues! ! !CTLinkedHashMap methodsFor: '*container-tests-core' stamp: 'lr 4/21/2012 09:20'! assertInvariants: anAsserter super assertInvariants: anAsserter. root assertInvariants: anAsserter. self assert: table size = root iterator size! ! !CTComparator methodsFor: '*container-tests-core' stamp: 'lr 1/24/2012 19:29'! assertInvariants: anAsserter self assert: self printString isString! ! !CTPriorityQueue methodsFor: '*container-tests-core' stamp: 'lr 1/26/2012 19:17'! assertInvariants: anAsserter | left right | super assertInvariants: anAsserter. 1 to: size // 2 do: [ :index | (left := 2 * index) <= size ifTrue: [ self assert: (comparator less: (array at: index) than: (array at: left)). (right := left + 1) <= size ifTrue: [ self assert: (comparator less: (array at: index) than: (array at: right)) ] ] ]. size + 1 to: array size do: [ :index | self assert: (array at: index) isNil ] ! ! !CTHashSet methodsFor: '*container-tests-core' stamp: 'lr 1/13/2012 23:57'! assertInvariants: anAsserter super assertInvariants: anAsserter. table assertInvariants: anAsserter! !