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

commits at source.squeak.org commits at source.squeak.org
Thu May 6 16:14:29 UTC 2021


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

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

Name: FFI-Tests-mt.28
Author: mt
Time: 6 May 2021, 6:14:29.484981 pm
UUID: 5f1d805b-3654-e04c-85d5-efb697127cbf
Ancestors: FFI-Tests-mt.27

More tests. Favor #allocateExternal over #externalNew. No need to #zeroMemory in several tests. Complements FFI-Kernel-mt.136.

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

Item was changed:
  ----- Method: ExternalStructureTests>>test02CopyStructureFromExternal (in category 'tests - external structure') -----
  test02CopyStructureFromExternal
  
  	| original copy |
+ 	original := heapObject := FFITestPoint2 allocateExternal.
- 	original := heapObject := FFITestPoint2 externalNew.
  	original setX: 1 setY: 2.
  	
  	copy := original copy.
  	self assert: copy getHandle isInternalMemory.
  	
  	copy setX: 3 setY: 4.
  	self assert: 1 at 2 equals: original asPoint.
  	self assert: 3 at 4 equals: copy asPoint.!

Item was changed:
  ----- 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 changed:
  ----- 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 changed:
  ----- Method: ExternalStructureTests>>test04AccessingInternalMemory (in category 'tests') -----
  test04AccessingInternalMemory
  	"Check whether we can use a ByteArrayWriter to fill structures."
  	
  	| composite |
+ 	composite := FFITestSUfdUdSi2 allocate.
- 	composite := FFITestSUfdUdSi2 new.
  
  	self assert: composite ~~ composite writer.
  
  	self assert: 0.0 equals: composite ufd1 f1.
  	composite ufd1 f1: 3.5.
  	self deny: 3.5 equals: composite ufd1 f1.
  	composite writer ufd1 f1: 3.5.
  	self assert: 3.5 equals: composite ufd1 f1.
  
  	self assert: 0 equals: composite udSii2 sii1 i1.
  	composite udSii2 sii1 i1: 42.
  	self deny: 42 equals: composite udSii2 sii1 i1.
  	composite writer udSii2 sii1 i1: 42.
  	self assert: 42 equals: composite udSii2 sii1 i1.!

Item was changed:
  ----- Method: ExternalStructureTests>>test05AccessingExternalMemory (in category 'tests') -----
  test05AccessingExternalMemory
  	"Check whether we will stick to the ExternalAddress to fill structures."
  
  	| composite |
+ 	composite := heapObject := FFITestSUfdUdSi2 allocateExternal.
- 	composite := heapObject := FFITestSUfdUdSi2 externalNew.
- 	heapObject zeroMemory.
  
  	self assert: composite == composite writer.
  
  	self assert: 0.0 equals: composite ufd1 f1.
  	composite ufd1 f1: 3.5.
  	self assert: 3.5 equals: composite ufd1 f1.
  
  	self assert: 0 equals: composite udSii2 sii1 i1.
  	composite udSii2 sii1 i1: 42.
  	self assert: 42 equals: composite udSii2 sii1 i1.!

Item was changed:
  ----- Method: ExternalStructureTests>>test06AccessingTypeAliasForAtomic (in category 'tests') -----
  test06AccessingTypeAliasForAtomic
  
  	| char |
+ 	char := FFITestCharAlias new.
+ 	self assert: 0 equals: char value asInteger.
- 	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.!

Item was changed:
  ----- Method: ExternalStructureTests>>test07AccessingArrays (in category 'tests') -----
  test07AccessingArrays
  
  	| data |
+ 	data := FFITestSdA5i allocate.
- 	data := FFITestSdA5i new.
  	self assert: data a5i2 first equals: 0.
  	data writer a5i2 at: 1 put: 42.
  	self assert: data a5i2 first equals: 42.
  	
+ 	data := heapObject := FFITestSdA5i allocateExternal.
- 	data := heapObject := FFITestSdA5i externalNew.
- 	data zeroMemory.
  	self assert: data a5i2 first equals: 0.
  	data a5i2 at: 1 put: 42.
  	self assert: data a5i2 first equals: 42.!

Item was changed:
  TestCase subclass: #ExternalTypeTests
+ 	instanceVariableNames: 'heapObject'
- 	instanceVariableNames: ''
  	classVariableNames: ''
  	poolDictionaries: 'ExternalType'
  	category: 'FFI-Tests'!

Item was added:
+ ----- Method: ExternalTypeTests>>tearDown (in category 'running') -----
+ tearDown
+ 
+ 	heapObject ifNotNil: [heapObject free].!

Item was added:
+ ----- Method: ExternalTypeTests>>testAllocateAtomics (in category 'tests') -----
+ testAllocateAtomics
+ 	
+ 	self should: [ExternalType void allocate] raise: Error.
+ 	self assert: false equals: ExternalType bool allocate.
+ 
+ 	self assert: 0 equals: ExternalType int8_t "sbyte" allocate.
+ 	self assert: 0 equals: ExternalType uint8_t "byte" allocate.
+ 
+ 	self assert: 0 equals: ExternalType uint16_t "ushort" allocate.
+ 	self assert: 0 equals: ExternalType int16_t "short" allocate.
+ 
+ 	self assert: 0 equals: ExternalType uint32_t "ulong" allocate.
+ 	self assert: 0 equals: ExternalType int32_t "long" allocate.
+ 
+ 	self assert: 0 equals: ExternalType uint64_t "ulonglong" allocate.
+ 	self assert: 0 equals: ExternalType int64_t "longlong" allocate.
+ 
+ 	self assert: Character null equals: ExternalType schar allocate.
+ 	self assert: Character null equals: ExternalType char allocate.
+ 
+ 	self assert: 0.0 equals: ExternalType float allocate.
+ 	self assert: 0.0 equals: ExternalType double allocate.!

Item was added:
+ ----- Method: ExternalTypeTests>>testAllocateAtomicsExternal (in category 'tests') -----
+ testAllocateAtomicsExternal
+ 	
+ 	self should: [ExternalType void allocateExternal] raise: Error.
+ 	self assert: false equals: ExternalType bool allocateExternal.
+ 
+ 	self assert: 0 equals: ExternalType int8_t "sbyte" allocateExternal.
+ 	self assert: 0 equals: ExternalType uint8_t "byte" allocateExternal.
+ 
+ 	self assert: 0 equals: ExternalType uint16_t "ushort" allocateExternal.
+ 	self assert: 0 equals: ExternalType int16_t "short" allocateExternal.
+ 
+ 	self assert: 0 equals: ExternalType uint32_t "ulong" allocateExternal.
+ 	self assert: 0 equals: ExternalType int32_t "long" allocateExternal.
+ 
+ 	self assert: 0 equals: ExternalType uint64_t "ulonglong" allocateExternal.
+ 	self assert: 0 equals: ExternalType int64_t "longlong" allocateExternal.
+ 
+ 	self assert: Character null equals: ExternalType schar allocateExternal.
+ 	self assert: Character null equals: ExternalType char allocateExternal.
+ 
+ 	self assert: 0.0 equals: ExternalType float allocateExternal.
+ 	self assert: 0.0 equals: ExternalType double allocateExternal.!

Item was added:
+ ----- Method: ExternalTypeTests>>testAllocateStructs (in category 'tests') -----
+ testAllocateStructs
+ 	
+ 	| struct |
+ 	struct := FFITestPoint2 allocate.
+ 	self assert: 0 equals: struct x.
+ 	self assert: 0 equals: struct y.	
+ 
+ 	struct := FFITestSd2 allocate.
+ 	self assert: 0.0 equals: struct d1.
+ 	self assert: 0.0 equals: struct d2.
+ 	
+ 	struct := FFITestSsSsf allocate.
+ 	self assert: 0 equals: struct s1.
+ 	self assert: 0 equals: struct ssf2 s1.
+ 	self assert: 0.0 equals: struct ssf2 f2.
+ 
+ 	struct := FFITestUfd allocate.
+ 	self assert: 0.0 equals: struct d1.
+ 	self assert: 0.0 equals: struct f1.!

Item was added:
+ ----- Method: ExternalTypeTests>>testAllocateStructsExternal (in category 'tests') -----
+ testAllocateStructsExternal
+ 	
+ 	| struct |
+ 	struct := heapObject := FFITestPoint2 allocateExternal.
+ 	self assert: 0 equals: struct x.
+ 	self assert: 0 equals: struct y.	
+ 
+ 	struct := heapObject := FFITestSd2 allocateExternal.
+ 	self assert: 0.0 equals: struct d1.
+ 	self assert: 0.0 equals: struct d2.
+ 	
+ 	struct := heapObject := FFITestSsSsf allocateExternal.
+ 	self assert: 0 equals: struct s1.
+ 	self assert: 0 equals: struct ssf2 s1.
+ 	self assert: 0.0 equals: struct ssf2 f2.
+ 
+ 	struct := heapObject := FFITestUfd allocateExternal.
+ 	self assert: 0.0 equals: struct d1.
+ 	self assert: 0.0 equals: struct f1.!

Item was changed:
  ----- Method: FFIPluginTests>>testSumStructSUfdUdsi2 (in category 'tests - structure') -----
  testSumStructSUfdUdsi2
+ 	"Sum up the double parts of two unions in a struct."
- 	"Sum up the double parts of two unions in a struct. We have to malloc because we cannot (yet?) share parts of byte arrays between structures."
  	
  	| sUfdUdsi2 sum |
+ 	sUfdUdsi2 := heapObject := FFITestSUfdUdSi2 allocateExternal.
- 	sUfdUdsi2 := heapObject := FFITestSUfdUdSi2 externalNew.
  	sUfdUdsi2 ufd1 d1: 123.456.
  	sUfdUdsi2 udSii2 d1: 456.123.
  	sum := self invoke: 'ffiTestSumSUfdUdSi2_d' with: sUfdUdsi2.
  	self assert: 123.456 + 456.123 equals: sum.!

Item was changed:
  ----- Method: FFIPluginTests>>testSumStructSUfdUfi (in category 'tests - structure') -----
  testSumStructSUfdUfi
+ 	"Sum up the float parts of two unions in a struct."
- 	"Sum up the float parts of two unions in a struct. We have to malloc because we cannot (yet?) share parts of byte arrays between structures."
  
  	| sUfdUdsi2 result expected |
+ 	sUfdUdsi2 := heapObject := FFITestSUfdUfi allocateExternal.
- 	sUfdUdsi2 := heapObject := FFITestSUfdUfi externalNew.
  	sUfdUdsi2 ufd1 f1: 123.456.
  	sUfdUdsi2 ufi2 f1: 456.123.
  	result := self invoke: 'ffiTestSumSUfdUfi_f' with: sUfdUdsi2.
  	expected := 123.456 + 456.123.
  	self assert: (result between: expected - 0.0005 and: expected + 0.0005).!



More information about the Squeak-dev mailing list