Skip to content

Commit 369321a

Browse files
committed
Added unit tests for Quatd.equals/isSimilar and Vec3d.equals/isSimilar
Fixed a bug related to NaN in isSimilar.
1 parent bf0941d commit 369321a

5 files changed

Lines changed: 273 additions & 9 deletions

File tree

build.gradle

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
buildscript {
22
repositories {
3-
jcenter()
3+
if( JavaVersion.current() == JavaVersion.VERSION_1_7 ) {
4+
// Fallback for JDK 7 that can no longer connect to jcenter with https
5+
maven { url "http://jcenter.bintray.com" }
6+
} else {
7+
jcenter()
8+
}
49
}
510
dependencies {
611
// This sucks down a lot of stuff that 'normal' users wouldn't
@@ -12,6 +17,7 @@ buildscript {
1217
}
1318

1419
apply plugin: 'java'
20+
apply plugin: 'groovy'
1521
apply plugin: 'maven'
1622

1723
version='1.3.0-SNAPSHOT'
@@ -61,9 +67,18 @@ dependencies {
6167
// classes.
6268
compile "org.jmonkeyengine:jme3-core:$jmeVersion"
6369

64-
compile 'org.slf4j:slf4j-api:1.7.13'
70+
compile 'org.slf4j:slf4j-api:1.7.13'
71+
72+
testCompile 'junit:junit:4.12'
73+
testCompile 'org.codehaus.groovy:groovy-all:2.4.11'
6574
}
6675

76+
test {
77+
testLogging {
78+
// I want to see the tests that are run and pass, etc.
79+
events "passed", "skipped", "failed", "standardOut", "standardError"
80+
}
81+
}
6782

6883
// Configuration to produce maven-repo style -sources and -javadoc jars
6984
task sourcesJar(type: Jar) {

src/main/java/com/simsilica/mathd/Quatd.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,16 +116,16 @@ public boolean isSimilar( Quatd other, double epsilon ) {
116116
if( other == null ) {
117117
return false;
118118
}
119-
if( Math.abs(other.x - x) > epsilon ) {
119+
if( Double.compare(Math.abs(other.x - x), epsilon) > 0 ) {
120120
return false;
121121
}
122-
if( Math.abs(other.y - y) > epsilon ) {
122+
if( Double.compare(Math.abs(other.y - y), epsilon) > 0 ) {
123123
return false;
124124
}
125-
if( Math.abs(other.z - z) > epsilon ) {
125+
if( Double.compare(Math.abs(other.z - z), epsilon) > 0 ) {
126126
return false;
127127
}
128-
if( Math.abs(other.w - w) > epsilon ) {
128+
if( Double.compare(Math.abs(other.w - w), epsilon) > 0 ) {
129129
return false;
130130
}
131131
return true;

src/main/java/com/simsilica/mathd/Vec3d.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,13 +113,13 @@ public boolean isSimilar( Vec3d other, double epsilon ) {
113113
if( other == null ) {
114114
return false;
115115
}
116-
if( Math.abs(other.x - x) > epsilon ) {
116+
if( Double.compare(Math.abs(other.x - x), epsilon) > 0 ) {
117117
return false;
118118
}
119-
if( Math.abs(other.y - y) > epsilon ) {
119+
if( Double.compare(Math.abs(other.y - y), epsilon) > 0 ) {
120120
return false;
121121
}
122-
if( Math.abs(other.z - z) > epsilon ) {
122+
if( Double.compare(Math.abs(other.z - z), epsilon) > 0 ) {
123123
return false;
124124
}
125125
return true;
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
package com.simsilica.mathd;
2+
3+
class QuatdTest {
4+
5+
static class IsSimilarTest extends GroovyTestCase {
6+
7+
void testSimilarX() {
8+
Quatd a = new Quatd(1, 2, 3, 4);
9+
Quatd b = new Quatd(1.01, 2, 3, 4);
10+
11+
assert a.isSimilar(b, 0.1)
12+
}
13+
14+
void testSimilarY() {
15+
Quatd a = new Quatd(1, 2, 3, 4);
16+
Quatd b = new Quatd(1, 2.01, 3, 4);
17+
18+
assert a.isSimilar(b, 0.1)
19+
}
20+
21+
void testSimilarZ() {
22+
Quatd a = new Quatd(1, 2, 3, 4);
23+
Quatd b = new Quatd(1, 2, 3.01, 4);
24+
25+
assert a.isSimilar(b, 0.1)
26+
}
27+
28+
void testSimilarW() {
29+
Quatd a = new Quatd(1, 2, 3, 4);
30+
Quatd b = new Quatd(1, 2, 3, 4.01);
31+
32+
assert a.isSimilar(b, 0.1)
33+
}
34+
35+
void testNotSimilarX() {
36+
Quatd a = new Quatd(1, 2, 3, 4);
37+
Quatd b = new Quatd(1.5, 2, 3, 4);
38+
39+
assert !a.isSimilar(b, 0.1)
40+
}
41+
42+
void testNotSimilarY() {
43+
Quatd a = new Quatd(1, 2, 3, 4);
44+
Quatd b = new Quatd(1, 2.5, 3, 4);
45+
46+
assert !a.isSimilar(b, 0.1)
47+
}
48+
49+
void testNotSimilarZ() {
50+
Quatd a = new Quatd(1, 2, 3, 4);
51+
Quatd b = new Quatd(1, 2, 3.5, 4);
52+
53+
assert !a.isSimilar(b, 0.1)
54+
}
55+
56+
void testNotSimilarW() {
57+
Quatd a = new Quatd(1, 2, 3, 4);
58+
Quatd b = new Quatd(1, 2, 3, 4.5);
59+
60+
assert !a.isSimilar(b, 0.1)
61+
}
62+
63+
void testNanRight() {
64+
Quatd a = new Quatd(1, 2, 3, 4);
65+
Quatd b = new Quatd(Double.NaN, 2, 3, 4);
66+
67+
assert !a.isSimilar(b, 0.1)
68+
}
69+
70+
void testNanLeft() {
71+
Quatd a = new Quatd(Double.NaN, 2, 3, 4);
72+
Quatd b = new Quatd(1, 2, 3, 4);
73+
74+
assert !a.isSimilar(b, 0.1)
75+
}
76+
}
77+
78+
static class EqualsTest extends GroovyTestCase {
79+
void testEquals() {
80+
Quatd a = new Quatd(1, 2, 3, 4);
81+
Quatd b = new Quatd(1, 2, 3, 4);
82+
83+
assert a.equals(b);
84+
}
85+
86+
void testNotEqualsX() {
87+
Quatd a = new Quatd(1, 2, 3, 4);
88+
Quatd b = new Quatd(1.1, 2, 3, 4);
89+
90+
assert !a.equals(b);
91+
}
92+
93+
void testNotEqualsY() {
94+
Quatd a = new Quatd(1, 2, 3, 4);
95+
Quatd b = new Quatd(1, 2.1, 3, 4);
96+
97+
assert !a.equals(b);
98+
}
99+
100+
void testNotEqualsZ() {
101+
Quatd a = new Quatd(1, 2, 3, 4);
102+
Quatd b = new Quatd(1, 2, 3.1, 4);
103+
104+
assert !a.equals(b);
105+
}
106+
107+
void testNotEqualsW() {
108+
Quatd a = new Quatd(1, 2, 3, 4);
109+
Quatd b = new Quatd(1, 2, 3, 4.1);
110+
111+
assert !a.equals(b);
112+
}
113+
114+
void testEqualsNanLeft() {
115+
Quatd a = new Quatd(Double.NaN, 2, 3, 4);
116+
Quatd b = new Quatd(1, 2, 3, 4);
117+
118+
assert !a.equals(b);
119+
}
120+
121+
void testEqualsNanRight() {
122+
Quatd a = new Quatd(1, 2, 3, 4);
123+
Quatd b = new Quatd(Double.NaN, 2, 3, 4);
124+
125+
assert !a.equals(b);
126+
}
127+
128+
void testEqualsNanBoth() {
129+
Quatd a = new Quatd(Double.NaN, 2, 3, 4);
130+
Quatd b = new Quatd(Double.NaN, 2, 3, 4);
131+
132+
assert !a.equals(b);
133+
}
134+
}
135+
}
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
package com.simsilica.mathd;
2+
3+
class Vec3dTest {
4+
5+
static class IsSimilarTest extends GroovyTestCase {
6+
7+
void testSimilarX() {
8+
Vec3d a = new Vec3d(1, 2, 3);
9+
Vec3d b = new Vec3d(1.01, 2, 3);
10+
11+
assert a.isSimilar(b, 0.1)
12+
}
13+
14+
void testSimilarY() {
15+
Vec3d a = new Vec3d(1, 2, 3);
16+
Vec3d b = new Vec3d(1, 2.01, 3);
17+
18+
assert a.isSimilar(b, 0.1)
19+
}
20+
21+
void testSimilarZ() {
22+
Vec3d a = new Vec3d(1, 2, 3);
23+
Vec3d b = new Vec3d(1, 2, 3.01);
24+
25+
assert a.isSimilar(b, 0.1)
26+
}
27+
28+
void testNotSimilarX() {
29+
Vec3d a = new Vec3d(1, 2, 3);
30+
Vec3d b = new Vec3d(1.5, 2, 3);
31+
32+
assert !a.isSimilar(b, 0.1)
33+
}
34+
35+
void testNotSimilarY() {
36+
Vec3d a = new Vec3d(1, 2, 3);
37+
Vec3d b = new Vec3d(1, 2.5, 3);
38+
39+
assert !a.isSimilar(b, 0.1)
40+
}
41+
42+
void testNotSimilarZ() {
43+
Vec3d a = new Vec3d(1, 2, 3);
44+
Vec3d b = new Vec3d(1, 2, 3.5);
45+
46+
assert !a.isSimilar(b, 0.1)
47+
}
48+
49+
void testNanRight() {
50+
Vec3d a = new Vec3d(1, 2, 3);
51+
Vec3d b = new Vec3d(Double.NaN, 2, 3);
52+
53+
assert !a.isSimilar(b, 0.1)
54+
}
55+
56+
void testNanLeft() {
57+
Vec3d a = new Vec3d(Double.NaN, 2, 3);
58+
Vec3d b = new Vec3d(1, 2, 3);
59+
60+
assert !a.isSimilar(b, 0.1)
61+
}
62+
}
63+
64+
static class EqualsTest extends GroovyTestCase {
65+
void testEquals() {
66+
Vec3d a = new Vec3d(1, 2, 3);
67+
Vec3d b = new Vec3d(1, 2, 3);
68+
69+
assert a.equals(b);
70+
}
71+
72+
void testNotEqualsX() {
73+
Vec3d a = new Vec3d(1, 2, 3);
74+
Vec3d b = new Vec3d(1.1, 2, 3);
75+
76+
assert !a.equals(b);
77+
}
78+
79+
void testNotEqualsY() {
80+
Vec3d a = new Vec3d(1, 2, 3);
81+
Vec3d b = new Vec3d(1, 2.1, 3);
82+
83+
assert !a.equals(b);
84+
}
85+
86+
void testNotEqualsZ() {
87+
Vec3d a = new Vec3d(1, 2, 3);
88+
Vec3d b = new Vec3d(1, 2, 3.1);
89+
90+
assert !a.equals(b);
91+
}
92+
93+
void testEqualsNanLeft() {
94+
Vec3d a = new Vec3d(Double.NaN, 2, 3);
95+
Vec3d b = new Vec3d(1, 2, 3);
96+
97+
assert !a.equals(b);
98+
}
99+
100+
void testEqualsNanRight() {
101+
Vec3d a = new Vec3d(1, 2, 3);
102+
Vec3d b = new Vec3d(Double.NaN, 2, 3);
103+
104+
assert !a.equals(b);
105+
}
106+
107+
void testEqualsNanBoth() {
108+
Vec3d a = new Vec3d(Double.NaN, 2, 3);
109+
Vec3d b = new Vec3d(Double.NaN, 2, 3);
110+
111+
assert !a.equals(b);
112+
}
113+
}
114+
}

0 commit comments

Comments
 (0)