Skip to content

Commit

Permalink
Refactoring tests to use the environmentBuilder
Browse files Browse the repository at this point in the history
  • Loading branch information
tesonep committed Mar 18, 2022
1 parent cfe54ba commit 0b9c289
Show file tree
Hide file tree
Showing 9 changed files with 83 additions and 37 deletions.
5 changes: 3 additions & 2 deletions smalltalksrc/VMMakerTests/VMLookUpTest.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,8 @@ VMLookUpTest >> setUp [
withValue: processorListArray.
memory lastHash: 1.

interpreter setBreakSelector: nil
interpreter setBreakSelector: nil.

]

{ #category : #tests }
Expand Down Expand Up @@ -464,7 +465,7 @@ VMLookUpTest >> testPrimitivePerformFindsMethodOop [
interpreter primitivePerform.

self assert: interpreter newMethod equals: methodOop.
self assert: interpreter instructionPointer equals: methodOop + objectHeaderSize + wordSize - 1 "+ header object + header of compiledMethod - (1)"
self assert: interpreter instructionPointer equals: methodOop + self objectHeaderSize + wordSize - 1 "+ header object + header of compiledMethod - (1)"

"(1) the Instruction Pointer is set to be just before the bytecode to execute, so fetchNextBytecode will fetch the first bytecode ( #justActivateNewMethod: )"
]
Expand Down
12 changes: 6 additions & 6 deletions smalltalksrc/VMMakerTests/VMObjectLayoutTests.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,15 @@ VMObjectLayoutTests >> installClassIntoClassTableWithInstSpec: aFormatInt instSi
VMObjectLayoutTests >> objSizeWithNumberOfSlots: numberOfSlots [
| objSize |
"always have at least one slot for forwarders"
numberOfSlots = 0 ifTrue: [ ^ objectHeaderSize + 8 ].
numberOfSlots = 0 ifTrue: [ ^ self objectHeaderSize + 8 ].

objSize := numberOfSlots * wordSize.
"we align to 8 bytes"
objSize % 8 = 0 ifFalse: [ objSize := objSize + wordSize ].

"extra header for big objects"
numberOfSlots > 254 ifTrue: [ objSize := objSize + objectHeaderSize ].
^ objectHeaderSize + objSize
numberOfSlots > 254 ifTrue: [ objSize := objSize + self objectHeaderSize ].
^ self objectHeaderSize + objSize

]

Expand Down Expand Up @@ -224,7 +224,7 @@ VMObjectLayoutTests >> testObjectWith0SlotsIsAreAlwaysAligned [
class := self installClassIntoClassTableWithInstSpec: 1 instSize: slots.
obj1oop := memory instantiateClass: class.
obj2oop := memory instantiateClass: class.
self assert: obj2oop - obj1oop equals: objectHeaderSize + memory allocationUnit
self assert: obj2oop - obj1oop equals: self objectHeaderSize + memory allocationUnit
]

{ #category : #tests }
Expand All @@ -233,7 +233,7 @@ VMObjectLayoutTests >> testObjectWith0SlotsIsAreAlwaysWithAtLeastOneSlotsForForw
slots := 0.
class := self installClassIntoClassTableWithInstSpec: 1 instSize: slots.
oop := memory instantiateClass: class.
self assert: (memory bytesInObject: oop) equals: objectHeaderSize + memory allocationUnit.
self assert: (memory bytesInObject: oop) equals: self objectHeaderSize + memory allocationUnit.
]

{ #category : #tests }
Expand All @@ -260,7 +260,7 @@ VMObjectLayoutTests >> testObjectWithMoreThan254SlotsHasTwoHeaders [
installClassIntoClassTableWithInstSpec: 1
instSize: slots.
objOop := memory instantiateClass: class.
bigOopHeader := memory baseHeader: objOop - objectHeaderSize. "header before the main header"
bigOopHeader := memory baseHeader: objOop - self objectHeaderSize. "header before the main header"
numSlots := bigOopHeader bitAnd: mask.
self assert: numSlots equals: slots ]
]
Expand Down
4 changes: 2 additions & 2 deletions smalltalksrc/VMMakerTests/VMPrimitiveCallingTest.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ VMPrimitiveCallingTest >> setUp [

"Initializing the primTraceLog table"
interpreter movePrimTraceLogToMemoryAt:
cogit methodZoneBase + interpreter cogCodeSize + stackSpaceSize
+ methodCacheSize.
cogit methodZoneBase + interpreter cogCodeSize + environmentBuilder stackSpaceSize
+ environmentBuilder methodCacheSize.

classLargeInteger := self newClassInOldSpaceWithSlots: 0 instSpec: memory firstByteFormat.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -710,6 +710,8 @@ VMSimpleStackBasedCogitAbstractTest >> sentSelector: anObject [
VMSimpleStackBasedCogitAbstractTest >> setUp [
super setUp.

initialAddress := environmentBuilder codeInitialAddress.

cogit := self newJitCompiler.
memory coInterpreter cogit: cogit.
memory cogit: cogit.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ VMSimpleStackBasedCogitMegamorphicPICTest >> setUp [
self setUpCogMethodEntry.

memory coInterpreter
moveMethodCacheToMemoryAt: initialAddress "+ The guard page? memory cogCodeBase" + self initialCodeSize + stackSpaceSize.
moveMethodCacheToMemoryAt: initialAddress "+ The guard page? memory cogCodeBase" + self initialCodeSize + environmentBuilder stackSpaceSize.
specialSelectorsArray := self newOldSpaceObjectWithSlots: 2.
memory coInterpreter
specialSelectorArray: specialSelectorsArray;
Expand Down
44 changes: 41 additions & 3 deletions smalltalksrc/VMMakerTests/VMSimulatedEnvironmentBuilder.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,12 @@ Class {
'objectMemoryClass',
'wordSize',
'initialCodeSize',
'primitiveTraceLogSize'
'primitiveTraceLogSize',
'oldSpaceSize',
'initialAddress',
'stackSpaceSize',
'methodCacheSize',
'newSpaceSize'
],
#category : #'VMMakerTests-Builders'
}
Expand All @@ -30,13 +35,18 @@ VMSimulatedEnvironmentBuilder >> build [
self doBuild
]

{ #category : #accessing }
VMSimulatedEnvironmentBuilder >> codeInitialAddress [

^ initialAddress
]

{ #category : #building }
VMSimulatedEnvironmentBuilder >> doBuild [

"100 k at least to put the class table in the old space.
Get total size be a multiple of 4K so Unicorn CPU emulator accepts it"
| oldSpaceSize newSpaceSize stackSpaceSize methodCacheSize rumpCStackSize initialAddress memoryManager edenSize |
oldSpaceSize := 2048 * 1024.
| rumpCStackSize memoryManager edenSize |

"Check #scavengerDenominator in SpurMemoryManager"
edenSize := 2 * 1024 + interpreter interpreterAllocationReserveBytes.
Expand Down Expand Up @@ -93,6 +103,14 @@ VMSimulatedEnvironmentBuilder >> initializationOptions: aCollection [
initializationOptions := aCollection
]

{ #category : #initialization }
VMSimulatedEnvironmentBuilder >> initialize [

super initialize.
oldSpaceSize := 2048 * 1024.

]

{ #category : #accessing }
VMSimulatedEnvironmentBuilder >> interpreter [
^ interpreter
Expand All @@ -103,6 +121,16 @@ VMSimulatedEnvironmentBuilder >> interpreterClass: aClass [
interpreterClass := aClass
]

{ #category : #accessing }
VMSimulatedEnvironmentBuilder >> methodCacheSize [
^ methodCacheSize
]

{ #category : #accessing }
VMSimulatedEnvironmentBuilder >> newSpaceSize [
^ newSpaceSize
]

{ #category : #accessing }
VMSimulatedEnvironmentBuilder >> objectMemory [
^ objectMemory
Expand All @@ -113,6 +141,11 @@ VMSimulatedEnvironmentBuilder >> objectMemoryClass: aClass [
objectMemoryClass := aClass
]

{ #category : #accessing }
VMSimulatedEnvironmentBuilder >> oldSpaceSize [
^ oldSpaceSize
]

{ #category : #accessing }
VMSimulatedEnvironmentBuilder >> primitiveTraceLogSize: anInteger [
primitiveTraceLogSize := anInteger
Expand All @@ -130,6 +163,11 @@ VMSimulatedEnvironmentBuilder >> roundToPageSize: anInteger [
^ anInteger + (pageSize - remainder)
]

{ #category : #accessing }
VMSimulatedEnvironmentBuilder >> stackSpaceSize [
^ stackSpaceSize
]

{ #category : #accessing }
VMSimulatedEnvironmentBuilder >> wordSize: anInteger [
wordSize := anInteger
Expand Down
29 changes: 17 additions & 12 deletions smalltalksrc/VMMakerTests/VMSpurMemoryManagerTest.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,12 @@ Class {
#name : #VMSpurMemoryManagerTest,
#superclass : #ParametrizedTestCase,
#instVars : [
'newSpaceSize',
'memory',
'interpreter',
'oldSpaceSize',
'nextIndex',
'objectHeaderSize',
'zeroSizedObjectClassIndex',
'emptyObjectSize',
'initialAddress',
'stackSpaceSize',
'stackBuilder',
'methodCacheSize',
'rumpCStackSize',
'wordSize',
'methodBuilder',
Expand Down Expand Up @@ -69,6 +63,13 @@ VMSpurMemoryManagerTest >> createMethodOopFromPharoMethod: aPharoCompiledMethod
^ methodOop
]

{ #category : #accessing }
VMSpurMemoryManagerTest >> emptyObjectSize [

"It is the header plus a word, padded to 8 bytes alignment"
^ self objectHeaderSize + "memory wordSize" 8
]

{ #category : #accessing }
VMSpurMemoryManagerTest >> initialCodeSize [
^ 0
Expand Down Expand Up @@ -404,6 +405,12 @@ VMSpurMemoryManagerTest >> nextOrdinaryClassIndex [
ifNotNil: [ nextIndex := nextIndex + 1 ]
]

{ #category : #accessing }
VMSpurMemoryManagerTest >> objectHeaderSize [

^ memory baseHeaderSize
]

{ #category : #helpers }
VMSpurMemoryManagerTest >> primitiveTraceLogSize [
^ 0
Expand Down Expand Up @@ -463,6 +470,8 @@ VMSpurMemoryManagerTest >> setUp [
memory: memory;
methodBuilder: methodBuilder;
yourself.

oldSpaceSize := environmentBuilder oldSpaceSize
]

{ #category : #running }
Expand Down Expand Up @@ -511,11 +520,7 @@ VMSpurMemoryManagerTest >> setUpUsingImage [
interpreter openOn: 'YourImageHere.image'.
interpreter initStackPages.
interpreter loadInitialContext.

objectHeaderSize := 8 "bytes. Always.".
emptyObjectSize := objectHeaderSize + 8 "minimum required single empty slot, to use for forwarders".

newSpaceSize := memory getMemoryMap newSpaceEnd - memory getMemoryMap newSpaceStart.

oldSpaceSize := memory oldSpaceSize.

methodBuilder := VMCompiledCodeBuilder new
Expand All @@ -534,7 +539,7 @@ VMSpurMemoryManagerTest >> setUpUsingImage [
{ #category : #accessing }
VMSpurMemoryManagerTest >> sizeOfObjectWithSlots: slots [

^ objectHeaderSize + ((slots min: 1 "at least one for the forwarder pointer") * memory wordSize "bytes")
^ self objectHeaderSize + ((slots min: 1 "at least one for the forwarder pointer") * memory wordSize "bytes")
]

{ #category : #accessing }
Expand Down
18 changes: 9 additions & 9 deletions smalltalksrc/VMMakerTests/VMSpurNewSpaceStructureTest.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ VMSpurNewSpaceStructureTest >> fillEden [

"Allocate enough objects to fill the eden."
1
to: memory scavenger eden size // emptyObjectSize
to: memory scavenger eden size // self emptyObjectSize
do: [ :index | self newZeroSizedObject ]
]

Expand All @@ -21,7 +21,7 @@ VMSpurNewSpaceStructureTest >> testInstantiateNewObjectMovesFreeStartAfterObject
self newZeroSizedObject.

"New zero sized object has 64bit header + 1 * 64bit empty slot = 16bytes"
self assert: memory freeStart equals: freeStartBefore + emptyObjectSize
self assert: memory freeStart equals: freeStartBefore + self emptyObjectSize
]

{ #category : #'tests-2-instantiation' }
Expand All @@ -32,7 +32,7 @@ VMSpurNewSpaceStructureTest >> testInstantiateNewObjectWithSlotMovesFreeStartAft
self newObjectWithSlots: 0.

"New zero sized object has 64bit header + 1 * 64bit empty slot = 16bytes"
self assert: memory freeStart equals: freeStartBefore + emptyObjectSize
self assert: memory freeStart equals: freeStartBefore + self emptyObjectSize
]

{ #category : #'tests-1-memory-initialization' }
Expand All @@ -46,7 +46,7 @@ VMSpurNewSpaceStructureTest >> testNewMemoryEdenIsRestOfNewSpace [

self
assert: memory scavenger eden size
equals: newSpaceSize - memory scavenger pastSpace size - memory scavenger futureSpace size
equals: environmentBuilder newSpaceSize - memory scavenger pastSpace size - memory scavenger futureSpace size
]

{ #category : #'tests-1-memory-initialization' }
Expand All @@ -64,7 +64,7 @@ VMSpurNewSpaceStructureTest >> testNewMemoryFutureSpaceEndIsAtTheStartOfEden [
{ #category : #'tests-1-memory-initialization' }
VMSpurNewSpaceStructureTest >> testNewMemoryFutureSpaceIsRoughlyOneSeventhOfNewSpace [

self assert: memory scavenger futureSpace size equals: (newSpaceSize // 7 truncateTo: memory allocationUnit)
self assert: memory scavenger futureSpace size equals: (environmentBuilder newSpaceSize // 7 truncateTo: memory allocationUnit)
]

{ #category : #'tests-1-memory-initialization' }
Expand All @@ -78,19 +78,19 @@ VMSpurNewSpaceStructureTest >> testNewMemoryFutureSurvivorSpaceIsAtFutureSpaceSt
{ #category : #'tests-1-memory-initialization' }
VMSpurNewSpaceStructureTest >> testNewMemoryLimitIsSumOfSpaces [

self assert: memory getMemoryMap oldSpaceEnd equals: oldSpaceSize + newSpaceSize + stackSpaceSize + initialAddress + self primitiveTraceLogSize + methodCacheSize
self assert: memory getMemoryMap oldSpaceEnd equals: oldSpaceSize + environmentBuilder newSpaceSize + environmentBuilder stackSpaceSize + environmentBuilder codeInitialAddress + self primitiveTraceLogSize + environmentBuilder methodCacheSize
]

{ #category : #'tests-1-memory-initialization' }
VMSpurNewSpaceStructureTest >> testNewMemoryNewSpaceLimitIsNewSpaceStartPlusSize [

self assert: memory getMemoryMap newSpaceEnd equals: newSpaceSize + stackSpaceSize + initialAddress + self primitiveTraceLogSize + methodCacheSize
self assert: memory getMemoryMap newSpaceEnd equals: environmentBuilder newSpaceSize + environmentBuilder stackSpaceSize + environmentBuilder codeInitialAddress + self primitiveTraceLogSize + environmentBuilder methodCacheSize
]

{ #category : #'tests-1-memory-initialization' }
VMSpurNewSpaceStructureTest >> testNewMemoryNewSpaceStartIsStackSize [

self assert: memory getMemoryMap newSpaceStart equals: stackSpaceSize + initialAddress + self primitiveTraceLogSize + methodCacheSize
self assert: memory getMemoryMap newSpaceStart equals: environmentBuilder stackSpaceSize + environmentBuilder codeInitialAddress + self primitiveTraceLogSize + environmentBuilder methodCacheSize
]

{ #category : #'tests-1-memory-initialization' }
Expand All @@ -117,7 +117,7 @@ VMSpurNewSpaceStructureTest >> testNewMemoryPastSpaceIsAtTheStartOfNewSpace [
{ #category : #'tests-1-memory-initialization' }
VMSpurNewSpaceStructureTest >> testNewMemoryPastSpaceIsRoughlyOneSeventhOfNewSpace [

self assert: memory scavenger pastSpaceBytes equals: (newSpaceSize // 7 truncateTo: memory allocationUnit)
self assert: memory scavenger pastSpaceBytes equals: (environmentBuilder newSpaceSize // 7 truncateTo: memory allocationUnit)
]

{ #category : #'tests-2-instantiation' }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ VMSpurOldSpaceGarbageCollectorTest >> testAllocateObjectBiggerThanSizeOfFreeSpac
VMSpurOldSpaceGarbageCollectorTest >> testAllocateObjectWithFreeSpaceSize [

| anObjectOop slotsNumber |
slotsNumber := memory totalFreeOldSpace - (objectHeaderSize * 2) / memory wordSize.
slotsNumber := memory totalFreeOldSpace - (self objectHeaderSize * 2) / memory wordSize.

anObjectOop := self newOldSpaceObjectWithSlots: slotsNumber. "Big object have 2 wordSize of header"

Expand All @@ -97,7 +97,7 @@ VMSpurOldSpaceGarbageCollectorTest >> testAllocateObjectWithFreeSpaceSize [
VMSpurOldSpaceGarbageCollectorTest >> testAllocateObjectWithFreeSpaceSizeShouldBeZero [

| anObjectOop slotsNumber |
slotsNumber := memory totalFreeOldSpace - (objectHeaderSize * 2) / memory wordSize.
slotsNumber := memory totalFreeOldSpace - (self objectHeaderSize * 2) / memory wordSize.

anObjectOop := self newObjectWithSlots: slotsNumber. "Big object have 2 wordSize of header"

Expand Down

0 comments on commit 0b9c289

Please sign in to comment.