Skip to content

Commit 105bc96

Browse files
committed
added unit tests for Pmatrix 3D
1 parent d35f4de commit 105bc96

File tree

1 file changed

+226
-0
lines changed

1 file changed

+226
-0
lines changed
Lines changed: 226 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,226 @@
1+
package processing.core;
2+
3+
import static org.junit.Assert.*;
4+
import org.junit.Test;
5+
6+
public class TestPMatrix3D {
7+
8+
@Test
9+
public void testConstructorsResetAndGet() {
10+
PMatrix3D m = new PMatrix3D();
11+
float[] vals = m.get(null);
12+
assertEquals(1, vals[0], 1e-6);
13+
assertEquals(1, vals[5], 1e-6);
14+
assertEquals(1, vals[10], 1e-6);
15+
assertEquals(1, vals[15], 1e-6);
16+
17+
m.m00 = 2;
18+
m.reset();
19+
vals = m.get(null);
20+
assertEquals(1, vals[0], 1e-6);
21+
}
22+
23+
@Test
24+
public void testSetAndGetMethods() {
25+
PMatrix3D m = new PMatrix3D();
26+
float[] source = {
27+
2, 3, 4, 5,
28+
6, 7, 8, 9,
29+
10,11,12,13,
30+
14,15,16,17
31+
};
32+
m.set(source);
33+
float[] target = m.get(null);
34+
for (int i = 0; i < 16; i++) {
35+
assertEquals(source[i], target[i], 1e-6);
36+
}
37+
38+
m.set(1, 2, 3, 4, 5, 6);
39+
target = m.get(null);
40+
assertEquals(1, target[0], 1e-6);
41+
assertEquals(2, target[1], 1e-6);
42+
assertEquals(0, target[2], 1e-6);
43+
assertEquals(3, target[3], 1e-6);
44+
45+
PMatrix2D m2d = new PMatrix2D(1, 2, 3, 4, 5, 6);
46+
m.set(m2d);
47+
target = m.get(null);
48+
assertEquals(1, target[0], 1e-6);
49+
assertEquals(2, target[1], 1e-6);
50+
assertEquals(0, target[2], 1e-6);
51+
assertEquals(3, target[3], 1e-6);
52+
}
53+
54+
@Test
55+
public void testTranslate() {
56+
PMatrix3D m = new PMatrix3D();
57+
m.translate(0, 0, 0);
58+
float[] original = new PMatrix3D().get(null);
59+
float[] result = m.get(null);
60+
for (int i = 0; i < 16; i++) {
61+
assertEquals(original[i], result[i], 1e-6);
62+
}
63+
64+
m.reset();
65+
m.translate(10, -5, 3);
66+
result = m.get(null);
67+
assertEquals(10, result[3], 1e-6);
68+
assertEquals(-5, result[7], 1e-6);
69+
assertEquals(3, result[11], 1e-6);
70+
assertEquals(1, result[15], 1e-6);
71+
}
72+
73+
@Test
74+
public void testRotateAndShear() {
75+
PMatrix3D m = new PMatrix3D();
76+
m.reset();
77+
m.rotate(0);
78+
float[] original = new PMatrix3D().get(null);
79+
float[] result = m.get(null);
80+
for (int i = 0; i < 16; i++) {
81+
assertEquals(original[i], result[i], 1e-6);
82+
}
83+
84+
m.reset();
85+
m.rotateZ((float) Math.PI / 2);
86+
result = m.get(null);
87+
assertEquals(0, result[0], 1e-6);
88+
assertEquals(-1, result[1], 1e-6);
89+
assertEquals(1, result[4], 1e-6);
90+
assertEquals(0, result[5], 1e-6);
91+
92+
m.reset();
93+
m.shearX((float) Math.PI / 4);
94+
result = m.get(null);
95+
float expectedT = (float) Math.tan(Math.PI / 4);
96+
assertEquals(expectedT, result[1], 1e-6);
97+
98+
m.reset();
99+
m.shearY((float) Math.PI / 4);
100+
result = m.get(null);
101+
assertEquals(expectedT, result[4], 1e-6);
102+
}
103+
104+
@Test
105+
public void testScale() {
106+
PMatrix3D m = new PMatrix3D();
107+
m.reset();
108+
m.scale(1);
109+
float[] original = new PMatrix3D().get(null);
110+
float[] result = m.get(null);
111+
for (int i = 0; i < 16; i++) {
112+
assertEquals(original[i], result[i], 1e-6);
113+
}
114+
115+
m.reset();
116+
m.scale(2, 3, 4);
117+
result = m.get(null);
118+
assertEquals(2, result[0], 1e-6);
119+
assertEquals(3, result[5], 1e-6);
120+
assertEquals(4, result[10], 1e-6);
121+
122+
m.reset();
123+
m.scale(0, 1, 1);
124+
result = m.get(null);
125+
assertEquals(0, result[0], 1e-6);
126+
}
127+
128+
@Test
129+
public void testApplyAndPreApply() {
130+
PMatrix3D m = new PMatrix3D();
131+
m.reset();
132+
PMatrix3D n = new PMatrix3D(
133+
2, 3, 4, 5,
134+
6, 7, 8, 9,
135+
10,11,12,13,
136+
14,15,16,17
137+
);
138+
m.apply(n);
139+
float[] result = m.get(null);
140+
float[] expected = n.get(null);
141+
for (int i = 0; i < 16; i++) {
142+
assertEquals(expected[i], result[i], 1e-6);
143+
}
144+
145+
m.reset();
146+
m.preApply(n);
147+
result = m.get(null);
148+
for (int i = 0; i < 16; i++) {
149+
assertEquals(expected[i], result[i], 1e-6);
150+
}
151+
}
152+
153+
@Test
154+
public void testMultMethods() {
155+
PMatrix3D m = new PMatrix3D();
156+
m.reset();
157+
PVector p = new PVector(1, 2, 3);
158+
PVector resultP = m.mult(p, null);
159+
assertEquals(1, resultP.x, 1e-6);
160+
assertEquals(2, resultP.y, 1e-6);
161+
assertEquals(3, resultP.z, 1e-6);
162+
163+
float[] vec3 = {1, 2, 3};
164+
float[] out3 = m.mult(vec3, new float[3]);
165+
assertEquals(1, out3[0], 1e-6);
166+
assertEquals(2, out3[1], 1e-6);
167+
assertEquals(3, out3[2], 1e-6);
168+
169+
float[] vec4 = {1, 2, 3, 4};
170+
float[] out4 = m.mult(vec4, new float[4]);
171+
for (int i = 0; i < 4; i++) {
172+
assertEquals(vec4[i], out4[i], 1e-6);
173+
}
174+
175+
try {
176+
m.mult(vec3, vec3);
177+
fail("Expected RuntimeException for identical source and target arrays.");
178+
} catch (RuntimeException e) {
179+
// Exception expected.
180+
}
181+
182+
m.reset();
183+
m.translate(10, 20, 30);
184+
float x = m.multX(1, 2, 3);
185+
float y = m.multY(1, 2, 3);
186+
float z = m.multZ(1, 2, 3);
187+
float w = m.multW(1, 2, 3);
188+
assertEquals(1 + 10, x, 1e-6);
189+
assertEquals(2 + 20, y, 1e-6);
190+
assertEquals(3 + 30, z, 1e-6);
191+
assertEquals(1, w, 1e-6);
192+
}
193+
194+
@Test
195+
public void testTransposeAndDeterminant() {
196+
PMatrix3D m = new PMatrix3D(
197+
2, 3, 4, 5,
198+
6, 7, 8, 9,
199+
10,11,12,13,
200+
14,15,16,17
201+
);
202+
float det = m.determinant();
203+
m.transpose();
204+
float det2 = m.determinant();
205+
assertEquals(det, det2, 1e-6);
206+
}
207+
208+
@Test
209+
public void testInvert() {
210+
PMatrix3D m = new PMatrix3D();
211+
m.reset();
212+
boolean inverted = m.invert();
213+
assertTrue(inverted);
214+
float[] result = m.get(null);
215+
PMatrix3D identity = new PMatrix3D();
216+
float[] idArr = identity.get(null);
217+
for (int i = 0; i < 16; i++) {
218+
assertEquals(idArr[i], result[i], 1e-6);
219+
}
220+
221+
m.reset();
222+
m.scale(0, 1, 1);
223+
inverted = m.invert();
224+
assertFalse(inverted);
225+
}
226+
}

0 commit comments

Comments
 (0)