// 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>());
}
