Skip to content

Commit cdbd102

Browse files
committed
add unit tests
1 parent 6d47667 commit cdbd102

16 files changed

Lines changed: 2581 additions & 17 deletions

Sources/Math/Math.swift

Lines changed: 0 additions & 6 deletions
This file was deleted.
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
// Copyright (c) 2022 Feng Yang
2+
//
3+
// I am making my contributions/submissions to this project solely in my
4+
// personal capacity and am not conveying any rights to any intellectual
5+
// property of any third parties.
6+
7+
import XCTest
8+
@testable import Math
9+
10+
class BoundingBoxTests: XCTestCase {
11+
override func setUpWithError() throws {
12+
// Put setup code here. This method is called before the invocation of each test method in the class.
13+
}
14+
15+
override func tearDownWithError() throws {
16+
// Put teardown code here. This method is called after the invocation of each test method in the class.
17+
}
18+
19+
func testConstructor() {
20+
// Create a same box by different param.
21+
let box1 = BoundingBox.fromCenterAndExtent(center: Vector3(0, 0, 0), extent: Vector3(1, 1, 1))
22+
23+
let points = [
24+
Vector3(0, 0, 0),
25+
Vector3(-1, 0, 0),
26+
Vector3(1, 0, 0),
27+
Vector3(0, 1, 0),
28+
Vector3(0, 1, 1),
29+
Vector3(1, 0, 1),
30+
Vector3(0, 0.5, 0.5),
31+
Vector3(0, -0.5, 0.5),
32+
Vector3(0, -1, 0.5),
33+
Vector3(0, 0, -1)
34+
]
35+
let box2 = BoundingBox.fromPoints(points: points)
36+
37+
let sphere = BoundingSphere(Vector3(0, 0, 0), 1)
38+
let box3 = BoundingBox.fromSphere(sphere: sphere)
39+
40+
let min1 = box1.min
41+
let max1 = box1.max
42+
43+
let min2 = box2.min
44+
let max2 = box2.max
45+
46+
let min3 = box3.min
47+
let max3 = box3.max
48+
49+
XCTAssertEqual(Vector3.equals(left: min1, right: min2), true)
50+
XCTAssertEqual(Vector3.equals(left: max1, right: max2), true)
51+
XCTAssertEqual(Vector3.equals(left: min1, right: min3), true)
52+
XCTAssertEqual(Vector3.equals(left: max1, right: max3), true)
53+
XCTAssertEqual(Vector3.equals(left: min2, right: min3), true)
54+
XCTAssertEqual(Vector3.equals(left: max2, right: max3), true)
55+
}
56+
57+
func testTransform() {
58+
var box = BoundingBox(Vector3(-1, -1, -1), Vector3(1, 1, 1))
59+
let matrix = Matrix(m11: 2, m12: 0, m13: 0, m14: 0,
60+
m21: 0, m22: 2, m23: 0, m24: 0,
61+
m31: 0, m32: 0, m33: 2, m34: 0,
62+
m41: 1, m42: 0.5, m43: -1, m44: 1)
63+
let newBox = BoundingBox.transform(source: box, matrix: matrix)
64+
_ = box.transform(matrix: matrix)
65+
66+
let newMin = Vector3(-1, -1.5, -3)
67+
let newMax = Vector3(3, 2.5, 1)
68+
XCTAssertEqual(Vector3.equals(left: newBox.min, right: newMin), true)
69+
XCTAssertEqual(Vector3.equals(left: newBox.max, right: newMax), true)
70+
XCTAssertEqual(Vector3.equals(left: box.min, right: newMin), true)
71+
XCTAssertEqual(Vector3.equals(left: box.max, right: newMax), true)
72+
}
73+
74+
func testMerge() {
75+
let box1 = BoundingBox(Vector3(-1, -1, -1), Vector3(2, 2, 2))
76+
let box2 = BoundingBox(Vector3(-2, -0.5, -2), Vector3(3, 0, 3))
77+
let box = BoundingBox.merge(box1: box1, box2: box2)
78+
XCTAssertEqual(Vector3.equals(left: Vector3(-2, -1, -2), right: box.min), true)
79+
XCTAssertEqual(Vector3.equals(left: Vector3(3, 2, 3), right: box.max), true)
80+
}
81+
82+
func testGetCenter() {
83+
let box = BoundingBox(Vector3(-1, -1, -1), Vector3(3, 3, 3))
84+
let center = box.getCenter()
85+
XCTAssertEqual(Vector3.equals(left: Vector3(1, 1, 1), right: center), true)
86+
}
87+
88+
func testGetExtent() {
89+
let box = BoundingBox(Vector3(-1, -1, -1), Vector3(3, 3, 3))
90+
let extent = box.getExtent()
91+
XCTAssertEqual(Vector3.equals(left: Vector3(2, 2, 2), right: extent), true)
92+
}
93+
94+
func testGetCorners() {
95+
let min = Vector3(-1, -1, -1)
96+
let max = Vector3(3, 3, 3)
97+
let minX = min.x
98+
let minY = min.y
99+
let minZ = min.z
100+
let maxX = max.x
101+
let maxY = max.y
102+
let maxZ = max.z
103+
var expectedCorners = [
104+
Vector3(),
105+
Vector3(),
106+
Vector3(),
107+
Vector3(),
108+
Vector3(),
109+
Vector3(),
110+
Vector3(),
111+
Vector3()
112+
]
113+
_ = expectedCorners[0].set(x: minX, y: maxY, z: maxZ)
114+
_ = expectedCorners[1].set(x: maxX, y: maxY, z: maxZ)
115+
_ = expectedCorners[2].set(x: maxX, y: minY, z: maxZ)
116+
_ = expectedCorners[3].set(x: minX, y: minY, z: maxZ)
117+
_ = expectedCorners[4].set(x: minX, y: maxY, z: minZ)
118+
_ = expectedCorners[5].set(x: maxX, y: maxY, z: minZ)
119+
_ = expectedCorners[6].set(x: maxX, y: minY, z: minZ)
120+
_ = expectedCorners[7].set(x: minX, y: minY, z: minZ)
121+
122+
let box = BoundingBox(min, max)
123+
let corners = box.getCorners()
124+
for i in 0..<8 {
125+
XCTAssertEqual(Vector3.equals(left: corners[i], right: expectedCorners[i]), true)
126+
}
127+
}
128+
129+
func testClone() {
130+
let a = BoundingBox(Vector3(0, 0, 0), Vector3(1, 1, 1))
131+
let b = a
132+
XCTAssertEqual(Vector3.equals(left: a.min, right: b.min), true)
133+
XCTAssertEqual(Vector3.equals(left: a.max, right: b.max), true)
134+
}
135+
136+
func testCloneTo() {
137+
let a = BoundingBox(Vector3(0, 0, 0), Vector3(1, 1, 1))
138+
let out = a
139+
XCTAssertEqual(Vector3.equals(left: a.min, right: out.min), true)
140+
XCTAssertEqual(Vector3.equals(left: a.max, right: out.max), true)
141+
}
142+
}
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
// Copyright (c) 2022 Feng Yang
2+
//
3+
// I am making my contributions/submissions to this project solely in my
4+
// personal capacity and am not conveying any rights to any intellectual
5+
// property of any third parties.
6+
7+
import XCTest
8+
@testable import Math
9+
10+
class BoundingFrustumTests: XCTestCase {
11+
var projectionMatrix: Matrix!
12+
var vpMatrix: Matrix!
13+
var frustum: BoundingFrustum!
14+
15+
override func setUpWithError() throws {
16+
let viewMatrix = Matrix(m11: 1, m12: 0, m13: 0, m14: 0,
17+
m21: 0, m22: 1, m23: 0, m24: 0,
18+
m31: 0, m32: 0, m33: 1, m34: 0,
19+
m41: 0, m42: 0, m43: -20, m44: 1)
20+
projectionMatrix = Matrix(
21+
m11: 0.03954802080988884, m12: 0, m13: 0, m14: 0,
22+
m21: 0, m22: 0.10000000149011612, m23: 0, m24: 0,
23+
m31: 0, m32: 0, m33: -0.0200200192630291, m34: 0,
24+
m41: -0, m42: -0, m43: -1.0020020008087158, m44: 1
25+
)
26+
vpMatrix = projectionMatrix * viewMatrix
27+
frustum = BoundingFrustum(matrix: vpMatrix)
28+
}
29+
30+
override func tearDownWithError() throws {
31+
// Put teardown code here. This method is called after the invocation of each test method in the class.
32+
}
33+
34+
func testIntersectsBox() {
35+
let box1 = BoundingBox(Vector3(-2, -2, -2), Vector3(2, 2, 2))
36+
let flag1 = frustum.intersectsBox(box: box1)
37+
XCTAssertEqual(flag1, true)
38+
39+
let box2 = BoundingBox(Vector3(-32, -2, -2), Vector3(-28, 2, 2))
40+
let flag2 = frustum.intersectsBox(box: box2)
41+
XCTAssertEqual(flag2, false)
42+
}
43+
44+
func testIntersectsSphere() {
45+
let box1 = BoundingBox(Vector3(-2, -2, -2), Vector3(2, 2, 2))
46+
let sphere1 = BoundingSphere.fromBox(box: box1)
47+
let flag1 = frustum.intersectsSphere(sphere: sphere1)
48+
XCTAssertEqual(flag1, true)
49+
50+
let box2 = BoundingBox(Vector3(-32, -2, -2), Vector3(-28, 2, 2))
51+
let sphere2 = BoundingSphere.fromBox(box: box2)
52+
let flag2 = frustum.intersectsSphere(sphere: sphere2)
53+
XCTAssertEqual(flag2, false)
54+
}
55+
56+
func testClone() {
57+
let a = BoundingFrustum(matrix: projectionMatrix)
58+
let b = a
59+
60+
for i in 0..<6 {
61+
let aPlane = a.getPlane(index: i)
62+
let bPlane = b.getPlane(index: i)
63+
64+
XCTAssertEqual(aPlane.distance, bPlane.distance)
65+
XCTAssertEqual(Vector3.equals(left: aPlane.normal, right: bPlane.normal), true)
66+
}
67+
}
68+
69+
func testCloneTo() {
70+
let a = BoundingFrustum(matrix: projectionMatrix)
71+
let out = a
72+
73+
for i in 0..<6 {
74+
let aPlane = a.getPlane(index: i)
75+
let outPlane = out.getPlane(index: i)
76+
77+
XCTAssertEqual(aPlane.distance, outPlane.distance)
78+
XCTAssertEqual(Vector3.equals(left: aPlane.normal, right: outPlane.normal), true)
79+
}
80+
}
81+
82+
func testCalculateFromMatrix() {
83+
var a = BoundingFrustum()
84+
a.calculateFromMatrix(matrix: vpMatrix)
85+
86+
for i in 0..<6 {
87+
let aPlane = a.getPlane(index: i)
88+
let bPlane = frustum.getPlane(index: i)
89+
90+
XCTAssertEqual(aPlane.distance, bPlane.distance)
91+
XCTAssertEqual(Vector3.equals(left: aPlane.normal, right: bPlane.normal), true)
92+
}
93+
}
94+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
// Copyright (c) 2022 Feng Yang
2+
//
3+
// I am making my contributions/submissions to this project solely in my
4+
// personal capacity and am not conveying any rights to any intellectual
5+
// property of any third parties.
6+
7+
import XCTest
8+
@testable import Math
9+
10+
class BoundingSphereTests: XCTestCase {
11+
override func setUpWithError() throws {
12+
// Put setup code here. This method is called before the invocation of each test method in the class.
13+
}
14+
15+
override func tearDownWithError() throws {
16+
// Put teardown code here. This method is called after the invocation of each test method in the class.
17+
}
18+
19+
func testConstructor() {
20+
// Create a same sphere by different param.
21+
let points = [
22+
Vector3(0, 0, 0),
23+
Vector3(-1, 0, 0),
24+
Vector3(0, 0, 0),
25+
Vector3(0, 1, 0),
26+
Vector3(1, 1, 1),
27+
Vector3(0, 0, 1),
28+
Vector3(-1, -0.5, -0.5),
29+
Vector3(0, -0.5, -0.5),
30+
Vector3(1, 0, -1),
31+
Vector3(0, -1, 0)
32+
]
33+
let sphere1 = BoundingSphere.fromPoints(points: points)
34+
35+
let box = BoundingBox(Vector3(-1, -1, -1), Vector3(1, 1, 1))
36+
let sphere2 = BoundingSphere.fromBox(box: box)
37+
38+
let center1 = sphere1.center
39+
let radius1 = sphere1.radius
40+
let center2 = sphere2.center
41+
let radius2 = sphere2.radius
42+
XCTAssertEqual(Vector3.equals(left: center1, right: center2), true)
43+
XCTAssertEqual(radius1, radius2)
44+
}
45+
46+
func testClone() {
47+
let a = BoundingSphere(Vector3(0, 0, 0), 3)
48+
let b = a
49+
XCTAssertEqual(Vector3.equals(left: a.center, right: b.center), true)
50+
XCTAssertEqual(a.radius, b.radius)
51+
}
52+
53+
func testCloneTo() {
54+
let a = BoundingSphere(Vector3(0, 0, 0), 3)
55+
let out = a
56+
XCTAssertEqual(Vector3.equals(left: a.center, right: out.center), true)
57+
XCTAssertEqual(a.radius, out.radius)
58+
}
59+
}

0 commit comments

Comments
 (0)