// 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 struct definitions.
import 'function_structs_by_value_generated_test.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>());
}
