[squeak-dev] FFI: FFI-Tests-mt.24.mcz

commits at source.squeak.org commits at source.squeak.org
Tue May 4 10:23:33 UTC 2021


Marcel Taeumel uploaded a new version of FFI-Tests to project FFI:
http://source.squeak.org/FFI/FFI-Tests-mt.24.mcz

==================== Summary ====================

Name: FFI-Tests-mt.24
Author: mt
Time: 4 May 2021, 12:23:31.205881 pm
UUID: 1baeb097-81ea-2345-8bb8-b100fdb55983
Ancestors: FFI-Tests-mt.23

More tests. Complements FFI-Kernel-mt.128

=============== Diff against FFI-Tests-mt.23 ===============

Item was added:
+ ----- Method: ExternalStructureTests>>test01FromToInternal (in category 'tests - external data') -----
+ test01FromToInternal
+ 	"Access a sub-range in the external data. Internal memory will be copied if not accessed through a read-writer."
+ 	
+ 	| points portion |
+ 	points := FFITestPoint2 allocate: 5.
+ 	portion := points from: 2 to: 3.
+ 	self assert: portion getHandle isInternalMemory.
+ 	
+ 	portion withIndexDo: [:point :index | point setX: index+1 setY: index+1].
+ 	self "Forgot to use a read-writer..."
+ 		assert: { 0 at 0 . 0 at 0 . 0 at 0 . 0 at 0 . 0 at 0 }
+ 		equals: (points collect: [:each | each asPoint]).
+ 
+ 	portion withIndexDo: [:point :index | point setX: index+1 setY: index+1].
+ 	self "Forgot to use a read-writer early enough..."
+ 		assert: { 0 at 0 . 0 at 0 . 0 at 0 . 0 at 0 . 0 at 0 }
+ 		equals: (points collect: [:each | each asPoint]).
+ 
+ 	portion := points writer from: 2 to: 3.
+ 	portion withIndexDo: [:point :index | point setX: index+1 setY: index+1].
+ 	self
+ 		assert: { 0 at 0 . 2 at 2 . 3 at 3 . 0 at 0 . 0 at 0 }
+ 		equals: (points collect: [:each | each asPoint]).
+ 	
+ 	points zeroMemory.
+ 	portion := points reader from: 2 to: 3.
+ 	portion writer withIndexDo: [:point :index | point setX: index+1 setY: index+1].
+ 	self "Both #reader and #writer used. No worries."
+ 		assert: { 0 at 0 . 2 at 2 . 3 at 3 . 0 at 0 . 0 at 0 }
+ 		equals: (points collect: [:each | each asPoint]).!

Item was added:
+ ----- Method: ExternalStructureTests>>test02FromToExternal (in category 'tests - external data') -----
+ test02FromToExternal
+ 	"Access a sub-range in the external data. External memory will not be copied."
+ 	
+ 	| points portion |
+ 	points := heapObject := FFITestPoint2 allocateExternal: 5.
+ 	points zeroMemory.
+ 	
+ 	portion := points from: 2 to: 3.
+ 	self assert: portion getHandle isExternalAddress.
+ 	
+ 	portion withIndexDo: [:point :index | point setX: index+1 setY: index+1].
+ 	self
+ 		assert: { 0 at 0 . 2 at 2 . 3 at 3 . 0 at 0 . 0 at 0 }
+ 		equals: (points collect: [:each | each asPoint]).!

Item was added:
+ ----- Method: ExternalStructureTests>>test03CopyFromExternalToInternal (in category 'tests - external data') -----
+ test03CopyFromExternalToInternal
+ 
+ 	| points copy |
+ 	points := FFITestPoint2 allocateExternal: 5.
+ 	points zeroMemory.
+ 	self assert: points getHandle isExternalAddress.
+ 	
+ 	copy := points copyFrom: 2 to: 3.
+ 	self assert: copy getHandle isInternalMemory.
+ 	
+ 	"We need a writer to modify internal memory."
+ 	copy withIndexDo: [:point :index | point setX: index+1 setY: index+1].
+ 	self deny: { 2 at 2 . 3 at 3 } equals: (copy collect: [:each | each asPoint]).
+ 	copy writer withIndexDo: [:point :index | point setX: index+1 setY: index+1].
+ 	self assert: { 2 at 2 . 3 at 3 } equals: (copy collect: [:each | each asPoint]).
+ 
+ 	"Check that we did not touch the external memory."
+ 	self
+ 		assert: { 0 at 0 . 0 at 0 . 0 at 0 . 0 at 0 . 0 at 0 }
+ 		equals: (points collect: [:each | each asPoint]).!

Item was added:
+ ----- Method: ExternalStructureTests>>test04CopyFromInternalToInternal (in category 'tests - external data') -----
+ test04CopyFromInternalToInternal
+ 
+ 	| points copy |
+ 	points := FFITestPoint2 allocate: 5.
+ 	self assert: points getHandle isInternalMemory.
+ 	
+ 	copy := points copyFrom: 2 to: 3.
+ 	self assert: copy getHandle isInternalMemory.
+ 	
+ 	"We need a writer to modify internal memory."
+ 	copy withIndexDo: [:point :index | point setX: index+1 setY: index+1].
+ 	self deny: { 2 at 2 . 3 at 3 } equals: (copy collect: [:each | each asPoint]).
+ 	copy writer withIndexDo: [:point :index | point setX: index+1 setY: index+1].
+ 	self assert: { 2 at 2 . 3 at 3 } equals: (copy collect: [:each | each asPoint]).
+ 
+ 	"Check that we did not touch the original."
+ 	self
+ 		assert: { 0 at 0 . 0 at 0 . 0 at 0 . 0 at 0 . 0 at 0 }
+ 		equals: (points collect: [:each | each asPoint]).!

Item was changed:
  ----- Method: ExternalStructureTests>>test06AccessingTypeAliasForAtomic (in category 'tests') -----
  test06AccessingTypeAliasForAtomic
  
  	| char |
  	self should: [FFITestCharAlias new] raise: Error.
  	char := FFITestCharAlias fromHandle: $C.
  	self assert: $C equals: char value.	
  	char value: $A.	
  	self assert: $A equals: char value.
  	char zeroMemory.
+ 	self assert: 0 equals: char value asInteger.!
- 	self assert: $0 equals: char value.!



More information about the Squeak-dev mailing list