File indexing completed on 2025-02-16 04:37:45
0001 /* 0002 SPDX-FileCopyrightText: 2010 Joris Guisson <joris.guisson@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include <QObject> 0008 #include <QRandomGenerator> 0009 #include <QtTest> 0010 0011 #include <ctime> 0012 0013 #include <util/circularbuffer.h> 0014 #include <util/log.h> 0015 #include <util/pipe.h> 0016 0017 using namespace bt; 0018 0019 class CircularBufferTest : public QEventLoop 0020 { 0021 Q_OBJECT 0022 public: 0023 private Q_SLOTS: 0024 void initTestCase() 0025 { 0026 memset(data, 0xFF, 13); 0027 memset(data2, 0xEE, 6); 0028 } 0029 0030 void cleanupTestCase() 0031 { 0032 } 0033 0034 void testWrite() 0035 { 0036 bt::CircularBuffer wnd(20); 0037 QVERIFY(wnd.capacity() == 20); 0038 QVERIFY(wnd.size() == 0); 0039 0040 QVERIFY(wnd.write(data, 13) == 13); 0041 QVERIFY(wnd.size() == 13); 0042 0043 QVERIFY(wnd.write(data2, 6) == 6); 0044 QVERIFY(wnd.size() == 19); 0045 0046 QVERIFY(wnd.write(data2, 6) == 1); 0047 QVERIFY(wnd.size() == 20); 0048 } 0049 0050 void testRead() 0051 { 0052 bt::CircularBuffer wnd(20); 0053 QVERIFY(wnd.capacity() == 20); 0054 QVERIFY(wnd.write(data, 13) == 13); 0055 QVERIFY(wnd.write(data2, 6) == 6); 0056 0057 bt::Uint8 ret[19]; 0058 QVERIFY(wnd.read(ret, 19) == 19); 0059 QVERIFY(wnd.size() == 0); 0060 QVERIFY(memcmp(ret, data, 13) == 0); 0061 QVERIFY(memcmp(ret + 13, data2, 6) == 0); 0062 0063 QVERIFY(wnd.write(data, 13) == 13); 0064 QVERIFY(wnd.size() == 13); 0065 0066 QVERIFY(wnd.write(data2, 6) == 6); 0067 QVERIFY(wnd.size() == 19); 0068 0069 QVERIFY(wnd.read(ret, 19) == 19); 0070 QVERIFY(wnd.size() == 0); 0071 QVERIFY(memcmp(ret, data, 13) == 0); 0072 QVERIFY(memcmp(ret + 13, data2, 6) == 0); 0073 } 0074 0075 void testIntensively() 0076 { 0077 CircularBuffer cbuf(20); 0078 0079 for (int i = 0; i < 1000; i++) { 0080 Uint32 r = 1 + QRandomGenerator::global()->bounded(20); 0081 Uint32 expected = r; 0082 if (expected + cbuf.size() >= 20) 0083 expected = 20 - cbuf.size(); 0084 0085 QVERIFY(cbuf.write(data, r) == expected); 0086 0087 bt::Uint8 ret[20]; 0088 memset(ret, 0, 20); 0089 r = 1 + QRandomGenerator::global()->bounded(20); 0090 expected = qMin(r, cbuf.size()); 0091 QVERIFY(cbuf.read(ret, expected) == expected); 0092 } 0093 } 0094 0095 void testErrors() 0096 { 0097 CircularBuffer cbuf(20); 0098 bt::Uint8 too_much[40]; 0099 QVERIFY(cbuf.write(too_much, 40) == 20); 0100 QVERIFY(cbuf.write(too_much, 40) == 0); 0101 } 0102 0103 private: 0104 bt::Uint8 data[13]; 0105 bt::Uint8 data2[6]; 0106 }; 0107 0108 QTEST_MAIN(CircularBufferTest) 0109 0110 #include "circularbuffertest.moc"