diff --git a/test/test.pro b/test/test.pro index 58486c6..56c22c3 100644 --- a/test/test.pro +++ b/test/test.pro @@ -1,12 +1,16 @@ -QT += core +QT += widgets testlib QT -= gui CONFIG += c++11 -TARGET = test -CONFIG += console -CONFIG -= app_bundle +INCLUDEPATH += ../utils -TEMPLATE = app +SOURCES += \ + tst_lfqueue.cpp -SOURCES += main.cpp + +#HEADERS += \ +# ../utils/lfqueue.h + +target.path= . +INSTALLS += target diff --git a/test/tst_lfqueue.cpp b/test/tst_lfqueue.cpp index 470a030..1120de5 100644 --- a/test/tst_lfqueue.cpp +++ b/test/tst_lfqueue.cpp @@ -1,8 +1,98 @@ -#include +#include +#include -int main(int argc, char *argv[]) +#include "lfqueue.h" + +class TestLFQueue: public QObject { - QCoreApplication a(argc, argv); + Q_OBJECT +private: + +private slots: + void setSize_data(); + void setSize(); + void exchange_data(); + void exchange(); +}; + + +void TestLFQueue::setSize_data() +{ + QTest::addColumn("size"); + QTest::addColumn("result"); + + QTest::newRow("-1") << -1 << false; + QTest::newRow("0") << 0 << true; + QTest::newRow("10") << 10 << true; + QTest::newRow("2000") << 20000 << true; - return a.exec(); } + + +void TestLFQueue::setSize() +{ + QFETCH(int, size); + QFETCH(bool, result); + + LFQueue queue; + QCOMPARE(queue.setSize(size), result); +} + + +void readerThread(LFQueue* pQueue_p, int pSize, bool pSleep) { + int* val_p; + + for(int i=0; ipeek()) ); + QVERIFY(val_p); + + QCOMPARE(*val_p, i); + pQueue_p->dequeue(); + + if(pSleep) + QThread::msleep(1); + } +} + + +void TestLFQueue::exchange_data() +{ + QTest::addColumn("size"); + QTest::addColumn("writerSleep"); + QTest::addColumn("readerSleep"); + + QTest::newRow("nosleep") << 1000 << false << false; + QTest::newRow("readersleep") << 1000 << false << true; + QTest::newRow("writersleep") << 1000 << true << false; +} + + +void TestLFQueue::exchange() +{ + LFQueue queue; + QFETCH(int, size); + QFETCH(bool, writerSleep); + QFETCH(bool, readerSleep); + + int* val_p; + QCOMPARE(queue.setSize(2), true); + + QFuture thread = QtConcurrent::run(readerThread, &queue, size, readerSleep); + + for(int i=0; i