Some useful stuff

Dependents:   FtEncoder FtControlSet

Revision:
2:8882925900db
diff -r bf8fc4455615 -r 8882925900db BufferTest.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BufferTest.h	Fri Mar 29 09:55:05 2013 +0000
@@ -0,0 +1,157 @@
+
+#include "Buffer.h"
+#include "Serial.h"
+using namespace mbed;
+
+Serial pc(USBTX, USBRX);
+
+const uint32_t maxSize = 5;
+
+typedef Buffer<int,maxSize> TstBufB;
+typedef BufferOnStack<int,maxSize> TstBufS;
+typedef BufferOnHeap<int,maxSize> TstBufH;
+
+typedef BufferOnHeap<int,maxSize+1> BahBuf;
+
+void chkBuffer(TstBufB& buf);
+
+int doit()
+{
+    pc.baud(115200);
+
+    TstBufS bufs1;
+    TstBufH bufh1;
+
+    /*
+    // the following should not even compile
+    BahBuf bah;
+    bufs1=bah;
+    TstBufH no(bah);
+
+    bufs1.push(23);
+    const TstBufB& cbuf=bufs1;
+    int& e=cbuf[0];
+
+    */
+
+    chkBuffer(bufs1);
+    pc.printf("happyhappyjoyjoy 1\n");
+    chkBuffer(bufh1);
+    pc.printf("happyhappyjoyjoy 2\n");
+
+    // copy ctor and assignment
+    TstBufS bufs;
+    for(int i=1; i<=23; ++i) bufs.pushCircular(i);
+    bufs1=bufs;
+    TstBufS bufs2(bufs1);
+    bufh1=bufs2;
+    TstBufH bufh2(bufh1);
+    TstBufS bufs3(bufh2);
+    TstBufH bufh3(bufs2);
+    TstBufS bufs4;
+    TstBufH bufh4;
+    bufs4.push(23);
+    bufh4.push(42);
+    bufs4=bufh3;
+    bufh4=bufs3;
+
+    TstBufB* bufA[8];
+    bufA[0]=&bufs1;
+    bufA[1]=&bufs2;
+    bufA[2]=&bufs3;
+    bufA[3]=&bufs4;
+    bufA[4]=&bufh1;
+    bufA[5]=&bufh2;
+    bufA[6]=&bufh3;
+    bufA[7]=&bufh4;
+
+    for(int i=0; i<maxSize; ++i)
+        for(int j=0; j<8; ++j) {
+            int v=(*(bufA[j]))[maxSize-1-i];
+            if(v!=23-i) pc.printf("copy ouch %d %d %d\n", i,j,v);
+        }
+    pc.printf("happyhappyjoyjoy 3\n");
+    pc.printf("Test ready!\n");
+
+    return 0;
+}
+
+void chkBuffer(TstBufB& buf)
+{
+
+    buf.clear();
+    // empty buffer checks
+    if(buf.size()!=0) pc.printf("ouch01\n");
+    if(buf.maxSize()!=maxSize) pc.printf("ouch02\n");
+
+    // fill until full
+    for(int i=0; i<maxSize; ++i) {
+        if(!buf.push(i+1)) pc.printf("ouch03\n");
+        if(buf.size()!=i+1) pc.printf("ouch04\n");
+    }
+
+    // overfill
+    if(buf.push(12)) pc.printf("ouch05\n");
+    if(buf.push(13)) pc.printf("ouch05\n");
+    if(buf.size()!=maxSize) pc.printf("ouch06\n");
+
+    // content check
+    for(int i=0; i<maxSize; ++i)
+        if(buf[i]!=i+1)pc.printf("ouch07\n");
+
+    // pops
+    if(buf.popLatest()!=maxSize)pc.printf("ouch08\n");
+    if(buf.popLatest()!=maxSize-1)pc.printf("ouch09\n");
+    if(buf.popOldest()!=1)pc.printf("ouch10\n");
+    if(buf.popOldest()!=2)pc.printf("ouch11\n");
+
+    if(buf.size()!=1) pc.printf("ouch12\n");
+    if(buf.popLatest()!=maxSize-2)pc.printf("ouch14\n");
+    if(buf.popOldest()!=0)pc.printf("ouch15\n");
+    if(buf.popLatest()!=0)pc.printf("ouch16\n");
+    if(buf.size()!=0) pc.printf("ouch17\n");
+
+    // fill until full
+    for(int i=0; i<maxSize; ++i) {
+        buf.pushCircular(i+1);
+        if(buf.size()!=i+1) pc.printf("ouch19\n");
+    }
+    // clear check
+    buf.clear();
+    if(buf.size()!=0) pc.printf("ouch20\n");
+
+    // fill again
+    for(int i=0; i<maxSize+1; ++i) {
+        buf.pushCircular(i+1);
+    }
+    if(buf.size()!=maxSize) pc.printf("ouch22\n");
+
+    if(buf.popOldest()!=2)pc.printf("ouch23\n");
+    if(buf.popLatest()!=maxSize+1)pc.printf("ouch24\n");
+    if(buf.popLatest()!=maxSize)pc.printf("ouch25\n");
+    if(buf.popLatest()!=maxSize-1)pc.printf("ouch26\n");
+
+    if(buf.size()!=maxSize-4) pc.printf("ouch27\n");
+
+    // fill revolving
+    for(int i=maxSize-1; i<=maxSize+3; ++i) {
+        buf.pushCircular(i);
+    }
+
+    if(buf.size()!=maxSize) pc.printf("ouch28\n");
+
+    // content check
+    for(int i=0; i<maxSize; ++i)
+        if(buf[maxSize-i-1]!=maxSize+3-i)pc.printf("ouch29\n");
+
+    // out of bounds
+    if(buf[4223]!=0)pc.printf("ouch30\n");
+    if(buf[maxSize]!=0)pc.printf("ouch33\n");
+    
+    // empty/full
+    if(!buf.full())pc.printf("ouch34\n");
+    if(buf.empty())pc.printf("ouch35\n");
+    buf.clear();
+    if(buf.full())pc.printf("ouch36\n");
+    if(!buf.empty())pc.printf("ouch37\n");
+}