// Copyright (c) 2025, 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/array_primitive_elements_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 import 'dart:ffi'; import 'dart:typed_data'; import 'package:expect/expect.dart'; import 'package:ffi/ffi.dart'; const int arrayLength = 5; void main() { // Loop enough to trigger optimizations or stacktraces. See "VMOptions" above. for (int i = 0; i < 100; ++i) { testInt8ArrayElements(); testInt8ArrayBackedByInt64ListElements(); testMallocedInt8ArrayElements(); testWriteToInt8ArrayElementsBackedByTypedData(); testWriteToInt8ArrayElementsBackedByPointer(); testInt8ArrayElementsFirstAndLast(); testInt8ArrayElementsTypedDataListBackedByTypedData(); testInt8ArrayElementsTypedDataListBackedByPointer(); testInt16ArrayElements(); testInt16ArrayBackedByInt64ListElements(); testMallocedInt16ArrayElements(); testWriteToInt16ArrayElementsBackedByTypedData(); testWriteToInt16ArrayElementsBackedByPointer(); testInt16ArrayElementsFirstAndLast(); testInt16ArrayElementsTypedDataListBackedByTypedData(); testInt16ArrayElementsTypedDataListBackedByPointer(); testInt16Misaligned(); testInt32ArrayElements(); testInt32ArrayBackedByInt64ListElements(); testMallocedInt32ArrayElements(); testWriteToInt32ArrayElementsBackedByTypedData(); testWriteToInt32ArrayElementsBackedByPointer(); testInt32ArrayElementsFirstAndLast(); testInt32ArrayElementsTypedDataListBackedByTypedData(); testInt32ArrayElementsTypedDataListBackedByPointer(); testInt32Misaligned(); testInt64ArrayElements(); testInt64ArrayBackedByInt64ListElements(); testMallocedInt64ArrayElements(); testWriteToInt64ArrayElementsBackedByTypedData(); testWriteToInt64ArrayElementsBackedByPointer(); testInt64ArrayElementsFirstAndLast(); testInt64ArrayElementsTypedDataListBackedByTypedData(); testInt64ArrayElementsTypedDataListBackedByPointer(); testInt64Misaligned(); testUint8ArrayElements(); testUint8ArrayBackedByInt64ListElements(); testMallocedUint8ArrayElements(); testWriteToUint8ArrayElementsBackedByTypedData(); testWriteToUint8ArrayElementsBackedByPointer(); testUint8ArrayElementsFirstAndLast(); testUint8ArrayElementsTypedDataListBackedByTypedData(); testUint8ArrayElementsTypedDataListBackedByPointer(); testUint16ArrayElements(); testUint16ArrayBackedByInt64ListElements(); testMallocedUint16ArrayElements(); testWriteToUint16ArrayElementsBackedByTypedData(); testWriteToUint16ArrayElementsBackedByPointer(); testUint16ArrayElementsFirstAndLast(); testUint16ArrayElementsTypedDataListBackedByTypedData(); testUint16ArrayElementsTypedDataListBackedByPointer(); testUint16Misaligned(); testUint32ArrayElements(); testUint32ArrayBackedByInt64ListElements(); testMallocedUint32ArrayElements(); testWriteToUint32ArrayElementsBackedByTypedData(); testWriteToUint32ArrayElementsBackedByPointer(); testUint32ArrayElementsFirstAndLast(); testUint32ArrayElementsTypedDataListBackedByTypedData(); testUint32ArrayElementsTypedDataListBackedByPointer(); testUint32Misaligned(); testUint64ArrayElements(); testUint64ArrayBackedByInt64ListElements(); testMallocedUint64ArrayElements(); testWriteToUint64ArrayElementsBackedByTypedData(); testWriteToUint64ArrayElementsBackedByPointer(); testUint64ArrayElementsFirstAndLast(); testUint64ArrayElementsTypedDataListBackedByTypedData(); testUint64ArrayElementsTypedDataListBackedByPointer(); testUint64Misaligned(); testFloatArrayElements(); testFloatArrayBackedByInt64ListElements(); testMallocedFloatArrayElements(); testWriteToFloatArrayElementsBackedByTypedData(); testWriteToFloatArrayElementsBackedByPointer(); testFloatArrayElementsFirstAndLast(); testFloatArrayElementsTypedDataListBackedByTypedData(); testFloatArrayElementsTypedDataListBackedByPointer(); testFloatMisaligned(); testDoubleArrayElements(); testDoubleArrayBackedByInt64ListElements(); testMallocedDoubleArrayElements(); testWriteToDoubleArrayElementsBackedByTypedData(); testWriteToDoubleArrayElementsBackedByPointer(); testDoubleArrayElementsFirstAndLast(); testDoubleArrayElementsTypedDataListBackedByTypedData(); testDoubleArrayElementsTypedDataListBackedByPointer(); testDoubleMisaligned(); testBoolArrayElements(); testBoolArrayBackedByInt64ListElements(); testMallocedBoolArrayElements(); testWriteToBoolArrayElementsBackedByTypedData(); testWriteToBoolArrayElementsBackedByPointer(); testBoolArrayElementsFirstAndLast(); testWCharArrayElements(); testWCharArrayBackedByInt64ListElements(); testMallocedWCharArrayElements(); testWriteToWCharArrayElementsBackedByTypedData(); testWriteToWCharArrayElementsBackedByPointer(); testWCharArrayElementsFirstAndLast(); } } final class Int8ArrayStruct extends Struct { // Placeholder value before array to test the offset calculation logic. @Int8() external int placeholder; @Array(arrayLength) external Array array; } void testInt8ArrayElements() { final struct = Struct.create(); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); } void testInt8ArrayBackedByInt64ListElements() { final list = Int64List(6); final struct = Struct.create(list); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); } void testMallocedInt8ArrayElements() { final struct = malloc(); final array = struct.ref.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); malloc.free(struct); } void testWriteToInt8ArrayElementsBackedByTypedData() { final struct = Struct.create(); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array.elements[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); final actual = []; for (int i = 0; i < arrayLength; i++) { actual.add(array[i]); } Expect.listEquals(expected, actual); } void testWriteToInt8ArrayElementsBackedByPointer() { final struct = malloc(); final array = struct.ref.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array.elements[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); final actual = []; for (int i = 0; i < arrayLength; i++) { actual.add(array[i]); } Expect.listEquals(expected, actual); malloc.free(struct); } void testInt8ArrayElementsFirstAndLast() { final struct = Struct.create(); final elements = struct.array.elements; var value = 100 + 3; elements.first = value; Expect.equals(value, elements.first); value = 100 + 4; elements.last = value; Expect.equals(value, elements.last); } void testInt8ArrayElementsTypedDataListBackedByTypedData() { final struct = Struct.create(); final array = struct.array; final elements = array.elements; Expect.equals(sizeOf(), elements.offsetInBytes); Expect.equals(sizeOf() * arrayLength, elements.lengthInBytes); Expect.equals(sizeOf(), elements.elementSizeInBytes); final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.equals(expected.first, elements.first); Expect.equals(expected.last, elements.last); // Removed one element from the beginning and one from the end. final view = Int8List.view( elements.buffer, elements.offsetInBytes + sizeOf(), arrayLength - 2, ); Expect.listEquals(expected.sublist(1, arrayLength - 1), view); Expect.listEquals( expected.sublist(1, arrayLength - 1), Int8List.sublistView(elements, 1, arrayLength - 1), ); } void testInt8ArrayElementsTypedDataListBackedByPointer() { final struct = malloc(); final array = struct.ref.array; final elements = array.elements; Expect.equals(0, elements.offsetInBytes); Expect.equals(sizeOf() * arrayLength, elements.lengthInBytes); Expect.equals(sizeOf(), elements.elementSizeInBytes); final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.equals(expected.first, elements.first); Expect.equals(expected.last, elements.last); // Removed one element from the beginning and one from the end. final view = Int8List.view( elements.buffer, elements.offsetInBytes + sizeOf(), arrayLength - 2, ); Expect.listEquals(expected.sublist(1, arrayLength - 1), view); Expect.listEquals( expected.sublist(1, arrayLength - 1), Int8List.sublistView(elements, 1, arrayLength - 1), ); malloc.free(struct); } final class Int16ArrayStruct extends Struct { // Placeholder value before array to test the offset calculation logic. @Int8() external int placeholder; @Array(arrayLength) external Array array; } void testInt16ArrayElements() { final struct = Struct.create(); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); } void testInt16ArrayBackedByInt64ListElements() { final list = Int64List(6); final struct = Struct.create(list); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); } void testMallocedInt16ArrayElements() { final struct = malloc(); final array = struct.ref.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); malloc.free(struct); } void testWriteToInt16ArrayElementsBackedByTypedData() { final struct = Struct.create(); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array.elements[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); final actual = []; for (int i = 0; i < arrayLength; i++) { actual.add(array[i]); } Expect.listEquals(expected, actual); } void testWriteToInt16ArrayElementsBackedByPointer() { final struct = malloc(); final array = struct.ref.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array.elements[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); final actual = []; for (int i = 0; i < arrayLength; i++) { actual.add(array[i]); } Expect.listEquals(expected, actual); malloc.free(struct); } void testInt16ArrayElementsFirstAndLast() { final struct = Struct.create(); final elements = struct.array.elements; var value = 100 + 3; elements.first = value; Expect.equals(value, elements.first); value = 100 + 4; elements.last = value; Expect.equals(value, elements.last); } void testInt16ArrayElementsTypedDataListBackedByTypedData() { final struct = Struct.create(); final array = struct.array; final elements = array.elements; Expect.equals(sizeOf(), elements.offsetInBytes); Expect.equals(sizeOf() * arrayLength, elements.lengthInBytes); Expect.equals(sizeOf(), elements.elementSizeInBytes); final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.equals(expected.first, elements.first); Expect.equals(expected.last, elements.last); // Removed one element from the beginning and one from the end. final view = Int16List.view( elements.buffer, elements.offsetInBytes + sizeOf(), arrayLength - 2, ); Expect.listEquals(expected.sublist(1, arrayLength - 1), view); Expect.listEquals( expected.sublist(1, arrayLength - 1), Int16List.sublistView(elements, 1, arrayLength - 1), ); } void testInt16ArrayElementsTypedDataListBackedByPointer() { final struct = malloc(); final array = struct.ref.array; final elements = array.elements; Expect.equals(0, elements.offsetInBytes); Expect.equals(sizeOf() * arrayLength, elements.lengthInBytes); Expect.equals(sizeOf(), elements.elementSizeInBytes); final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.equals(expected.first, elements.first); Expect.equals(expected.last, elements.last); // Removed one element from the beginning and one from the end. final view = Int16List.view( elements.buffer, elements.offsetInBytes + sizeOf(), arrayLength - 2, ); Expect.listEquals(expected.sublist(1, arrayLength - 1), view); Expect.listEquals( expected.sublist(1, arrayLength - 1), Int16List.sublistView(elements, 1, arrayLength - 1), ); malloc.free(struct); } @Packed(1) final class PackedInt16ArrayStruct extends Struct { // Placeholder value before array to test the offset calculation logic. @Int8() external int placeholder; @Array(arrayLength) external Array array; } void testInt16Misaligned() { final structPointer = malloc(); var array = structPointer.ref.array; var e = Expect.throwsArgumentError(() => array.elements); Expect.isTrue( e.message.contains( 'Pointer address must be aligned to a multiple of the element size', ), ); malloc.free(structPointer); final struct = Struct.create(); array = struct.array; e = Expect.throwsRangeError(() => array.elements); Expect.isTrue(e.message.contains('must be a multiple of BYTES_PER_ELEMENT')); } final class Int32ArrayStruct extends Struct { // Placeholder value before array to test the offset calculation logic. @Int8() external int placeholder; @Array(arrayLength) external Array array; } void testInt32ArrayElements() { final struct = Struct.create(); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); } void testInt32ArrayBackedByInt64ListElements() { final list = Int64List(6); final struct = Struct.create(list); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); } void testMallocedInt32ArrayElements() { final struct = malloc(); final array = struct.ref.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); malloc.free(struct); } void testWriteToInt32ArrayElementsBackedByTypedData() { final struct = Struct.create(); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array.elements[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); final actual = []; for (int i = 0; i < arrayLength; i++) { actual.add(array[i]); } Expect.listEquals(expected, actual); } void testWriteToInt32ArrayElementsBackedByPointer() { final struct = malloc(); final array = struct.ref.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array.elements[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); final actual = []; for (int i = 0; i < arrayLength; i++) { actual.add(array[i]); } Expect.listEquals(expected, actual); malloc.free(struct); } void testInt32ArrayElementsFirstAndLast() { final struct = Struct.create(); final elements = struct.array.elements; var value = 100 + 3; elements.first = value; Expect.equals(value, elements.first); value = 100 + 4; elements.last = value; Expect.equals(value, elements.last); } void testInt32ArrayElementsTypedDataListBackedByTypedData() { final struct = Struct.create(); final array = struct.array; final elements = array.elements; Expect.equals(sizeOf(), elements.offsetInBytes); Expect.equals(sizeOf() * arrayLength, elements.lengthInBytes); Expect.equals(sizeOf(), elements.elementSizeInBytes); final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.equals(expected.first, elements.first); Expect.equals(expected.last, elements.last); // Removed one element from the beginning and one from the end. final view = Int32List.view( elements.buffer, elements.offsetInBytes + sizeOf(), arrayLength - 2, ); Expect.listEquals(expected.sublist(1, arrayLength - 1), view); Expect.listEquals( expected.sublist(1, arrayLength - 1), Int32List.sublistView(elements, 1, arrayLength - 1), ); } void testInt32ArrayElementsTypedDataListBackedByPointer() { final struct = malloc(); final array = struct.ref.array; final elements = array.elements; Expect.equals(0, elements.offsetInBytes); Expect.equals(sizeOf() * arrayLength, elements.lengthInBytes); Expect.equals(sizeOf(), elements.elementSizeInBytes); final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.equals(expected.first, elements.first); Expect.equals(expected.last, elements.last); // Removed one element from the beginning and one from the end. final view = Int32List.view( elements.buffer, elements.offsetInBytes + sizeOf(), arrayLength - 2, ); Expect.listEquals(expected.sublist(1, arrayLength - 1), view); Expect.listEquals( expected.sublist(1, arrayLength - 1), Int32List.sublistView(elements, 1, arrayLength - 1), ); malloc.free(struct); } @Packed(1) final class PackedInt32ArrayStruct extends Struct { // Placeholder value before array to test the offset calculation logic. @Int8() external int placeholder; @Array(arrayLength) external Array array; } void testInt32Misaligned() { final structPointer = malloc(); var array = structPointer.ref.array; var e = Expect.throwsArgumentError(() => array.elements); Expect.isTrue( e.message.contains( 'Pointer address must be aligned to a multiple of the element size', ), ); malloc.free(structPointer); final struct = Struct.create(); array = struct.array; e = Expect.throwsRangeError(() => array.elements); Expect.isTrue(e.message.contains('must be a multiple of BYTES_PER_ELEMENT')); } final class Int64ArrayStruct extends Struct { // Placeholder value before array to test the offset calculation logic. @Int8() external int placeholder; @Array(arrayLength) external Array array; } void testInt64ArrayElements() { final struct = Struct.create(); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); } void testInt64ArrayBackedByInt64ListElements() { final list = Int64List(6); final struct = Struct.create(list); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); } void testMallocedInt64ArrayElements() { final struct = malloc(); final array = struct.ref.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); malloc.free(struct); } void testWriteToInt64ArrayElementsBackedByTypedData() { final struct = Struct.create(); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array.elements[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); final actual = []; for (int i = 0; i < arrayLength; i++) { actual.add(array[i]); } Expect.listEquals(expected, actual); } void testWriteToInt64ArrayElementsBackedByPointer() { final struct = malloc(); final array = struct.ref.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array.elements[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); final actual = []; for (int i = 0; i < arrayLength; i++) { actual.add(array[i]); } Expect.listEquals(expected, actual); malloc.free(struct); } void testInt64ArrayElementsFirstAndLast() { final struct = Struct.create(); final elements = struct.array.elements; var value = 100 + 3; elements.first = value; Expect.equals(value, elements.first); value = 100 + 4; elements.last = value; Expect.equals(value, elements.last); } void testInt64ArrayElementsTypedDataListBackedByTypedData() { final struct = Struct.create(); final array = struct.array; final elements = array.elements; Expect.equals(sizeOf(), elements.offsetInBytes); Expect.equals(sizeOf() * arrayLength, elements.lengthInBytes); Expect.equals(sizeOf(), elements.elementSizeInBytes); final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.equals(expected.first, elements.first); Expect.equals(expected.last, elements.last); // Removed one element from the beginning and one from the end. final view = Int64List.view( elements.buffer, elements.offsetInBytes + sizeOf(), arrayLength - 2, ); Expect.listEquals(expected.sublist(1, arrayLength - 1), view); Expect.listEquals( expected.sublist(1, arrayLength - 1), Int64List.sublistView(elements, 1, arrayLength - 1), ); } void testInt64ArrayElementsTypedDataListBackedByPointer() { final struct = malloc(); final array = struct.ref.array; final elements = array.elements; Expect.equals(0, elements.offsetInBytes); Expect.equals(sizeOf() * arrayLength, elements.lengthInBytes); Expect.equals(sizeOf(), elements.elementSizeInBytes); final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.equals(expected.first, elements.first); Expect.equals(expected.last, elements.last); // Removed one element from the beginning and one from the end. final view = Int64List.view( elements.buffer, elements.offsetInBytes + sizeOf(), arrayLength - 2, ); Expect.listEquals(expected.sublist(1, arrayLength - 1), view); Expect.listEquals( expected.sublist(1, arrayLength - 1), Int64List.sublistView(elements, 1, arrayLength - 1), ); malloc.free(struct); } @Packed(1) final class PackedInt64ArrayStruct extends Struct { // Placeholder value before array to test the offset calculation logic. @Int8() external int placeholder; @Array(arrayLength) external Array array; } void testInt64Misaligned() { final structPointer = malloc(); var array = structPointer.ref.array; var e = Expect.throwsArgumentError(() => array.elements); Expect.isTrue( e.message.contains( 'Pointer address must be aligned to a multiple of the element size', ), ); malloc.free(structPointer); final struct = Struct.create(); array = struct.array; e = Expect.throwsRangeError(() => array.elements); Expect.isTrue(e.message.contains('must be a multiple of BYTES_PER_ELEMENT')); } final class Uint8ArrayStruct extends Struct { // Placeholder value before array to test the offset calculation logic. @Int8() external int placeholder; @Array(arrayLength) external Array array; } void testUint8ArrayElements() { final struct = Struct.create(); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); } void testUint8ArrayBackedByInt64ListElements() { final list = Int64List(6); final struct = Struct.create(list); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); } void testMallocedUint8ArrayElements() { final struct = malloc(); final array = struct.ref.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); malloc.free(struct); } void testWriteToUint8ArrayElementsBackedByTypedData() { final struct = Struct.create(); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array.elements[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); final actual = []; for (int i = 0; i < arrayLength; i++) { actual.add(array[i]); } Expect.listEquals(expected, actual); } void testWriteToUint8ArrayElementsBackedByPointer() { final struct = malloc(); final array = struct.ref.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array.elements[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); final actual = []; for (int i = 0; i < arrayLength; i++) { actual.add(array[i]); } Expect.listEquals(expected, actual); malloc.free(struct); } void testUint8ArrayElementsFirstAndLast() { final struct = Struct.create(); final elements = struct.array.elements; var value = 100 + 3; elements.first = value; Expect.equals(value, elements.first); value = 100 + 4; elements.last = value; Expect.equals(value, elements.last); } void testUint8ArrayElementsTypedDataListBackedByTypedData() { final struct = Struct.create(); final array = struct.array; final elements = array.elements; Expect.equals(sizeOf(), elements.offsetInBytes); Expect.equals(sizeOf() * arrayLength, elements.lengthInBytes); Expect.equals(sizeOf(), elements.elementSizeInBytes); final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.equals(expected.first, elements.first); Expect.equals(expected.last, elements.last); // Removed one element from the beginning and one from the end. final view = Uint8List.view( elements.buffer, elements.offsetInBytes + sizeOf(), arrayLength - 2, ); Expect.listEquals(expected.sublist(1, arrayLength - 1), view); Expect.listEquals( expected.sublist(1, arrayLength - 1), Uint8List.sublistView(elements, 1, arrayLength - 1), ); } void testUint8ArrayElementsTypedDataListBackedByPointer() { final struct = malloc(); final array = struct.ref.array; final elements = array.elements; Expect.equals(0, elements.offsetInBytes); Expect.equals(sizeOf() * arrayLength, elements.lengthInBytes); Expect.equals(sizeOf(), elements.elementSizeInBytes); final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.equals(expected.first, elements.first); Expect.equals(expected.last, elements.last); // Removed one element from the beginning and one from the end. final view = Uint8List.view( elements.buffer, elements.offsetInBytes + sizeOf(), arrayLength - 2, ); Expect.listEquals(expected.sublist(1, arrayLength - 1), view); Expect.listEquals( expected.sublist(1, arrayLength - 1), Uint8List.sublistView(elements, 1, arrayLength - 1), ); malloc.free(struct); } final class Uint16ArrayStruct extends Struct { // Placeholder value before array to test the offset calculation logic. @Int8() external int placeholder; @Array(arrayLength) external Array array; } void testUint16ArrayElements() { final struct = Struct.create(); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); } void testUint16ArrayBackedByInt64ListElements() { final list = Int64List(6); final struct = Struct.create(list); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); } void testMallocedUint16ArrayElements() { final struct = malloc(); final array = struct.ref.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); malloc.free(struct); } void testWriteToUint16ArrayElementsBackedByTypedData() { final struct = Struct.create(); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array.elements[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); final actual = []; for (int i = 0; i < arrayLength; i++) { actual.add(array[i]); } Expect.listEquals(expected, actual); } void testWriteToUint16ArrayElementsBackedByPointer() { final struct = malloc(); final array = struct.ref.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array.elements[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); final actual = []; for (int i = 0; i < arrayLength; i++) { actual.add(array[i]); } Expect.listEquals(expected, actual); malloc.free(struct); } void testUint16ArrayElementsFirstAndLast() { final struct = Struct.create(); final elements = struct.array.elements; var value = 100 + 3; elements.first = value; Expect.equals(value, elements.first); value = 100 + 4; elements.last = value; Expect.equals(value, elements.last); } void testUint16ArrayElementsTypedDataListBackedByTypedData() { final struct = Struct.create(); final array = struct.array; final elements = array.elements; Expect.equals(sizeOf(), elements.offsetInBytes); Expect.equals(sizeOf() * arrayLength, elements.lengthInBytes); Expect.equals(sizeOf(), elements.elementSizeInBytes); final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.equals(expected.first, elements.first); Expect.equals(expected.last, elements.last); // Removed one element from the beginning and one from the end. final view = Uint16List.view( elements.buffer, elements.offsetInBytes + sizeOf(), arrayLength - 2, ); Expect.listEquals(expected.sublist(1, arrayLength - 1), view); Expect.listEquals( expected.sublist(1, arrayLength - 1), Uint16List.sublistView(elements, 1, arrayLength - 1), ); } void testUint16ArrayElementsTypedDataListBackedByPointer() { final struct = malloc(); final array = struct.ref.array; final elements = array.elements; Expect.equals(0, elements.offsetInBytes); Expect.equals(sizeOf() * arrayLength, elements.lengthInBytes); Expect.equals(sizeOf(), elements.elementSizeInBytes); final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.equals(expected.first, elements.first); Expect.equals(expected.last, elements.last); // Removed one element from the beginning and one from the end. final view = Uint16List.view( elements.buffer, elements.offsetInBytes + sizeOf(), arrayLength - 2, ); Expect.listEquals(expected.sublist(1, arrayLength - 1), view); Expect.listEquals( expected.sublist(1, arrayLength - 1), Uint16List.sublistView(elements, 1, arrayLength - 1), ); malloc.free(struct); } @Packed(1) final class PackedUint16ArrayStruct extends Struct { // Placeholder value before array to test the offset calculation logic. @Int8() external int placeholder; @Array(arrayLength) external Array array; } void testUint16Misaligned() { final structPointer = malloc(); var array = structPointer.ref.array; var e = Expect.throwsArgumentError(() => array.elements); Expect.isTrue( e.message.contains( 'Pointer address must be aligned to a multiple of the element size', ), ); malloc.free(structPointer); final struct = Struct.create(); array = struct.array; e = Expect.throwsRangeError(() => array.elements); Expect.isTrue(e.message.contains('must be a multiple of BYTES_PER_ELEMENT')); } final class Uint32ArrayStruct extends Struct { // Placeholder value before array to test the offset calculation logic. @Int8() external int placeholder; @Array(arrayLength) external Array array; } void testUint32ArrayElements() { final struct = Struct.create(); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); } void testUint32ArrayBackedByInt64ListElements() { final list = Int64List(6); final struct = Struct.create(list); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); } void testMallocedUint32ArrayElements() { final struct = malloc(); final array = struct.ref.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); malloc.free(struct); } void testWriteToUint32ArrayElementsBackedByTypedData() { final struct = Struct.create(); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array.elements[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); final actual = []; for (int i = 0; i < arrayLength; i++) { actual.add(array[i]); } Expect.listEquals(expected, actual); } void testWriteToUint32ArrayElementsBackedByPointer() { final struct = malloc(); final array = struct.ref.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array.elements[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); final actual = []; for (int i = 0; i < arrayLength; i++) { actual.add(array[i]); } Expect.listEquals(expected, actual); malloc.free(struct); } void testUint32ArrayElementsFirstAndLast() { final struct = Struct.create(); final elements = struct.array.elements; var value = 100 + 3; elements.first = value; Expect.equals(value, elements.first); value = 100 + 4; elements.last = value; Expect.equals(value, elements.last); } void testUint32ArrayElementsTypedDataListBackedByTypedData() { final struct = Struct.create(); final array = struct.array; final elements = array.elements; Expect.equals(sizeOf(), elements.offsetInBytes); Expect.equals(sizeOf() * arrayLength, elements.lengthInBytes); Expect.equals(sizeOf(), elements.elementSizeInBytes); final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.equals(expected.first, elements.first); Expect.equals(expected.last, elements.last); // Removed one element from the beginning and one from the end. final view = Uint32List.view( elements.buffer, elements.offsetInBytes + sizeOf(), arrayLength - 2, ); Expect.listEquals(expected.sublist(1, arrayLength - 1), view); Expect.listEquals( expected.sublist(1, arrayLength - 1), Uint32List.sublistView(elements, 1, arrayLength - 1), ); } void testUint32ArrayElementsTypedDataListBackedByPointer() { final struct = malloc(); final array = struct.ref.array; final elements = array.elements; Expect.equals(0, elements.offsetInBytes); Expect.equals(sizeOf() * arrayLength, elements.lengthInBytes); Expect.equals(sizeOf(), elements.elementSizeInBytes); final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.equals(expected.first, elements.first); Expect.equals(expected.last, elements.last); // Removed one element from the beginning and one from the end. final view = Uint32List.view( elements.buffer, elements.offsetInBytes + sizeOf(), arrayLength - 2, ); Expect.listEquals(expected.sublist(1, arrayLength - 1), view); Expect.listEquals( expected.sublist(1, arrayLength - 1), Uint32List.sublistView(elements, 1, arrayLength - 1), ); malloc.free(struct); } @Packed(1) final class PackedUint32ArrayStruct extends Struct { // Placeholder value before array to test the offset calculation logic. @Int8() external int placeholder; @Array(arrayLength) external Array array; } void testUint32Misaligned() { final structPointer = malloc(); var array = structPointer.ref.array; var e = Expect.throwsArgumentError(() => array.elements); Expect.isTrue( e.message.contains( 'Pointer address must be aligned to a multiple of the element size', ), ); malloc.free(structPointer); final struct = Struct.create(); array = struct.array; e = Expect.throwsRangeError(() => array.elements); Expect.isTrue(e.message.contains('must be a multiple of BYTES_PER_ELEMENT')); } final class Uint64ArrayStruct extends Struct { // Placeholder value before array to test the offset calculation logic. @Int8() external int placeholder; @Array(arrayLength) external Array array; } void testUint64ArrayElements() { final struct = Struct.create(); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); } void testUint64ArrayBackedByInt64ListElements() { final list = Int64List(6); final struct = Struct.create(list); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); } void testMallocedUint64ArrayElements() { final struct = malloc(); final array = struct.ref.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); malloc.free(struct); } void testWriteToUint64ArrayElementsBackedByTypedData() { final struct = Struct.create(); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array.elements[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); final actual = []; for (int i = 0; i < arrayLength; i++) { actual.add(array[i]); } Expect.listEquals(expected, actual); } void testWriteToUint64ArrayElementsBackedByPointer() { final struct = malloc(); final array = struct.ref.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array.elements[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); final actual = []; for (int i = 0; i < arrayLength; i++) { actual.add(array[i]); } Expect.listEquals(expected, actual); malloc.free(struct); } void testUint64ArrayElementsFirstAndLast() { final struct = Struct.create(); final elements = struct.array.elements; var value = 100 + 3; elements.first = value; Expect.equals(value, elements.first); value = 100 + 4; elements.last = value; Expect.equals(value, elements.last); } void testUint64ArrayElementsTypedDataListBackedByTypedData() { final struct = Struct.create(); final array = struct.array; final elements = array.elements; Expect.equals(sizeOf(), elements.offsetInBytes); Expect.equals(sizeOf() * arrayLength, elements.lengthInBytes); Expect.equals(sizeOf(), elements.elementSizeInBytes); final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.equals(expected.first, elements.first); Expect.equals(expected.last, elements.last); // Removed one element from the beginning and one from the end. final view = Uint64List.view( elements.buffer, elements.offsetInBytes + sizeOf(), arrayLength - 2, ); Expect.listEquals(expected.sublist(1, arrayLength - 1), view); Expect.listEquals( expected.sublist(1, arrayLength - 1), Uint64List.sublistView(elements, 1, arrayLength - 1), ); } void testUint64ArrayElementsTypedDataListBackedByPointer() { final struct = malloc(); final array = struct.ref.array; final elements = array.elements; Expect.equals(0, elements.offsetInBytes); Expect.equals(sizeOf() * arrayLength, elements.lengthInBytes); Expect.equals(sizeOf(), elements.elementSizeInBytes); final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.equals(expected.first, elements.first); Expect.equals(expected.last, elements.last); // Removed one element from the beginning and one from the end. final view = Uint64List.view( elements.buffer, elements.offsetInBytes + sizeOf(), arrayLength - 2, ); Expect.listEquals(expected.sublist(1, arrayLength - 1), view); Expect.listEquals( expected.sublist(1, arrayLength - 1), Uint64List.sublistView(elements, 1, arrayLength - 1), ); malloc.free(struct); } @Packed(1) final class PackedUint64ArrayStruct extends Struct { // Placeholder value before array to test the offset calculation logic. @Int8() external int placeholder; @Array(arrayLength) external Array array; } void testUint64Misaligned() { final structPointer = malloc(); var array = structPointer.ref.array; var e = Expect.throwsArgumentError(() => array.elements); Expect.isTrue( e.message.contains( 'Pointer address must be aligned to a multiple of the element size', ), ); malloc.free(structPointer); final struct = Struct.create(); array = struct.array; e = Expect.throwsRangeError(() => array.elements); Expect.isTrue(e.message.contains('must be a multiple of BYTES_PER_ELEMENT')); } final class FloatArrayStruct extends Struct { // Placeholder value before array to test the offset calculation logic. @Int8() external int placeholder; @Array(arrayLength) external Array array; } void testFloatArrayElements() { final struct = Struct.create(); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100.0 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); } void testFloatArrayBackedByInt64ListElements() { final list = Int64List(6); final struct = Struct.create(list); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100.0 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); } void testMallocedFloatArrayElements() { final struct = malloc(); final array = struct.ref.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100.0 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); malloc.free(struct); } void testWriteToFloatArrayElementsBackedByTypedData() { final struct = Struct.create(); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100.0 + i; array.elements[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); final actual = []; for (int i = 0; i < arrayLength; i++) { actual.add(array[i]); } Expect.listEquals(expected, actual); } void testWriteToFloatArrayElementsBackedByPointer() { final struct = malloc(); final array = struct.ref.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100.0 + i; array.elements[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); final actual = []; for (int i = 0; i < arrayLength; i++) { actual.add(array[i]); } Expect.listEquals(expected, actual); malloc.free(struct); } void testFloatArrayElementsFirstAndLast() { final struct = Struct.create(); final elements = struct.array.elements; var value = 100.0 + 3; elements.first = value; Expect.equals(value, elements.first); value = 100.0 + 4; elements.last = value; Expect.equals(value, elements.last); } void testFloatArrayElementsTypedDataListBackedByTypedData() { final struct = Struct.create(); final array = struct.array; final elements = array.elements; Expect.equals(sizeOf(), elements.offsetInBytes); Expect.equals(sizeOf() * arrayLength, elements.lengthInBytes); Expect.equals(sizeOf(), elements.elementSizeInBytes); final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100.0 + i; array[i] = value; expected.add(value); } Expect.equals(expected.first, elements.first); Expect.equals(expected.last, elements.last); // Removed one element from the beginning and one from the end. final view = Float32List.view( elements.buffer, elements.offsetInBytes + sizeOf(), arrayLength - 2, ); Expect.listEquals(expected.sublist(1, arrayLength - 1), view); Expect.listEquals( expected.sublist(1, arrayLength - 1), Float32List.sublistView(elements, 1, arrayLength - 1), ); } void testFloatArrayElementsTypedDataListBackedByPointer() { final struct = malloc(); final array = struct.ref.array; final elements = array.elements; Expect.equals(0, elements.offsetInBytes); Expect.equals(sizeOf() * arrayLength, elements.lengthInBytes); Expect.equals(sizeOf(), elements.elementSizeInBytes); final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100.0 + i; array[i] = value; expected.add(value); } Expect.equals(expected.first, elements.first); Expect.equals(expected.last, elements.last); // Removed one element from the beginning and one from the end. final view = Float32List.view( elements.buffer, elements.offsetInBytes + sizeOf(), arrayLength - 2, ); Expect.listEquals(expected.sublist(1, arrayLength - 1), view); Expect.listEquals( expected.sublist(1, arrayLength - 1), Float32List.sublistView(elements, 1, arrayLength - 1), ); malloc.free(struct); } @Packed(1) final class PackedFloatArrayStruct extends Struct { // Placeholder value before array to test the offset calculation logic. @Int8() external int placeholder; @Array(arrayLength) external Array array; } void testFloatMisaligned() { final structPointer = malloc(); var array = structPointer.ref.array; var e = Expect.throwsArgumentError(() => array.elements); Expect.isTrue( e.message.contains( 'Pointer address must be aligned to a multiple of the element size', ), ); malloc.free(structPointer); final struct = Struct.create(); array = struct.array; e = Expect.throwsRangeError(() => array.elements); Expect.isTrue(e.message.contains('must be a multiple of BYTES_PER_ELEMENT')); } final class DoubleArrayStruct extends Struct { // Placeholder value before array to test the offset calculation logic. @Int8() external int placeholder; @Array(arrayLength) external Array array; } void testDoubleArrayElements() { final struct = Struct.create(); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100.0 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); } void testDoubleArrayBackedByInt64ListElements() { final list = Int64List(6); final struct = Struct.create(list); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100.0 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); } void testMallocedDoubleArrayElements() { final struct = malloc(); final array = struct.ref.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100.0 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); malloc.free(struct); } void testWriteToDoubleArrayElementsBackedByTypedData() { final struct = Struct.create(); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100.0 + i; array.elements[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); final actual = []; for (int i = 0; i < arrayLength; i++) { actual.add(array[i]); } Expect.listEquals(expected, actual); } void testWriteToDoubleArrayElementsBackedByPointer() { final struct = malloc(); final array = struct.ref.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100.0 + i; array.elements[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); final actual = []; for (int i = 0; i < arrayLength; i++) { actual.add(array[i]); } Expect.listEquals(expected, actual); malloc.free(struct); } void testDoubleArrayElementsFirstAndLast() { final struct = Struct.create(); final elements = struct.array.elements; var value = 100.0 + 3; elements.first = value; Expect.equals(value, elements.first); value = 100.0 + 4; elements.last = value; Expect.equals(value, elements.last); } void testDoubleArrayElementsTypedDataListBackedByTypedData() { final struct = Struct.create(); final array = struct.array; final elements = array.elements; Expect.equals(sizeOf(), elements.offsetInBytes); Expect.equals(sizeOf() * arrayLength, elements.lengthInBytes); Expect.equals(sizeOf(), elements.elementSizeInBytes); final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100.0 + i; array[i] = value; expected.add(value); } Expect.equals(expected.first, elements.first); Expect.equals(expected.last, elements.last); // Removed one element from the beginning and one from the end. final view = Float64List.view( elements.buffer, elements.offsetInBytes + sizeOf(), arrayLength - 2, ); Expect.listEquals(expected.sublist(1, arrayLength - 1), view); Expect.listEquals( expected.sublist(1, arrayLength - 1), Float64List.sublistView(elements, 1, arrayLength - 1), ); } void testDoubleArrayElementsTypedDataListBackedByPointer() { final struct = malloc(); final array = struct.ref.array; final elements = array.elements; Expect.equals(0, elements.offsetInBytes); Expect.equals(sizeOf() * arrayLength, elements.lengthInBytes); Expect.equals(sizeOf(), elements.elementSizeInBytes); final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100.0 + i; array[i] = value; expected.add(value); } Expect.equals(expected.first, elements.first); Expect.equals(expected.last, elements.last); // Removed one element from the beginning and one from the end. final view = Float64List.view( elements.buffer, elements.offsetInBytes + sizeOf(), arrayLength - 2, ); Expect.listEquals(expected.sublist(1, arrayLength - 1), view); Expect.listEquals( expected.sublist(1, arrayLength - 1), Float64List.sublistView(elements, 1, arrayLength - 1), ); malloc.free(struct); } @Packed(1) final class PackedDoubleArrayStruct extends Struct { // Placeholder value before array to test the offset calculation logic. @Int8() external int placeholder; @Array(arrayLength) external Array array; } void testDoubleMisaligned() { final structPointer = malloc(); var array = structPointer.ref.array; var e = Expect.throwsArgumentError(() => array.elements); Expect.isTrue( e.message.contains( 'Pointer address must be aligned to a multiple of the element size', ), ); malloc.free(structPointer); final struct = Struct.create(); array = struct.array; e = Expect.throwsRangeError(() => array.elements); Expect.isTrue(e.message.contains('must be a multiple of BYTES_PER_ELEMENT')); } final class BoolArrayStruct extends Struct { // Placeholder value before array to test the offset calculation logic. @Int8() external int placeholder; @Array(arrayLength) external Array array; } void testBoolArrayElements() { final struct = Struct.create(); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = i.isEven; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); } void testBoolArrayBackedByInt64ListElements() { final list = Int64List(6); final struct = Struct.create(list); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = i.isEven; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); } void testMallocedBoolArrayElements() { final struct = malloc(); final array = struct.ref.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = i.isEven; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); malloc.free(struct); } void testWriteToBoolArrayElementsBackedByTypedData() { final struct = Struct.create(); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = i.isEven; array.elements[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); final actual = []; for (int i = 0; i < arrayLength; i++) { actual.add(array[i]); } Expect.listEquals(expected, actual); } void testWriteToBoolArrayElementsBackedByPointer() { final struct = malloc(); final array = struct.ref.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = i.isEven; array.elements[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); final actual = []; for (int i = 0; i < arrayLength; i++) { actual.add(array[i]); } Expect.listEquals(expected, actual); malloc.free(struct); } void testBoolArrayElementsFirstAndLast() { final struct = Struct.create(); final elements = struct.array.elements; var value = 3.isEven; elements.first = value; Expect.equals(value, elements.first); value = 4.isEven; elements.last = value; Expect.equals(value, elements.last); } final class WCharArrayStruct extends Struct { // Placeholder value before array to test the offset calculation logic. @Int8() external int placeholder; @Array(arrayLength) external Array array; } void testWCharArrayElements() { final struct = Struct.create(); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); } void testWCharArrayBackedByInt64ListElements() { final list = Int64List(6); final struct = Struct.create(list); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); } void testMallocedWCharArrayElements() { final struct = malloc(); final array = struct.ref.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); malloc.free(struct); } void testWriteToWCharArrayElementsBackedByTypedData() { final struct = Struct.create(); final array = struct.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array.elements[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); final actual = []; for (int i = 0; i < arrayLength; i++) { actual.add(array[i]); } Expect.listEquals(expected, actual); } void testWriteToWCharArrayElementsBackedByPointer() { final struct = malloc(); final array = struct.ref.array; final expected = []; for (int i = 0; i < arrayLength; i++) { final value = 100 + i; array.elements[i] = value; expected.add(value); } Expect.listEquals(expected, array.elements); final actual = []; for (int i = 0; i < arrayLength; i++) { actual.add(array[i]); } Expect.listEquals(expected, actual); malloc.free(struct); } void testWCharArrayElementsFirstAndLast() { final struct = Struct.create(); final elements = struct.array.elements; var value = 100 + 3; elements.first = value; Expect.equals(value, elements.first); value = 100 + 4; elements.last = value; Expect.equals(value, elements.last); }