source: Dev/trunk/src/client/dojox/gfx/tests/matrix.js @ 536

Last change on this file since 536 was 483, checked in by hendrikvanantwerpen, 11 years ago

Added Dojo 1.9.3 release.

File size: 6.4 KB
Line 
1dojo.provide("dojox.gfx.tests.matrix");
2dojo.require("dojox.gfx.matrix");
3
4(function(){
5        var m = dojox.gfx.matrix;
6        var eq = function(t, a, b){ t.t(2 * Math.abs(a - b) / ((a < 1 && b < 1) ? 1 : a + b) < 1e-6); };
7        tests.register("dojox.gfx.tests.matrix", [
8                function IdentityTest(t){
9                        var a = new m.Matrix2D();
10                        eq(t, a.xx, 1);
11                        eq(t, a.yy, 1);
12                        eq(t, a.xy, 0);
13                        eq(t, a.yx, 0);
14                        eq(t, a.dx, 0);
15                        eq(t, a.dy, 0);
16                },
17                function Rot30gTest(t){
18                        var a = m.rotateg(30);
19                        eq(t, a.xx, a.yy);
20                        eq(t, a.xy, -a.yx);
21                        eq(t, a.dx, 0);
22                        eq(t, a.dy, 0);
23                        eq(t, a.yx, 0.5);
24                        t.t(a.xy < 0);
25                        t.t(a.yx > 0);
26                },
27                function Rot45gTest(t){
28                        var a = m.rotateg(45);
29                        eq(t, a.xx, a.yy);
30                        eq(t, a.xy, -a.yx);
31                        eq(t, a.dx, 0);
32                        eq(t, a.dy, 0);
33                        eq(t, a.xx, a.yx);
34                        eq(t, a.yy, -a.xy);
35                },
36                function Rot90gTest(t){
37                        var a = m.rotateg(90);
38                        eq(t, a.xx, a.yy);
39                        eq(t, a.xy, -a.yx);
40                        eq(t, a.dx, 0);
41                        eq(t, a.dy, 0);
42                        eq(t, a.xx, 0);
43                        eq(t, a.yx, 1);
44                },
45                function CombineIdentitiesTest(t){
46                        var a = m.normalize([new m.Matrix2D(), new m.Matrix2D(), new m.Matrix2D()]);
47                        eq(t, a.xx, 1);
48                        eq(t, a.yy, 1);
49                        eq(t, a.xy, 0);
50                        eq(t, a.yx, 0);
51                        eq(t, a.dx, 0);
52                        eq(t, a.dy, 0);
53                },
54                function CombineExclusiveTest(t){
55                        var a = m.normalize([m.rotateg(30), m.rotateg(-30)]);
56                        eq(t, a.xx, 1);
57                        eq(t, a.yy, 1);
58                        eq(t, a.xy, 0);
59                        eq(t, a.yx, 0);
60                        eq(t, a.dx, 0);
61                        eq(t, a.dy, 0);
62                },
63                function CombineInvertedTest(t){
64                        var a = m.normalize([m.rotateg(30), m.invert(m.rotateg(30))]);
65                        eq(t, a.xx, 1);
66                        eq(t, a.yy, 1);
67                        eq(t, a.xy, 0);
68                        eq(t, a.yx, 0);
69                        eq(t, a.dx, 0);
70                        eq(t, a.dy, 0);
71                },
72                function Rot90gAtTest(t){
73                        var a = m.rotategAt(90, 10, 10);
74                        eq(t, a.xx, a.yy);
75                        eq(t, a.xy, -a.yx);
76                        eq(t, a.dx, 20);
77                        eq(t, a.dy, 0);
78                        eq(t, a.xx, 0);
79                        eq(t, a.yx, 1);
80                },
81                function MultPointTest1(t){
82                        var b = m.multiplyPoint(m.rotategAt(90, 10, 10), 10, 10);
83                        eq(t, b.x, 10);
84                        eq(t, b.y, 10);
85                },
86                function MultPointTest2(t){
87                        var b = m.multiplyPoint(m.rotategAt(90, 10, 10), {x: 10, y: 5});
88                        eq(t, b.x, 15);
89                        eq(t, b.y, 10);
90                },
91                function MultPointTest3(t){
92                        var b = m.multiplyPoint(m.rotategAt(90, 10, 10), 10, 15);
93                        eq(t, b.x, 5);
94                        eq(t, b.y, 10);
95                },
96                function ScaleTest1(t){
97                        var a = m.normalize([m.scale(2, 1), m.invert(m.rotateg(45))]);
98                        eq(t, a.xx, 2 * a.yy);
99                        eq(t, a.xy, -2 * a.yx);
100                        eq(t, a.dx, 0);
101                        eq(t, a.dy, 0);
102                        eq(t, a.xx, a.xy);
103                        eq(t, a.yy, -a.yx);
104                },
105                function ScaleTest2(t){
106                        var a = m.normalize([m.scale(1, 2), m.invert(m.rotateg(45))]);
107                        eq(t, 2 * a.xx, a.yy);
108                        eq(t, 2 * a.xy, -a.yx);
109                        eq(t, a.dx, 0);
110                        eq(t, a.dy, 0);
111                        eq(t, a.xx, a.xy);
112                        eq(t, a.yy, -a.yx);
113                },
114                function ScaleTest3(t){
115                        var a = m.normalize([m.rotateg(45), m.scale(2, 1)]);
116                        eq(t, a.xx, 2 * a.yy);
117                        eq(t, a.yx, -2 * a.xy);
118                        eq(t, a.dx, 0);
119                        eq(t, a.dy, 0);
120                        eq(t, a.xx, a.yx);
121                        eq(t, a.yy, -a.xy);
122                },
123                function ScaleTest4(t){
124                        var a = m.normalize([m.rotateg(45), m.scale(1, 2)]);
125                        eq(t, 2 * a.xx, a.yy);
126                        eq(t, 2 * a.yx, -a.xy);
127                        eq(t, a.dx, 0);
128                        eq(t, a.dy, 0);
129                        eq(t, a.xx, a.yx);
130                        eq(t, a.yy, -a.xy);
131                },
132                function ScaleTest5(t){
133                        var a = m.normalize([m.rotategAt(45, 100, 100), m.scale(2)]);
134                        eq(t, a.xx, a.yy);
135                        eq(t, a.xy, -a.yx);
136                        eq(t, a.xx, a.yx);
137                        eq(t, a.yy, -a.xy);
138                        eq(t, a.dx, 100);
139                        t.t(a.dy < 0);
140                        var b = m.normalize([m.scale(2), m.rotategAt(45, 100, 100)]);
141                        eq(t, b.xx, b.yy);
142                        eq(t, b.xy, -b.yx);
143                        eq(t, b.xx, b.yx);
144                        eq(t, b.yy, -b.xy);
145                        eq(t, b.dx, 200);
146                        t.t(b.dy < 0);
147                        eq(t, a.xx, b.xx);
148                        eq(t, a.xy, b.xy);
149                        eq(t, a.yx, b.yx);
150                        eq(t, a.yy, b.yy);
151                        eq(t, 2 * a.dx, b.dx);
152                        eq(t, 2 * a.dy, b.dy);
153                        var c = m.normalize([m.rotateg(45), m.scale(2)]);
154                        eq(t, c.xx, c.yy);
155                        eq(t, c.xy, -c.yx);
156                        eq(t, c.xx, c.yx);
157                        eq(t, c.yy, -c.xy);
158                        eq(t, c.dx, 0);
159                        eq(t, c.dy, 0);
160                        var d = m.normalize([m.scale(2), m.rotateg(45)]);
161                        eq(t, d.xx, d.yy);
162                        eq(t, d.xy, -d.yx);
163                        eq(t, d.xx, d.yx);
164                        eq(t, d.yy, -d.xy);
165                        eq(t, d.dx, 0);
166                        eq(t, d.dy, 0);
167                        eq(t, a.xx, c.xx);
168                        eq(t, a.xy, c.xy);
169                        eq(t, a.yx, c.yx);
170                        eq(t, a.yy, c.yy);
171                        eq(t, a.xx, d.xx);
172                        eq(t, a.xy, d.xy);
173                        eq(t, a.yx, d.yx);
174                        eq(t, a.yy, d.yy);
175                },
176                function ScaleTest6(t){
177                        var a = m.normalize(6);
178                        eq(t, a.xx, 6);
179                        eq(t, a.yy, 6);
180                        eq(t, a.xy, 0);
181                        eq(t, a.yx, 0);
182                        eq(t, a.dx, 0);
183                        eq(t, a.dy, 0);
184                },
185                function ScaleTest7(t){
186                        var a = m.normalize([2, m.scale(2, 1)]);
187                        eq(t, a.xx, 4);
188                        eq(t, a.yy, 2);
189                        eq(t, a.xy, 0);
190                        eq(t, a.yx, 0);
191                        eq(t, a.dx, 0);
192                        eq(t, a.dy, 0);
193                },
194                function TranslateTest(t){
195                        var a = m.normalize({dx: 100, dy: 200});
196                        eq(t, a.xx, 1);
197                        eq(t, a.yy, 1);
198                        eq(t, a.xy, 0);
199                        eq(t, a.yx, 0);
200                        eq(t, a.dx, 100);
201                        eq(t, a.dy, 200);
202                },
203                function ReflectTest1(t){
204                        var b = m.multiplyPoint(m.reflect(1, 1), 1, 0);
205                        eq(t, b.x, 0);
206                        eq(t, b.y, 1);
207                },
208                function ReflectTest2(t){
209                        var b = m.multiplyPoint(m.reflect(1, 1), 0, 1);
210                        eq(t, b.x, 1);
211                        eq(t, b.y, 0);
212                },
213                function ProjectTest1(t){
214                        var b = m.multiplyPoint(m.project(1, 1), 1, 0);
215                        eq(t, b.x, 0.5);
216                        eq(t, b.y, 0.5);
217                },
218                function ProjectTest2(t){
219                        var b = m.multiplyPoint(m.project(1, 1), 0, 1);
220                        eq(t, b.x, 0.5);
221                        eq(t, b.y, 0.5);
222                },
223                function IsIdentityTest(t){
224                        var a = new m.Matrix2D();
225                        tests.assertTrue(m.isIdentity(a));
226                        a.xy=1;
227                        tests.assertFalse(m.isIdentity(a));
228                },
229                function MultiplyRectangle(t){
230                        var a = new m.Matrix2D(),
231                                r = {x:0,y:0,width:3,height:2},
232                                res;
233                        // multiply by identity -> same rect
234                        res = m.multiplyRectangle(a, r);
235                        tests.assertTrue(res.x == r.x && res.y == r.y && res.width == r.width && res.height == r.height);                       
236                        res = m.multiplyRectangle(m.scale(2,2), r);
237                        eq(t, res.x, 0);
238                        eq(t, res.y, 0);
239                        eq(t, res.width, 6);
240                        eq(t, res.height, 4);
241                        a = m.rotategAt(-45, 0, 0);
242                        var tl = m.multiplyPoint(a, 0, 0), // top left
243                                tr = m.multiplyPoint(a, 3, 0), // top right
244                                br = m.multiplyPoint(a, 3, 2), // bottom right
245                                bl = m.multiplyPoint(a, 0, 2), // bottom left
246                                exp = {x : tl.x, y:tr.y, width: br.x, height: bl.y - tr.y}; // expected
247                        res = m.multiplyRectangle(a, r);
248                        eq(t, res.x, exp.x);
249                        eq(t, res.y, exp.y);
250                        eq(t, res.width, exp.width);
251                        eq(t, res.height, exp.height);
252                        // matrices array
253                        res = m.multiplyRectangle([m.translate(10,10), m.scale(2,2)], r);
254                        eq(t, res.x, 10);
255                        eq(t, res.y, 10);
256                        eq(t, res.width, 6);
257                        eq(t, res.height, 4);
258                }
259               
260        ]);
261})();
Note: See TracBrowser for help on using the repository browser.