/
main.coffee
101 lines (73 loc) · 2.7 KB
/
main.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
runTest = require('ava')
Vector = require('../index')
runTest 'Instantiates a zero vector without an argument', (test) ->
vector = new Vector()
test.same(vector.toObject(), {x: 0, y: 0, z: 0})
runTest 'Instantiates a vector from x, y & z arguments', (test) ->
vector = new Vector(1, 2, 3)
test.same(vector.toObject(), {x: 1, y: 2, z: 3})
runTest 'Instantiates a vector from an object', (test) ->
vector = Vector.fromObject({x: 1, y: 2, z: 3})
test.same(vector.toObject(), {x: 1, y: 2, z: 3})
runTest 'Instantiates a vector from an array', (test) ->
vector = Vector.fromArray([1, 2, 3])
test.same(vector.toObject(), {x: 1, y: 2, z: 3})
runTest 'Outputs JSON', (test) ->
vector = new Vector(1, 2, 3)
vector.uselessProperty = 'useless'
test.same(JSON.stringify(vector), '{"x":1,"y":2,"z":3}')
runTest 'Gets cloned', (test) ->
vector = new Vector(1, 2, 3)
clonedVector = vector.clone()
vector.x = 9
test.same(JSON.stringify(clonedVector), '{"x":1,"y":2,"z":3}')
runTest 'Adds a vector', (test) ->
vectorA = new Vector(1, 2, 3)
vectorB = new Vector(4, 5, 6)
expectedVector = new Vector(5, 7, 9)
vectorA.add(vectorB)
test.same(vectorA, expectedVector)
runTest 'Subtracts a vector', (test) ->
vectorA = new Vector(4, 2, 0)
vectorB = new Vector(3, 5, 7)
expectedVector = new Vector(1, -3, -7)
vectorA.subtract(vectorB)
test.same(vectorA, expectedVector)
runTest 'Scales a vector uniformly', (test) ->
vector = new Vector(4, 2, 1)
scalingFactor = 1.5
expectedVector = new Vector(6, 3, 1.5)
vector.scaleUniformlyBy(scalingFactor)
test.same(vector, expectedVector)
runTest 'Scales a vector', (test) ->
vectorA = new Vector(4, 2, 1)
scalingObject = {x: 2, y: 3, z: 5}
expectedVector = new Vector(8, 6, 5)
vectorA.scaleBy(scalingObject)
test.same(vectorA, expectedVector)
runTest 'Returns a vector\'s length', (test) ->
vector = new Vector(3, 3, 3)
expectedLength = Math.sqrt(27)
test.same(vector.length(), expectedLength)
runTest 'Returns the euclidian distance to a vector', (test) ->
vectorA = new Vector(4, 2, 0)
vectorAReference = vectorA.clone()
vectorB = new Vector(3, 5, 7)
expectedDistance = 7.681145747868608
test.same(vectorA.euclideanDistanceTo(vectorB), expectedDistance)
test.same(vectorA, vectorAReference)
runTest 'Normalizes a vector', (test) ->
vector = new Vector(3, 3, 3)
vector.normalize()
expectedVector = new Vector(
0.5773502691896257,
0.5773502691896257,
0.5773502691896257
)
expectedVector.isNormalized = true
test.same(vector, expectedVector)
runTest 'Returns the cross product of two vectors', (test) ->
vectorA = new Vector(4, 2, 0)
vectorB = new Vector(3, 5, 7)
orthogonalVector = new Vector(14, -28, 14)
test.same(vectorA.crossProduct(vectorB), orthogonalVector)