32 using namespace swift::misc::physical_quantities;
33 using namespace swift::misc::math;
53 void frequencyTests();
65 void temperatureTests();
71 void accelerationTests();
80 void basicArithmetic();
86 void CTestPhysicalQuantities::unitsBasics()
91 QVERIFY2(du1 == du2,
"Compare by value 1");
94 QVERIFY2(du1 == du2,
"Compare by value 2");
98 QVERIFY2(fu1 != du1,
"Hz must not be meter");
110 QVERIFY2(!(
null <
CLength::null()),
"null is equivalent to null");
111 QVERIFY2(
null != nonNull,
"null is not equal to non-null");
112 QVERIFY2((
null < nonNull) != (
null > nonNull),
"null is ordered wrt non-null");
115 void CTestPhysicalQuantities::lengthBasics()
121 QVERIFY2(d1 == d2,
"1meter shall be 100cm");
122 QVERIFY2(d3 == d4,
"1852meters shall be 1NM");
123 QVERIFY2(d1 * 2 == 2 * d1,
"Commutative multiplication");
127 QVERIFY2(d3 == d4,
"2*1852meters shall be 2NM");
130 QVERIFY2(!(d1 < d2),
"Nothing shall be less / greater");
131 QVERIFY2(!(d1 > d2),
"Nothing shall be less / greater");
135 d1.addValueSameUnit(d1.getUnit().getEpsilon() / 2.0);
136 QVERIFY2(d1 == d2,
"Epsilon: 100cm + epsilon shall be 100cm");
137 QVERIFY2(!(d1 != d2),
"Epsilon: 100cm + epsilon shall be still 100cm");
138 QVERIFY2(!(d1 > d2),
"d1 shall not be greater");
140 d1.addValueSameUnit(d1.getUnit().getEpsilon());
141 QVERIFY2(d1 != d2,
"Epsilon exceeded: 100 cm + 2 epsilon shall not be 100cm");
142 QVERIFY2(d1 > d2,
"d1 shall be greater");
145 void CTestPhysicalQuantities::speedBasics()
150 qPrintable(QStringLiteral(
"100km/h is not %1 NM/h").arg(s1.valueRounded(
CSpeedUnit::NM_h(), 0))));
152 qPrintable(QStringLiteral(
"1000ft/min is not %1 m/s").arg(s2.valueRounded(
CSpeedUnit::m_s(), 1))));
155 void CTestPhysicalQuantities::frequencyTests()
159 QCOMPARE(f1.value(), 1.0);
162 QVERIFY2(f1 == f2,
"MHz is 1E6 Hz");
165 void CTestPhysicalQuantities::angleTests()
174 qPrintable(QStringLiteral(
"Pi should be 1PI, not %1").arg(a1.piFactor())));
185 "Conversion via radians yields same answer");
191 "Conversion via radians yields same answer");
194 void CTestPhysicalQuantities::massTests()
199 QCOMPARE(w2.value(), 1.0);
202 QVERIFY2(w1 == w2,
"Masses shall be equal");
205 void CTestPhysicalQuantities::pressureTests()
213 QVERIFY2(p1 != p2,
"Standard pressure test little difference");
214 QCOMPARE(p1.value(), p4.value());
219 const CPressure delta = (standardPressure - seaLevelPressure);
220 const double expected = 95.2;
222 QCOMPARE(deltaV, expected);
225 void CTestPhysicalQuantities::temperatureTests()
233 qPrintable(QStringLiteral(
"0C shall be 273.15K, not %1 K").arg(t1.valueRounded(
CTemperatureUnit::K()))));
236 qPrintable(QStringLiteral(
"1F shall be -17.22C, not %1 C").arg(t2.valueRounded(
CTemperatureUnit::C()))));
239 QStringLiteral(
"220.15F shall be 104.53C, not %1 C").arg(t3.valueRounded(
CTemperatureUnit::C()))));
242 qPrintable(QStringLiteral(
"10F shall be 260.93K, not %1 K").arg(t4.valueRounded(
CTemperatureUnit::K()))));
245 void CTestPhysicalQuantities::timeTests()
251 CTime t5(26, 35, 40);
259 QVERIFY2(t6.formattedHrsMinSec() ==
"01:01:01",
"Formatted output hh:mm:ss failed");
260 QVERIFY2(t6.formattedHrsMin() ==
"01:01",
"Formatted output hh:mm failed");
264 QVERIFY2(t7.
formattedHrsMinSec() ==
"27:30:55",
"Parsed time greater than 24h failed");
268 qDebug() << t8.valueRoundedWithUnit();
269 QVERIFY2(t8.valueRoundedWithUnit() ==
"02h08.0m",
"valueRoundedWithUnit in hrmin correctly formatted");
272 void CTestPhysicalQuantities::accelerationTests()
280 QVERIFY2(a1 == a2,
"Accelerations should be similar");
283 "Numerical values should be equal");
286 void CTestPhysicalQuantities::memoryTests()
291 "Testing distance units failed");
297 "Testing angle units failed");
301 void CTestPhysicalQuantities::parserTests()
316 CFrequency parsedPq3 = CPqString::parse<CFrequency>(
"122.8MHz");
320 void CTestPhysicalQuantities::basicArithmetic()
327 QVERIFY2(p3 == p2,
"Pressure needs to be the same (2times)");
329 QVERIFY2(p3 == p1,
"Pressure needs to be the same (1time)");
331 QCOMPARE(p3.
value() + 1, 1.0);
333 QVERIFY2(p3 * 1.5 == 1.5 * p3,
"Basic commutative test on PQ failed");
342 CTime time3 = time1 + time2;
349 QVERIFY2(a1.valueInteger(
CAngleUnit::deg()) == 450,
"Expect 450 degrees");
352 void CTestPhysicalQuantities::literalsTest()
354 using namespace swift::misc::physical_quantities::Literals;
396 QVERIFY2(2048.123_kg ==
CMass(2048.123,
CMassUnit::kg()),
"Mass needs to be the same");
449 #include "testphysicalquantities.moc"
Physical quantities, basic tests.
T value() const
Return the value converted to the type T.
static bool epsilonEqual(float v1, float v2, float epsilon=1E-06f)
Epsilon safe equal.
static double round(double value, int digits)
Utility round method.
static CAccelerationUnit ft_s2()
Feet/second^2.
static CAccelerationUnit m_s2()
Meter/second^2 (m/s^2)
Physical unit angle (radians, degrees)
static const double & PI()
PI as convenience method.
static CAngleUnit sexagesimalDegMin()
Sexagesimal degree (degrees, minutes, decimal minutes)
static CAngleUnit rad()
Radians.
static CAngleUnit deg()
Degrees.
static CAngleUnit sexagesimalDeg()
Sexagesimal degree (degrees, minutes, seconds, decimal seconds)
static CAngleUnit defaultUnit()
Default unit.
Specialized class for frequency (hertz, mega hertz, kilo hertz).
static CFrequencyUnit Hz()
Hertz.
static CFrequencyUnit MHz()
Megahertz.
static CFrequencyUnit defaultUnit()
Default unit.
static CFrequencyUnit kHz()
Kilohertz.
static CFrequencyUnit GHz()
Gigahertz.
Physical unit length (length)
Specialized class for distance units (meter, foot, nautical miles).
static CLengthUnit km()
Kilometer km.
static CLengthUnit m()
Meter m.
static CLengthUnit SM()
Statute mile.
static CLengthUnit NM()
Nautical miles NM.
static CLengthUnit ft()
Foot ft.
static CLengthUnit mi()
International mile.
static CLengthUnit defaultUnit()
Default unit.
static CLengthUnit cm()
Centimeter cm.
static CMassUnit tonne()
Tonne, aka metric ton (1000kg)
static CMassUnit shortTon()
Short ton (2000lb) used in the United States.
static CMassUnit g()
Gram, SI unit.
static CMassUnit lb()
Pound, aka mass pound.
static CMassUnit kg()
Kilogram, SI base unit.
static const CPressure & ISASeaLevelPressure()
International Standard Atmosphere pressure at mean sea level, 1013.25hPa.
const MU & getUnit() const
Unit.
PQ & switchUnit(const MU &newUnit)
Change unit, and convert value to maintain the same quantity.
double value(MU unit) const
Value in given unit.
static const CLength & null()
NULL PQ.
bool isZeroEpsilonConsidered() const
Quantity value <= epsilon.
static CVariant parseToVariant(const QString &value, SeparatorMode mode=SeparatorQtDefault)
Parse a string value like "100m", "10.3Mhz".
static CPressureUnit bar()
Bar.
static CPressureUnit mbar()
Millibar, actually the same as hPa.
static CPressureUnit mmHg()
Millimeter of mercury.
static CPressureUnit Pa()
Pascal.
static CPressureUnit inHg()
Inch of mercury at 0°C.
static CPressureUnit psi()
Pounds per square inch.
static CPressureUnit hPa()
Hectopascal.
static CSpeedUnit NM_h()
Nautical miles per hour NM/h (same as kts)
static CSpeedUnit ft_s()
Feet/second ft/s.
static CSpeedUnit ft_min()
Feet/min ft/min.
static CSpeedUnit km_h()
Kilometer/hour km/h.
static CSpeedUnit m_s()
Meter/second m/s.
static CSpeedUnit kts()
Knots.
Physical unit temperature.
static CTemperatureUnit C()
Centigrade C.
static CTemperatureUnit K()
Kelvin.
static CTemperatureUnit F()
Fahrenheit F.
void parseFromString(const QString &time)
From string hh:mm, or hh:mm:ss, or time units such as s, min.
QString formattedHrsMinSec() const
Formatted as hh:mm:ss.
static CTimeUnit min()
Minute.
static CTimeUnit defaultUnit()
Default unit.
static CTimeUnit hrmin()
Hours, minutes.
static CTimeUnit hms()
Hours, minutes, seconds.
static CTimeUnit s()
Second s.
static CTimeUnit minsec()
Minutes, seconds.
static CTimeUnit h()
Hour.
SWIFTTEST_APPLESS_MAIN(MiscTest::CTestPhysicalQuantities)
main