Revision control

Copy as Markdown

// Copyright (C) 2016 Klaralvdalens Datakonsult AB (KDAB).
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QTest>
#include <Qt3DRender/private/uniform_p.h>
using namespace Qt3DRender;
using namespace Qt3DRender::Render;
class tst_Uniform : public QObject
{
Q_OBJECT
private Q_SLOTS:
void checkInitialState()
{
// GIVEN
UniformValue v;
// THEN
QVERIFY(v.constData<float>()[0] == 0.0f);
QVERIFY(v.constData<float>()[1] == 0.0f);
QVERIFY(v.constData<float>()[2] == 0.0f);
QVERIFY(v.constData<float>()[3] == 0.0f);
}
void checkDefaultCTors()
{
{
// GIVEN
UniformValue v(883);
// THEN
QCOMPARE(v.constData<int>()[0], 883);
QCOMPARE(v.constData<int>()[1], 0);
QCOMPARE(v.constData<int>()[2], 0);
QCOMPARE(v.constData<int>()[3], 0);
}
{
// GIVEN
UniformValue v(1584U);
// THEN
QCOMPARE(v.constData<uint>()[0], 1584U);
QCOMPARE(v.constData<uint>()[1], 0U);
QCOMPARE(v.constData<uint>()[2], 0U);
QCOMPARE(v.constData<uint>()[3], 0U);
}
{
// GIVEN
UniformValue v(454.0f);
// THEN
QCOMPARE(v.constData<float>()[0], 454.0f);
QCOMPARE(v.constData<float>()[1], 0.0f);
QCOMPARE(v.constData<float>()[2], 0.0f);
QCOMPARE(v.constData<float>()[3], 0.0f);
}
{
// GIVEN
UniformValue v(350.0);
// THEN
// Note: Uniform value does a double -> float conversion
QCOMPARE(v.constData<float>()[0], 350.0f);
QCOMPARE(v.constData<float>()[1], 0.0f);
QCOMPARE(v.constData<float>()[2], 0.0f);
QCOMPARE(v.constData<float>()[3], 0.0f);
}
{
// GIVEN
UniformValue v(true);
// THEN
QCOMPARE(v.constData<bool>()[0], true);
QCOMPARE(v.constData<bool>()[1], false);
QCOMPARE(v.constData<bool>()[2], false);
QCOMPARE(v.constData<bool>()[3], false);
}
{
// GIVEN
UniformValue v(QVector2D(355.0f, 383.0f));
// THEN
QCOMPARE(v.constData<float>()[0], 355.0f);
QCOMPARE(v.constData<float>()[1], 383.0f);
QCOMPARE(v.constData<float>()[2], 0.0f);
QCOMPARE(v.constData<float>()[3], 0.0f);
}
{
// GIVEN
UniformValue v(Vector3D(572.0f, 355.0f, 383.0f));
// THEN
QCOMPARE(v.constData<float>()[0], 572.0f);
QCOMPARE(v.constData<float>()[1], 355.0f);
QCOMPARE(v.constData<float>()[2], 383.0f);
QCOMPARE(v.constData<float>()[3], 0.0f);
}
{
// GIVEN
UniformValue v(Vector4D(355.0f, 383.0f, 1340.0f, 1603.0f));
// THEN
QCOMPARE(v.constData<float>()[0], 355.0f);
QCOMPARE(v.constData<float>()[1], 383.0f);
QCOMPARE(v.constData<float>()[2], 1340.0f);
QCOMPARE(v.constData<float>()[3], 1603.0f);
}
{
// GIVEN
const QMatrix4x4 m1;
QMatrix4x4 m2;
m2.rotate(90.0f, 1.0f, 0.0f, 0.0f);
QMatrix4x4 m3;
m3.scale(2.5f);
QMatrix4x4 m4;
m4.translate(1.0f, 2.0f, 3.0f);
const QVector<QMatrix4x4> matrices = { m1, m2, m3, m4 };
UniformValue v(matrices);
// THEN
for (int j = 0; j < matrices.size(); ++j) {
for (int i = 0; i < 16; ++i) {
QCOMPARE(v.constData<float>()[16 * j + i], matrices[j].constData()[i]);
}
}
}
{
// GIVEN
const Qt3DCore::QNodeId nodeId = Qt3DCore::QNodeId::createId();
UniformValue v(nodeId);
// THEN
QCOMPARE(uint(v.byteSize()), sizeof(Qt3DCore::QNodeId));
QCOMPARE(v.constData<Qt3DCore::QNodeId>()[0], nodeId);
}
}
void checkFromVariant()
{
{
// GIVEN
UniformValue v = UniformValue::fromVariant(QVariant(883));
// THEN
QCOMPARE(v.constData<int>()[0], 883);
QCOMPARE(v.constData<int>()[1], 0);
QCOMPARE(v.constData<int>()[2], 0);
QCOMPARE(v.constData<int>()[3], 0);
}
{
// GIVEN
UniformValue v = UniformValue::fromVariant(QVariant(1584U));
// THEN
QCOMPARE(v.constData<uint>()[0], 1584U);
QCOMPARE(v.constData<uint>()[1], 0U);
QCOMPARE(v.constData<uint>()[2], 0U);
QCOMPARE(v.constData<uint>()[3], 0U);
}
{
// GIVEN
UniformValue v = UniformValue::fromVariant(QVariant(454.0f));
// THEN
QCOMPARE(v.constData<float>()[0], 454.0f);
QCOMPARE(v.constData<float>()[1], 0.0f);
QCOMPARE(v.constData<float>()[2], 0.0f);
QCOMPARE(v.constData<float>()[3], 0.0f);
}
{
// GIVEN
UniformValue v = UniformValue::fromVariant(QVariant(350.0));
// THEN
// Note: Uniform value does a double -> float conversion
QCOMPARE(v.constData<float>()[0], 350.0f);
QCOMPARE(v.constData<float>()[1], 0.0f);
QCOMPARE(v.constData<float>()[2], 0.0f);
QCOMPARE(v.constData<float>()[3], 0.0f);
}
{
// GIVEN
UniformValue v = UniformValue::fromVariant(QVariant(true));
// THEN
QCOMPARE(v.constData<bool>()[0], true);
QCOMPARE(v.constData<bool>()[1], false);
QCOMPARE(v.constData<bool>()[2], false);
QCOMPARE(v.constData<bool>()[3], false);
}
{
// GIVEN
UniformValue v = UniformValue::fromVariant(QVariant::fromValue(QVector2D(355.0f, 383.0f)));
// THEN
QCOMPARE(v.constData<float>()[0], 355.0f);
QCOMPARE(v.constData<float>()[1], 383.0f);
QCOMPARE(v.constData<float>()[2], 0.0f);
QCOMPARE(v.constData<float>()[3], 0.0f);
}
{
// GIVEN
UniformValue v = UniformValue::fromVariant(QVariant::fromValue(QVector3D(572.0f, 355.0f, 383.0f)));
// THEN
QCOMPARE(v.constData<float>()[0], 572.0f);
QCOMPARE(v.constData<float>()[1], 355.0f);
QCOMPARE(v.constData<float>()[2], 383.0f);
QCOMPARE(v.constData<float>()[3], 0.0f);
}
{
// GIVEN
UniformValue v = UniformValue::fromVariant(QVariant::fromValue(QVector4D(355.0f, 383.0f, 1340.0f, 1603.0f)));
// THEN
QCOMPARE(v.constData<float>()[0], 355.0f);
QCOMPARE(v.constData<float>()[1], 383.0f);
QCOMPARE(v.constData<float>()[2], 1340.0f);
QCOMPARE(v.constData<float>()[3], 1603.0f);
}
{
// GIVEN
UniformValue v = UniformValue::fromVariant(QVariant::fromValue(QPoint(427, 396)));
// THEN
QCOMPARE(v.constData<int>()[0], 427);
QCOMPARE(v.constData<int>()[1], 396);
QCOMPARE(v.constData<int>()[2], 0);
QCOMPARE(v.constData<int>()[3], 0);
}
{
// GIVEN
UniformValue v = UniformValue::fromVariant(QVariant::fromValue(QSize(427, 396)));
// THEN
QCOMPARE(v.constData<int>()[0], 427);
QCOMPARE(v.constData<int>()[1], 396);
QCOMPARE(v.constData<int>()[2], 0);
QCOMPARE(v.constData<int>()[3], 0);
}
{
// GIVEN
UniformValue v = UniformValue::fromVariant(QVariant::fromValue(QRect(427, 396, 454, 1584)));
// THEN
QCOMPARE(v.constData<int>()[0], 427);
QCOMPARE(v.constData<int>()[1], 396);
QCOMPARE(v.constData<int>()[2], 454);
QCOMPARE(v.constData<int>()[3], 1584);
}
{
// GIVEN
UniformValue v = UniformValue::fromVariant(QVariant::fromValue(QPointF(427, 396)));
// THEN
QCOMPARE(v.constData<float>()[0], 427.0f);
QCOMPARE(v.constData<float>()[1], 396.0f);
QCOMPARE(v.constData<float>()[2], 0.0f);
QCOMPARE(v.constData<float>()[3], 0.0f);
}
{
// GIVEN
UniformValue v = UniformValue::fromVariant(QVariant::fromValue(QSizeF(427, 396)));
// THEN
QCOMPARE(v.constData<float>()[0], 427.0f);
QCOMPARE(v.constData<float>()[1], 396.0f);
QCOMPARE(v.constData<float>()[2], 0.0f);
QCOMPARE(v.constData<float>()[3], 0.0f);
}
{
// GIVEN
UniformValue v = UniformValue::fromVariant(QVariant::fromValue(QRectF(427, 396, 454, 1584)));
// THEN
QCOMPARE(v.constData<float>()[0], 427.0f);
QCOMPARE(v.constData<float>()[1], 396.0f);
QCOMPARE(v.constData<float>()[2], 454.0f);
QCOMPARE(v.constData<float>()[3], 1584.0f);
}
{
// GIVEN
UniformValue v = UniformValue::fromVariant(QVariant::fromValue(QMatrix4x4()));
// THEN
QCOMPARE(v.constData<float>()[ 0], 1.0f);
QCOMPARE(v.constData<float>()[ 1], 0.0f);
QCOMPARE(v.constData<float>()[ 2], 0.0f);
QCOMPARE(v.constData<float>()[ 3], 0.0f);
QCOMPARE(v.constData<float>()[ 4], 0.0f);
QCOMPARE(v.constData<float>()[ 5], 1.0f);
QCOMPARE(v.constData<float>()[ 6], 0.0f);
QCOMPARE(v.constData<float>()[ 7], 0.0f);
QCOMPARE(v.constData<float>()[ 8], 0.0f);
QCOMPARE(v.constData<float>()[ 9], 0.0f);
QCOMPARE(v.constData<float>()[10], 1.0f);
QCOMPARE(v.constData<float>()[11], 0.0f);
QCOMPARE(v.constData<float>()[12], 0.0f);
QCOMPARE(v.constData<float>()[13], 0.0f);
QCOMPARE(v.constData<float>()[14], 0.0f);
QCOMPARE(v.constData<float>()[15], 1.0f);
}
{
// GIVEN
QVariant variants = QVariantList() << QVariant(427.0f) << QVariant(454.0f) << QVariant(883.0f) << QVariant(1340.0f);
UniformValue v = UniformValue::fromVariant(variants);
// THEN
QCOMPARE(v.constData<float>()[0], 427.0f);
QCOMPARE(v.constData<float>()[1], 454.0f);
QCOMPARE(v.constData<float>()[2], 883.0f);
QCOMPARE(v.constData<float>()[3], 1340.0f);
}
{
// GIVEN
QVariant variants = QVariantList() << QVariant::fromValue(QVector4D(2.0f, 16.0f, 8.0f, 4.0f)) << QVariant(QVector4D(3.0f, 24.0f, 12.0f, 6.0f));
UniformValue v = UniformValue::fromVariant(variants);
// THEN
QCOMPARE(v.constData<float>()[0], 2.0f);
QCOMPARE(v.constData<float>()[1], 16.0f);
QCOMPARE(v.constData<float>()[2], 8.0f);
QCOMPARE(v.constData<float>()[3], 4.0f);
QCOMPARE(v.constData<float>()[4], 3.0f);
QCOMPARE(v.constData<float>()[5], 24.0f);
QCOMPARE(v.constData<float>()[6], 12.0f);
QCOMPARE(v.constData<float>()[7], 6.0f);
}
{
// GIVEN
QVariant variants = QVariantList() << QVariant(427) << QVariant(454) << QVariant(883) << QVariant(1340);
UniformValue v = UniformValue::fromVariant(variants);
// THEN
QCOMPARE(v.constData<int>()[0], 427);
QCOMPARE(v.constData<int>()[1], 454);
QCOMPARE(v.constData<int>()[2], 883);
QCOMPARE(v.constData<int>()[3], 1340);
}
}
void checkComparison()
{
#ifdef Q_OS_MACOS
QSKIP("Ignoring on the mac for now, crashes in 10.14");
#endif
// GIVEN
const UniformValue v1(Vector3D(454.0f, 883.0f, 572.0f));
UniformValue v2(454.0f);
// THEN
QVERIFY(!(v1 == v2));
QVERIFY(v1 != v2);
// WHEN
v2 = UniformValue::fromVariant(QVariant::fromValue(Vector3D(454.0f, 883.0f, 572.0f)));
// THEN
QVERIFY(v1 == v2);
QVERIFY(!(v1 != v2));
// WHEN
v2 = UniformValue::fromVariant(QVariant::fromValue(Vector3D(454.0f, 883.0f, 572.0f)));
// THEN
QVERIFY(v1 == v2);
QVERIFY(!(v1 != v2));
// WHEN
v2 = UniformValue::fromVariant(454.0f);
// THEN
QVERIFY(!(v1 == v2));
QVERIFY(v1 != v2);
}
void checkSetData()
{
// GIVEN
const QMatrix4x4 m1;
QMatrix4x4 m2;
m2.rotate(90.0f, 1.0f, 0.0f, 0.0f);
QMatrix4x4 m3;
m3.scale(2.5f);
QMatrix4x4 m4;
m4.translate(1.0f, 2.0f, 3.0f);
const QVector<QMatrix4x4> matrices1 = { m1, m2, m3, m4 };
UniformValue v(matrices1);
// WHEN
const QVector<QMatrix4x4> matrices2 = { m4, m3, m2, m1, m4 };
v.setData(matrices2);
// THEN
for (int j = 0; j < matrices2.size(); ++j) {
for (int i = 0; i < 16; ++i) {
QCOMPARE(v.constData<float>()[16 * j + i], matrices2[j].constData()[i]);
}
}
// GIVEN
const int positionCount = 10;
QVector<QVector3D> positions(positionCount);
for (int i = 0; i < positionCount; ++i) {
const QVector3D p(float(i), 10.0f * i, 100.0f * i);
positions[i] = p;
}
UniformValue positionsUniform;
// WHEN
positionsUniform.setData(positions);
// THEN
const QVector3D *data = positionsUniform.constData<QVector3D>();
for (int i = 0; i < positionCount; ++i) {
QCOMPARE(*(data + i), positions[i]);
}
}
};
QTEST_APPLESS_MAIN(tst_Uniform)
#include "tst_uniform.moc"