// Copyright (c) 2019, 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.
//
// Dart test program for testing dart:ffi primitive data pointers.
//
// These callocs trigger an asan alarm, so these tests are in a separate file
// which is excluded in asan mode.

import 'dart:ffi';

import "package:ffi/ffi.dart";
import "package:expect/expect.dart";

void main() {
  testPointerAllocateTooLarge();
  testPointerAllocateNegative();
}

void testPointerAllocateTooLarge() {
  // Try to allocate something that doesn't fit in 64 bit address space.
  int maxInt = 9223372036854775807; // 2^63 - 1
  Expect.throws(() => calloc<Int64>(maxInt));

  // Try to allocate almost the full 64 bit address space.
  int maxInt1_8 = 1152921504606846975; // 2^60 -1
  Expect.throws(() => calloc<Int64>(maxInt1_8));
}

void testPointerAllocateNegative() {
  // Passing in -1 will be converted into an unsigned integer. So, it will try
  // to allocate SIZE_MAX - 1 + 1 bytes. This will fail as it is the max amount
  // of addressable memory on the system.
  Expect.throws(() => calloc<Int8>(-1));
}
