On Mon, 28 May 2012, Frank Shearar wrote:
On 27 May 2012 23:16, commits@source.squeak.org wrote:
Eliot Miranda uploaded a new version of KernelTests to project The Trunk: http://source.squeak.org/trunk/KernelTests-eem.224.mcz
==================== Summary ====================
Name: KernelTests-eem.224 Author: eem Time: 27 May 2012, 3:16:16.618 pm UUID: 2d674fd0-22e3-4b5c-82ae-af5642c9614f Ancestors: KernelTests-nice.223
Add a long test case for CompiledMethod = & hash
=============== Diff against KernelTests-nice.223 ===============
Item was added:
- LongTestCase subclass: #CompiledMethodComparisonTest
- instanceVariableNames: ''
- classVariableNames: ''
- poolDictionaries: ''
- category: 'KernelTests-Methods'!
Item was added:
- ----- Method: CompiledMethodComparisonTest>>testHash (in category 'tests') -----
- testHash
- | ai |
- ai := CompiledMethod allInstances.
- ai do:
- [:a|
- ai do:
- [:b|
- a = b ifTrue: [self assert: a hash = b hash]]]!
Not necessarily here, but it'd be good to see that (a = b) ifFalse: [self deny: a hash = b hash] holds.
That would be a nice property, but hash functions are not injective. If they were, then either the codomain would be too large (not SmallInteger in our case, which makes hashing impractical) or there were no need for the use of hashing at all, since there were no collisions.
Levente
frank