// Copyright 2015 The Chromium Authors. 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'; import 'package:flutter_test/flutter_test.dart'; import 'package:flutter/painting.dart'; import 'package:vector_math/vector_math_64.dart'; void main() { test('MatrixUtils.getAsTranslation()', () { Matrix4 test; test = new Matrix4.identity(); expect(MatrixUtils.getAsTranslation(test), equals(Offset.zero)); test = new Matrix4.zero(); expect(MatrixUtils.getAsTranslation(test), isNull); test = new Matrix4.rotationX(1.0); expect(MatrixUtils.getAsTranslation(test), isNull); test = new Matrix4.rotationZ(1.0); expect(MatrixUtils.getAsTranslation(test), isNull); test = new Matrix4.translationValues(1.0, 2.0, 0.0); expect(MatrixUtils.getAsTranslation(test), equals(const Offset(1.0, 2.0))); test = new Matrix4.translationValues(1.0, 2.0, 3.0); expect(MatrixUtils.getAsTranslation(test), isNull); test = new Matrix4.identity(); expect(MatrixUtils.getAsTranslation(test), equals(Offset.zero)); test.rotateX(2.0); expect(MatrixUtils.getAsTranslation(test), isNull); test = new Matrix4.identity(); expect(MatrixUtils.getAsTranslation(test), equals(Offset.zero)); test.scale(2.0); expect(MatrixUtils.getAsTranslation(test), isNull); test = new Matrix4.identity(); expect(MatrixUtils.getAsTranslation(test), equals(Offset.zero)); test.translate(2.0, -2.0); expect(MatrixUtils.getAsTranslation(test), equals(const Offset(2.0, -2.0))); test.translate(4.0, 8.0); expect(MatrixUtils.getAsTranslation(test), equals(const Offset(6.0, 6.0))); }); test('cylindricalProjectionTransform identity', () { final Matrix4 initialState = MatrixUtils.createCylindricalProjectionTransform( radius: 0.0, angle: 0.0, perspective: 0.0, ); expect(initialState, new Matrix4.identity()); }); test('cylindricalProjectionTransform rotate with no radius', () { final Matrix4 simpleRotate = MatrixUtils.createCylindricalProjectionTransform( radius: 0.0, angle: pi / 2.0, perspective: 0.0, ); expect(simpleRotate, new Matrix4.rotationX(pi / 2.0)); }); test('cylindricalProjectionTransform radius does not change scale', () { final Matrix4 noRotation = MatrixUtils.createCylindricalProjectionTransform( radius: 1000000.0, angle: 0.0, perspective: 0.0, ); expect(noRotation, new Matrix4.identity()); }); test('cylindricalProjectionTransform calculation spot check', () { final Matrix4 actual = MatrixUtils.createCylindricalProjectionTransform( radius: 100.0, angle: pi / 3.0, perspective: 0.001, ); expect(actual.storage, <dynamic>[ 1.0, 0.0, 0.0, 0.0, 0.0, moreOrLessEquals(0.5), moreOrLessEquals(0.8660254037844386), moreOrLessEquals(-0.0008660254037844386), 0.0, moreOrLessEquals(-0.8660254037844386), moreOrLessEquals(0.5), moreOrLessEquals(-0.0005), 0.0, moreOrLessEquals(-86.60254037844386), moreOrLessEquals(-50.0), 1.05, ]); }); }