blob: 2e16604b2112c5985c21e7a56e4bfd9aa9f96524 [file] [log] [blame]
// Copyright (c) 2022, 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.
// The view implementation requires flattening views of views.
import "dart:typed_data";
import "package:expect/expect.dart";
const int kListSize = 100;
const int kLoopSize = 1000;
@pragma("vm:never-inline")
void readArray(Uint8List list) {
for (var i = 0; i < list.length; i++) {
Expect.equals(0, list[i]);
}
}
@pragma("vm:never-inline")
void readView(Uint8List list) {
for (var i = 0; i < list.length; i++) {
Expect.equals(0, list[i]);
}
}
@pragma("vm:never-inline")
void readUnmodifiableView(Uint8List list) {
for (var i = 0; i < list.length; i++) {
Expect.equals(0, list[i]);
}
}
@pragma("vm:never-inline")
void readPolymorphic(Uint8List list) {
for (var i = 0; i < list.length; i++) {
Expect.equals(0, list[i]);
}
}
@pragma("vm:never-inline")
void readDynamic(dynamic list) {
for (var i = 0; i < list.length; i++) {
Expect.equals(0, list[i]);
}
}
void main() {
var array = new Uint8List(kListSize);
for (var i = 0; i < kLoopSize; i++) {
readArray(array);
readPolymorphic(array);
readDynamic(array);
}
var view = new Uint8List.view(array.buffer);
for (var i = 0; i < kLoopSize; i++) {
readView(view);
readPolymorphic(view);
readDynamic(view);
}
var unmodifiableView1 = new UnmodifiableUint8ListView(array);
for (var i = 0; i < kLoopSize; i++) {
readUnmodifiableView(unmodifiableView1);
readPolymorphic(unmodifiableView1);
readDynamic(unmodifiableView1);
}
var unmodifiableView2 = new UnmodifiableUint8ListView(view);
for (var i = 0; i < kLoopSize; i++) {
readUnmodifiableView(unmodifiableView2);
readPolymorphic(unmodifiableView2);
readDynamic(unmodifiableView2);
}
var viewOfView1 = new Uint8List.view(view.buffer);
for (var i = 0; i < kLoopSize; i++) {
readView(viewOfView1);
readPolymorphic(viewOfView1);
readDynamic(viewOfView1);
}
var viewOfView2 = new Uint8List.view(unmodifiableView1.buffer);
for (var i = 0; i < kLoopSize; i++) {
readView(viewOfView2);
readPolymorphic(viewOfView2);
readDynamic(viewOfView2);
}
var viewOfView3 = new Uint8List.view(unmodifiableView2.buffer);
for (var i = 0; i < kLoopSize; i++) {
readView(viewOfView3);
readDynamic(viewOfView3);
}
}