Some useful stuff
Dependents: FtEncoder FtControlSet
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 }
Generated on Wed Jul 20 2022 14:56:27 by 1.7.2