| // 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 'package:test/test.dart'; | |
| import 'package:vector_math/vector_math.dart'; | |
| Vector2 $v2(double x, double y) => Vector2(x, y); | |
| Vector3 $v3(double x, double y, double z) => Vector3(x, y, z); | |
| Vector4 $v4(double x, double y, double z, double w) => Vector4(x, y, z, w); | |
| void relativeTest(dynamic output, dynamic expectedOutput) { | |
| final errorThreshold = 0.0005; | |
| final num error = relativeError(output, expectedOutput).abs(); | |
| expect( | |
| error >= errorThreshold, | |
| isFalse, | |
| reason: '$output != $expectedOutput : relativeError = $error', | |
| ); | |
| } | |
| void absoluteTest(dynamic output, dynamic expectedOutput) { | |
| final errorThreshold = 0.0005; | |
| final num error = absoluteError(output, expectedOutput).abs(); | |
| expect( | |
| error >= errorThreshold, | |
| isFalse, | |
| reason: '$output != $expectedOutput : absoluteError = $error', | |
| ); | |
| } | |
| dynamic makeMatrix(int rows, int cols) { | |
| if (rows != cols) { | |
| return null; | |
| } | |
| if (cols == 2) { | |
| return Matrix2.zero(); | |
| } | |
| if (cols == 3) { | |
| return Matrix3.zero(); | |
| } | |
| if (cols == 4) { | |
| return Matrix4.zero(); | |
| } | |
| return null; | |
| } | |
| T parseMatrix<T>(String input) { | |
| input = input.trim(); | |
| final rows = input.split('\n'); | |
| final values = <double>[]; | |
| var col_count = 0; | |
| for (var i = 0; i < rows.length; i++) { | |
| rows[i] = rows[i].trim(); | |
| final cols = rows[i].split(' '); | |
| for (var j = 0; j < cols.length; j++) { | |
| cols[j] = cols[j].trim(); | |
| } | |
| for (var j = 0; j < cols.length; j++) { | |
| if (cols[j].isEmpty) { | |
| continue; | |
| } | |
| if (i == 0) { | |
| col_count++; | |
| } | |
| values.add(double.parse(cols[j])); | |
| } | |
| } | |
| final dynamic m = makeMatrix(rows.length, col_count); | |
| for (var j = 0; j < rows.length; j++) { | |
| for (var i = 0; i < col_count; i++) { | |
| // ignore: avoid_dynamic_calls | |
| m[m.index(j, i)] = values[j * col_count + i]; | |
| } | |
| } | |
| return m as T; | |
| } | |
| T parseVector<T extends Vector>(String v) { | |
| v = v.trim(); | |
| final Pattern pattern = RegExp( | |
| '[\\s]+', | |
| multiLine: true, | |
| caseSensitive: false, | |
| ); | |
| final rows = v.split(pattern); | |
| final values = <double>[]; | |
| for (var i = 0; i < rows.length; i++) { | |
| rows[i] = rows[i].trim(); | |
| if (rows[i].isEmpty) { | |
| continue; | |
| } | |
| values.add(double.parse(rows[i])); | |
| } | |
| Vector r; | |
| if (values.length == 2) { | |
| r = Vector2(values[0], values[1]); | |
| } else if (values.length == 3) { | |
| r = Vector3(values[0], values[1], values[2]); | |
| } else if (values.length == 4) { | |
| r = Vector4(values[0], values[1], values[2], values[3]); | |
| } else { | |
| throw UnimplementedError(); | |
| } | |
| return r as T; | |
| } |