|  | // Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file | 
|  | // for details. All rights reserved. Use of this source code is governed by a | 
|  | // BSD-style license that can be found in the LICENSE file. | 
|  | // | 
|  | // SharedObjects=ffi_test_functions | 
|  |  | 
|  | import 'dart:ffi'; | 
|  |  | 
|  | import "package:expect/expect.dart"; | 
|  |  | 
|  | import 'dylib_utils.dart'; | 
|  |  | 
|  | // Reuse compound definitions. | 
|  | import 'function_structs_by_value_generated_compounds.dart'; | 
|  |  | 
|  | void main() { | 
|  | testSizeOfC(); | 
|  | testSizeOfDart(); | 
|  | } | 
|  |  | 
|  | final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions"); | 
|  |  | 
|  | final sizeOfStruct3BytesPackedInt = ffiTestFunctions | 
|  | .lookupFunction<Uint64 Function(), int Function()>( | 
|  | "SizeOfStruct3BytesPackedInt", | 
|  | ); | 
|  |  | 
|  | void testSizeOfC() { | 
|  | Expect.equals(3, sizeOfStruct3BytesPackedInt()); | 
|  | } | 
|  |  | 
|  | void testSizeOfDart() { | 
|  | // No packing needed to get to 3 bytes. | 
|  | Expect.equals(3, sizeOf<Struct3BytesHomogeneousUint8>()); | 
|  |  | 
|  | // Contents 3 bytes, but alignment forces it to be 4 bytes. | 
|  | Expect.equals(4, sizeOf<Struct3BytesInt2ByteAligned>()); | 
|  |  | 
|  | // Alignment gets the same content back to 3 bytes. | 
|  | Expect.equals(3, sizeOf<Struct3BytesPackedInt>()); | 
|  | } |