blob: 864ce4523c24a75d3a0ddb32039befa948b48f60 [file] [log] [blame]
// 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.
import 'dart:math' show Random;
import 'dart:typed_data';
import 'package:expect/expect.dart';
void main() {
var r = Random();
int genInt() => r.nextInt(256);
double genDbl() => r.nextDouble();
Int32x4 genIx4() => Int32x4(genInt(), genInt(), genInt(), genInt());
Float32x4 genFx4() => Float32x4(genDbl(), genDbl(), genDbl(), genDbl());
Float64x2 genDx2() => Float64x2(genDbl(), genDbl());
test("Uint8List", (n) => Uint8List(n)..fill(genInt));
test("Uint16List", (n) => Uint16List(n)..fill(genInt));
test("Uint32List", (n) => Uint32List(n)..fill(genInt));
test("Int8List", (n) => Int8List(n)..fill(genInt));
test("Int16List", (n) => Int16List(n)..fill(genInt));
test("Int32List", (n) => Int32List(n)..fill(genInt));
test("Uint8ClampedList", (n) => Uint8ClampedList(n)..fill(genInt));
test("Float32List", (n) => Float32List(n)..fill(genDbl));
test("Float64List", (n) => Float64List(n)..fill(genDbl));
test("Int32x4List", (n) => Int32x4List(n)..fill(genIx4));
test("Float32x4List", (n) => Float32x4List(n)..fill(genFx4));
test("Float64x2List", (n) => Float64x2List(n)..fill(genDx2));
}
void test<T>(String name, List<T> create(int n)) {
var l1 = create(17);
var l2 = create(13);
List<T> l3;
try {
// Shouldn't throw:
l3 = l1 + l2;
} catch (e) {
// Until we change Expect.fail to return Never.
Expect.fail("$name: $e") as Never;
}
Expect.equals(30, l3.length);
if (0 is T || 0.0 is T) {
// Int32x4 etc. do not support `==`.
Expect.listEquals(l1, l3.sublist(0, 17), "$name first");
Expect.listEquals(l2, l3.sublist(17), "$name second");
}
// Result is growable, shouldn't throw.
try {
l3.add(l3.first);
} catch (e) {
Expect.fail("$name: $e");
}
}
// Fill a list with (random) generated values.
extension<T> on List<T> {
void fill(T gen()) {
for (var i = 0; i < length; i++) {
this[i] = gen();
}
}
}