Some useful stuff

Dependents:   FtEncoder FtControlSet

Committer:
humlet
Date:
Fri Mar 29 09:55:05 2013 +0000
Revision:
2:8882925900db
Buffers tested and fixed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
humlet 2:8882925900db 1
humlet 2:8882925900db 2 #include "Buffer.h"
humlet 2:8882925900db 3 #include "Serial.h"
humlet 2:8882925900db 4 using namespace mbed;
humlet 2:8882925900db 5
humlet 2:8882925900db 6 Serial pc(USBTX, USBRX);
humlet 2:8882925900db 7
humlet 2:8882925900db 8 const uint32_t maxSize = 5;
humlet 2:8882925900db 9
humlet 2:8882925900db 10 typedef Buffer<int,maxSize> TstBufB;
humlet 2:8882925900db 11 typedef BufferOnStack<int,maxSize> TstBufS;
humlet 2:8882925900db 12 typedef BufferOnHeap<int,maxSize> TstBufH;
humlet 2:8882925900db 13
humlet 2:8882925900db 14 typedef BufferOnHeap<int,maxSize+1> BahBuf;
humlet 2:8882925900db 15
humlet 2:8882925900db 16 void chkBuffer(TstBufB& buf);
humlet 2:8882925900db 17
humlet 2:8882925900db 18 int doit()
humlet 2:8882925900db 19 {
humlet 2:8882925900db 20 pc.baud(115200);
humlet 2:8882925900db 21
humlet 2:8882925900db 22 TstBufS bufs1;
humlet 2:8882925900db 23 TstBufH bufh1;
humlet 2:8882925900db 24
humlet 2:8882925900db 25 /*
humlet 2:8882925900db 26 // the following should not even compile
humlet 2:8882925900db 27 BahBuf bah;
humlet 2:8882925900db 28 bufs1=bah;
humlet 2:8882925900db 29 TstBufH no(bah);
humlet 2:8882925900db 30
humlet 2:8882925900db 31 bufs1.push(23);
humlet 2:8882925900db 32 const TstBufB& cbuf=bufs1;
humlet 2:8882925900db 33 int& e=cbuf[0];
humlet 2:8882925900db 34
humlet 2:8882925900db 35 */
humlet 2:8882925900db 36
humlet 2:8882925900db 37 chkBuffer(bufs1);
humlet 2:8882925900db 38 pc.printf("happyhappyjoyjoy 1\n");
humlet 2:8882925900db 39 chkBuffer(bufh1);
humlet 2:8882925900db 40 pc.printf("happyhappyjoyjoy 2\n");
humlet 2:8882925900db 41
humlet 2:8882925900db 42 // copy ctor and assignment
humlet 2:8882925900db 43 TstBufS bufs;
humlet 2:8882925900db 44 for(int i=1; i<=23; ++i) bufs.pushCircular(i);
humlet 2:8882925900db 45 bufs1=bufs;
humlet 2:8882925900db 46 TstBufS bufs2(bufs1);
humlet 2:8882925900db 47 bufh1=bufs2;
humlet 2:8882925900db 48 TstBufH bufh2(bufh1);
humlet 2:8882925900db 49 TstBufS bufs3(bufh2);
humlet 2:8882925900db 50 TstBufH bufh3(bufs2);
humlet 2:8882925900db 51 TstBufS bufs4;
humlet 2:8882925900db 52 TstBufH bufh4;
humlet 2:8882925900db 53 bufs4.push(23);
humlet 2:8882925900db 54 bufh4.push(42);
humlet 2:8882925900db 55 bufs4=bufh3;
humlet 2:8882925900db 56 bufh4=bufs3;
humlet 2:8882925900db 57
humlet 2:8882925900db 58 TstBufB* bufA[8];
humlet 2:8882925900db 59 bufA[0]=&bufs1;
humlet 2:8882925900db 60 bufA[1]=&bufs2;
humlet 2:8882925900db 61 bufA[2]=&bufs3;
humlet 2:8882925900db 62 bufA[3]=&bufs4;
humlet 2:8882925900db 63 bufA[4]=&bufh1;
humlet 2:8882925900db 64 bufA[5]=&bufh2;
humlet 2:8882925900db 65 bufA[6]=&bufh3;
humlet 2:8882925900db 66 bufA[7]=&bufh4;
humlet 2:8882925900db 67
humlet 2:8882925900db 68 for(int i=0; i<maxSize; ++i)
humlet 2:8882925900db 69 for(int j=0; j<8; ++j) {
humlet 2:8882925900db 70 int v=(*(bufA[j]))[maxSize-1-i];
humlet 2:8882925900db 71 if(v!=23-i) pc.printf("copy ouch %d %d %d\n", i,j,v);
humlet 2:8882925900db 72 }
humlet 2:8882925900db 73 pc.printf("happyhappyjoyjoy 3\n");
humlet 2:8882925900db 74 pc.printf("Test ready!\n");
humlet 2:8882925900db 75
humlet 2:8882925900db 76 return 0;
humlet 2:8882925900db 77 }
humlet 2:8882925900db 78
humlet 2:8882925900db 79 void chkBuffer(TstBufB& buf)
humlet 2:8882925900db 80 {
humlet 2:8882925900db 81
humlet 2:8882925900db 82 buf.clear();
humlet 2:8882925900db 83 // empty buffer checks
humlet 2:8882925900db 84 if(buf.size()!=0) pc.printf("ouch01\n");
humlet 2:8882925900db 85 if(buf.maxSize()!=maxSize) pc.printf("ouch02\n");
humlet 2:8882925900db 86
humlet 2:8882925900db 87 // fill until full
humlet 2:8882925900db 88 for(int i=0; i<maxSize; ++i) {
humlet 2:8882925900db 89 if(!buf.push(i+1)) pc.printf("ouch03\n");
humlet 2:8882925900db 90 if(buf.size()!=i+1) pc.printf("ouch04\n");
humlet 2:8882925900db 91 }
humlet 2:8882925900db 92
humlet 2:8882925900db 93 // overfill
humlet 2:8882925900db 94 if(buf.push(12)) pc.printf("ouch05\n");
humlet 2:8882925900db 95 if(buf.push(13)) pc.printf("ouch05\n");
humlet 2:8882925900db 96 if(buf.size()!=maxSize) pc.printf("ouch06\n");
humlet 2:8882925900db 97
humlet 2:8882925900db 98 // content check
humlet 2:8882925900db 99 for(int i=0; i<maxSize; ++i)
humlet 2:8882925900db 100 if(buf[i]!=i+1)pc.printf("ouch07\n");
humlet 2:8882925900db 101
humlet 2:8882925900db 102 // pops
humlet 2:8882925900db 103 if(buf.popLatest()!=maxSize)pc.printf("ouch08\n");
humlet 2:8882925900db 104 if(buf.popLatest()!=maxSize-1)pc.printf("ouch09\n");
humlet 2:8882925900db 105 if(buf.popOldest()!=1)pc.printf("ouch10\n");
humlet 2:8882925900db 106 if(buf.popOldest()!=2)pc.printf("ouch11\n");
humlet 2:8882925900db 107
humlet 2:8882925900db 108 if(buf.size()!=1) pc.printf("ouch12\n");
humlet 2:8882925900db 109 if(buf.popLatest()!=maxSize-2)pc.printf("ouch14\n");
humlet 2:8882925900db 110 if(buf.popOldest()!=0)pc.printf("ouch15\n");
humlet 2:8882925900db 111 if(buf.popLatest()!=0)pc.printf("ouch16\n");
humlet 2:8882925900db 112 if(buf.size()!=0) pc.printf("ouch17\n");
humlet 2:8882925900db 113
humlet 2:8882925900db 114 // fill until full
humlet 2:8882925900db 115 for(int i=0; i<maxSize; ++i) {
humlet 2:8882925900db 116 buf.pushCircular(i+1);
humlet 2:8882925900db 117 if(buf.size()!=i+1) pc.printf("ouch19\n");
humlet 2:8882925900db 118 }
humlet 2:8882925900db 119 // clear check
humlet 2:8882925900db 120 buf.clear();
humlet 2:8882925900db 121 if(buf.size()!=0) pc.printf("ouch20\n");
humlet 2:8882925900db 122
humlet 2:8882925900db 123 // fill again
humlet 2:8882925900db 124 for(int i=0; i<maxSize+1; ++i) {
humlet 2:8882925900db 125 buf.pushCircular(i+1);
humlet 2:8882925900db 126 }
humlet 2:8882925900db 127 if(buf.size()!=maxSize) pc.printf("ouch22\n");
humlet 2:8882925900db 128
humlet 2:8882925900db 129 if(buf.popOldest()!=2)pc.printf("ouch23\n");
humlet 2:8882925900db 130 if(buf.popLatest()!=maxSize+1)pc.printf("ouch24\n");
humlet 2:8882925900db 131 if(buf.popLatest()!=maxSize)pc.printf("ouch25\n");
humlet 2:8882925900db 132 if(buf.popLatest()!=maxSize-1)pc.printf("ouch26\n");
humlet 2:8882925900db 133
humlet 2:8882925900db 134 if(buf.size()!=maxSize-4) pc.printf("ouch27\n");
humlet 2:8882925900db 135
humlet 2:8882925900db 136 // fill revolving
humlet 2:8882925900db 137 for(int i=maxSize-1; i<=maxSize+3; ++i) {
humlet 2:8882925900db 138 buf.pushCircular(i);
humlet 2:8882925900db 139 }
humlet 2:8882925900db 140
humlet 2:8882925900db 141 if(buf.size()!=maxSize) pc.printf("ouch28\n");
humlet 2:8882925900db 142
humlet 2:8882925900db 143 // content check
humlet 2:8882925900db 144 for(int i=0; i<maxSize; ++i)
humlet 2:8882925900db 145 if(buf[maxSize-i-1]!=maxSize+3-i)pc.printf("ouch29\n");
humlet 2:8882925900db 146
humlet 2:8882925900db 147 // out of bounds
humlet 2:8882925900db 148 if(buf[4223]!=0)pc.printf("ouch30\n");
humlet 2:8882925900db 149 if(buf[maxSize]!=0)pc.printf("ouch33\n");
humlet 2:8882925900db 150
humlet 2:8882925900db 151 // empty/full
humlet 2:8882925900db 152 if(!buf.full())pc.printf("ouch34\n");
humlet 2:8882925900db 153 if(buf.empty())pc.printf("ouch35\n");
humlet 2:8882925900db 154 buf.clear();
humlet 2:8882925900db 155 if(buf.full())pc.printf("ouch36\n");
humlet 2:8882925900db 156 if(!buf.empty())pc.printf("ouch37\n");
humlet 2:8882925900db 157 }