Browse Source

clear for ringbuffers, vector * vector

Kajetan Johannes Hammerle 3 years ago
parent
commit
14d9f19f59
4 changed files with 67 additions and 11 deletions
  1. 13 0
      math/Vector.h
  2. 29 11
      tests/RingBufferTests.cpp
  3. 19 0
      tests/VectorTests.cpp
  4. 6 0
      utils/RingBuffer.h

+ 13 - 0
math/Vector.h

@@ -71,12 +71,25 @@ public:
         return *this;
     }
 
+    Vector& operator*=(const Vector<N>& other) {
+        for(int i = 0; i < N; i++) {
+            values[i] *= other.values[i];
+        }
+        return *this;
+    }
+
     Vector operator*(float factor) const {
         Vector v = *this;
         v *= factor;
         return v;
     }
 
+    Vector operator*(const Vector<N>& other) const {
+        Vector v = *this;
+        v *= other;
+        return v;
+    }
+
     Vector& operator/=(float factor) {
         for(int i = 0; i < N; i++) {
             values[i] /= factor;

+ 29 - 11
tests/RingBufferTests.cpp

@@ -23,9 +23,12 @@ static void testOverflow(Test& test) {
     test.checkEqual(false, r3, "check buffer write return value 3");
     test.checkEqual(true, r4, "check buffer write return value 4");
     test.checkEqual(true, r5, "check buffer write return value 5");
-    test.checkEqual(1, buffer.read(), "can read value from overflowed buffer 1");
-    test.checkEqual(2, buffer.read(), "can read value from overflowed buffer 2");
-    test.checkEqual(3, buffer.read(), "can read value from overflowed buffer 3");
+    test.checkEqual(1, buffer.read(),
+                    "can read value from overflowed buffer 1");
+    test.checkEqual(2, buffer.read(),
+                    "can read value from overflowed buffer 2");
+    test.checkEqual(3, buffer.read(),
+                    "can read value from overflowed buffer 3");
     test.checkEqual(false, buffer.canRead(), "values are gone after full read");
 }
 
@@ -36,17 +39,31 @@ static void testRefill(Test& test) {
     buffer.write(3);
     buffer.write(4);
     test.checkEqual(true, buffer.canRead(), "values are ready to be read 2");
-    test.checkEqual(1, buffer.read(), "can read value from overflowed buffer 1");
-    test.checkEqual(2, buffer.read(), "can read value from overflowed buffer 2");
-    test.checkEqual(3, buffer.read(), "can read value from overflowed buffer 3");
-    test.checkEqual(false, buffer.canRead(), "values are gone after full read 1");
+    test.checkEqual(1, buffer.read(),
+                    "can read value from overflowed buffer 1");
+    test.checkEqual(2, buffer.read(),
+                    "can read value from overflowed buffer 2");
+    test.checkEqual(3, buffer.read(),
+                    "can read value from overflowed buffer 3");
+    test.checkEqual(false, buffer.canRead(),
+                    "values are gone after full read 1");
     buffer.write(5);
     buffer.write(6);
     test.checkEqual(true, buffer.canRead(), "values are ready to be read 2");
-    test.checkEqual(5, buffer.read(), "can read value from overflowed buffer 4");
-    test.checkEqual(6, buffer.read(), "can read value from overflowed buffer 5");
-    test.checkEqual(false, buffer.canRead(), "values are gone after full read 1");
-    
+    test.checkEqual(5, buffer.read(),
+                    "can read value from overflowed buffer 4");
+    test.checkEqual(6, buffer.read(),
+                    "can read value from overflowed buffer 5");
+    test.checkEqual(false, buffer.canRead(),
+                    "values are gone after full read 1");
+}
+
+static void testClear(Test& test) {
+    RingBuffer<int, 3> buffer;
+    buffer.write(1);
+    buffer.write(2);
+    buffer.clear();
+    test.checkEqual(false, buffer.canRead(), "no read after clear");
 }
 
 void RingBufferTests::test() {
@@ -54,5 +71,6 @@ void RingBufferTests::test() {
     testReadAndWrite(test);
     testOverflow(test);
     testRefill(test);
+    testClear(test);
     test.finalize();
 }

+ 19 - 0
tests/VectorTests.cpp

@@ -168,6 +168,23 @@ static void testMul(Test& test) {
                    Vector3(1.0f, 2.0f, 3.0f) * 3.0, "mul 2");
 }
 
+static void testSetMulVector(Test& test) {
+    Vector3 v(1.0f, 2.0f, 3.0f);
+    v *= Vector3(2.0f, 1.0f, 3.0f);
+    compareVectors(test, Vector3(2.0f, 2.0f, 9.0f), v, "set mul vector 1");
+    v *= Vector3(-3.0f, 4.0f, -2.0f);
+    compareVectors(test, Vector3(-6.0f, 8.0f, -18.0f), v, "set mul vector 2");
+}
+
+static void testMulVector(Test& test) {
+    compareVectors(test, Vector3(-2.0f, -2.0f, -9.0f),
+                   Vector3(2.0f, 1.0f, 3.0f) * Vector3(-1.0f, -2.0f, -3.0f),
+                   "mul vector 1");
+    compareVectors(test, Vector3(2.0f, 2.0f, 9.0f),
+                   Vector3(1.0f, 2.0f, 3.0f) * Vector3(2.0f, 1.0f, 3.0f),
+                   "mul vector 2");
+}
+
 static void testSetDiv(Test& test) {
     Vector3 v(12.0f, 24.0f, 9.0f);
     v /= 3.0f;
@@ -236,6 +253,8 @@ void VectorTests::test() {
     testInvert(test);
     testSetMul(test);
     testMul(test);
+    testSetMulVector(test);
+    testMulVector(test);
     testSetDiv(test);
     testDiv(test);
     testDot(test);

+ 6 - 0
utils/RingBuffer.h

@@ -31,6 +31,12 @@ public:
         readIndex = (readIndex + 1) % N;
         return t;
     }
+
+    void clear() {
+        writeIndex = 0;
+        readIndex = 0;
+        values = 0;
+    }
 };
 
 #endif