1 module doml.tests.matrix_2d_test;
2 
3 import std.stdio;
4 import doml.tests.dunit_tests;
5 import Math = doml.math;
6 import doml.matrix_2d;
7 import doml.vector_2d;
8 
9 /*
10  * The MIT License
11  *
12  * Copyright (c) 2015-2021 Richard Greenlees
13  ^$%# Translated by jordan4ibanez
14  *
15  * Permission is hereby granted, free of charge, to any person obtaining a copy
16  * of this software and associated documentation files (the "Software"), to deal
17  * in the Software without restriction, including without limitation the rights
18  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
19  * copies of the Software, and to permit persons to whom the Software is
20  * furnished to do so, subject to the following conditions:
21  *
22  * The above copyright notice and this permission notice shall be included in
23  * all copies or substantial portions of the Software.
24  *
25  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
26  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
27  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
28  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
29  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
30  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
31  * THE SOFTWARE.
32  */
33 
34 unittest {
35 
36     // This is going to be lumped in to one thing, assert tells you what line anyways
37 
38     writeln("\nBEGINNING MATRIX2D TESTING\n");
39     
40     // test mul
41     {
42         assertTrue(
43             Matrix2d(87, 124, 129, 184).equals(Matrix2d(2, 3, 5, 7).mul(Matrix2d(11, 13, 17, 19)), 0.001)
44         );
45     }
46 
47     // test mul local
48     {
49         assertTrue(
50             Matrix2d(87, 124, 129, 184).equals(Matrix2d(11, 13, 17, 19).mulLocal(Matrix2d(2, 3, 5, 7)), 0.001)
51         );
52     }
53 
54     // test determinant
55     {
56         assertTrue(-1.0 == Matrix2d(2, 3, 5, 7).determinant());
57     }
58 
59     // test invert
60     {
61         assertTrue(
62             Matrix2d(-19.0/12, 13.0/12, 17.0/12, -11.0/12).equals(Matrix2d(11, 13, 17, 19).invert(), 0.001)
63         );
64     }
65 
66     // test rotation
67     {
68         immutable double angle = Math.PI / 4.0;
69         Matrix2d mat = Matrix2d().rotation(angle);
70         immutable double coord = 1 / Math.sqrt(2);
71         assertTrue(
72             Vector2d(coord, coord).equals(mat.transform(Vector2d(1, 0)), 0.001)
73         );
74     }
75 
76     // test normal
77     {
78         assertTrue(
79             Matrix2d(2, 3, 5, 7).invert().transpose().equals(Matrix2d(2, 3, 5, 7).normal(), 0.001)
80         );
81     }
82 
83     // test positive x
84     {
85         Matrix2d inv = Matrix2d(2, 3, 5, 7).invert();
86         Vector2d expected = inv.transform(Vector2d(1, 0)).normalize();
87         assertTrue(
88             expected.equals(Matrix2d(2, 3, 5, 7).positiveX(Vector2d()), 0.001)
89         );
90     }
91 
92     // test positive y
93     {
94         Matrix2d inv = Matrix2d(11, 13, 17, 19).invert();
95         Vector2d expected = inv.transform(Vector2d(0, 1)).normalize();
96         assertTrue(
97             expected.equals(Matrix2d(11, 13, 17, 19).positiveY(Vector2d()), 0.001)
98         );
99     }
100 
101     writeln("PASSED!");
102 }