diff --git a/autotests/convertertest.cpp b/autotests/convertertest.cpp --- a/autotests/convertertest.cpp +++ b/autotests/convertertest.cpp @@ -59,6 +59,26 @@ QCOMPARE(v.number(), 314000.0); v = c.convert(v, c.category(LengthCategory).defaultUnit()); QCOMPARE(v.number(), 3140.0); + + v = Value(8.0, LitersPer100Kilometers); + v = c.convert(v, QStringLiteral("mpg")); + QCOMPARE(v.number(), 29.401875); + v = c.convert(v, QStringLiteral("mpg (imperial)")); + QCOMPARE(v.number(), 35.310125); + v = c.convert(v, QStringLiteral("kmpl")); + QCOMPARE(v.number(), 12.5); + v = c.convert(v, QStringLiteral("l/100 km")); + QCOMPARE(v.number(), 8.0); + + v = Value(33.0, MilePerUsGallon); + v = c.convert(v, QStringLiteral("mpg (imperial)")); + QCOMPARE(v.number(), 39.63128627); + v = c.convert(v, QStringLiteral("kmpl")); + QCOMPARE(v.number(), 14.0297174925); + v = c.convert(v, QStringLiteral("l/100 km")); + QCOMPARE(v.number(), 7.12772727273); + v = c.convert(v, QStringLiteral("mpg")); + QCOMPARE(v.number(), 33.0); } void ConverterTest::testInvalid() diff --git a/src/fuel_efficiency.cpp b/src/fuel_efficiency.cpp --- a/src/fuel_efficiency.cpp +++ b/src/fuel_efficiency.cpp @@ -32,22 +32,31 @@ FuelUnitPrivate(CategoryId categoryId, UnitId id, qreal multiplier, const QString &symbol, const QString &description, const QString &matchString, const KLocalizedString &symbolString, - const KLocalizedString &realString, const KLocalizedString &integerString) + const KLocalizedString &realString, const KLocalizedString &integerString, + const bool isReciprocal = false) : UnitPrivate(categoryId, id, multiplier, symbol, description, matchString, symbolString, - realString, integerString) + realString, integerString), + m_isReciprocal(isReciprocal) {} qreal toDefault(qreal value) const override { - return unitMultiplier() / value; + if (m_isReciprocal) + return unitMultiplier() / value; + return UnitPrivate::toDefault(value); } qreal fromDefault(qreal value) const override { - return unitMultiplier() / value; + if (m_isReciprocal) + return unitMultiplier() / value; + return UnitPrivate::fromDefault(value); } + +private: + bool m_isReciprocal; }; FuelEfficiency::FuelEfficiency() : CustomCategory(FuelEfficiencyCategory, i18n("Fuel Efficiency"), i18n("Fuel Efficiency")) @@ -64,25 +73,27 @@ ki18ncp("amount in units (integer)", "%1 liters per 100 kilometers", "%1 liters per 100 kilometers")))); - addCommonUnit(CustomUnit(new FuelUnitPrivate(FuelEfficiencyCategory, MilePerUsGallon, 235.2, + addCommonUnit(CustomUnit(new FuelUnitPrivate(FuelEfficiencyCategory, MilePerUsGallon, 235.215, i18nc("fuelefficiency unit symbol", "mpg"), i18nc("unit description in lists", "miles per US gallon"), i18nc("unit synonyms for matching user input", "mile per US gallon;miles per US gallon;mpg"), symbolString, ki18nc("amount in units (real)", "%1 miles per US gallon"), ki18ncp("amount in units (integer)", "%1 mile per US gallon", - "%1 miles per US gallon")))); + "%1 miles per US gallon"), + true))); - addCommonUnit(CustomUnit(new FuelUnitPrivate(FuelEfficiencyCategory, MilePerImperialGallon, 282.5, + addCommonUnit(CustomUnit(new FuelUnitPrivate(FuelEfficiencyCategory, MilePerImperialGallon, 282.481, i18nc("fuelefficiency unit symbol", "mpg (imperial)"), i18nc("unit description in lists", "miles per imperial gallon"), i18nc("unit synonyms for matching user input", "mile per imperial gallon;miles per imperial gallon;mpg (imperial)"), symbolString, ki18nc("amount in units (real)", "%1 miles per imperial gallon"), ki18ncp("amount in units (integer)", "%1 mile per imperial gallon", - "%1 miles per imperial gallon")))); + "%1 miles per imperial gallon"), + true))); addCommonUnit(CustomUnit(new FuelUnitPrivate(FuelEfficiencyCategory, KilometrePerLitre, 100.0, i18nc("fuelefficiency unit symbol", "kmpl"), @@ -92,7 +103,8 @@ symbolString, ki18nc("amount in units (real)", "%1 kilometers per liter"), ki18ncp("amount in units (integer)", "%1 kilometer per liter", - "%1 kilometers per liter")))); + "%1 kilometers per liter"), + true))); } } // KUnitConversion namespace