From 91e54cf9150b37036447d423857d2bd18e4bf02b Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Wed, 5 Sep 2018 14:14:42 +0200 Subject: Major overhaul of BLE code: o Starting to remove shared_ptr. The code shouldn't be shared between threads, any thread safety will have to be built on the outside. o Better service discovery, don't fail when there are multiple requests that have to be done. o AttributeData was buggy, now it is just less than ideal. o Much better ByteBuffer. Now it is a simple view + cursor. --- test/ByteBufferTest.cpp | 59 +++++++++++++++++++++++++++---------------------- 1 file changed, 32 insertions(+), 27 deletions(-) (limited to 'test/ByteBufferTest.cpp') diff --git a/test/ByteBufferTest.cpp b/test/ByteBufferTest.cpp index 4a612d2..ca7a999 100644 --- a/test/ByteBufferTest.cpp +++ b/test/ByteBufferTest.cpp @@ -6,36 +6,41 @@ #include -#define checkBuffer(buffer, capacity, size, cursor) \ - if(false) {cout << "capacity=" << buffer.getCapacity() << ", size=" << buffer.getSize() << ", cursor=" << buffer.getCursor();} \ - BOOST_CHECK_EQUAL(buffer.getSize(), size); \ - BOOST_CHECK_EQUAL(buffer.getCapacity(), capacity); \ - BOOST_CHECK_EQUAL(buffer.getCursor(), cursor) - using namespace std; +static void checkBuffer(const ByteBuffer& buffer, size_t size, size_t cursor) { + if (false) { + cout << "size=" << buffer.getSize() << ", cursor=" << buffer.getCursor(); + } + BOOST_CHECK_EQUAL(buffer.getSize(), size); + BOOST_CHECK_EQUAL(buffer.getCursor(), cursor); +} + class Bytes { public: - Bytes(size_t size) : capacity(size) { - uint8_t *secret = new uint8_t[size + 0x100]; + explicit Bytes(size_t size) : capacity(size), secret(new uint8_t[size + 0x100]) { auto tmp = (uint8_t *) (((uint64_t) &secret[0x100]) & 0xffffffffffffff00); for (int i = 0; i < size; i++) { tmp[i] = (uint8_t) i; } + bytes = tmp; + } - bytes = shared_ptr(tmp, [secret](uint8_t *) { - delete[]secret; - }); + ~Bytes() { + delete secret; } - shared_ptr bytes; + + uint8_t* bytes; size_t capacity; + + uint8_t* secret; }; BOOST_AUTO_TEST_CASE(empty_buffer) { Bytes b(0); ByteBuffer buffer(b.bytes, b.capacity); - checkBuffer(buffer, 0, 0, 0); + checkBuffer(buffer, 0, 0); try { buffer.read8(); @@ -46,48 +51,48 @@ BOOST_AUTO_TEST_CASE(empty_buffer) { BOOST_AUTO_TEST_CASE(basic) { Bytes b(1000); - ByteBuffer buffer(b.bytes, 1000, 1000); - checkBuffer(buffer, 1000, 1000, 0); + ByteBuffer buffer(b.bytes, 1000); + checkBuffer(buffer, 1000, 0); BOOST_CHECK_EQUAL(buffer.read8(), 0); - checkBuffer(buffer, 1000, 1000, 1); + checkBuffer(buffer, 1000, 1); for (int i = 1; i < b.capacity; i++) { - BOOST_CHECK_EQUAL(buffer.read8(), b.bytes.get()[i]); + BOOST_CHECK_EQUAL(buffer.read8(), b.bytes[i]); } } BOOST_AUTO_TEST_CASE(setCursor) { Bytes b(1000); - ByteBuffer buffer(b.bytes, 1000, 10, 0); - checkBuffer(buffer, 1000, 10, 0); + ByteBuffer buffer(b.bytes, 1000); + checkBuffer(buffer, 1000, 0); BOOST_CHECK_EQUAL(buffer.read8(), 0); - checkBuffer(buffer, 1000, 10, 1); + checkBuffer(buffer, 1000, 1); buffer.setCursor(0); - checkBuffer(buffer, 1000, 10, 0); + checkBuffer(buffer, 1000, 0); BOOST_CHECK_EQUAL(buffer.read8(), 0); - checkBuffer(buffer, 1000, 10, 1); + checkBuffer(buffer, 1000, 1); buffer.setCursor(9); - checkBuffer(buffer, 1000, 10, 9); + checkBuffer(buffer, 1000, 9); } BOOST_AUTO_TEST_CASE(view) { Bytes b(1000); - ByteBuffer buffer(b.bytes, b.capacity, 10, 0); + ByteBuffer buffer(b.bytes, b.capacity); BOOST_CHECK_EQUAL(buffer.read8(), 0); ByteBuffer view1 = buffer.view(); - checkBuffer(view1, 9, 9, 0); + checkBuffer(view1, 999, 0); BOOST_CHECK_EQUAL(view1.read8(), 1); BOOST_CHECK_EQUAL(view1.read8(), 2); ByteBuffer view2 = view1.view(); - checkBuffer(view2, 7, 7, 0); + checkBuffer(view2, 997, 0); BOOST_CHECK_EQUAL(view1.read8(), 3); } @@ -119,7 +124,7 @@ void c(double input, uint32_t hx, double sigma = 0.00001) { double output = buffer.readFLOAT(); stringstream str; - auto actual_hex = ((uint32_t *) b.bytes.get())[0]; + auto actual_hex = ((uint32_t *) b.bytes)[0]; str << "input=" << setw(20) << setprecision(10) << input << ", output=" << setw(20) << setprecision(10) << output << ", diff=" << setw(20) << setprecision(10) << fabs(input - output) << -- cgit v1.2.3