Some useful stuff

Dependents:   FtEncoder FtControlSet

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers BufferTest.h Source File

BufferTest.h

00001 
00002 #include "Buffer.h"
00003 #include "Serial.h"
00004 using namespace mbed;
00005 
00006 Serial pc(USBTX, USBRX);
00007 
00008 const uint32_t maxSize = 5;
00009 
00010 typedef Buffer<int,maxSize> TstBufB;
00011 typedef BufferOnStack<int,maxSize> TstBufS;
00012 typedef BufferOnHeap<int,maxSize> TstBufH;
00013 
00014 typedef BufferOnHeap<int,maxSize+1> BahBuf;
00015 
00016 void chkBuffer(TstBufB& buf);
00017 
00018 int doit()
00019 {
00020     pc.baud(115200);
00021 
00022     TstBufS bufs1;
00023     TstBufH bufh1;
00024 
00025     /*
00026     // the following should not even compile
00027     BahBuf bah;
00028     bufs1=bah;
00029     TstBufH no(bah);
00030 
00031     bufs1.push(23);
00032     const TstBufB& cbuf=bufs1;
00033     int& e=cbuf[0];
00034 
00035     */
00036 
00037     chkBuffer(bufs1);
00038     pc.printf("happyhappyjoyjoy 1\n");
00039     chkBuffer(bufh1);
00040     pc.printf("happyhappyjoyjoy 2\n");
00041 
00042     // copy ctor and assignment
00043     TstBufS bufs;
00044     for(int i=1; i<=23; ++i) bufs.pushCircular(i);
00045     bufs1=bufs;
00046     TstBufS bufs2(bufs1);
00047     bufh1=bufs2;
00048     TstBufH bufh2(bufh1);
00049     TstBufS bufs3(bufh2);
00050     TstBufH bufh3(bufs2);
00051     TstBufS bufs4;
00052     TstBufH bufh4;
00053     bufs4.push(23);
00054     bufh4.push(42);
00055     bufs4=bufh3;
00056     bufh4=bufs3;
00057 
00058     TstBufB* bufA[8];
00059     bufA[0]=&bufs1;
00060     bufA[1]=&bufs2;
00061     bufA[2]=&bufs3;
00062     bufA[3]=&bufs4;
00063     bufA[4]=&bufh1;
00064     bufA[5]=&bufh2;
00065     bufA[6]=&bufh3;
00066     bufA[7]=&bufh4;
00067 
00068     for(int i=0; i<maxSize; ++i)
00069         for(int j=0; j<8; ++j) {
00070             int v=(*(bufA[j]))[maxSize-1-i];
00071             if(v!=23-i) pc.printf("copy ouch %d %d %d\n", i,j,v);
00072         }
00073     pc.printf("happyhappyjoyjoy 3\n");
00074     pc.printf("Test ready!\n");
00075 
00076     return 0;
00077 }
00078 
00079 void chkBuffer(TstBufB& buf)
00080 {
00081 
00082     buf.clear();
00083     // empty buffer checks
00084     if(buf.size()!=0) pc.printf("ouch01\n");
00085     if(buf.maxSize()!=maxSize) pc.printf("ouch02\n");
00086 
00087     // fill until full
00088     for(int i=0; i<maxSize; ++i) {
00089         if(!buf.push(i+1)) pc.printf("ouch03\n");
00090         if(buf.size()!=i+1) pc.printf("ouch04\n");
00091     }
00092 
00093     // overfill
00094     if(buf.push(12)) pc.printf("ouch05\n");
00095     if(buf.push(13)) pc.printf("ouch05\n");
00096     if(buf.size()!=maxSize) pc.printf("ouch06\n");
00097 
00098     // content check
00099     for(int i=0; i<maxSize; ++i)
00100         if(buf[i]!=i+1)pc.printf("ouch07\n");
00101 
00102     // pops
00103     if(buf.popLatest()!=maxSize)pc.printf("ouch08\n");
00104     if(buf.popLatest()!=maxSize-1)pc.printf("ouch09\n");
00105     if(buf.popOldest()!=1)pc.printf("ouch10\n");
00106     if(buf.popOldest()!=2)pc.printf("ouch11\n");
00107 
00108     if(buf.size()!=1) pc.printf("ouch12\n");
00109     if(buf.popLatest()!=maxSize-2)pc.printf("ouch14\n");
00110     if(buf.popOldest()!=0)pc.printf("ouch15\n");
00111     if(buf.popLatest()!=0)pc.printf("ouch16\n");
00112     if(buf.size()!=0) pc.printf("ouch17\n");
00113 
00114     // fill until full
00115     for(int i=0; i<maxSize; ++i) {
00116         buf.pushCircular(i+1);
00117         if(buf.size()!=i+1) pc.printf("ouch19\n");
00118     }
00119     // clear check
00120     buf.clear();
00121     if(buf.size()!=0) pc.printf("ouch20\n");
00122 
00123     // fill again
00124     for(int i=0; i<maxSize+1; ++i) {
00125         buf.pushCircular(i+1);
00126     }
00127     if(buf.size()!=maxSize) pc.printf("ouch22\n");
00128 
00129     if(buf.popOldest()!=2)pc.printf("ouch23\n");
00130     if(buf.popLatest()!=maxSize+1)pc.printf("ouch24\n");
00131     if(buf.popLatest()!=maxSize)pc.printf("ouch25\n");
00132     if(buf.popLatest()!=maxSize-1)pc.printf("ouch26\n");
00133 
00134     if(buf.size()!=maxSize-4) pc.printf("ouch27\n");
00135 
00136     // fill revolving
00137     for(int i=maxSize-1; i<=maxSize+3; ++i) {
00138         buf.pushCircular(i);
00139     }
00140 
00141     if(buf.size()!=maxSize) pc.printf("ouch28\n");
00142 
00143     // content check
00144     for(int i=0; i<maxSize; ++i)
00145         if(buf[maxSize-i-1]!=maxSize+3-i)pc.printf("ouch29\n");
00146 
00147     // out of bounds
00148     if(buf[4223]!=0)pc.printf("ouch30\n");
00149     if(buf[maxSize]!=0)pc.printf("ouch33\n");
00150     
00151     // empty/full
00152     if(!buf.full())pc.printf("ouch34\n");
00153     if(buf.empty())pc.printf("ouch35\n");
00154     buf.clear();
00155     if(buf.full())pc.printf("ouch36\n");
00156     if(!buf.empty())pc.printf("ouch37\n");
00157 }