blob: 984506a9cb988ea4856ed4f92a860f3c7c9afde8 [file]
// Copyright (c) 2015, Google Inc. 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' as math;
import 'dart:typed_data';
import 'package:benchmark_harness/benchmark_harness.dart';
import 'package:vector_math/vector_math.dart';
Never _unreachableAssertionError() => throw AssertionError('Unreachable');
class ConstructorBenchmark extends BenchmarkBase {
ConstructorBenchmark() : super('Vector2()');
@override
void run() {
Vector2? v;
for (var i = 0; i < 100000; i++) {
v = Vector2(100, 100);
}
if (v == null) _unreachableAssertionError();
}
}
class ConstructorZeroBenchmark extends BenchmarkBase {
ConstructorZeroBenchmark() : super('Vector2.zero()');
@override
void run() {
Vector2? v;
for (var i = 0; i < 100000; i++) {
v = Vector2.zero();
}
if (v == null) _unreachableAssertionError();
}
}
class ConstructorArrayBenchmark extends BenchmarkBase {
ConstructorArrayBenchmark() : super('Vector2.array()');
@override
void run() {
Vector2? v;
for (var i = 0.0; i < 100000; i++) {
v = Vector2.array([i, i]);
}
if (v == null) _unreachableAssertionError();
}
}
class ConstructorAllBenchmark extends BenchmarkBase {
ConstructorAllBenchmark() : super('Vector2.all()');
@override
void run() {
Vector2? v;
for (var i = 0.0; i < 100000; i++) {
v = Vector2.all(i);
}
if (v == null) _unreachableAssertionError();
}
}
class ConstructorCopyBenchmark extends BenchmarkBase {
ConstructorCopyBenchmark() : super('Vector2.copy()');
@override
void run() {
Vector2? v;
final copyFrom = Vector2(1, 1);
for (var i = 0.0; i < 100000; i++) {
v = Vector2.copy(copyFrom);
}
if (v == null) _unreachableAssertionError();
}
}
class ConstructorFromFloat32ListBenchmark extends BenchmarkBase {
ConstructorFromFloat32ListBenchmark() : super('Vector2.fromFloat32List()');
@override
void run() {
Vector2? v;
final list = Float32List.fromList([0.0, 0.0]);
for (var i = 0.0; i < 100000; i++) {
v = Vector2.fromFloat32List(list);
}
if (v == null) _unreachableAssertionError();
}
}
class ConstructorFromBufferBenchmark extends BenchmarkBase {
ConstructorFromBufferBenchmark() : super('Vector2.fromBuffer()');
@override
void run() {
Vector2? v;
final buffer = Uint32List(2).buffer;
for (var i = 0.0; i < 100000; i++) {
v = Vector2.fromBuffer(buffer, 0);
}
if (v == null) _unreachableAssertionError();
}
}
class ConstructorRandomBenchmark extends BenchmarkBase {
ConstructorRandomBenchmark() : super('Vector2.random()');
@override
void run() {
Vector2? v;
final random = math.Random();
for (var i = 0.0; i < 100000; i++) {
v = Vector2.random(random);
}
if (v == null) _unreachableAssertionError();
}
}
class SetFromBenchmark extends BenchmarkBase {
SetFromBenchmark() : super('Vector2.setFrom()');
final Vector2 source = Vector2(100, 100);
@override
void run() {
var v = Vector2.zero();
for (var i = 0; i < 100000; i++) {
v = v..setFrom(source);
}
if (v.x != 100 || v.y != 100) _unreachableAssertionError();
}
}
class DotProductBenchmark extends BenchmarkBase {
DotProductBenchmark() : super('Vector2.dot()');
final Vector2 v1 = Vector2(100, 100);
final Vector2 v2 = Vector2(100, 200);
@override
void run() {
var r = .0;
for (var i = 0; i < 100000; i++) {
r += v1.dot(v2);
}
if (r != 30000 * 100000) _unreachableAssertionError();
}
}
void main() {
void report(BenchmarkBase Function() create) => create().report();
[
ConstructorBenchmark.new,
ConstructorZeroBenchmark.new,
ConstructorArrayBenchmark.new,
ConstructorAllBenchmark.new,
ConstructorCopyBenchmark.new,
ConstructorFromFloat32ListBenchmark.new,
ConstructorFromBufferBenchmark.new,
ConstructorRandomBenchmark.new,
SetFromBenchmark.new,
DotProductBenchmark.new,
].forEach(report);
}