A library for talking to Multi-Tech's Cellular SocketModem Devices.
Dependents: M2X_dev axeda_wrapper_dev MTS_M2x_Example1 MTS_Cellular_Connect_Example ... more
tests/test_MTS_Circular_Buffer.h@141:571e0ef6c8dc, 2014-01-04 (annotated)
- Committer:
- kranjan
- Date:
- Sat Jan 04 05:28:45 2014 +0000
- Revision:
- 141:571e0ef6c8dc
- Parent:
- 124:6d964b4343c8
Added licensing header to all files in the library
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kranjan | 141:571e0ef6c8dc | 1 | /* Universal Socket Modem Interface Library |
kranjan | 141:571e0ef6c8dc | 2 | * Copyright (c) 2013 Multi-Tech Systems |
kranjan | 141:571e0ef6c8dc | 3 | * |
kranjan | 141:571e0ef6c8dc | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
kranjan | 141:571e0ef6c8dc | 5 | * you may not use this file except in compliance with the License. |
kranjan | 141:571e0ef6c8dc | 6 | * You may obtain a copy of the License at |
kranjan | 141:571e0ef6c8dc | 7 | * |
kranjan | 141:571e0ef6c8dc | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
kranjan | 141:571e0ef6c8dc | 9 | * |
kranjan | 141:571e0ef6c8dc | 10 | * Unless required by applicable law or agreed to in writing, software |
kranjan | 141:571e0ef6c8dc | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
kranjan | 141:571e0ef6c8dc | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
kranjan | 141:571e0ef6c8dc | 13 | * See the License for the specific language governing permissions and |
kranjan | 141:571e0ef6c8dc | 14 | * limitations under the License. |
kranjan | 141:571e0ef6c8dc | 15 | */ |
kranjan | 141:571e0ef6c8dc | 16 | |
jengbrecht | 0:563b70517320 | 17 | #ifndef TESTMTSCIRCULARBUFFER_H |
jengbrecht | 0:563b70517320 | 18 | #define TESTMTSCIRCULARBUFFER_H |
jengbrecht | 0:563b70517320 | 19 | |
jengbrecht | 0:563b70517320 | 20 | #include "MTSCircularBuffer.h" |
jengbrecht | 0:563b70517320 | 21 | #include "Vars.h" |
jengbrecht | 0:563b70517320 | 22 | |
mfiore | 124:6d964b4343c8 | 23 | /* unit tests for the circular buffer class */ |
mfiore | 124:6d964b4343c8 | 24 | |
mfiore | 60:ee9c7a700330 | 25 | using namespace mts; |
mfiore | 60:ee9c7a700330 | 26 | |
jengbrecht | 0:563b70517320 | 27 | int capacity = 0; |
jengbrecht | 0:563b70517320 | 28 | MTSCircularBuffer* buffer = new MTSCircularBuffer(5); |
jengbrecht | 0:563b70517320 | 29 | |
jengbrecht | 0:563b70517320 | 30 | void callback() |
jengbrecht | 0:563b70517320 | 31 | { |
sgodinez | 67:1003b410f781 | 32 | capacity = buffer->remaining(); |
jengbrecht | 0:563b70517320 | 33 | } |
jengbrecht | 0:563b70517320 | 34 | |
jengbrecht | 0:563b70517320 | 35 | int testMTSCircularBuffer() |
jengbrecht | 0:563b70517320 | 36 | { |
sgodinez | 67:1003b410f781 | 37 | printf("Testing: MTSCircularBuffer\r\n"); |
jengbrecht | 0:563b70517320 | 38 | int failed = 0; |
mfiore | 60:ee9c7a700330 | 39 | char byte; |
jengbrecht | 0:563b70517320 | 40 | |
jengbrecht | 0:563b70517320 | 41 | |
jengbrecht | 0:563b70517320 | 42 | //Test getSize method |
sgodinez | 67:1003b410f781 | 43 | if (buffer->capacity() != 5) { |
sgodinez | 67:1003b410f781 | 44 | printf("Failed: capacity()\r\n"); |
jengbrecht | 0:563b70517320 | 45 | failed++; |
jengbrecht | 0:563b70517320 | 46 | } |
jengbrecht | 0:563b70517320 | 47 | |
jengbrecht | 0:563b70517320 | 48 | //Test clear function |
jengbrecht | 0:563b70517320 | 49 | buffer->write("AT", 2); |
jengbrecht | 0:563b70517320 | 50 | buffer->clear(); |
sgodinez | 67:1003b410f781 | 51 | if (buffer->size() != 0) { |
sgodinez | 67:1003b410f781 | 52 | printf("Failed: clear()\r\n"); |
jengbrecht | 0:563b70517320 | 53 | failed++; |
jengbrecht | 0:563b70517320 | 54 | } |
jengbrecht | 0:563b70517320 | 55 | |
jengbrecht | 0:563b70517320 | 56 | /* The next set of test all rely on an empty buffer!!! */ |
jengbrecht | 0:563b70517320 | 57 | |
jengbrecht | 0:563b70517320 | 58 | //Test isEmpty method - empty buffer |
jengbrecht | 0:563b70517320 | 59 | if (buffer->isEmpty() != true) { |
sgodinez | 67:1003b410f781 | 60 | printf("Failed: isEmpty() - empty\r\n"); |
jengbrecht | 0:563b70517320 | 61 | failed++; |
jengbrecht | 0:563b70517320 | 62 | } |
jengbrecht | 0:563b70517320 | 63 | |
jengbrecht | 0:563b70517320 | 64 | //Test isFull method - empty buffer |
jengbrecht | 0:563b70517320 | 65 | if (buffer->isFull() == true) { |
sgodinez | 67:1003b410f781 | 66 | printf("Failed: isFull() - empty\r\n"); |
jengbrecht | 0:563b70517320 | 67 | failed++; |
jengbrecht | 0:563b70517320 | 68 | } |
jengbrecht | 0:563b70517320 | 69 | |
jengbrecht | 0:563b70517320 | 70 | //Test capacity method - empty buffer |
sgodinez | 67:1003b410f781 | 71 | if (buffer->remaining() != 5) { |
sgodinez | 67:1003b410f781 | 72 | printf("Failed: remaining() - empty\r\n"); |
jengbrecht | 0:563b70517320 | 73 | failed++; |
jengbrecht | 0:563b70517320 | 74 | } |
jengbrecht | 0:563b70517320 | 75 | |
jengbrecht | 0:563b70517320 | 76 | //Test available method - empty buffer |
sgodinez | 67:1003b410f781 | 77 | if (buffer->size() != 0) { |
sgodinez | 67:1003b410f781 | 78 | printf("Failed: size() - empty\r\n"); |
jengbrecht | 0:563b70517320 | 79 | failed++; |
jengbrecht | 0:563b70517320 | 80 | } |
jengbrecht | 0:563b70517320 | 81 | |
jengbrecht | 0:563b70517320 | 82 | /* The next set of tests all rely on a full buffer */ |
jengbrecht | 0:563b70517320 | 83 | |
jengbrecht | 0:563b70517320 | 84 | //Test bulk write method |
jengbrecht | 0:563b70517320 | 85 | int tmp = buffer->write("Test", 5); |
mfiore | 60:ee9c7a700330 | 86 | if (tmp != 5) { |
sgodinez | 67:1003b410f781 | 87 | printf("Failed: bulk write()\r\n"); |
jengbrecht | 0:563b70517320 | 88 | failed++; |
jengbrecht | 0:563b70517320 | 89 | } |
jengbrecht | 0:563b70517320 | 90 | |
jengbrecht | 0:563b70517320 | 91 | //Test isEmpty method - full buffer |
jengbrecht | 0:563b70517320 | 92 | if (buffer->isEmpty() == true) { |
sgodinez | 67:1003b410f781 | 93 | printf("Failed: isEmpty() - full\r\n"); |
jengbrecht | 0:563b70517320 | 94 | failed++; |
jengbrecht | 0:563b70517320 | 95 | } |
jengbrecht | 0:563b70517320 | 96 | |
jengbrecht | 0:563b70517320 | 97 | //Test isFull method - full buffer |
jengbrecht | 0:563b70517320 | 98 | if (buffer->isFull() == false) { |
sgodinez | 67:1003b410f781 | 99 | printf("Failed: isFull() - full\r\n"); |
jengbrecht | 0:563b70517320 | 100 | failed++; |
jengbrecht | 0:563b70517320 | 101 | } |
jengbrecht | 0:563b70517320 | 102 | |
jengbrecht | 0:563b70517320 | 103 | //Test capacity method - full buffer |
sgodinez | 67:1003b410f781 | 104 | if (buffer->remaining() != 0) { |
sgodinez | 67:1003b410f781 | 105 | printf("Failed: remaining() - full\r\n"); |
jengbrecht | 0:563b70517320 | 106 | failed++; |
jengbrecht | 0:563b70517320 | 107 | } |
jengbrecht | 0:563b70517320 | 108 | |
jengbrecht | 0:563b70517320 | 109 | //Test available method - full buffer |
sgodinez | 67:1003b410f781 | 110 | if (buffer->size() != 5) { |
sgodinez | 67:1003b410f781 | 111 | printf("Failed: size() - full\r\n"); |
jengbrecht | 0:563b70517320 | 112 | failed++; |
jengbrecht | 0:563b70517320 | 113 | } |
jengbrecht | 0:563b70517320 | 114 | |
jengbrecht | 0:563b70517320 | 115 | //Test single overwrite method |
mfiore | 60:ee9c7a700330 | 116 | if (buffer->write('A') != 0) { |
sgodinez | 67:1003b410f781 | 117 | printf("Failed: write() - overwrite\r\n"); |
jengbrecht | 0:563b70517320 | 118 | failed++; |
jengbrecht | 0:563b70517320 | 119 | } |
jengbrecht | 0:563b70517320 | 120 | |
jengbrecht | 0:563b70517320 | 121 | //Test bulk overwrite method |
mfiore | 60:ee9c7a700330 | 122 | if (buffer->write("Test", 5) != 0) { |
sgodinez | 67:1003b410f781 | 123 | printf("Failed: bulk write() - overflow\r\n"); |
jengbrecht | 0:563b70517320 | 124 | failed++; |
jengbrecht | 0:563b70517320 | 125 | } |
jengbrecht | 0:563b70517320 | 126 | |
jengbrecht | 0:563b70517320 | 127 | //Test single read method |
sgodinez | 67:1003b410f781 | 128 | if ((buffer->read(byte) < 1 && byte != 'T') || buffer->remaining() != 1) { |
sgodinez | 67:1003b410f781 | 129 | printf("Failed: single read()\r\n"); |
jengbrecht | 0:563b70517320 | 130 | failed++; |
jengbrecht | 0:563b70517320 | 131 | } |
jengbrecht | 0:563b70517320 | 132 | |
jengbrecht | 0:563b70517320 | 133 | //Test bulk read method |
jengbrecht | 0:563b70517320 | 134 | char data[5]; |
mfiore | 60:ee9c7a700330 | 135 | if (buffer->read(data, 4) != 4 || data[0] != 'e' || data[1] != 's' || data[2] != 't' || data[3] != '\0') { |
sgodinez | 67:1003b410f781 | 136 | printf("Failed: bulk read()\r\n"); |
jengbrecht | 0:563b70517320 | 137 | failed++; |
jengbrecht | 0:563b70517320 | 138 | } |
jengbrecht | 0:563b70517320 | 139 | |
jengbrecht | 0:563b70517320 | 140 | //Test wrap write/read methods |
mfiore | 60:ee9c7a700330 | 141 | tmp = buffer->write("AT", 3); |
mfiore | 60:ee9c7a700330 | 142 | if (tmp != 3 || (buffer->read(byte) < 1 && byte != 'A') || (buffer->read(byte) < 1 && byte != 'T')) { |
sgodinez | 67:1003b410f781 | 143 | printf("Failed: wrap write()/read()\r\n"); |
jengbrecht | 0:563b70517320 | 144 | failed++; |
jengbrecht | 0:563b70517320 | 145 | } |
jengbrecht | 0:563b70517320 | 146 | buffer->clear(); |
jengbrecht | 0:563b70517320 | 147 | |
jengbrecht | 0:563b70517320 | 148 | /* The next set of test are focused all on the attach methods */ |
jengbrecht | 0:563b70517320 | 149 | |
jengbrecht | 0:563b70517320 | 150 | //Test attach with greater than below level |
jengbrecht | 0:563b70517320 | 151 | buffer->attach(&callback, 3, Vars::GREATER); |
jengbrecht | 0:563b70517320 | 152 | buffer->write("ABC", 3); |
jengbrecht | 0:563b70517320 | 153 | if (capacity != 0) { |
sgodinez | 67:1003b410f781 | 154 | printf("Failed: attach() - greater/below\r\n"); |
jengbrecht | 0:563b70517320 | 155 | failed++; |
jengbrecht | 0:563b70517320 | 156 | } |
jengbrecht | 0:563b70517320 | 157 | |
jengbrecht | 0:563b70517320 | 158 | //Test attach with greater than above level |
jengbrecht | 0:563b70517320 | 159 | buffer->write('T'); |
jengbrecht | 0:563b70517320 | 160 | if (capacity != 1) { |
sgodinez | 67:1003b410f781 | 161 | printf("Failed: attach() - greater/above\r\n"); |
jengbrecht | 0:563b70517320 | 162 | failed++; |
jengbrecht | 0:563b70517320 | 163 | } |
jengbrecht | 0:563b70517320 | 164 | buffer->clear(); |
jengbrecht | 0:563b70517320 | 165 | capacity = 0; |
jengbrecht | 0:563b70517320 | 166 | |
jengbrecht | 0:563b70517320 | 167 | //Test attach with greater equal than below level |
jengbrecht | 0:563b70517320 | 168 | buffer->attach(&callback, 3, Vars::GREATER_EQUAL); |
jengbrecht | 0:563b70517320 | 169 | buffer->write("AB", 2); |
jengbrecht | 0:563b70517320 | 170 | if (capacity != 0) { |
sgodinez | 67:1003b410f781 | 171 | printf("Failed: attach() - greater equal/below\r\n"); |
jengbrecht | 0:563b70517320 | 172 | failed++; |
jengbrecht | 0:563b70517320 | 173 | } |
jengbrecht | 0:563b70517320 | 174 | |
jengbrecht | 0:563b70517320 | 175 | //Test attach with greater equal than above level |
jengbrecht | 0:563b70517320 | 176 | buffer->write('T'); |
jengbrecht | 0:563b70517320 | 177 | if (capacity != 2) { |
sgodinez | 67:1003b410f781 | 178 | printf("Failed: attach() - greater equal/above\r\n"); |
jengbrecht | 0:563b70517320 | 179 | failed++; |
jengbrecht | 0:563b70517320 | 180 | } |
jengbrecht | 0:563b70517320 | 181 | |
jengbrecht | 0:563b70517320 | 182 | //Test attach with less than above level |
jengbrecht | 0:563b70517320 | 183 | buffer->clear(); |
jengbrecht | 0:563b70517320 | 184 | buffer->write("ABC", 3); |
jengbrecht | 0:563b70517320 | 185 | capacity = 0; |
jengbrecht | 0:563b70517320 | 186 | buffer->attach(&callback, 2, Vars::LESS); |
mfiore | 60:ee9c7a700330 | 187 | buffer->read(byte); |
jengbrecht | 0:563b70517320 | 188 | if (capacity != 0) { |
sgodinez | 67:1003b410f781 | 189 | printf("Failed: attach() - less_equal/above\r\n"); |
jengbrecht | 0:563b70517320 | 190 | failed++; |
jengbrecht | 0:563b70517320 | 191 | } |
jengbrecht | 0:563b70517320 | 192 | |
jengbrecht | 0:563b70517320 | 193 | //Test attach with less than below level |
mfiore | 60:ee9c7a700330 | 194 | buffer->read(byte); |
jengbrecht | 0:563b70517320 | 195 | if (capacity != 4) { |
sgodinez | 67:1003b410f781 | 196 | printf("Failed: attach() - less_equal/below%d\r\n", capacity); |
jengbrecht | 0:563b70517320 | 197 | failed++; |
jengbrecht | 0:563b70517320 | 198 | } |
jengbrecht | 0:563b70517320 | 199 | |
jengbrecht | 0:563b70517320 | 200 | //Test attach with less equal than above level |
jengbrecht | 0:563b70517320 | 201 | buffer->clear(); |
jengbrecht | 0:563b70517320 | 202 | buffer->write("Test", 4); |
jengbrecht | 0:563b70517320 | 203 | capacity = 0; |
jengbrecht | 0:563b70517320 | 204 | buffer->attach(&callback, 2, Vars::LESS_EQUAL); |
mfiore | 60:ee9c7a700330 | 205 | buffer->read(byte); |
jengbrecht | 0:563b70517320 | 206 | if (capacity != 0) { |
sgodinez | 67:1003b410f781 | 207 | printf("Failed: attach() - less equal/above\r\n"); |
jengbrecht | 0:563b70517320 | 208 | failed++; |
jengbrecht | 0:563b70517320 | 209 | } |
jengbrecht | 0:563b70517320 | 210 | |
jengbrecht | 0:563b70517320 | 211 | //Test attach with less equal than below level |
mfiore | 60:ee9c7a700330 | 212 | buffer->read(byte); |
jengbrecht | 0:563b70517320 | 213 | if (capacity != 3) { |
sgodinez | 67:1003b410f781 | 214 | printf("Failed: attach() - less equal/below%d\r\n", capacity); |
jengbrecht | 0:563b70517320 | 215 | failed++; |
jengbrecht | 0:563b70517320 | 216 | } |
jengbrecht | 0:563b70517320 | 217 | |
jengbrecht | 0:563b70517320 | 218 | //Test attach with less equal than above level |
jengbrecht | 0:563b70517320 | 219 | buffer->clear(); |
jengbrecht | 0:563b70517320 | 220 | buffer->write("Test", 4); |
jengbrecht | 0:563b70517320 | 221 | capacity = 0; |
jengbrecht | 0:563b70517320 | 222 | buffer->attach(&callback, 2, Vars::EQUAL); |
mfiore | 60:ee9c7a700330 | 223 | buffer->read(byte); |
jengbrecht | 0:563b70517320 | 224 | if (capacity != 0) { |
sgodinez | 67:1003b410f781 | 225 | printf("Failed: attach() - equal/above\r\n"); |
jengbrecht | 0:563b70517320 | 226 | failed++; |
jengbrecht | 0:563b70517320 | 227 | } |
jengbrecht | 0:563b70517320 | 228 | |
jengbrecht | 0:563b70517320 | 229 | //Test attach with less equal than below level |
mfiore | 60:ee9c7a700330 | 230 | buffer->read(byte); |
jengbrecht | 0:563b70517320 | 231 | if (capacity != 3) { |
sgodinez | 67:1003b410f781 | 232 | printf("Failed: attach() - equal/below%d\r\n", capacity); |
jengbrecht | 0:563b70517320 | 233 | failed++; |
jengbrecht | 0:563b70517320 | 234 | } |
jengbrecht | 0:563b70517320 | 235 | |
sgodinez | 67:1003b410f781 | 236 | //Test Ins and Outs |
sgodinez | 67:1003b410f781 | 237 | { |
sgodinez | 68:c490e4a51778 | 238 | const char inData[] = "*ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890*"; |
sgodinez | 67:1003b410f781 | 239 | const int size = sizeof(inData); |
sgodinez | 67:1003b410f781 | 240 | char outData[size]; |
sgodinez | 67:1003b410f781 | 241 | |
sgodinez | 67:1003b410f781 | 242 | int bytesWritten = 0; |
sgodinez | 67:1003b410f781 | 243 | int bytesRead = 0; |
sgodinez | 67:1003b410f781 | 244 | buffer->clear(); |
sgodinez | 67:1003b410f781 | 245 | |
sgodinez | 67:1003b410f781 | 246 | Timer tmr; |
sgodinez | 67:1003b410f781 | 247 | tmr.start(); |
sgodinez | 67:1003b410f781 | 248 | do { |
sgodinez | 67:1003b410f781 | 249 | int remaining = size - bytesRead; |
sgodinez | 67:1003b410f781 | 250 | int readable = buffer->size(); |
sgodinez | 67:1003b410f781 | 251 | if(remaining) { |
sgodinez | 67:1003b410f781 | 252 | if(readable) { |
sgodinez | 67:1003b410f781 | 253 | //printf("READABLE [%d]\r\n", readable); |
sgodinez | 67:1003b410f781 | 254 | int received = buffer->read(&outData[bytesRead], remaining); |
sgodinez | 67:1003b410f781 | 255 | bytesRead += received; |
sgodinez | 67:1003b410f781 | 256 | //printf("READ [%d] TOTAL[%d] REMAINING[%d]\r\n", received, bytesRead, size - bytesRead); |
sgodinez | 67:1003b410f781 | 257 | } |
sgodinez | 67:1003b410f781 | 258 | } |
sgodinez | 67:1003b410f781 | 259 | |
sgodinez | 67:1003b410f781 | 260 | remaining = size - bytesWritten; |
sgodinez | 67:1003b410f781 | 261 | int writeable = buffer->remaining(); |
sgodinez | 67:1003b410f781 | 262 | if(remaining) { |
sgodinez | 67:1003b410f781 | 263 | if(writeable) { |
sgodinez | 67:1003b410f781 | 264 | //printf("WRITEABLE [%d]\r\n", writeable); |
sgodinez | 67:1003b410f781 | 265 | int written = buffer->write(&inData[bytesWritten], remaining); |
sgodinez | 67:1003b410f781 | 266 | bytesWritten += written; |
sgodinez | 67:1003b410f781 | 267 | remaining = size - bytesWritten; |
sgodinez | 67:1003b410f781 | 268 | //printf("WROTE [%d] TOTAL[%d] REMAINING[%d]\r\n", written, bytesWritten, size - bytesWritten); |
sgodinez | 67:1003b410f781 | 269 | } |
sgodinez | 67:1003b410f781 | 270 | } |
sgodinez | 67:1003b410f781 | 271 | |
sgodinez | 67:1003b410f781 | 272 | } while (tmr.read_ms() <= 5000 && bytesRead < size); |
sgodinez | 67:1003b410f781 | 273 | |
sgodinez | 68:c490e4a51778 | 274 | printf("INPUT [%d]: [%s]\r\n", size, inData); |
sgodinez | 68:c490e4a51778 | 275 | printf("OUTPUT [%d]: [%s]\r\n", bytesRead, outData); |
sgodinez | 67:1003b410f781 | 276 | for(int i = 0; i < size - 1; i++) { |
sgodinez | 67:1003b410f781 | 277 | if(inData[i] != outData[i]) { |
sgodinez | 67:1003b410f781 | 278 | printf("Failed: Buffers do not match at index %d\r\n", i); |
sgodinez | 67:1003b410f781 | 279 | failed++; |
sgodinez | 67:1003b410f781 | 280 | break; |
sgodinez | 67:1003b410f781 | 281 | } |
sgodinez | 67:1003b410f781 | 282 | } |
sgodinez | 67:1003b410f781 | 283 | } |
sgodinez | 67:1003b410f781 | 284 | |
sgodinez | 67:1003b410f781 | 285 | printf("Finished Testing: MTSCircularBuffer\r\n"); |
jengbrecht | 0:563b70517320 | 286 | return failed; |
jengbrecht | 0:563b70517320 | 287 | } |
jengbrecht | 0:563b70517320 | 288 | |
kranjan | 141:571e0ef6c8dc | 289 | #endif /* TESTMTSCIRCULARBUFFER_H */ |