/*
 * 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.
 */
/**
 * @assertion Struct()
 *  The supertype of all FFI struct types.
 *
 *  FFI struct types should extend this class and declare fields corresponding
 *  to the underlying native structure.
 *
 * @description Checks that FFI struct types should extend this class and
 * declare fields corresponding to the underlying native structure. Test
 * incomplete data
 * @author sgrekhov@unipro.ru
 */
import "dart:ffi";
import "package:ffi/ffi.dart";
import "../ffi_utils.dart";
import "../../../Utils/expect.dart";

class Coord extends Struct {
  @Double()
  external double x;
  @Double()
  external double y;
  // Don't create field for Pointer to next
}

// Native C function
typedef TransposeCoordinateCFunc = Pointer<Coord> Function(Pointer<Coord>);
// Dart function
typedef TransposeCoordinateDartFunc = Pointer<Coord> Function(Pointer<Coord>);

void main() {
  final dl = new DynamicLibrary.open(libPath(TEST_FUNCTIONS_LIB));
  final TransposeCoordinateDartFunc f = dl
      .lookup<NativeFunction<TransposeCoordinateCFunc>>('TransposeCoordinate')
      .asFunction();
  Pointer<Coord> c1 = calloc<Coord>();
  try {
    c1.ref.x = 1;
    c1.ref.y = 2;
    f(c1);
    Expect.equals(11, c1.ref.x);
    Expect.equals(12, c1.ref.y);
  } finally {
    calloc.free(c1);
  }
}
