[squeak-dev] FFI: FFI-Tests-mt.38.mcz
commits at source.squeak.org
commits at source.squeak.org
Sun May 16 05:50:27 UTC 2021
Marcel Taeumel uploaded a new version of FFI-Tests to project FFI:
http://source.squeak.org/FFI/FFI-Tests-mt.38.mcz
==================== Summary ====================
Name: FFI-Tests-mt.38
Author: mt
Time: 16 May 2021, 7:50:25.29658 am
UUID: b32d1ecd-c367-cd43-907d-e0a00c06d6b5
Ancestors: FFI-Tests-mt.37
Complements FFI-Kernel-mt.151
=============== Diff against FFI-Tests-mt.37 ===============
Item was changed:
----- Method: FFIAllocateTests>>test04GlobalVariableInArray (in category 'tests') -----
test04GlobalVariableInArray
"If you happen to have to address to a global variable you can use a type alias or just external data for it. See ExternalObject class >> #fromHandle:."
| global |
global := self allocate: ExternalType int32_t size: 1.
+ self assert: global isFFIArray.
- self assert: global isArray.
self assert: 0 equals: global value.
global value: 42.
self assert: 42 equals: global value.!
Item was changed:
----- Method: FFIAllocateTests>>test10ArrayClasses (in category 'tests - array') -----
test10ArrayClasses
"For integer and float types, allocate arrays and check for specific array classes. Then construct a conventional byte array for an external data structure. A copy should also convert into a specific array class with the same contents."
ExternalType useArrayClassesDuring: [
ExternalType atomicTypes do: [:contentType |
(contentType isIntegerType
or: [contentType isFloatType]
or: [contentType isCharType]) ifTrue: [
| array arrayType data copy |
array := self allocate: contentType size: 5.
arrayType := array externalType.
+ self assert: array isFFIArray.
- self assert: array isArray.
self assert: 5 equals: array size.
self assert: array byteSize equals: arrayType byteSize.
contentType = ExternalType signedChar ifFalse: [
self flag: #discuss. "mt: What is signedChar even for?"
self assert: contentType equals: array contentType].
self deny: array isNull.
self deny: (array isKindOf: ExternalData).
self assert: array equals: array getHandle.
self shouldnt: [array at: 1 put: contentType allocate] raise: Error.
self shouldnt: [array zeroMemory] raise: Error.
self should: [array setContentType: ExternalType byte] raise: Error.
self should: [array setSize: 42] raise: Error.
data := ExternalData
fromHandle: (ByteArray new: arrayType byteSize)
type: arrayType.
copy := data copy. "From external data into raw-bits array."
self deny: array equals: data.
self assert: array equals: copy. ]]].!
Item was changed:
----- Method: FFIPluginTests>>testArrayResultWithPoint (in category 'tests - arrays') -----
testArrayResultWithPoint
"Test returning of pointers to arrays"
| pt1 pt2 pt3 |
pt1 := FFITestPoint4 new.
pt1 x: 1. pt1 y: 2. pt1 z: 3. pt1 w: 4.
pt2 := FFITestPoint4 new.
pt2 x: 5. pt2 y: 6. pt2 z: 7. pt2 w: 8.
pt3 := heapObject := FFITestLibrary ffiTestArrayResultWith: pt1 with: pt2.
+ self assert: pt3 isFFIArray.
- self assert: pt3 isArray.
pt3 := pt3 value.
self assert: pt3 x = 6.
self assert: pt3 y = 8.
self assert: pt3 z = 10.
self assert: pt3 w = 12.!
Item was changed:
----- Method: FFIPluginTests>>testArrayResultWithString (in category 'tests - arrays') -----
testArrayResultWithString
"Note that the result does not have to be free'd because the FFITestLibrary is just passing along a Smalltalkg string. I think."
| string result |
string := 'Hello Squeak!!'.
result := FFITestLibrary ffiTestArrayResultWithString: string.
+ self assert: result isFFIArray.
- self assert: result isArray.
ExternalData allowDetectForUnknownSizeDuring: [
self assert: string equals: result fromCString].!
More information about the Squeak-dev
mailing list
|