// Copyright (c) 2024, 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.
//
// This file has been automatically generated. Please do not edit it manually.
// Generated by tests/ffi/generator/address_of_test_generator.dart.
//
// SharedObjects=ffi_test_functions
// VMOptions=
// VMOptions=--deterministic --optimization-counter-threshold=90
// VMOptions=--use-slow-path
// VMOptions=--use-slow-path --stacktrace-every=100

// ignore_for_file: unused_import

import 'dart:ffi';
import 'dart:typed_data';

import 'package:expect/expect.dart';

import 'address_of_generated_shared.dart';
import 'address_of_shared.dart';
import 'dylib_utils.dart';

final ffiTestFunctions = dlopenPlatformSpecific('ffi_test_functions');

@Native<Int8 Function(Pointer<Int8>, Size)>(
    symbol: 'TakeInt8Pointer', isLeaf: true)
external int takeInt8Pointer(Pointer<Int8> pointer, int length);

@Native<
    Int8 Function(
      Pointer<Int8>,
      Pointer<Int8>,
      Pointer<Int8>,
      Pointer<Int8>,
      Pointer<Int8>,
      Pointer<Int8>,
      Pointer<Int8>,
      Pointer<Int8>,
      Pointer<Int8>,
      Pointer<Int8>,
      Pointer<Int8>,
      Pointer<Int8>,
      Pointer<Int8>,
      Pointer<Int8>,
      Pointer<Int8>,
      Pointer<Int8>,
      Pointer<Int8>,
      Pointer<Int8>,
      Pointer<Int8>,
      Pointer<Int8>,
    )>(symbol: 'TakeInt8PointerMany', isLeaf: true)
external int takeInt8PointerMany(
  Pointer<Int8> pointer0,
  Pointer<Int8> pointer1,
  Pointer<Int8> pointer2,
  Pointer<Int8> pointer3,
  Pointer<Int8> pointer4,
  Pointer<Int8> pointer5,
  Pointer<Int8> pointer6,
  Pointer<Int8> pointer7,
  Pointer<Int8> pointer8,
  Pointer<Int8> pointer9,
  Pointer<Int8> pointer10,
  Pointer<Int8> pointer11,
  Pointer<Int8> pointer12,
  Pointer<Int8> pointer13,
  Pointer<Int8> pointer14,
  Pointer<Int8> pointer15,
  Pointer<Int8> pointer16,
  Pointer<Int8> pointer17,
  Pointer<Int8> pointer18,
  Pointer<Int8> pointer19,
);

Int8List makeInt8List(int length) {
  final typedData = Int8List(length);
  for (int i = 0; i < length; i++) {
    final value = i % 2 == 0 ? i : -i;
    typedData[i] = value;
  }
  return typedData;
}

int makeExpectedResultInt8(int start, int end) {
  int expectedResult = 0;
  for (int i = start; i < end; i++) {
    final value = i % 2 == 0 ? i : -i;
    expectedResult += value;
  }
  return expectedResult;
}

@Native<Int16 Function(Pointer<Int16>, Size)>(
    symbol: 'TakeInt16Pointer', isLeaf: true)
external int takeInt16Pointer(Pointer<Int16> pointer, int length);

@Native<
    Int16 Function(
      Pointer<Int16>,
      Pointer<Int16>,
      Pointer<Int16>,
      Pointer<Int16>,
      Pointer<Int16>,
      Pointer<Int16>,
      Pointer<Int16>,
      Pointer<Int16>,
      Pointer<Int16>,
      Pointer<Int16>,
      Pointer<Int16>,
      Pointer<Int16>,
      Pointer<Int16>,
      Pointer<Int16>,
      Pointer<Int16>,
      Pointer<Int16>,
      Pointer<Int16>,
      Pointer<Int16>,
      Pointer<Int16>,
      Pointer<Int16>,
    )>(symbol: 'TakeInt16PointerMany', isLeaf: true)
external int takeInt16PointerMany(
  Pointer<Int16> pointer0,
  Pointer<Int16> pointer1,
  Pointer<Int16> pointer2,
  Pointer<Int16> pointer3,
  Pointer<Int16> pointer4,
  Pointer<Int16> pointer5,
  Pointer<Int16> pointer6,
  Pointer<Int16> pointer7,
  Pointer<Int16> pointer8,
  Pointer<Int16> pointer9,
  Pointer<Int16> pointer10,
  Pointer<Int16> pointer11,
  Pointer<Int16> pointer12,
  Pointer<Int16> pointer13,
  Pointer<Int16> pointer14,
  Pointer<Int16> pointer15,
  Pointer<Int16> pointer16,
  Pointer<Int16> pointer17,
  Pointer<Int16> pointer18,
  Pointer<Int16> pointer19,
);

Int16List makeInt16List(int length) {
  final typedData = Int16List(length);
  for (int i = 0; i < length; i++) {
    final value = i % 2 == 0 ? i : -i;
    typedData[i] = value;
  }
  return typedData;
}

int makeExpectedResultInt16(int start, int end) {
  int expectedResult = 0;
  for (int i = start; i < end; i++) {
    final value = i % 2 == 0 ? i : -i;
    expectedResult += value;
  }
  return expectedResult;
}

@Native<Int32 Function(Pointer<Int32>, Size)>(
    symbol: 'TakeInt32Pointer', isLeaf: true)
external int takeInt32Pointer(Pointer<Int32> pointer, int length);

@Native<
    Int32 Function(
      Pointer<Int32>,
      Pointer<Int32>,
      Pointer<Int32>,
      Pointer<Int32>,
      Pointer<Int32>,
      Pointer<Int32>,
      Pointer<Int32>,
      Pointer<Int32>,
      Pointer<Int32>,
      Pointer<Int32>,
      Pointer<Int32>,
      Pointer<Int32>,
      Pointer<Int32>,
      Pointer<Int32>,
      Pointer<Int32>,
      Pointer<Int32>,
      Pointer<Int32>,
      Pointer<Int32>,
      Pointer<Int32>,
      Pointer<Int32>,
    )>(symbol: 'TakeInt32PointerMany', isLeaf: true)
external int takeInt32PointerMany(
  Pointer<Int32> pointer0,
  Pointer<Int32> pointer1,
  Pointer<Int32> pointer2,
  Pointer<Int32> pointer3,
  Pointer<Int32> pointer4,
  Pointer<Int32> pointer5,
  Pointer<Int32> pointer6,
  Pointer<Int32> pointer7,
  Pointer<Int32> pointer8,
  Pointer<Int32> pointer9,
  Pointer<Int32> pointer10,
  Pointer<Int32> pointer11,
  Pointer<Int32> pointer12,
  Pointer<Int32> pointer13,
  Pointer<Int32> pointer14,
  Pointer<Int32> pointer15,
  Pointer<Int32> pointer16,
  Pointer<Int32> pointer17,
  Pointer<Int32> pointer18,
  Pointer<Int32> pointer19,
);

Int32List makeInt32List(int length) {
  final typedData = Int32List(length);
  for (int i = 0; i < length; i++) {
    final value = i % 2 == 0 ? i : -i;
    typedData[i] = value;
  }
  return typedData;
}

int makeExpectedResultInt32(int start, int end) {
  int expectedResult = 0;
  for (int i = start; i < end; i++) {
    final value = i % 2 == 0 ? i : -i;
    expectedResult += value;
  }
  return expectedResult;
}

@Native<Int64 Function(Pointer<Int64>, Size)>(
    symbol: 'TakeInt64Pointer', isLeaf: true)
external int takeInt64Pointer(Pointer<Int64> pointer, int length);

@Native<
    Int64 Function(
      Pointer<Int64>,
      Pointer<Int64>,
      Pointer<Int64>,
      Pointer<Int64>,
      Pointer<Int64>,
      Pointer<Int64>,
      Pointer<Int64>,
      Pointer<Int64>,
      Pointer<Int64>,
      Pointer<Int64>,
      Pointer<Int64>,
      Pointer<Int64>,
      Pointer<Int64>,
      Pointer<Int64>,
      Pointer<Int64>,
      Pointer<Int64>,
      Pointer<Int64>,
      Pointer<Int64>,
      Pointer<Int64>,
      Pointer<Int64>,
    )>(symbol: 'TakeInt64PointerMany', isLeaf: true)
external int takeInt64PointerMany(
  Pointer<Int64> pointer0,
  Pointer<Int64> pointer1,
  Pointer<Int64> pointer2,
  Pointer<Int64> pointer3,
  Pointer<Int64> pointer4,
  Pointer<Int64> pointer5,
  Pointer<Int64> pointer6,
  Pointer<Int64> pointer7,
  Pointer<Int64> pointer8,
  Pointer<Int64> pointer9,
  Pointer<Int64> pointer10,
  Pointer<Int64> pointer11,
  Pointer<Int64> pointer12,
  Pointer<Int64> pointer13,
  Pointer<Int64> pointer14,
  Pointer<Int64> pointer15,
  Pointer<Int64> pointer16,
  Pointer<Int64> pointer17,
  Pointer<Int64> pointer18,
  Pointer<Int64> pointer19,
);

Int64List makeInt64List(int length) {
  final typedData = Int64List(length);
  for (int i = 0; i < length; i++) {
    final value = i % 2 == 0 ? i : -i;
    typedData[i] = value;
  }
  return typedData;
}

int makeExpectedResultInt64(int start, int end) {
  int expectedResult = 0;
  for (int i = start; i < end; i++) {
    final value = i % 2 == 0 ? i : -i;
    expectedResult += value;
  }
  return expectedResult;
}

@Native<Uint8 Function(Pointer<Uint8>, Size)>(
    symbol: 'TakeUint8Pointer', isLeaf: true)
external int takeUint8Pointer(Pointer<Uint8> pointer, int length);

@Native<
    Uint8 Function(
      Pointer<Uint8>,
      Pointer<Uint8>,
      Pointer<Uint8>,
      Pointer<Uint8>,
      Pointer<Uint8>,
      Pointer<Uint8>,
      Pointer<Uint8>,
      Pointer<Uint8>,
      Pointer<Uint8>,
      Pointer<Uint8>,
      Pointer<Uint8>,
      Pointer<Uint8>,
      Pointer<Uint8>,
      Pointer<Uint8>,
      Pointer<Uint8>,
      Pointer<Uint8>,
      Pointer<Uint8>,
      Pointer<Uint8>,
      Pointer<Uint8>,
      Pointer<Uint8>,
    )>(symbol: 'TakeUint8PointerMany', isLeaf: true)
external int takeUint8PointerMany(
  Pointer<Uint8> pointer0,
  Pointer<Uint8> pointer1,
  Pointer<Uint8> pointer2,
  Pointer<Uint8> pointer3,
  Pointer<Uint8> pointer4,
  Pointer<Uint8> pointer5,
  Pointer<Uint8> pointer6,
  Pointer<Uint8> pointer7,
  Pointer<Uint8> pointer8,
  Pointer<Uint8> pointer9,
  Pointer<Uint8> pointer10,
  Pointer<Uint8> pointer11,
  Pointer<Uint8> pointer12,
  Pointer<Uint8> pointer13,
  Pointer<Uint8> pointer14,
  Pointer<Uint8> pointer15,
  Pointer<Uint8> pointer16,
  Pointer<Uint8> pointer17,
  Pointer<Uint8> pointer18,
  Pointer<Uint8> pointer19,
);

Uint8List makeUint8List(int length) {
  final typedData = Uint8List(length);
  for (int i = 0; i < length; i++) {
    final value = i;
    typedData[i] = value;
  }
  return typedData;
}

int makeExpectedResultUint8(int start, int end) {
  int expectedResult = 0;
  for (int i = start; i < end; i++) {
    final value = i;
    expectedResult += value;
  }
  return expectedResult;
}

@Native<Uint16 Function(Pointer<Uint16>, Size)>(
    symbol: 'TakeUint16Pointer', isLeaf: true)
external int takeUint16Pointer(Pointer<Uint16> pointer, int length);

@Native<
    Uint16 Function(
      Pointer<Uint16>,
      Pointer<Uint16>,
      Pointer<Uint16>,
      Pointer<Uint16>,
      Pointer<Uint16>,
      Pointer<Uint16>,
      Pointer<Uint16>,
      Pointer<Uint16>,
      Pointer<Uint16>,
      Pointer<Uint16>,
      Pointer<Uint16>,
      Pointer<Uint16>,
      Pointer<Uint16>,
      Pointer<Uint16>,
      Pointer<Uint16>,
      Pointer<Uint16>,
      Pointer<Uint16>,
      Pointer<Uint16>,
      Pointer<Uint16>,
      Pointer<Uint16>,
    )>(symbol: 'TakeUint16PointerMany', isLeaf: true)
external int takeUint16PointerMany(
  Pointer<Uint16> pointer0,
  Pointer<Uint16> pointer1,
  Pointer<Uint16> pointer2,
  Pointer<Uint16> pointer3,
  Pointer<Uint16> pointer4,
  Pointer<Uint16> pointer5,
  Pointer<Uint16> pointer6,
  Pointer<Uint16> pointer7,
  Pointer<Uint16> pointer8,
  Pointer<Uint16> pointer9,
  Pointer<Uint16> pointer10,
  Pointer<Uint16> pointer11,
  Pointer<Uint16> pointer12,
  Pointer<Uint16> pointer13,
  Pointer<Uint16> pointer14,
  Pointer<Uint16> pointer15,
  Pointer<Uint16> pointer16,
  Pointer<Uint16> pointer17,
  Pointer<Uint16> pointer18,
  Pointer<Uint16> pointer19,
);

Uint16List makeUint16List(int length) {
  final typedData = Uint16List(length);
  for (int i = 0; i < length; i++) {
    final value = i;
    typedData[i] = value;
  }
  return typedData;
}

int makeExpectedResultUint16(int start, int end) {
  int expectedResult = 0;
  for (int i = start; i < end; i++) {
    final value = i;
    expectedResult += value;
  }
  return expectedResult;
}

@Native<Uint32 Function(Pointer<Uint32>, Size)>(
    symbol: 'TakeUint32Pointer', isLeaf: true)
external int takeUint32Pointer(Pointer<Uint32> pointer, int length);

@Native<
    Uint32 Function(
      Pointer<Uint32>,
      Pointer<Uint32>,
      Pointer<Uint32>,
      Pointer<Uint32>,
      Pointer<Uint32>,
      Pointer<Uint32>,
      Pointer<Uint32>,
      Pointer<Uint32>,
      Pointer<Uint32>,
      Pointer<Uint32>,
      Pointer<Uint32>,
      Pointer<Uint32>,
      Pointer<Uint32>,
      Pointer<Uint32>,
      Pointer<Uint32>,
      Pointer<Uint32>,
      Pointer<Uint32>,
      Pointer<Uint32>,
      Pointer<Uint32>,
      Pointer<Uint32>,
    )>(symbol: 'TakeUint32PointerMany', isLeaf: true)
external int takeUint32PointerMany(
  Pointer<Uint32> pointer0,
  Pointer<Uint32> pointer1,
  Pointer<Uint32> pointer2,
  Pointer<Uint32> pointer3,
  Pointer<Uint32> pointer4,
  Pointer<Uint32> pointer5,
  Pointer<Uint32> pointer6,
  Pointer<Uint32> pointer7,
  Pointer<Uint32> pointer8,
  Pointer<Uint32> pointer9,
  Pointer<Uint32> pointer10,
  Pointer<Uint32> pointer11,
  Pointer<Uint32> pointer12,
  Pointer<Uint32> pointer13,
  Pointer<Uint32> pointer14,
  Pointer<Uint32> pointer15,
  Pointer<Uint32> pointer16,
  Pointer<Uint32> pointer17,
  Pointer<Uint32> pointer18,
  Pointer<Uint32> pointer19,
);

Uint32List makeUint32List(int length) {
  final typedData = Uint32List(length);
  for (int i = 0; i < length; i++) {
    final value = i;
    typedData[i] = value;
  }
  return typedData;
}

int makeExpectedResultUint32(int start, int end) {
  int expectedResult = 0;
  for (int i = start; i < end; i++) {
    final value = i;
    expectedResult += value;
  }
  return expectedResult;
}

@Native<Uint64 Function(Pointer<Uint64>, Size)>(
    symbol: 'TakeUint64Pointer', isLeaf: true)
external int takeUint64Pointer(Pointer<Uint64> pointer, int length);

@Native<
    Uint64 Function(
      Pointer<Uint64>,
      Pointer<Uint64>,
      Pointer<Uint64>,
      Pointer<Uint64>,
      Pointer<Uint64>,
      Pointer<Uint64>,
      Pointer<Uint64>,
      Pointer<Uint64>,
      Pointer<Uint64>,
      Pointer<Uint64>,
      Pointer<Uint64>,
      Pointer<Uint64>,
      Pointer<Uint64>,
      Pointer<Uint64>,
      Pointer<Uint64>,
      Pointer<Uint64>,
      Pointer<Uint64>,
      Pointer<Uint64>,
      Pointer<Uint64>,
      Pointer<Uint64>,
    )>(symbol: 'TakeUint64PointerMany', isLeaf: true)
external int takeUint64PointerMany(
  Pointer<Uint64> pointer0,
  Pointer<Uint64> pointer1,
  Pointer<Uint64> pointer2,
  Pointer<Uint64> pointer3,
  Pointer<Uint64> pointer4,
  Pointer<Uint64> pointer5,
  Pointer<Uint64> pointer6,
  Pointer<Uint64> pointer7,
  Pointer<Uint64> pointer8,
  Pointer<Uint64> pointer9,
  Pointer<Uint64> pointer10,
  Pointer<Uint64> pointer11,
  Pointer<Uint64> pointer12,
  Pointer<Uint64> pointer13,
  Pointer<Uint64> pointer14,
  Pointer<Uint64> pointer15,
  Pointer<Uint64> pointer16,
  Pointer<Uint64> pointer17,
  Pointer<Uint64> pointer18,
  Pointer<Uint64> pointer19,
);

Uint64List makeUint64List(int length) {
  final typedData = Uint64List(length);
  for (int i = 0; i < length; i++) {
    final value = i;
    typedData[i] = value;
  }
  return typedData;
}

int makeExpectedResultUint64(int start, int end) {
  int expectedResult = 0;
  for (int i = start; i < end; i++) {
    final value = i;
    expectedResult += value;
  }
  return expectedResult;
}

@Native<Float Function(Pointer<Float>, Size)>(
    symbol: 'TakeFloatPointer', isLeaf: true)
external double takeFloatPointer(Pointer<Float> pointer, int length);

@Native<
    Float Function(
      Pointer<Float>,
      Pointer<Float>,
      Pointer<Float>,
      Pointer<Float>,
      Pointer<Float>,
      Pointer<Float>,
      Pointer<Float>,
      Pointer<Float>,
      Pointer<Float>,
      Pointer<Float>,
      Pointer<Float>,
      Pointer<Float>,
      Pointer<Float>,
      Pointer<Float>,
      Pointer<Float>,
      Pointer<Float>,
      Pointer<Float>,
      Pointer<Float>,
      Pointer<Float>,
      Pointer<Float>,
    )>(symbol: 'TakeFloatPointerMany', isLeaf: true)
external double takeFloatPointerMany(
  Pointer<Float> pointer0,
  Pointer<Float> pointer1,
  Pointer<Float> pointer2,
  Pointer<Float> pointer3,
  Pointer<Float> pointer4,
  Pointer<Float> pointer5,
  Pointer<Float> pointer6,
  Pointer<Float> pointer7,
  Pointer<Float> pointer8,
  Pointer<Float> pointer9,
  Pointer<Float> pointer10,
  Pointer<Float> pointer11,
  Pointer<Float> pointer12,
  Pointer<Float> pointer13,
  Pointer<Float> pointer14,
  Pointer<Float> pointer15,
  Pointer<Float> pointer16,
  Pointer<Float> pointer17,
  Pointer<Float> pointer18,
  Pointer<Float> pointer19,
);

Float32List makeFloat32List(int length) {
  final typedData = Float32List(length);
  for (int i = 0; i < length; i++) {
    final value = (i % 2 == 0 ? i : -i).toDouble();
    typedData[i] = value;
  }
  return typedData;
}

double makeExpectedResultFloat(int start, int end) {
  double expectedResult = 0;
  for (int i = start; i < end; i++) {
    final value = (i % 2 == 0 ? i : -i).toDouble();
    expectedResult += value;
  }
  return expectedResult;
}

@Native<Double Function(Pointer<Double>, Size)>(
    symbol: 'TakeDoublePointer', isLeaf: true)
external double takeDoublePointer(Pointer<Double> pointer, int length);

@Native<
    Double Function(
      Pointer<Double>,
      Pointer<Double>,
      Pointer<Double>,
      Pointer<Double>,
      Pointer<Double>,
      Pointer<Double>,
      Pointer<Double>,
      Pointer<Double>,
      Pointer<Double>,
      Pointer<Double>,
      Pointer<Double>,
      Pointer<Double>,
      Pointer<Double>,
      Pointer<Double>,
      Pointer<Double>,
      Pointer<Double>,
      Pointer<Double>,
      Pointer<Double>,
      Pointer<Double>,
      Pointer<Double>,
    )>(symbol: 'TakeDoublePointerMany', isLeaf: true)
external double takeDoublePointerMany(
  Pointer<Double> pointer0,
  Pointer<Double> pointer1,
  Pointer<Double> pointer2,
  Pointer<Double> pointer3,
  Pointer<Double> pointer4,
  Pointer<Double> pointer5,
  Pointer<Double> pointer6,
  Pointer<Double> pointer7,
  Pointer<Double> pointer8,
  Pointer<Double> pointer9,
  Pointer<Double> pointer10,
  Pointer<Double> pointer11,
  Pointer<Double> pointer12,
  Pointer<Double> pointer13,
  Pointer<Double> pointer14,
  Pointer<Double> pointer15,
  Pointer<Double> pointer16,
  Pointer<Double> pointer17,
  Pointer<Double> pointer18,
  Pointer<Double> pointer19,
);

Float64List makeFloat64List(int length) {
  final typedData = Float64List(length);
  for (int i = 0; i < length; i++) {
    final value = (i % 2 == 0 ? i : -i).toDouble();
    typedData[i] = value;
  }
  return typedData;
}

double makeExpectedResultDouble(int start, int end) {
  double expectedResult = 0;
  for (int i = start; i < end; i++) {
    final value = (i % 2 == 0 ? i : -i).toDouble();
    expectedResult += value;
  }
  return expectedResult;
}

@Native<Bool Function(Pointer<Bool>, Size)>(
    symbol: 'TakeBoolPointer', isLeaf: true)
external bool takeBoolPointer(Pointer<Bool> pointer, int length);

@Native<
    Bool Function(
      Pointer<Bool>,
      Pointer<Bool>,
      Pointer<Bool>,
      Pointer<Bool>,
      Pointer<Bool>,
      Pointer<Bool>,
      Pointer<Bool>,
      Pointer<Bool>,
      Pointer<Bool>,
      Pointer<Bool>,
      Pointer<Bool>,
      Pointer<Bool>,
      Pointer<Bool>,
      Pointer<Bool>,
      Pointer<Bool>,
      Pointer<Bool>,
      Pointer<Bool>,
      Pointer<Bool>,
      Pointer<Bool>,
      Pointer<Bool>,
    )>(symbol: 'TakeBoolPointerMany', isLeaf: true)
external bool takeBoolPointerMany(
  Pointer<Bool> pointer0,
  Pointer<Bool> pointer1,
  Pointer<Bool> pointer2,
  Pointer<Bool> pointer3,
  Pointer<Bool> pointer4,
  Pointer<Bool> pointer5,
  Pointer<Bool> pointer6,
  Pointer<Bool> pointer7,
  Pointer<Bool> pointer8,
  Pointer<Bool> pointer9,
  Pointer<Bool> pointer10,
  Pointer<Bool> pointer11,
  Pointer<Bool> pointer12,
  Pointer<Bool> pointer13,
  Pointer<Bool> pointer14,
  Pointer<Bool> pointer15,
  Pointer<Bool> pointer16,
  Pointer<Bool> pointer17,
  Pointer<Bool> pointer18,
  Pointer<Bool> pointer19,
);
