Number::Number(QScriptEnginePrivate *eng): Core(eng, QLatin1String("Number"), QScriptClassInfo::NumberType) { newNumber(&publicPrototype, 0); eng->newConstructor(&ctor, this, publicPrototype); addPrototypeFunction(QLatin1String("toString"), method_toString, 0); addPrototypeFunction(QLatin1String("toLocaleString"), method_toLocaleString, 0); addPrototypeFunction(QLatin1String("valueOf"), method_valueOf, 0); addPrototypeFunction(QLatin1String("toFixed"), method_toFixed, 0); addPrototypeFunction(QLatin1String("toExponential"), method_toExponential, 0); addPrototypeFunction(QLatin1String("toPrecision"), method_toPrecision, 0); QScriptValue::PropertyFlags flags = QScriptValue::Undeletable | QScriptValue::ReadOnly | QScriptValue::SkipInEnumeration; ctor.setProperty(QLatin1String("NaN"), QScriptValueImpl(eng, qSNaN()), flags); ctor.setProperty(QLatin1String("NEGATIVE_INFINITY"), QScriptValueImpl(eng, -qInf()), flags); ctor.setProperty(QLatin1String("POSITIVE_INFINITY"), QScriptValueImpl(eng, qInf()), flags); ctor.setProperty(QLatin1String("MAX_VALUE"), QScriptValueImpl(eng, 1.7976931348623158e+308), flags); #ifdef __INTEL_COMPILER # pragma warning( push ) # pragma warning(disable: 239) #endif ctor.setProperty(QLatin1String("MIN_VALUE"), QScriptValueImpl(eng, 5e-324), flags); #ifdef __INTEL_COMPILER # pragma warning( pop ) #endif }
void tst_QNumeric::qNan() { double nan = qQNaN(); #if defined( __INTEL_COMPILER) QCOMPARE((0 > nan), false); QCOMPARE((0 < nan), false); QSKIP("This fails due to a bug in the Intel Compiler", SkipAll); #else if (0 > nan) QFAIL("compiler thinks 0 > nan"); # if defined(Q_CC_DIAB) QWARN("!(0 < nan) would fail due to a bug in dcc"); # else if (0 < nan) QFAIL("compiler thinks 0 < nan"); # endif #endif QVERIFY(qIsNaN(nan)); QVERIFY(qIsNaN(nan + 1)); QVERIFY(qIsNaN(-nan)); double inf = qInf(); QVERIFY(inf > 0); QVERIFY(-inf < 0); QVERIFY(qIsInf(inf)); QVERIFY(qIsInf(-inf)); QVERIFY(qIsInf(2*inf)); QCOMPARE(1/inf, 0.0); QVERIFY(qIsNaN(0*nan)); QVERIFY(qIsNaN(0*inf)); QVERIFY(qFuzzyCompare(1/inf, 0.0)); }
void tst_QNumeric::qNan() { #if defined __FAST_MATH__ && (__GNUC__ * 100 + __GNUC_MINOR__ < 404) QSKIP("Non-conformant fast math mode is enabled, cannot run test"); #endif double nan = qQNaN(); QVERIFY(!(0 > nan)); QVERIFY(!(0 < nan)); QVERIFY(qIsNaN(nan)); QVERIFY(qIsNaN(nan + 1)); QVERIFY(qIsNaN(-nan)); double inf = qInf(); QVERIFY(inf > 0); QVERIFY(-inf < 0); QVERIFY(qIsInf(inf)); QVERIFY(qIsInf(-inf)); QVERIFY(qIsInf(2*inf)); QCOMPARE(1/inf, 0.0); #ifdef Q_CC_INTEL QEXPECT_FAIL("", "ICC optimizes zero * anything to zero", Continue); #endif QVERIFY(qIsNaN(0*nan)); #ifdef Q_CC_INTEL QEXPECT_FAIL("", "ICC optimizes zero * anything to zero", Continue); #endif QVERIFY(qIsNaN(0*inf)); QVERIFY(qFuzzyCompare(1/inf, 0.0)); }
int QgsAlignRaster::suggestedReferenceLayer() const { int bestIndex = -1; double bestCellArea = qInf(); QSizeF cs; int i = 0; // using WGS84 as a destination CRS... but maybe some projected CRS // would be a better a choice to more accurately compute areas? // (Why earth is not flat???) QgsCoordinateReferenceSystem destCRS( "EPSG:4326" ); QString destWkt = destCRS.toWkt(); foreach ( const Item& raster, mRasters ) { if ( !suggestedWarpOutput( RasterInfo( raster.inputFilename ), destWkt, &cs ) ) return false; double cellArea = cs.width() * cs.height(); if ( cellArea < bestCellArea ) { bestCellArea = cellArea; bestIndex = i; } ++i; } return bestIndex; }
qreal SoftSlider::tickSpan(qreal min, qreal max, qreal space, qreal minsep) { if (space == 0) return qInf(); qreal jmp = minsep * (max - min) / space; qreal b = 1; while (b * 10 <= jmp) b *= 10; if (jmp > 0) while (b / 10 >= jmp) b /= 10; int q = qCeil(jmp / b); if (q > 5) return b * 10; if (q > 2) return b * 5; if (q > 1) return b * 2; return b; }
QScriptValueImpl Math::method_pow(QScriptContextPrivate *context, QScriptEnginePrivate *eng, QScriptClassInfo *) { qsreal x = context->argument(0).toNumber(); qsreal y = context->argument(1).toNumber(); if (qIsNaN(y)) return QScriptValueImpl(eng, qSNaN()); if (y == 0) return QScriptValueImpl(eng, 1); if (((x == 1) || (x == -1)) && qIsInf(y)) return QScriptValueImpl(eng, qSNaN()); if (((x == 0) && copySign(1.0, x) == 1.0) && (y < 0)) return QScriptValueImpl(eng, qInf()); if ((x == 0) && copySign(1.0, x) == -1.0) { if (y < 0) { if (::fmod(-y, 2.0) == 1.0) return QScriptValueImpl(eng, -qInf()); else return QScriptValueImpl(eng, qInf()); } else if (y > 0) { if (::fmod(y, 2.0) == 1.0) return QScriptValueImpl(eng, copySign(0, -1.0)); else return QScriptValueImpl(eng, 0); } } #ifdef Q_OS_AIX if (qIsInf(x) && copySign(1.0, x) == -1.0) { if (y > 0) { if (::fmod(y, 2.0) == 1.0) return QScriptValueImpl(eng, -qInf()); else return QScriptValueImpl(eng, qInf()); } else if (y < 0) { if (::fmod(-y, 2.0) == 1.0) return QScriptValueImpl(eng, copySign(0, -1.0)); else return QScriptValueImpl(eng, 0); } } #endif return (QScriptValueImpl(eng, ::pow(x, y))); }
QScriptValueImpl Math::method_max(QScriptContextPrivate *context, QScriptEnginePrivate *eng, QScriptClassInfo *) { qsreal mx = -qInf(); for (int i = 0; i < context->argumentCount(); ++i) { qsreal x = context->argument(i).toNumber(); if (x > mx || qIsNaN(x)) mx = x; } return (QScriptValueImpl(eng, mx)); }
double integerFromString(const char *buf, int size, int radix) { if (size == 0) return qSNaN(); double sign = 1.0; int i = 0; if (buf[0] == '+') { ++i; } else if (buf[0] == '-') { sign = -1.0; ++i; } if (((size-i) >= 2) && (buf[i] == '0')) { if (((buf[i+1] == 'x') || (buf[i+1] == 'X')) && (radix < 34)) { if ((radix != 0) && (radix != 16)) return 0; radix = 16; i += 2; } else { if (radix == 0) { radix = 8; ++i; } } } else if (radix == 0) { radix = 10; } int j = i; for ( ; i < size; ++i) { int d = toDigit(buf[i]); if ((d == -1) || (d >= radix)) break; } double result; if (j == i) { if (!qstrcmp(buf, "Infinity")) result = qInf(); else result = qSNaN(); } else { result = 0; double multiplier = 1; for (--i ; i >= j; --i, multiplier *= radix) result += toDigit(buf[i]) * multiplier; } result *= sign; return result; }
QScriptValueImpl Math::method_exp(QScriptContextPrivate *context, QScriptEnginePrivate *eng, QScriptClassInfo *) { qsreal v = context->argument(0).toNumber(); if (qIsInf(v)) { if (copySign(1.0, v) == -1.0) return QScriptValueImpl(eng, 0); else return QScriptValueImpl(eng, qInf()); } return (QScriptValueImpl(eng, ::exp(v))); }
void QBasicDrag::startDrag() { QPoint pos; #ifndef QT_NO_CURSOR pos = QCursor::pos(); if (pos.x() == int(qInf())) { // ### fixme: no mouse pos registered. Get pos from touch... pos = QPoint(); } #endif recreateShapedPixmapWindow(Q_NULLPTR, pos); enableEventFilter(); }
QScriptValueImpl Math::method_min(QScriptContextPrivate *context, QScriptEnginePrivate *eng, QScriptClassInfo *) { qsreal mx = qInf(); for (int i = 0; i < context->argumentCount(); ++i) { qsreal x = context->argument(i).toNumber(); if ((x == 0 && mx == x && copySign(1.0, x) == -1.0) || (x < mx) || qIsNaN(x)) { mx = x; } } return (QScriptValueImpl(eng, mx)); }
void QBasicDrag::startDrag() { // ### TODO Check if its really necessary to have m_drag_icon_window // when QDrag is used without a pixmap - QDrag::setPixmap() if (!m_drag_icon_window) m_drag_icon_window = new QShapedPixmapWindow(); m_drag_icon_window->setPixmap(m_drag->pixmap()); m_drag_icon_window->setHotspot(m_drag->hotSpot()); #ifndef QT_NO_CURSOR QPoint pos = QCursor::pos(); if (pos.x() == int(qInf())) { // ### fixme: no mouse pos registered. Get pos from touch... pos = QPoint(); } m_drag_icon_window->updateGeometry(pos); #endif m_drag_icon_window->setVisible(true); enableEventFilter(); }
"engine->nullValue()", "engine->undefinedValue()", "engine->newObject()", "engine->newArray()", "engine->newArray(10)", "engine->newDate(QDateTime())", "engine->newQMetaObject(&QObject::staticMetaObject)", "engine->newRegExp(\"foo\", \"gim\")", "engine->newVariant(QVariant())", "engine->newVariant(QVariant(123))", "engine->newVariant(QVariant(false))", "engine->newQObject(0)", "engine->newQObject(engine)"}; static qsreal qscriptvalue_castqsreal_valueArray[] = { 0, qQNaN(), 0, 1, 0, 122, 124, 0, 0, 123, 6.369999999999999e-08, -6.369999999999999e-08, 1126240820, 65536, 65537, qQNaN(), qQNaN(), qInf(), qInf(), qQNaN(), qInf(), qInf(), qQNaN(), qQNaN(), 0, 0, 0, 123, 12.4, qQNaN(), 0, 1, 0, 122, 124, 0, 0, 123, 6.369999999999999e-08, -6.369999999999999e-08, 1126240820, 65536, 65537, qQNaN(), qQNaN(), qInf(), qInf(), qQNaN(), qInf(), qInf(), qQNaN(), qQNaN(), 0, 0, 0, 123, 12.3, qQNaN(), 0, 1, 0, 122, 124, 0, 0, 123, 6.369999999999999e-08, -6.369999999999999e-08, 1126240820, 65536, 65537, qQNaN(), qQNaN(), qInf(), qInf(), qQNaN(), qInf(), qInf(), qQNaN(), qQNaN(), 0, 0, 0, 123, 1.23, 0, qQNaN(), qQNaN(), qQNaN(), 0, qQNaN(), qQNaN(), qQNaN(), qQNaN(), qQNaN(), qQNaN(), qQNaN(), qQNaN(), qQNaN(), qQNaN(), qQNaN(), 0, qQNaN(), 1, 0, 123, qQNaN(), qQNaN(), 22, qQNaN(), qQNaN(), qQNaN(), qQNaN(), qQNaN(), 0, 1, 0, 122, 124, 0, 0, 123, 6.369999999999999e-08, -6.369999999999999e-08, 1126240820, 65536, 65537, qQNaN(), qInf(), qInf(), qQNaN(), 0, 0, 123, 12.4, 0, qQNaN(), qQNaN(), 0, qQNaN(), qQNaN(), qQNaN(), qQNaN(), qQNaN(), 123, 0, 0, qQNaN()}; void tst_QScriptValueGenerated::qscriptvalue_castqsreal_makeData(const char* expr) {
void tst_QScriptValueGenerated::initScriptValues() { m_values.clear(); if (engine) delete engine; engine = new QScriptEngine; DEFINE_TEST_VALUE(QScriptValue()); DEFINE_TEST_VALUE(QScriptValue(QScriptValue::UndefinedValue)); DEFINE_TEST_VALUE(QScriptValue(QScriptValue::NullValue)); DEFINE_TEST_VALUE(QScriptValue(true)); DEFINE_TEST_VALUE(QScriptValue(false)); DEFINE_TEST_VALUE(QScriptValue(int(122))); DEFINE_TEST_VALUE(QScriptValue(uint(124))); DEFINE_TEST_VALUE(QScriptValue(0)); DEFINE_TEST_VALUE(QScriptValue(0.0)); DEFINE_TEST_VALUE(QScriptValue(123.0)); DEFINE_TEST_VALUE(QScriptValue(6.37e-8)); DEFINE_TEST_VALUE(QScriptValue(-6.37e-8)); DEFINE_TEST_VALUE(QScriptValue(0x43211234)); DEFINE_TEST_VALUE(QScriptValue(0x10000)); DEFINE_TEST_VALUE(QScriptValue(0x10001)); DEFINE_TEST_VALUE(QScriptValue(qSNaN())); DEFINE_TEST_VALUE(QScriptValue(qQNaN())); DEFINE_TEST_VALUE(QScriptValue(qInf())); DEFINE_TEST_VALUE(QScriptValue(-qInf())); DEFINE_TEST_VALUE(QScriptValue("NaN")); DEFINE_TEST_VALUE(QScriptValue("Infinity")); DEFINE_TEST_VALUE(QScriptValue("-Infinity")); DEFINE_TEST_VALUE(QScriptValue("ciao")); DEFINE_TEST_VALUE(QScriptValue(QString::fromLatin1("ciao"))); DEFINE_TEST_VALUE(QScriptValue(QString(""))); DEFINE_TEST_VALUE(QScriptValue(QString())); DEFINE_TEST_VALUE(QScriptValue(QString("0"))); DEFINE_TEST_VALUE(QScriptValue(QString("123"))); DEFINE_TEST_VALUE(QScriptValue(QString("12.4"))); DEFINE_TEST_VALUE(QScriptValue(0, QScriptValue::UndefinedValue)); DEFINE_TEST_VALUE(QScriptValue(0, QScriptValue::NullValue)); DEFINE_TEST_VALUE(QScriptValue(0, true)); DEFINE_TEST_VALUE(QScriptValue(0, false)); DEFINE_TEST_VALUE(QScriptValue(0, int(122))); DEFINE_TEST_VALUE(QScriptValue(0, uint(124))); DEFINE_TEST_VALUE(QScriptValue(0, 0)); DEFINE_TEST_VALUE(QScriptValue(0, 0.0)); DEFINE_TEST_VALUE(QScriptValue(0, 123.0)); DEFINE_TEST_VALUE(QScriptValue(0, 6.37e-8)); DEFINE_TEST_VALUE(QScriptValue(0, -6.37e-8)); DEFINE_TEST_VALUE(QScriptValue(0, 0x43211234)); DEFINE_TEST_VALUE(QScriptValue(0, 0x10000)); DEFINE_TEST_VALUE(QScriptValue(0, 0x10001)); DEFINE_TEST_VALUE(QScriptValue(0, qSNaN())); DEFINE_TEST_VALUE(QScriptValue(0, qQNaN())); DEFINE_TEST_VALUE(QScriptValue(0, qInf())); DEFINE_TEST_VALUE(QScriptValue(0, -qInf())); DEFINE_TEST_VALUE(QScriptValue(0, "NaN")); DEFINE_TEST_VALUE(QScriptValue(0, "Infinity")); DEFINE_TEST_VALUE(QScriptValue(0, "-Infinity")); DEFINE_TEST_VALUE(QScriptValue(0, "ciao")); DEFINE_TEST_VALUE(QScriptValue(0, QString::fromLatin1("ciao"))); DEFINE_TEST_VALUE(QScriptValue(0, QString(""))); DEFINE_TEST_VALUE(QScriptValue(0, QString())); DEFINE_TEST_VALUE(QScriptValue(0, QString("0"))); DEFINE_TEST_VALUE(QScriptValue(0, QString("123"))); DEFINE_TEST_VALUE(QScriptValue(0, QString("12.3"))); DEFINE_TEST_VALUE(QScriptValue(engine, QScriptValue::UndefinedValue)); DEFINE_TEST_VALUE(QScriptValue(engine, QScriptValue::NullValue)); DEFINE_TEST_VALUE(QScriptValue(engine, true)); DEFINE_TEST_VALUE(QScriptValue(engine, false)); DEFINE_TEST_VALUE(QScriptValue(engine, int(122))); DEFINE_TEST_VALUE(QScriptValue(engine, uint(124))); DEFINE_TEST_VALUE(QScriptValue(engine, 0)); DEFINE_TEST_VALUE(QScriptValue(engine, 0.0)); DEFINE_TEST_VALUE(QScriptValue(engine, 123.0)); DEFINE_TEST_VALUE(QScriptValue(engine, 6.37e-8)); DEFINE_TEST_VALUE(QScriptValue(engine, -6.37e-8)); DEFINE_TEST_VALUE(QScriptValue(engine, 0x43211234)); DEFINE_TEST_VALUE(QScriptValue(engine, 0x10000)); DEFINE_TEST_VALUE(QScriptValue(engine, 0x10001)); DEFINE_TEST_VALUE(QScriptValue(engine, qSNaN())); DEFINE_TEST_VALUE(QScriptValue(engine, qQNaN())); DEFINE_TEST_VALUE(QScriptValue(engine, qInf())); DEFINE_TEST_VALUE(QScriptValue(engine, -qInf())); DEFINE_TEST_VALUE(QScriptValue(engine, "NaN")); DEFINE_TEST_VALUE(QScriptValue(engine, "Infinity")); DEFINE_TEST_VALUE(QScriptValue(engine, "-Infinity")); DEFINE_TEST_VALUE(QScriptValue(engine, "ciao")); DEFINE_TEST_VALUE(QScriptValue(engine, QString::fromLatin1("ciao"))); DEFINE_TEST_VALUE(QScriptValue(engine, QString(""))); DEFINE_TEST_VALUE(QScriptValue(engine, QString())); DEFINE_TEST_VALUE(QScriptValue(engine, QString("0"))); DEFINE_TEST_VALUE(QScriptValue(engine, QString("123"))); DEFINE_TEST_VALUE(QScriptValue(engine, QString("1.23"))); DEFINE_TEST_VALUE(engine->evaluate("[]")); DEFINE_TEST_VALUE(engine->evaluate("{}")); DEFINE_TEST_VALUE(engine->evaluate("Object.prototype")); DEFINE_TEST_VALUE(engine->evaluate("Date.prototype")); DEFINE_TEST_VALUE(engine->evaluate("Array.prototype")); DEFINE_TEST_VALUE(engine->evaluate("Function.prototype")); DEFINE_TEST_VALUE(engine->evaluate("Error.prototype")); DEFINE_TEST_VALUE(engine->evaluate("Object")); DEFINE_TEST_VALUE(engine->evaluate("Array")); DEFINE_TEST_VALUE(engine->evaluate("Number")); DEFINE_TEST_VALUE(engine->evaluate("Function")); DEFINE_TEST_VALUE(engine->evaluate("(function() { return 1; })")); DEFINE_TEST_VALUE(engine->evaluate("(function() { return 'ciao'; })")); DEFINE_TEST_VALUE(engine->evaluate("(function() { throw new Error('foo'); })")); DEFINE_TEST_VALUE(engine->evaluate("/foo/")); DEFINE_TEST_VALUE(engine->evaluate("new Object()")); DEFINE_TEST_VALUE(engine->evaluate("new Array()")); DEFINE_TEST_VALUE(engine->evaluate("new Error()")); DEFINE_TEST_VALUE(engine->evaluate("new Boolean(true)")); DEFINE_TEST_VALUE(engine->evaluate("new Boolean(false)")); DEFINE_TEST_VALUE(engine->evaluate("new Number(123)")); DEFINE_TEST_VALUE(engine->evaluate("new RegExp('foo', 'gim')")); DEFINE_TEST_VALUE(engine->evaluate("new String('ciao')")); DEFINE_TEST_VALUE(engine->evaluate("a = new Object(); a.foo = 22; a.foo")); DEFINE_TEST_VALUE(engine->evaluate("Undefined")); DEFINE_TEST_VALUE(engine->evaluate("Null")); DEFINE_TEST_VALUE(engine->evaluate("True")); DEFINE_TEST_VALUE(engine->evaluate("False")); DEFINE_TEST_VALUE(engine->evaluate("undefined")); DEFINE_TEST_VALUE(engine->evaluate("null")); DEFINE_TEST_VALUE(engine->evaluate("true")); DEFINE_TEST_VALUE(engine->evaluate("false")); DEFINE_TEST_VALUE(engine->evaluate("122")); DEFINE_TEST_VALUE(engine->evaluate("124")); DEFINE_TEST_VALUE(engine->evaluate("0")); DEFINE_TEST_VALUE(engine->evaluate("0.0")); DEFINE_TEST_VALUE(engine->evaluate("123.0")); DEFINE_TEST_VALUE(engine->evaluate("6.37e-8")); DEFINE_TEST_VALUE(engine->evaluate("-6.37e-8")); DEFINE_TEST_VALUE(engine->evaluate("0x43211234")); DEFINE_TEST_VALUE(engine->evaluate("0x10000")); DEFINE_TEST_VALUE(engine->evaluate("0x10001")); DEFINE_TEST_VALUE(engine->evaluate("NaN")); DEFINE_TEST_VALUE(engine->evaluate("Infinity")); DEFINE_TEST_VALUE(engine->evaluate("-Infinity")); DEFINE_TEST_VALUE(engine->evaluate("'ciao'")); DEFINE_TEST_VALUE(engine->evaluate("''")); DEFINE_TEST_VALUE(engine->evaluate("'0'")); DEFINE_TEST_VALUE(engine->evaluate("'123'")); DEFINE_TEST_VALUE(engine->evaluate("'12.4'")); DEFINE_TEST_VALUE(engine->nullValue()); DEFINE_TEST_VALUE(engine->undefinedValue()); DEFINE_TEST_VALUE(engine->newObject()); DEFINE_TEST_VALUE(engine->newArray()); DEFINE_TEST_VALUE(engine->newArray(10)); DEFINE_TEST_VALUE(engine->newDate(QDateTime())); DEFINE_TEST_VALUE(engine->newQMetaObject(&QObject::staticMetaObject)); DEFINE_TEST_VALUE(engine->newRegExp("foo", "gim")); DEFINE_TEST_VALUE(engine->newVariant(QVariant())); DEFINE_TEST_VALUE(engine->newVariant(QVariant(123))); DEFINE_TEST_VALUE(engine->newVariant(QVariant(false))); DEFINE_TEST_VALUE(engine->newQObject(0)); DEFINE_TEST_VALUE(engine->newQObject(engine)); }
//----------------------------------------------------------------------------- double infinity(bool negative) { return (negative ? -qInf() : qInf()); }