| // 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); | |
| } |