OpenSolo/sololink/flightcode/stm32/CircularBufferTest.cpp

168 lines
3.9 KiB
C++

#include <iostream>
#include "CircularBuffer.h"
using namespace std;
int main(int argc, char *argv[])
{
static const unsigned size = 16;
CircularBuffer cb(size);
bool b[10];
uint32_t u32[10];
uint64_t u64[10];
char c[10];
cout << cb << endl;
cout << "put uint32_t...";
u32[0] = 0x12345678;
b[0] = cb.put(u32[0]);
if (b[0] && cb.used() == 4 && cb.free() == cb.size() - 4 - 1)
cout << "OK" << endl;
else
cout << "ERROR" << endl;
cout << cb << endl;
cout << "get uint32_t...";
cb.get(&u32[1]);
if (b[0] && u32[1] == u32[0] && cb.used() == 0 && cb.free() == cb.size() - 1)
cout << "OK" << endl;
else
cout << "ERROR" << endl;
cout << cb << endl;
cout << "put 3x uint32_t...";
u32[0] = 0x11223344;
u32[1] = 0x55667788;
u32[2] = 0x99aabbcc;
b[0] = cb.put(u32[0]);
b[1] = cb.put(u32[1]);
b[2] = cb.put(u32[2]);
if (b[0] && b[1] && b[2] && cb.used() == 12 && cb.free() == cb.size() - 12 - 1)
cout << "OK" << endl;
else
cout << "ERROR" << endl;
cout << cb << endl;
cout << "put uint32_t (fail)...";
u32[3] = 0xdeadbeef;
b[3] = cb.put(u32[3]);
if (!b[3] && cb.used() == 12 && cb.free() == cb.size() - 12 - 1)
cout << "OK" << endl;
else
cout << "ERROR" << endl;
cout << cb << endl;
cout << "put 3x char...";
c[0] = 'a';
c[1] = 'b';
c[2] = 'c';
b[0] = cb.put(c[0]);
b[1] = cb.put(c[1]);
b[2] = cb.put(c[2]);
if (b[0] && b[1] && b[2] && cb.used() == 15 && cb.free() == cb.size() - 15 - 1)
cout << "OK" << endl;
else
cout << "ERROR" << endl;
cout << cb << endl;
cout << "put char (fail)...";
c[3] = 'x';
b[3] = cb.put(c[3]);
if (!b[3] && cb.used() == 15 && cb.free() == cb.size() - 15 - 1)
cout << "OK" << endl;
else
cout << "ERROR" << endl;
cout << cb << endl;
cout << "get 3x uint32_t...";
u32[0] = 0;
u32[1] = 0;
u32[2] = 0;
b[0] = cb.get(&u32[0]);
b[1] = cb.get(&u32[1]);
b[2] = cb.get(&u32[2]);
if (b[0] && b[1] && b[2] && u32[0] == 0x11223344 && u32[1] == 0x55667788 &&
u32[2] == 0x99aabbcc && cb.used() == 3 && cb.free() == cb.size() - 3 - 1)
cout << "OK" << endl;
else
cout << "ERROR" << endl;
cout << cb << endl;
cout << "get 3x char...";
c[0] = 0;
c[1] = 0;
c[2] = 0;
b[0] = cb.get(&c[0]);
b[1] = cb.get(&c[1]);
b[2] = cb.get(&c[2]);
if (b[0] && b[1] && b[2] && c[0] == 'a' && c[1] == 'b' && c[2] == 'c' && cb.used() == 0 &&
cb.free() == cb.size() - 1)
cout << "OK" << endl;
else
cout << "ERROR" << endl;
cout << cb << endl;
cout << "put char...";
c[0] = 'z';
b[0] = cb.put(c[0]);
if (b[0] && cb.used() == 1 && cb.free() == cb.size() - 1 - 1)
cout << "OK" << endl;
else
cout << "ERROR" << endl;
cout << cb << endl;
cout << "put uint64_t...";
u64[0] = 0x123456789abcdef0ULL;
b[0] = cb.put(u64[0]);
if (b[0] && cb.used() == 9 && cb.free() == cb.size() - 9 - 1)
cout << "OK" << endl;
else
cout << "ERROR" << endl;
cout << cb << endl;
cout << "get char...";
c[0] = 0;
b[0] = cb.get(&c[0]);
if (b[0] && c[0] == 'z' && cb.used() == 8 && cb.free() == cb.size() - 8 - 1)
cout << "OK" << endl;
else
cout << "ERROR" << endl;
cout << cb << endl;
cout << "get uint64_t...";
u64[0] = 0;
b[0] = cb.get(&u64[0]);
if (b[0] && u64[0] == 0x123456789abcdef0ULL && cb.used() == 0 && cb.free() == cb.size() - 0 - 1)
cout << "OK" << endl;
else
cout << "ERROR" << endl;
cout << cb << endl;
cout << "get char (fail)...";
c[0] = 0;
b[0] = cb.get(&c[0]);
if (!b[0] && cb.used() == 0 && cb.free() == cb.size() - 0 - 1)
cout << "OK" << endl;
else
cout << "ERROR" << endl;
cout << cb << endl;
return 0;
} // main