[squeak-dev] The Trunk: KernelTests-eem.377.mcz
commits at source.squeak.org
commits at source.squeak.org
Thu Mar 12 01:50:56 UTC 2020
Eliot Miranda uploaded a new version of KernelTests to project The Trunk:
http://source.squeak.org/trunk/KernelTests-eem.377.mcz
==================== Summary ====================
Name: KernelTests-eem.377
Author: eem
Time: 11 March 2020, 6:50:54.691022 pm
UUID: ffe697e5-da6e-4c3c-98ac-fd190f0169eb
Ancestors: KernelTests-eem.376
WriteBarrierTest
Add a test for become.
Add a test for updating multiple inst vars in a single method.
Extend several of the tests to include additional testing of being able to separate retryModificationNoresume from resume
=============== Diff against KernelTests-eem.376 ===============
Item was added:
+ ----- Method: WriteBarrierTest>>testAttemptToMutateLiterals (in category 'tests - object') -----
+ testAttemptToMutateLiterals
+ | guineaPigs |
+ guineaPigs := {#[1 2 3] . #(1 2 3) }.
+ guineaPigs do:
+ [ :guineaPig |
+ self should: [guineaPig at: 1 put: 4]
+ raise: ModificationForbidden].
+
+ self should: [guineaPigs first become: guineaPigs second ]
+ raise: ModificationForbidden.
+
+ self should: [ByteString adoptInstance: guineaPigs first]
+ raise: ModificationForbidden.
+
+ self should: [WeakArray adoptInstance: guineaPigs last]
+ raise: ModificationForbidden!
Item was added:
+ ----- Method: WriteBarrierTest>>testBecomeReadOnly (in category 'tests - object') -----
+ testBecomeReadOnly
+ | readOnlyArrays readOnlyByteArrays |
+ readOnlyArrays := (1 to: 3) collect: [:n| (0 to: n) asArray beReadOnlyObject; yourself].
+ "N.B. if the targets are read-only this fails, which is correct for elementsForwardIdentityTo: since copyHash is implicitly true;
+ we need to write a test for a putative elementsForwardIdentityNoCopyHashTo:"
+ readOnlyByteArrays := (1 to: 3) collect: [:n| (0 to: n) asByteArray" beReadOnlyObject; yourself"].
+ self should: [readOnlyArrays elementsForwardIdentityTo: readOnlyByteArrays]
+ raise: ModificationForbidden.
+ [readOnlyArrays elementsForwardIdentityTo: readOnlyByteArrays]
+ on: ModificationForbidden
+ do: [:ex|
+ false
+ ifTrue: "This fails, but should succeed. I *think* it's to do with catching signals when resignalling"
+ [(ex mirror detect: [:element| element isReadOnlyObject] ifNone: []) ifNotNil:
+ [:readOnlyObj| readOnlyObj beWritableObject]]
+ ifFalse:
+ [ex mirror do: [:element| element beWritableObject]].
+ ex retryModification].
+ self assert: (readOnlyArrays allSatisfy: [:array| array class == ByteArray])!
Item was changed:
----- Method: WriteBarrierTest>>testMutateByteArrayUsingByteAtPut (in category 'tests - object') -----
testMutateByteArrayUsingByteAtPut
| guineaPig |
guineaPig := ByteArray new: 5.
guineaPig beReadOnlyObject.
self
should: [ guineaPig byteAt: 1 put: 12 ]
raise: ModificationForbidden.
[ guineaPig byteAt: 1 put: 12 ]
on: ModificationForbidden
do: [:modification |
self assert: modification fieldIndex equals: 1.
modification object beWritableObject.
modification retryModification ].
+ self assert: guineaPig first equals: 12.
+ self deny: guineaPig isReadOnlyObject.
+
+ guineaPig beReadOnlyObject.
+ self
+ should: [ guineaPig byteAt: 1 put: 13 ]
+ raise: ModificationForbidden.
+
+ [ guineaPig byteAt: 1 put: 13 ]
+ on: ModificationForbidden
+ do: [ :modification |
+ modification object beWritableObject.
+ modification retryModificationNoResume.
+ modification object beReadOnlyObject.
+ modification resume].
+
+ self assert: guineaPig first equals: 13.
+ self assert: guineaPig isReadOnlyObject!
- self assert: guineaPig first equals: 12!
Item was changed:
----- Method: WriteBarrierTest>>testMutateByteArrayUsingDoubleAtPut (in category 'tests - object') -----
testMutateByteArrayUsingDoubleAtPut
| guineaPig |
guineaPig := ByteArray new: 8.
guineaPig beReadOnlyObject.
self
should: [ guineaPig doubleAt: 1 put: (2 raisedTo: 65) asFloat ]
raise: ModificationForbidden.
[ guineaPig doubleAt: 1 put: (2 raisedTo: 65) asFloat ]
on: ModificationForbidden
do: [:modification |
self assert: modification fieldIndex equals: 1.
modification object beWritableObject.
modification retryModification ].
+ self assert: guineaPig first equals: (2 raisedTo: 65) asFloat.
+ self deny: guineaPig isReadOnlyObject.
+
+ guineaPig beReadOnlyObject.
+ self
+ should: [ guineaPig doubleAt: 1 put: (2 raisedTo: 64) asFloat ]
+ raise: ModificationForbidden.
+
+ [ guineaPig doubleAt: 1 put: (2 raisedTo: 64) asFloat ]
+ on: ModificationForbidden
+ do: [ :modification |
+ modification object beWritableObject.
+ modification retryModificationNoResume.
+ modification object beReadOnlyObject.
+ modification resume].
+
+ self assert: guineaPig first equals: (2 raisedTo: 64) asFloat.
+ self assert: guineaPig isReadOnlyObject!
- self assert: guineaPig first equals: (2 raisedTo: 65) asFloat!
Item was changed:
----- Method: WriteBarrierTest>>testMutateByteArrayUsingFloatAtPut (in category 'tests - object') -----
testMutateByteArrayUsingFloatAtPut
| guineaPig |
guineaPig := ByteArray new: 5.
guineaPig beReadOnlyObject.
self
should: [ guineaPig floatAt: 1 put: 1.0 ]
raise: ModificationForbidden.
[ guineaPig floatAt: 1 put: 1.0 ]
on: ModificationForbidden
do: [:modification |
self assert: modification fieldIndex equals: 1.
modification object beWritableObject.
modification retryModification ].
+ self assert: guineaPig first equals: 1.0.
+ self deny: guineaPig isReadOnlyObject.
+
+ guineaPig beReadOnlyObject.
+
+ self
+ should: [ guineaPig floatAt: 1 put: 2.0 ]
+ raise: ModificationForbidden.
+
+ [ guineaPig floatAt: 1 put: 2.0 ]
+ on: ModificationForbidden
+ do: [:modification |
+ self assert: modification fieldIndex equals: 1.
+ modification object beWritableObject.
+ modification retryModificationNoResume.
+ modification object beReadOnlyObject.
+ modification resume].
+
+ self assert: guineaPig first equals: 2.0.
+ self assert: guineaPig isReadOnlyObject!
- self assert: guineaPig first equals: 1.0!
Item was changed:
----- Method: WriteBarrierTest>>testMutateByteStringyUsingAtPut (in category 'tests - object') -----
testMutateByteStringyUsingAtPut
| guineaPig |
guineaPig := ByteString new: 5.
guineaPig beReadOnlyObject.
self
should: [ guineaPig at: 1 put: $h ]
raise: ModificationForbidden.
[ guineaPig at: 1 put: $h ]
on: ModificationForbidden
do: [:modification |
self assert: modification fieldIndex equals: 1.
modification object beWritableObject.
modification retryModification ].
+ self assert: guineaPig first equals: $h.
+ self deny: guineaPig isReadOnlyObject.
+
+ guineaPig beReadOnlyObject.
+
+ self
+ should: [ guineaPig at: 1 put: $g ]
+ raise: ModificationForbidden.
+
+ [ guineaPig at: 1 put: $g ]
+ on: ModificationForbidden
+ do: [:modification |
+ self assert: modification fieldIndex equals: 1.
+ modification object beWritableObject.
+ modification retryModificationNoResume.
+ modification object beReadOnlyObject.
+ modification resume ].
+
+ self assert: guineaPig first equals: $g.
+ self assert: guineaPig isReadOnlyObject!
- self assert: guineaPig first equals: $h!
Item was changed:
----- Method: WriteBarrierTest>>testMutateObjectClassViaAdoption (in category 'tests - object') -----
testMutateObjectClassViaAdoption
| guineaPig |
guineaPig := WriteBarrierStub new.
guineaPig beReadOnlyObject.
self
should: [ WriteBarrierAnotherStub adoptInstance: guineaPig ]
raise: ModificationForbidden.
[ WriteBarrierAnotherStub adoptInstance: guineaPig ]
on: ModificationForbidden
do: [ :modification |
modification object beWritableObject.
modification retryModification ].
+ self assert: guineaPig class equals: WriteBarrierAnotherStub.
+ self deny: guineaPig isReadOnlyObject.
+
+ guineaPig beReadOnlyObject.
+ self
+ should: [ WriteBarrierAnotherStub adoptInstance: guineaPig ]
+ raise: ModificationForbidden.
+
+ [ WriteBarrierAnotherStub adoptInstance: guineaPig ]
+ on: ModificationForbidden
+ do: [ :modification |
+ modification object beWritableObject.
+ modification retryModificationNoResume.
+ modification object beReadOnlyObject.
+ modification resume].
+
+ self assert: guineaPig class equals: WriteBarrierAnotherStub.
+ self assert: guineaPig isReadOnlyObject!
- self assert: guineaPig class equals: WriteBarrierAnotherStub!
Item was changed:
----- Method: WriteBarrierTest>>testMutateObjectInstVarUsingAtPut (in category 'tests - object') -----
testMutateObjectInstVarUsingAtPut
| guineaPig |
guineaPig := Array new: 5.
guineaPig beReadOnlyObject.
self
should: [ guineaPig at: 1 put: #test ]
raise: ModificationForbidden.
[ guineaPig at: 1 put: #test ]
on: ModificationForbidden
do: [:modification |
self assert: modification fieldIndex equals: 1.
modification object beWritableObject.
modification retryModification ].
+ self assert: guineaPig first equals: #test.
+ self deny: guineaPig isReadOnlyObject.
+
+ guineaPig beReadOnlyObject.
+
+ self
+ should: [ guineaPig at: 1 put: #test ]
+ raise: ModificationForbidden.
+
+ [ guineaPig at: 1 put: #test ]
+ on: ModificationForbidden
+ do: [:modification |
+ self assert: modification fieldIndex equals: 1.
+ modification object beWritableObject.
+ modification retryModificationNoResume.
+ modification object beReadOnlyObject.
+ modification resume ].
+
+ self assert: guineaPig first equals: #test.
+ self assert: guineaPig isReadOnlyObject
+ !
- self assert: guineaPig first equals: #test!
Item was added:
+ ----- Method: WriteBarrierTest>>testRetryingPointInstVarModification (in category 'tests - object') -----
+ testRetryingPointInstVarModification
+ | guineaPig labRat |
+ guineaPig := 1 at 2.
+ labRat := guineaPig copy bitShiftPoint: 3.
+ guineaPig beReadOnlyObject.
+
+ [ guineaPig bitShiftPoint: 3 ]
+ on: ModificationForbidden
+ do: [:err |
+ guineaPig beWritableObject.
+ err retryModification ].
+
+ self assert: guineaPig equals: labRat.
+ self deny: guineaPig isReadOnlyObject.
+
+ guineaPig bitShiftPoint: -3; beReadOnlyObject.
+ self assert: guineaPig equals: 1 at 2.
+
+ [ guineaPig bitShiftPoint: 3 ]
+ on: ModificationForbidden
+ do: [:err |
+ guineaPig beWritableObject.
+ err retryModificationNoResume.
+ guineaPig beReadOnlyObject.
+ err resume ].
+
+ self assert: guineaPig equals: labRat.
+ self assert: guineaPig isReadOnlyObject!
More information about the Squeak-dev
mailing list
|