thanks. I will harvest that when I'm done with my floor. Stef
> While inquiring generalization of #removeAll and #removeAll: related > to Klaus fix http://bugs.squeak.org/view.php?id=6937 , > I came across two SmallDictionary minor bugs > http://bugs.squeak.org/view.php?id=7256 , > http://bugs.squeak.org/view.php?id=7257 . > > The first one by reading code, the second one by this procedure : > - a) fileOut DictionaryTest, > - b) replaced Dictionary with SmallDictionary (ALT+j), > - c) fileIn again. > > Of course, the tests should be factored better rather than just > duplicated. > But I don't know how to inherit tests from super... > (super tests are not executed by the TestRunner) > > See attached .st > > -------------------------------- > > Oh, and i had to change this test: > > testKeyAtValue > | dict | > dict := Dictionary new. > dict at: #a put: 1. > dict at: #c put: 1. > self assert: (dict keyAtValue: 1) = #c. > "ugly may be a bug, why not having a set #a and #c" > > Should be : > > self assert: ((dict keyAtValue: 1) = #c) | (dict keyAtValue: 1) = > #a). > The result highly depends on: > - 1) hash algorithm > - 2) Dictionary capacity (the default capacity for this test) > Asserting that it is #c : > - 1) does not help the reader to guess the specification (i would > understand it is always #c) > - 2) is very fragile, not portable, and might change unexpectedly > > For the case of SmallDictionary, we could eventually assert: > self assert: (dict keyAtValue: 1) = #a. > Because keys are ordered and will retain addition order. > > -------------------------------- > > Another point: these two methods should be removed shouldn't they? > SmallDictionary removeSelector: #keyForPatternVariableNode:. > SmallDictionary removeSelector: #valueForPatternVariableNode:. > > 'From Pharo0.1 of 16 May 2008 [Latest update: #10201] on 30 December > 2008 at 10:45:19 pm'! > TestCase subclass: #SmallDictionaryTest > uses: TIncludesTest + TCloneTest > instanceVariableNames: 'emptyDict nonEmptyDict' > classVariableNames: '' > poolDictionaries: '' > category: 'CollectionsTests-Unordered'! > > !SmallDictionaryTest methodsFor: 'testing' stamp: 'nice 12/30/2008 > 19:26'! > testCapacity > "this is a non regression test for > http://bugs.squeak.org/view.php?id=7256 > " > > self shouldnt: [SmallDictionary new capacity] raise: Error! ! > > !SmallDictionaryTest methodsFor: 'testing' stamp: 'ar 6/13/2008 > 00:14'! > testCollect > "Ensure that SmallDictionary>>collect: answers a dictionary not > something else" > | dict expected result | > dict := SmallDictionary newFromPairs:{ > #first. 1. > #second. 2. > #third. 3. > #fourth. 4. > #fifth. 5. > }. > result := dict collect:[:each| each asWords]. > expected := SmallDictionary newFromPairs:{ > #first. 'one'. > #second. 'two'. > #third. 'three'. > #fourth. 'four'. > #fifth. 'five'. > }. > self assert: result = expected.! ! > > !SmallDictionaryTest methodsFor: 'testing' stamp: 'nice 12/30/2008 > 19:43'! > testDictionaryConcatenation > "self run: #testDictionaryConcatenation" > > > | dict1 dict2 dict3 | > dict1 := SmallDictionary new. > dict1 at: #a put: 'Nicolas' ; at: #b put: 'Damien'. > > dict2 := SmallDictionary new. > dict2 at: #a put: 'Christophe' ; at: #c put: 'Anthony'. > dict3 := dict1, dict2. > > self assert: (dict3 at: #a) = 'Christophe'. > self assert: (dict3 at: #b) = 'Damien'. > self assert: (dict3 at: #c) = 'Anthony'. > > > ! ! > > !SmallDictionaryTest methodsFor: 'testing' stamp: 'ar 6/13/2008 > 00:13'! > testReject > "Ensure that SmallDictionary>>reject: answers a dictionary not > something else" > | dict expected result | > dict := SmallDictionary newFromPairs:{ > #first. 1. > #second. 2. > #third. 3. > #fourth. 4. > #fifth. 5. > }. > result := dict reject:[:each| each odd]. > expected := SmallDictionary newFromPairs:{ > #second. 2. > #fourth. 4. > }. > self assert: result = expected.! ! > > !SmallDictionaryTest methodsFor: 'testing' stamp: 'ar 6/13/2008 > 00:12'! > testSelect > "Ensure that SmallDictionary>>select: answers a dictionary not > something else" > | dict expected result | > dict := SmallDictionary newFromPairs:{ > #first. 1. > #second. 2. > #third. 3. > #fourth. 4. > #fifth. 5. > }. > result := dict select:[:each| each odd]. > expected := SmallDictionary newFromPairs:{ > #first. 1. > #third. 3. > #fifth. 5. > }. > self assert: result = expected.! ! > > > !SmallDictionaryTest methodsFor: 'setup' stamp: 'stephane.ducasse > 11/21/2008 15:03'! > setUp > > emptyDict := SmallDictionary new. > nonEmptyDict := SmallDictionary new. > nonEmptyDict > at: #a put: 20; > at: #b put: 30; > at: #c put: 40; > at: #d put: 30.! ! > > > !SmallDictionaryTest methodsFor: 'tests - includes' stamp: > 'stephane.ducasse 11/21/2008 15:05'! > anotherElementNotIn > ^ 42! ! > > !SmallDictionaryTest methodsFor: 'tests - includes' stamp: > 'stephane.ducasse 11/21/2008 15:04'! > collection > ^ #(1 2 3)! ! > > !SmallDictionaryTest methodsFor: 'tests - includes' stamp: > 'stephane.ducasse 11/21/2008 15:04'! > elementNotIn > > ^ 666! ! > > !SmallDictionaryTest methodsFor: 'tests - includes' stamp: > 'stephane.ducasse 11/21/2008 15:04'! > empty > ^ emptyDict! ! > > !SmallDictionaryTest methodsFor: 'tests - includes' stamp: > 'stephane.ducasse 11/21/2008 15:04'! > nonEmpty > ^ nonEmptyDict! ! > > > > !SmallDictionaryTest methodsFor: 'association tests' stamp: 'NDCC > 3/8/2006 08:14'! > testAddAssociation > "self run:#testAddAssociation" > "self debug:#testAddAssociation" > > | dict | > dict := SmallDictionary new. > dict at: #a put: 1. > dict at: #b put: 2. > self assert: (dict at: #a) = 1. > self assert: (dict at: #b) = 2. > > dict at: #a put: 10. > dict at: #c put: 2. > > self assert: (dict at: #a) = 10. > self assert: (dict at: #b) = 2. > self assert: (dict at: #c) = 2 > > ! ! > > !SmallDictionaryTest methodsFor: 'association tests' stamp: > 'ndCollectionsTests-Unordered 3/16/2006 10:30'! > testAssociationsSelect > | answer d | > d := SmallDictionary new. > d at: (Array with: #hello with: #world) > put: #fooBar. > d at: Smalltalk put: #'Smalltalk is the key'. > d at: #Smalltalk put: Smalltalk. > answer := d > associationsSelect: [:assoc | assoc key == > #Smalltalk > and: [assoc value == > Smalltalk]]. > self > should: [answer isKindOf: SmallDictionary]. > self > should: [answer size == 1]. > self > should: [(answer at: #Smalltalk) > == Smalltalk]. > answer := d > associationsSelect: [:assoc | assoc key == > #NoSuchKey > and: [assoc value == > #NoSuchValue]]. > self > should: [answer isKindOf: SmallDictionary]. > self > should: [answer size == 0]! ! > > !SmallDictionaryTest methodsFor: 'association tests' stamp: > 'stephane.ducasse 11/21/2008 15:00'! > testIncludesAssociation > "self run:#testIncludesAssociation" > > | dict | > dict := SmallDictionary new. > dict at: #a put: 1. > dict at: #b put: 2. > self assert: (dict includesAssociation: (#a -> 1)). > self assert: (dict includesAssociation: (#b -> 2)). > > ! ! > > !SmallDictionaryTest methodsFor: 'association tests' stamp: > 'ndCollectionsTests-Unordered 3/16/2006 10:25'! > testIncludesAssociationNoValue > "self run:#testIncludesAssociationNoValue" > "self debug:#testIncludesAssociationNoValue" > > | dict a1 a3 | > a1 := Association key: #Italie. > a3 := Association key: #France value: 'Paris'. > > self assert: (a1 key = #Italie). > self assert: (a1 value isNil). > > dict := SmallDictionary new. > dict add: a1. > dict add: a3. > self assert: (dict includesKey: #France). > self assert: (dict includesKey: #Italie). > self assert: (dict at: #Italie) isNil. > self assert: (dict at: #France) = 'Paris' > > > > ! ! > > > !SmallDictionaryTest methodsFor: 'basic tests' stamp: > 'ndCollectionsTests-Unordered 3/16/2006 10:26'! > testAtError > "self run: #testAtError" > > | dict | > dict := SmallDictionary new. > dict at: #a put: 666. > self shouldnt: [ dict at: #a ] raise: Error. > self should: [ dict at: #b ] raise: Error. > > ! ! > > !SmallDictionaryTest methodsFor: 'basic tests' stamp: 'NDCC 3/1/2006 > 14:27'! > testAtIfAbsent > "self run: #testAtIfAbsent" > > | dict | > dict := SmallDictionary new. > dict at: #a put: 666. > > self assert: (dict at: #a ifAbsent: [nil]) = 666. > > self assert: (dict at: #b ifAbsent: [nil]) isNil. > > ! ! > > !SmallDictionaryTest methodsFor: 'basic tests' stamp: 'NDCC 3/8/2006 > 09:28'! > testAtPut > "self run: #testAtPut" > "self debug: #testAtPut" > > | adictionary | > adictionary := SmallDictionary new. > adictionary at: #a put: 3. > self assert: (adictionary at: #a) = 3. > adictionary at: #a put: 3. > adictionary at: #a put: 4. > self assert: (adictionary at: #a) = 4. > adictionary at: nil put: 666. > self assert: (adictionary at: nil) = 666! ! > > !SmallDictionaryTest methodsFor: 'basic tests' stamp: 'marcus.denker > 9/14/2008 21:15'! > testAtPutNil > "self run: #testAtPut" > "self debug: #testAtPut" > > | dict | > dict := SmallDictionary new. > dict at: nil put: 1. > self assert: (dict at: nil) = 1. > dict at: #a put: nil. > self assert: (dict at: #a) isNil. > dict at: nil put: nil. > self assert: (dict at: nil) isNil. > > > ! ! > > !SmallDictionaryTest methodsFor: 'basic tests' stamp: > 'ndCollectionsTests-Unordered 3/16/2006 10:24'! > testIncludesKey > "self run:#testIncludesKey" > "self debug:#testIncludesKey" > > | dict a1 a2 a3 | > a1 := Association key: 'Italie'. > a2 := Association new. > a3 := Association key: 'France' value: 'Paris'. > > dict := SmallDictionary new. > dict add: a1 . > dict add: a2. > dict add: a3. > self assert: (dict includesKey: #France). > self assert: (dict includesKey: 'France'). > self assert: (dict includesKey: #Italie). > self assert: (dict includesKey: nil). > > self assert: (dict at: 'France' ) = 'Paris'. > ! ! > > !SmallDictionaryTest methodsFor: 'basic tests' stamp: 'NDCC 3/8/2006 > 09:41'! > testOccurrencesOf > "self run:#testOccurrencesOf" > > | dict | > dict := SmallDictionary new. > dict at: #a put: 1. > dict at: #b put: 2. > dict at: #c put: 1. > dict at: #d put: 3. > dict at: nil put: nil. > dict at: #z put: nil. > > > self assert: (dict occurrencesOf: 1 ) = 2. > self assert: (dict occurrencesOf: nil ) = 2. > > > > ! ! > > > !SmallDictionaryTest methodsFor: 'implementation tests' stamp: > 'stephaneducasse 9/18/2005 10:48'! > testAtNil > "(self run: #testAtNil)" > "nil is a valid key in squeak. In VW nil is not a valid key" > "Ansi 1.9 p, 168 > 5.7.2.5 Message: at: key put: newElement > Synopsis > Store newElement at key in the receiver. Answer > newElement. > Definition: <abstractSmallDictionary> > If lookup succeeds for key, then newElement replaces the > element previously stored at key. > Otherwise, the newElement is stored at the new key. In either > case, subsequent successful > lookups for key will answer newElement. Answer newElement. > > The result is undefined if the key is nil. > > This clearly indicates that different smalltalks where doing > different assumptions." > > > > | dict1 | > dict1 := SmallDictionary new. > self shouldnt: [ dict1 at: nil put: #none] raise: Error. > self assert: (dict1 at: nil) = #none. > ! ! > > !SmallDictionaryTest methodsFor: 'implementation tests' stamp: > 'ndCollectionsTests-Unordered 3/16/2006 10:29'! > testPseudoVariablesAreValidKeys > "(self run: #testPseudoVariablesAreValidKeys)" > "true and false are valid keys" > > | dict1 | > dict1 := SmallDictionary new. > self shouldnt: [dict1 at: true put: #true] raise: Error. > self assert: (dict1 at: true) = #true. > > self shouldnt: [dict1 at: false put: #false] raise: Error. > self assert: (dict1 at: false) = #false.! ! > > > !SmallDictionaryTest methodsFor: 'keys and value tests' stamp: 'nice > 12/30/2008 22:43'! > testKeyAtValue > "self run: #testKeyAtValue" > "self debug: #testKeyAtValue" > > | dict | > dict := SmallDictionary new. > dict at: #a put: 1. > dict at: #b put: 2. > dict at: #c put: 1. > > self assert: (dict keyAtValue: 2) = #b. > self assert: (dict keyAtValue: 1) = #c | ((dict keyAtValue: 1) = #a). > "ugly may be a bug, why not having a set #a and #c" > > self should: [dict keyAtValue: 0] raise: Error > > > ! ! > > !SmallDictionaryTest methodsFor: 'keys and value tests' stamp: > 'ndCollectionsTests-Unordered 3/16/2006 10:23'! > testKeys > > "self run:#testKeys " > > | a1 a2 dict | > a1 := Association key: 'France' value: 'Paris'. > a2 := Association key: 'Italie' value: 'Rome'. > dict := SmallDictionary new. > dict add: a1. > dict add: a2. > > self assert: (dict keys size) = 2. > > self assert: (dict keys includes: #France) > > > > > > ! ! > > !SmallDictionaryTest methodsFor: 'keys and value tests' stamp: 'NDCC > 3/8/2006 09:13'! > testKeysDo > "self run: #testKeysDo" > "self debug: #testKeysDo" > > | dict res | > dict := SmallDictionary new. > > dict at: #a put: 33. > dict at: #b put: 66. > > res := OrderedCollection new. > dict keysDo: [ :each | res add: each]. > > self assert: res asSet = #(a b) asSet. > > > > ! ! > > !SmallDictionaryTest methodsFor: 'keys and value tests' stamp: 'NDCC > 3/8/2006 08:56'! > testRemoveKey > "self run:#testRemoveKey " > > | dict | > dict := SmallDictionary new. > dict at: #a put: 1. > dict at: #b put: 2. > > self assert: (dict keys size) = 2. > dict removeKey: #a. > self assert: dict keys size = 1. > > self should: [dict at: #a] raise: Error. > self assert: (dict at: #b) = 2 > > > > ! ! > > !SmallDictionaryTest methodsFor: 'keys and value tests' stamp: 'NDCC > 3/8/2006 08:16'! > testSmallDictionaryConcatenation > "self run: #testSmallDictionaryConcatenation" > > > | dict1 dict2 dict3 | > dict1 := SmallDictionary new. > dict1 at: #a put: 'Nicolas' ; at: #b put: 'Damien'. > > dict2 := SmallDictionary new. > dict2 at: #a put: 'Christophe' ; at: #c put: 'Anthony'. > dict3 := dict1, dict2. > > self assert: (dict3 at: #a) = 'Christophe'. > self assert: (dict3 at: #b) = 'Damien'. > self assert: (dict3 at: #c) = 'Anthony'. > > > ! ! > > !SmallDictionaryTest methodsFor: 'keys and value tests' stamp: > 'ndCollectionsTests-Unordered 3/16/2006 10:23'! > testValues > "self run:#testValues " > > | a1 a2 a3 dict | > a1 := Association key: 'France' value: 'Paris'. > a2 := Association key: 'Italie' value: 'Rome'. > dict := SmallDictionary new. > dict add: a1. > dict add: a2. > > self assert: (dict values size ) = 2. > self assert: (dict values includes: 'Paris'). > > a3 := Association new. > dict add: a3. > self assert: (dict values size ) = 3. > self assert: (dict values includes: nil). > > > > > > > > > > ! ! > > > !SmallDictionaryTest methodsFor: 'tests' stamp: 'zz 12/7/2005 19:59'! > testAdd > > | dict | > dict := SmallDictionary new. > dict add: #a -> 1. > dict add: #b -> 2. > self assert: (dict at: #a) = 1. > self assert: (dict at: #b) = 2! ! > > !SmallDictionaryTest methodsFor: 'tests' stamp: 'zz 12/7/2005 19:55'! > testAddAll > > | dict1 dict2 | > dict1 := SmallDictionary new. > dict1 at: #a put:1 ; at: #b put: 2. > dict2 := SmallDictionary new. > dict2 at: #a put: 3 ; at: #c put: 4. > dict1 addAll: dict2. > self assert: (dict1 at: #a) = 3. > self assert: (dict1 at: #b) = 2. > self assert: (dict1 at: #c) = 4.! ! > > !SmallDictionaryTest methodsFor: 'tests' stamp: 'zz 12/7/2005 19:57'! > testComma > > | dict1 dict2 dict3 | > dict1 := SmallDictionary new. > dict1 at: #a put:1 ; at: #b put: 2. > dict2 := SmallDictionary new. > dict2 at: #a put: 3 ; at: #c put: 4. > dict3 := dict1, dict2. > self assert: (dict3 at: #a) = 3. > self assert: (dict3 at: #b) = 2. > self assert: (dict3 at: #c) = 4.! ! > > !SmallDictionaryTest methodsFor: 'tests' stamp: 'stephaneducasse > 9/18/2005 10:45'! > testPseudo > "(self run: #testPseudo)" > "true and false are valid keys" > > | dict1 | > dict1 := SmallDictionary new. > self shouldnt: [dict1 at: true put: #true] raise: Error. > self assert: (dict1 at: true) = #true. > > self shouldnt: [dict1 at: false put: #false] raise: Error. > self assert: (dict1 at: false) = #false.! ! > > "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "! > > SmallDictionaryTest class > uses: TIncludesTest classTrait + TCloneTest classTrait > instanceVariableNames: 'testToto pt1'! > _______________________________________________ > Pharo-project mailing list > [email protected] > http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project _______________________________________________ Pharo-project mailing list [email protected] http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
