5 // Created by Xuchen Han on 4/4/20.
8 #include "btReducedVector.h"
11 // returns the projection of this onto other
12 btReducedVector btReducedVector::proj(const btReducedVector& other) const
14 btReducedVector ret(m_sz);
15 btScalar other_length2 = other.length2();
16 if (other_length2 < SIMD_EPSILON)
20 return other*(this->dot(other))/other_length2;
23 void btReducedVector::normalize()
25 if (this->length2() < SIMD_EPSILON)
31 *this /= std::sqrt(this->length2());
34 bool btReducedVector::testAdd() const
37 btAlignedObjectArray<int> id1;
40 btAlignedObjectArray<btVector3> v1;
41 v1.push_back(btVector3(1,0,1));
42 v1.push_back(btVector3(3,1,5));
43 btAlignedObjectArray<int> id2;
47 btAlignedObjectArray<btVector3> v2;
48 v2.push_back(btVector3(2,3,1));
49 v2.push_back(btVector3(3,4,9));
50 v2.push_back(btVector3(0,4,0));
51 btAlignedObjectArray<int> id3;
56 btAlignedObjectArray<btVector3> v3;
57 v3.push_back(btVector3(1,0,1));
58 v3.push_back(btVector3(2,3,1));
59 v3.push_back(btVector3(6,5,14));
60 v3.push_back(btVector3(0,4,0));
61 btReducedVector rv1(sz, id1, v1);
62 btReducedVector rv2(sz, id2, v2);
63 btReducedVector ans(sz, id3, v3);
64 bool ret = ((ans == rv1+rv2) && (ans == rv2+rv1));
66 printf("btReducedVector testAdd failed\n");
70 bool btReducedVector::testMinus() const
73 btAlignedObjectArray<int> id1;
76 btAlignedObjectArray<btVector3> v1;
77 v1.push_back(btVector3(1,0,1));
78 v1.push_back(btVector3(3,1,5));
79 btAlignedObjectArray<int> id2;
83 btAlignedObjectArray<btVector3> v2;
84 v2.push_back(btVector3(2,3,1));
85 v2.push_back(btVector3(3,4,9));
86 v2.push_back(btVector3(0,4,0));
87 btAlignedObjectArray<int> id3;
92 btAlignedObjectArray<btVector3> v3;
93 v3.push_back(btVector3(-1,-0,-1));
94 v3.push_back(btVector3(2,3,1));
95 v3.push_back(btVector3(0,3,4));
96 v3.push_back(btVector3(0,4,0));
97 btReducedVector rv1(sz, id1, v1);
98 btReducedVector rv2(sz, id2, v2);
99 btReducedVector ans(sz, id3, v3);
100 bool ret = (ans == rv2-rv1);
102 printf("btReducedVector testMinus failed\n");
106 bool btReducedVector::testDot() const
109 btAlignedObjectArray<int> id1;
112 btAlignedObjectArray<btVector3> v1;
113 v1.push_back(btVector3(1,0,1));
114 v1.push_back(btVector3(3,1,5));
115 btAlignedObjectArray<int> id2;
119 btAlignedObjectArray<btVector3> v2;
120 v2.push_back(btVector3(2,3,1));
121 v2.push_back(btVector3(3,4,9));
122 v2.push_back(btVector3(0,4,0));
123 btReducedVector rv1(sz, id1, v1);
124 btReducedVector rv2(sz, id2, v2);
126 bool ret = (ans == rv2.dot(rv1) && ans == rv1.dot(rv2));
128 ret &= (ans==rv2.dot(rv2));
131 printf("btReducedVector testDot failed\n");
135 bool btReducedVector::testMultiply() const
138 btAlignedObjectArray<int> id1;
141 btAlignedObjectArray<btVector3> v1;
142 v1.push_back(btVector3(1,0,1));
143 v1.push_back(btVector3(3,1,5));
145 btReducedVector rv1(sz, id1, v1);
146 btAlignedObjectArray<int> id2;
149 btAlignedObjectArray<btVector3> v2;
150 v2.push_back(btVector3(2,0,2));
151 v2.push_back(btVector3(6,2,10));
152 btReducedVector ans(sz, id2, v2);
153 bool ret = (ans == rv1*s);
155 printf("btReducedVector testMultiply failed\n");
159 void btReducedVector::test() const
161 bool ans = testAdd() && testMinus() && testDot() && testMultiply();
164 printf("All tests passed\n");
168 printf("Tests failed\n");