Some useful stuff
Dependents: FtEncoder FtControlSet
BufferTest.h@2:8882925900db, 2013-03-29 (annotated)
- Committer:
- humlet
- Date:
- Fri Mar 29 09:55:05 2013 +0000
- Revision:
- 2:8882925900db
Buffers tested and fixed
Who changed what in which revision?
User | Revision | Line number | New 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 | } |