mirror of
https://bitbucket.org/smil3y/katie.git
synced 2025-02-24 02:42:55 +00:00
new qRandomUuid() function
benchmark result: ********* Start testing of tst_bench_QUuid ********* Config: Using QTest library 4.12.0, Katie 4.12.0 PASS : tst_bench_QUuid::initTestCase() RESULT : tst_bench_QUuid::qRandomUuid_vs_createUuid():"qRandomUuid()": 97.821250 CPU ticks per iteration (total: 19,564,250, iterations: 200000) RESULT : tst_bench_QUuid::qRandomUuid_vs_createUuid():"QUuid::createUuid": 108.41198 CPU ticks per iteration (total: 21,682,396, iterations: 200000) PASS : tst_bench_QUuid::qRandomUuid_vs_createUuid() RESULT : tst_bench_QUuid::createUuid(): 57.377920 CPU ticks per iteration (total: 11,475,584, iterations: 200000) PASS : tst_bench_QUuid::createUuid() RESULT : tst_bench_QUuid::fromChar(): 81.606610 CPU ticks per iteration (total: 16,321,322, iterations: 200000) PASS : tst_bench_QUuid::fromChar() RESULT : tst_bench_QUuid::toString(): 79.527925 CPU ticks per iteration (total: 15,905,585, iterations: 200000) PASS : tst_bench_QUuid::toString() RESULT : tst_bench_QUuid::fromString(): 78.037890 CPU ticks per iteration (total: 15,607,578, iterations: 200000) PASS : tst_bench_QUuid::fromString() RESULT : tst_bench_QUuid::toByteArray(): 78.505810 CPU ticks per iteration (total: 15,701,162, iterations: 200000) PASS : tst_bench_QUuid::toByteArray() RESULT : tst_bench_QUuid::fromByteArray(): 79.680680 CPU ticks per iteration (total: 15,936,136, iterations: 200000) PASS : tst_bench_QUuid::fromByteArray() RESULT : tst_bench_QUuid::toRfc4122(): 62.749495 CPU ticks per iteration (total: 12,549,899, iterations: 200000) PASS : tst_bench_QUuid::toRfc4122() RESULT : tst_bench_QUuid::fromRfc4122(): 7.604070 CPU ticks per iteration (total: 1,520,814, iterations: 200000) PASS : tst_bench_QUuid::fromRfc4122() RESULT : tst_bench_QUuid::toDataStream(): 100.19905 CPU ticks per iteration (total: 20,039,811, iterations: 200000) PASS : tst_bench_QUuid::toDataStream() RESULT : tst_bench_QUuid::fromDataStream(): 68.303560 CPU ticks per iteration (total: 13,660,712, iterations: 200000) PASS : tst_bench_QUuid::fromDataStream() RESULT : tst_bench_QUuid::isNull(): 6.075315 CPU ticks per iteration (total: 1,215,063, iterations: 200000) PASS : tst_bench_QUuid::isNull() RESULT : tst_bench_QUuid::operatorLess(): 18.49353 CPU ticks per iteration (total: 3,698,706, iterations: 200000) PASS : tst_bench_QUuid::operatorLess() RESULT : tst_bench_QUuid::operatorMore(): 18.51902 CPU ticks per iteration (total: 3,703,804, iterations: 200000) PASS : tst_bench_QUuid::operatorMore() PASS : tst_bench_QUuid::cleanupTestCase() Totals: 16 passed, 0 failed, 0 skipped ********* Finished testing of tst_bench_QUuid ********* Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
parent
43dad8b245
commit
a6eb4e3817
3 changed files with 77 additions and 0 deletions
|
@ -292,6 +292,56 @@ quint16 qChecksum(const char *data, uint len)
|
|||
return ~crc & 0xffff;
|
||||
}
|
||||
|
||||
/*!
|
||||
\relates QByteArray
|
||||
|
||||
Returns pseudo-randomly generated UUID in DCE variant as
|
||||
described in \l{https://www.ietf.org/rfc/rfc4122.txt}.
|
||||
*/
|
||||
QByteArray qRandomUuid()
|
||||
{
|
||||
static const ushort randiterratio = (sizeof(int) / sizeof(uchar));
|
||||
Q_ASSERT(randiterratio > 1);
|
||||
QSTACKARRAY(uchar, randombuf, 16);
|
||||
uchar *randombufiter = randombuf;
|
||||
for (ushort i = 0; i < (16 / randiterratio); i++) {
|
||||
*randombufiter = qrand();
|
||||
randombufiter += randiterratio;
|
||||
}
|
||||
randombuf[6] = (randombuf[6] & 0x0FFF) | 0x4000; // random version
|
||||
randombuf[8] = (randombuf[8] & 0x3F) | 0x80; // DCE variant
|
||||
|
||||
#define UUID_TOHEX(bufi, randi) \
|
||||
uuidbuf[bufi] = tohex[(randombuf[randi] >> 4) & 0xf]; \
|
||||
uuidbuf[bufi + 1] = tohex[randombuf[randi] & 0xf];
|
||||
|
||||
static const char tohex[] = "0123456789abcdef";
|
||||
QSTACKARRAY(char, uuidbuf, 37);
|
||||
UUID_TOHEX(0, 0);
|
||||
UUID_TOHEX(2, 1);
|
||||
UUID_TOHEX(4, 2);
|
||||
UUID_TOHEX(6, 3);
|
||||
uuidbuf[8] = '-';
|
||||
UUID_TOHEX(9, 4);
|
||||
UUID_TOHEX(11, 5);
|
||||
uuidbuf[13] = '-';
|
||||
UUID_TOHEX(14, 6);
|
||||
UUID_TOHEX(16, 7);
|
||||
uuidbuf[18] = '-';
|
||||
UUID_TOHEX(19, 8);
|
||||
UUID_TOHEX(21, 9);
|
||||
uuidbuf[23] = '-';
|
||||
UUID_TOHEX(24, 10);
|
||||
UUID_TOHEX(26, 11);
|
||||
UUID_TOHEX(28, 12);
|
||||
UUID_TOHEX(30, 13);
|
||||
UUID_TOHEX(32, 14);
|
||||
UUID_TOHEX(34, 15);
|
||||
|
||||
#undef UUID_TOHEX
|
||||
|
||||
return QByteArray(reinterpret_cast<char*>(uuidbuf), sizeof(uuidbuf));
|
||||
}
|
||||
#ifndef QT_NO_COMPRESS
|
||||
/*!
|
||||
\fn QByteArray qCompress(const QByteArray& data, int compressionLevel)
|
||||
|
|
|
@ -71,6 +71,8 @@ inline int qstrnicmp(const char *str1, const char *str2, uint len)
|
|||
// qChecksum: Internet checksum
|
||||
Q_CORE_EXPORT quint16 qChecksum(const char *s, uint len);
|
||||
|
||||
Q_CORE_EXPORT QByteArray qRandomUuid();
|
||||
|
||||
class QByteRef;
|
||||
class QString;
|
||||
class QDataStream;
|
||||
|
|
|
@ -34,6 +34,8 @@ public:
|
|||
{ }
|
||||
|
||||
private slots:
|
||||
void qRandomUuid_vs_createUuid_data();
|
||||
void qRandomUuid_vs_createUuid();
|
||||
void createUuid();
|
||||
void fromChar();
|
||||
void toString();
|
||||
|
@ -49,6 +51,29 @@ private slots:
|
|||
void operatorMore();
|
||||
};
|
||||
|
||||
void tst_bench_QUuid::qRandomUuid_vs_createUuid_data()
|
||||
{
|
||||
QTest::addColumn<bool>("qrandomuuid");
|
||||
|
||||
QTest::newRow("qRandomUuid()") << true;
|
||||
QTest::newRow("QUuid::createUuid") << false;
|
||||
}
|
||||
|
||||
void tst_bench_QUuid::qRandomUuid_vs_createUuid()
|
||||
{
|
||||
QFETCH(bool, qrandomuuid);
|
||||
|
||||
if (qrandomuuid) {
|
||||
QBENCHMARK {
|
||||
(void)qRandomUuid();
|
||||
}
|
||||
} else {
|
||||
QBENCHMARK {
|
||||
(void)QUuid::createUuid().toByteArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void tst_bench_QUuid::createUuid()
|
||||
{
|
||||
QBENCHMARK {
|
||||
|
|
Loading…
Add table
Reference in a new issue