diff options
Diffstat (limited to 'Master/texmf-dist/doc/lualatex/lua-physical/test/testDefinition.lua')
-rw-r--r-- | Master/texmf-dist/doc/lualatex/lua-physical/test/testDefinition.lua | 964 |
1 files changed, 964 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/lualatex/lua-physical/test/testDefinition.lua b/Master/texmf-dist/doc/lualatex/lua-physical/test/testDefinition.lua new file mode 100644 index 00000000000..08efc8bb9df --- /dev/null +++ b/Master/texmf-dist/doc/lualatex/lua-physical/test/testDefinition.lua @@ -0,0 +1,964 @@ +--[[ +This file contains the unit tests for the physical units defined in "defition.lua". + +Copyright (c) 2020 Thomas Jenni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +]]-- + +local lu = require("luaunit") + +package.path = "../?.lua;" .. package.path +local physical = require("physical") +local N = physical.Number + + +function dump(o) + if type(o) == 'table' then + local s = '{ ' + for k,v in pairs(o) do + if type(k) ~= 'number' then k = '"'..k..'"' end + if getmetatable(v) == physical.Unit then + s = s .. '['..k..'] = ' .. v.symbol .. ',' + else + s = s .. '['..k..'] = ' .. dump(v) .. ',' + end + end + return s .. '}\n' + else + return tostring(o) + end +end + + +TestDefinition = {} + +-- SI Derived Units +function TestDefinition:testGram() + lu.assertTrue( 5000 * _g == 5 * _kg) + lu.assertTrue( 5000 * _mg == 5 * _g) + lu.assertTrue( (1200 * _ng):isclose(1.2 * _ug,1e-10)) +end + +function TestDefinition:testHertz() + local f = (1.24e6*_Hz):to(_kHz) + lu.assertTrue(f == 1.24e3 * _kHz) + + local f = (30/_s):to(_Hz) + lu.assertTrue(f == 30*_Hz) +end + +function TestDefinition:testNewton() + local F = (30*_kg*5*_m/(2 * _s^2)):to(_N) + lu.assertTrue(F == 75 * _N) +end + +function TestDefinition:testPascal() + local F = 400000 * _N + local A = 2 * _m^2 + local P = (F/A):to(_Pa) + lu.assertTrue(P == 200000 * _Pa) +end + +function TestDefinition:testJoule() + local F = 2 * _kN + local s = 5 * _mm + local W = (F*s):to(_J) + lu.assertTrue(W == 10*_J) +end + +function TestDefinition:testWatt() + local W = 2 * _MJ + local t = 2 * _h + local P = (W/t):to(_W) + lu.assertTrue(P:isclose(277.777777777777778 * _W, 1e-10)) +end + + +function TestDefinition:testCoulomb() + local I = 3.4 * _pA + local t = 1 * _min + local Q = (I*t):to(_C) + lu.assertTrue(Q:isclose(2.04e-10 * _C, 1e-10)) +end + +function TestDefinition:testVolt() + local E = 45 * _J + local Q = 4 * _C + local U = (E/Q):to(_V) + lu.assertTrue(U:isclose(11.25 * _V, 1e-10)) +end + + +function TestDefinition:testFarad() + local Q = 40 * _mC + local U = 12 * _V + local C = (Q/U):to(_F) + lu.assertTrue(C:isclose(0.003333333333333 * _F, 1e-10)) +end + +function TestDefinition:testOhm() + local I = 30 * _mA + local U = 5 * _V + local R = (U/I):to(_Ohm) + lu.assertTrue(R:isclose(166.666666666666667 * _Ohm, 1e-10)) +end + +function TestDefinition:testSiemens() + local R = 5 * _kOhm + local G = (1/R):to(_S) + lu.assertTrue(G:isclose(0.0002 * _S, 1e-10)) +end + +function TestDefinition:testWeber() + local B = 2.3 * _mT + local A = 23 * _cm^2 + local Phi = (B*A):to(_Wb) + lu.assertTrue(Phi:isclose(0.00000529 * _Wb, 1e-10)) +end + +function TestDefinition:testTesla() + local Phi = 40 * _uWb + local A = 78 * _mm^2 + local B = (Phi/A):to(_T) + lu.assertTrue(B:isclose(0.512820512820513 * _T, 1e-10)) +end + +function TestDefinition:testHenry() + local U = 45 * _mV + local I = 20 * _mA + local t = 100 * _ms + local L = (U/(I/t)):to(_H) + lu.assertTrue(L:isclose(0.225*_H, 1e-10)) +end + +function TestDefinition:testLumen() + local I = 400 * _cd + local r = 2.4 * _m + local A = 1.2 * _m^2 + local F = (I*A/r^2):to(_lm) + lu.assertTrue(F:isclose(83.333333333333*_lm, 1e-10)) +end + +function TestDefinition:testLux() + local I = 400 * _cd + local r = 2.4 * _m + local A = 1.2 * _m^2 + local E = (I/r^2):to(_lx) + lu.assertTrue(E:isclose(69.444444444444*_lx, 1e-10)) +end + +function TestDefinition:testBecquerel() + local N = 12000 + local t = 6 * _s + local A = (N/t):to(_Bq) + + lu.assertTrue(A:isclose(2000*_Bq, 1e-10)) +end + +function TestDefinition:testGray() + local E = 12 * _mJ + local m = 60 * _kg + local D = (E/m):to(_Gy) + lu.assertTrue(D:isclose(0.0002*_Gy, 1e-10)) +end + +function TestDefinition:testSievert() + local E = 20 * _mJ + local m = 50 * _kg + local H = (E/m):to(_Sv) + lu.assertTrue(H:isclose(0.0004*_Sv, 1e-10)) +end + +function TestDefinition:testKatal() + local n = 20 * _mol + local t = 34 * _min + local a = (n/t):to(_kat) + lu.assertTrue(a:isclose(0.0098039215686275 * _kat, 1e-10)) +end + +function TestDefinition:testDegreeCelsius() + local theta = 0 * _degC + lu.assertTrue( (theta + _degC_0):to(_K) == 273.15 * _K ) + + theta = 5*_degC + lu.assertTrue( (theta + _degC_0):to(_K) == 278.15*_K ) + + theta = _degC*5 + lu.assertTrue( (theta + _degC_0):to(_K) == 278.15*_K ) + + theta = 5*_degC + 3*_degC + lu.assertTrue( (theta + _degC_0):to(_K,true) == 281.15*_K ) + + local dT = (5 * _degC) / _cm + lu.assertTrue( dT == 5 * _K / _cm ) + + + local T_1 = 0 * _degC + local T_2 = 1 * _K + + local r = ((T_1 + _degC_0):to(_K)-T_2)/(T_1 + _degC_0) + + r = r:to(_percent) + lu.assertTrue( r:isclose(99.63*_percent, 0.1) ) + + local c = 1000 * _J/(_kg*_degC) + local m = 1 * _g + local dT = 20 * _degC + + local Q = ( c * m * dT ):to(_J) + lu.assertTrue( Q == 20 * _J ) + + + theta_1 = 110 * _degC + T_1 = ( theta_1 + _degC_0 ):to(_K) + theta_1 = T_1:to(_degC) - _degC_0 + + lu.assertTrue( T_1 == 383.15 * _K ) + lu.assertTrue( theta_1 == 110 * _degC ) +end + + +-- PHYSICAL CONSTANTS +function TestDefinition:testSpeedOfLight() + local lns = _c * 1 * _ns + local l = lns:to(_cm) + lu.assertTrue(l:isclose(29.9792458 * _cm, 1e-10)) +end + +function TestDefinition:testGravitationalConstant() + local m_1 = 20 * _kg + local m_2 = 40 * _kg + local r = 2 * _m + local F_G = (_Gc*m_1*m_2/r^2):to(_N) + lu.assertTrue(F_G:isclose(0.0000000133482 * _N, 1e-5)) +end + +function TestDefinition:testGravitationalConstant() + local m_1 = 20 * _kg + local m_2 = 40 * _kg + local r = 2 * _m + local F_G = (_Gc*m_1*m_2/r^2):to(_N) + lu.assertTrue(F_G:isclose(0.0000000133482 * _N, 1e-5)) +end + +function TestDefinition:testPlanckConstant() + local p = 4.619e-23 * _kg * _m / _s + local lambda = (_h_P/p):to(_m) + lu.assertTrue(lambda:isclose(0.01434 * _nm, 1e-3)) +end + +function TestDefinition:testReducedPlanckConstant() + local Pi = 3.1415926535897932384626433832795028841971693993751 + local hbar = _h_P/(2*Pi) + lu.assertTrue(hbar:isclose(_h_Pbar, 1e-3)) +end + +function TestDefinition:testElementaryCharge() + local N = (150 * _C / _e):to(_1) + lu.assertTrue(N:isclose(9.3622e20*_1, 1e-4)) +end + +function TestDefinition:testVacuumPermeability() + local I = 1.3 * _A + local r = 20 * _cm + local Pi = 3.1415926535897932384626433832795028841971693993751 + + local B = (_u_0*I/(2*Pi*r)):to(_T) + lu.assertTrue(B:isclose(1.3*_uT, 1e-4)) +end + +function TestDefinition:testVacuumPermitivity() + local Q_1 = 3 * _nC + local Q_2 = 5.5 * _uC + local r = 20 * _cm + + local Pi = 3.1415926535897932384626433832795028841971693993751 + + local F_C = (1/(4*Pi*_e_0)) * Q_1 * Q_2 / r^2 + F_C = F_C:to(_N) + lu.assertTrue(F_C:isclose(0.003707365112549*_N, 1e-4)) +end + +function TestDefinition:testAtomicMass() + local m = (12*_u):to(_yg) + lu.assertTrue(m:isclose(19.926468 * _yg, 1e-4)) +end + +function TestDefinition:testElectronMass() + local k = (_u/_m_e):to(_1) + lu.assertTrue(k:isclose(1822.888 * _1, 1e-4)) +end + +function TestDefinition:testProtonMass() + local k = (_m_p/_u):to(_1) + lu.assertTrue(k:isclose(1.007276 * _1, 1e-4)) +end + +function TestDefinition:testNeutronMass() + local k = (_m_n/_u):to(_1) + lu.assertTrue(k:isclose(1.008665 * _1, 1e-4)) +end + +function TestDefinition:testBohrMagneton() + local dE = (0.5*2*_u_B*1.2*_T):to(_eV) + lu.assertTrue(dE:isclose(6.95e-5 * _eV, 1e-3)) +end + +function TestDefinition:testNuclearMagneton() + local m_p = 0.5*_e*_h_Pbar/_u_N + lu.assertTrue(m_p:isclose(_m_p, 1e-10)) +end + +function TestDefinition:testProtonmagneticmoment() + lu.assertTrue((2.7928473508*_u_N):isclose(_u_p, 1e-6)) +end + +function TestDefinition:testNeutronMagneticMoment() + lu.assertTrue((-1.91304272*_u_N):isclose(_u_n, 1e-6)) +end + +function TestDefinition:testFineStructureConstant() + lu.assertTrue(_alpha:isclose(N(7.2973525664e-3,0.0000000017e-3)*_1, 1e-9)) +end + +function TestDefinition:testRydbergConstant() + lu.assertTrue(_Ry:isclose(N(1.097373139e7,0.000065e7)/_m, 1e-9)) +end + +function TestDefinition:testAvogadrosNumber() + lu.assertTrue(_N_A:isclose(N(6.02214076e23,0.00000001e23)/_mol, 1e-9)) +end + +function TestDefinition:testBoltzmannConstant() + lu.assertTrue(_k_B:isclose(N(1.380649e-23,0.000001e-23)*_J/_K, 1e-9)) +end + +function TestDefinition:testGasConstant() + lu.assertTrue(_R:isclose(N(8.3144598,0.0000048)*_J/(_K*_mol), 1e-9)) +end + +function TestDefinition:testStefanBoltzmannConstant() + lu.assertTrue(_sigma:isclose(N(5.6703744191844e-8,0.000013e-8)*_W/(_m^2*_K^4), 1e-6)) +end + +function TestDefinition:testStandardGravity() + lu.assertTrue(_g_0:isclose(9.80665*_m/_s^2, 1e-6)) +end + +function TestDefinition:testNominalSolarRadius() + lu.assertTrue(_R_S_nom:isclose(695700*_km, 1e-6)) +end + + + +-- NON-SI UNITS BUT ACCEPTED FOR USE WITH THE SI + +-- Length +function TestDefinition:testAngstrom() + lu.assertTrue( (1e10*_angstrom):isclose(1*_m,1e-6) ) +end + +function TestDefinition:testFermi() + lu.assertTrue( (23444 * _fermi):isclose(0.23444*_angstrom,1e-6) ) +end + +-- Area +function TestDefinition:testBarn() + lu.assertTrue( (38940*_am^2):isclose(0.3894*_mbarn,1e-6) ) +end + +function TestDefinition:testAre() + lu.assertTrue( (200*_m^2):isclose(2*_are,1e-6) ) +end + +function TestDefinition:testHectare() + lu.assertTrue( (56000*_m^2):isclose(5.6*_hectare,1e-6) ) +end + +-- Volume +function TestDefinition:testLiter() + lu.assertTrue((1000*_L):isclose(1*_m^3, 1e-6)) + lu.assertTrue((1*_mL):isclose(1*_cm^3, 1e-6)) +end + +function TestDefinition:testMetricTeaspoon() + lu.assertTrue((_L):isclose(200*_tsp, 1e-6)) +end + +function TestDefinition:testMetricTablespoon() + lu.assertTrue((3*_L):isclose(200*_Tbsp, 1e-6)) +end + +-- Time +function TestDefinition:testSvedberg() + lu.assertTrue((0.56*_ns):isclose(5600*_svedberg, 1e-6)) +end +function TestDefinition:testMinute() + lu.assertTrue((60*_s):isclose(_min, 1e-6)) +end + +function TestDefinition:testHour() + lu.assertTrue((60*_min):isclose(_h, 1e-6)) +end + +function TestDefinition:testDay() + lu.assertTrue((24*_h):isclose(_d, 1e-6)) +end + +function TestDefinition:testWeek() + lu.assertTrue((7*_d):isclose(_wk, 1e-6)) +end + +function TestDefinition:testYear() + lu.assertTrue((_a):isclose(365*_d+6*_h, 1e-6)) +end + +-- Angular + +function TestDefinition:testRadian() + lu.assertTrue((_rad):isclose(57.295779513082321*_deg, 1e-6)) +end + +function TestDefinition:testSteradian() + lu.assertTrue((_sr):isclose(_rad^2, 1e-6)) +end + +function TestDefinition:testGrad() + lu.assertTrue(((5*_deg):to()):isclose(0.087266462599716*_rad, 1e-6)) +end + +function TestDefinition:testArcMinute() + lu.assertTrue(((2*_deg):to(_arcmin)):isclose(120*_arcmin, 1e-6)) +end + +function TestDefinition:testArcSecond() + lu.assertTrue(((2*_deg):to(_arcmin)):isclose(120*60*_arcsec, 1e-6)) +end + +function TestDefinition:testGon() + lu.assertTrue((34.3*_deg):isclose(38.111111111111*_gon, 1e-6)) +end + +function TestDefinition:testTurn() + lu.assertTrue((720*_deg):isclose(2*_tr, 1e-6)) +end + +function TestDefinition:testSpat() + lu.assertTrue((_sp):isclose(12.566370614359173*_sr, 1e-6)) +end + + + +-- Astronomical +function TestDefinition:testAstronomicalUnit() + lu.assertTrue((34.3*_au):isclose(5.131e9*_km, 1e-4)) +end + +function TestDefinition:testLightYear() + lu.assertTrue(_ly:isclose(63241*_au, 1e-4)) +end + +function TestDefinition:testParsec() + lu.assertTrue(_pc:isclose(3.262*_ly, 1e-3)) +end + + +--force +function TestDefinition:testKiloPond() + lu.assertTrue(_kp:isclose(9.8*_kg*_m/_s^2, 1e-2)) +end + + +-- Pressure +function TestDefinition:testBar() + lu.assertTrue((1013*_hPa):isclose(1.013*_bar, 1e-6)) +end + +function TestDefinition:testStandardAtmosphere() + lu.assertTrue((2*_atm):isclose(2.0265*_bar, 1e-6)) +end + +function TestDefinition:testTechnicalAtmosphere() + lu.assertTrue((2*_at):isclose(1.96*_bar, 1e-3)) +end + +function TestDefinition:testMillimeterOfMercury() + lu.assertTrue((120*_mmHg):isclose(15999*_Pa, 1e-4)) +end + +function TestDefinition:testTorr() + lu.assertTrue((120*_mmHg):isclose(120*_Torr, 1e-4)) +end + + +-- Heat +function TestDefinition:testCalorie() + lu.assertTrue((120*_cal):isclose(502.08*_J, 1e-6)) +end + +function TestDefinition:testCalorieInternational() + lu.assertTrue((120*_cal_IT):isclose(502.416*_J, 1e-6)) +end + +function TestDefinition:testGramOfTNT() + lu.assertTrue((5*_kg_TNT):isclose(2.092e7*_J, 1e-3)) +end + +function TestDefinition:testTonsOfTNT() + lu.assertTrue((2*_Mt_TNT):isclose(8.368e15*_J, 1e-3)) +end + + +-- Electrical + +function TestDefinition:testVoltAmpere() + lu.assertTrue((23*_VA):isclose(23*_W, 1e-3)) +end + +function TestDefinition:testAmpereHour() + lu.assertTrue((850*_mAh):isclose(3060*_C, 1e-3)) +end + + +-- Information units + +function TestDefinition:testBit() + lu.assertTrue( (100e12 * _bit):isclose(12500000000*_kB,1e-6) ) + lu.assertTrue( (_KiB/_s):isclose(8192*_bit/_s,1e-6) ) +end + +function TestDefinition:testBitsPerSecond() + lu.assertTrue( (_MiB/_s):isclose(8388608*_bps,1e-6) ) +end + +function TestDefinition:testByte() + local d = 12500000000 * _kB + lu.assertTrue( d:isclose(12207031250*_KiB,1e-6) ) + lu.assertTrue( d:isclose(100000000000*_kbit,1e-6) ) +end + + +-- Others + +function TestDefinition:testPercent() + local k = (80 * _percent):to() + lu.assertEquals( k.value, 0.8) +end + +function TestDefinition:testPermille() + local k = (80 * _permille):to() + lu.assertEquals( k.value, 0.08) +end + +function TestDefinition:testTonne() + lu.assertTrue( (2.3*_t):isclose(2.3e6*_g,1e-6) ) +end + +function TestDefinition:testElectronVolt() + lu.assertTrue( (200 * _MeV):isclose(3.20435466e-11*_J,1e-6) ) +end + +function TestDefinition:testWattHour() + lu.assertTrue( (20 * _mWh):isclose(20*3.6*_J,1e-6) ) +end + +function TestDefinition:testMetricHorsePower() + lu.assertTrue( (200 * _PS):isclose(147100 * _W,1e-4) ) +end + +function TestDefinition:testCurie() + lu.assertTrue( (3e9 * _Bq):isclose(0.081081081 * _Ci,1e-4) ) +end + +function TestDefinition:testRad() + lu.assertTrue( (100 * _Rad):isclose(1 * _Gy,1e-4) ) +end + +function TestDefinition:testRad() + lu.assertTrue( (100 * _rem):isclose(1 * _Sv,1e-4) ) +end + +function TestDefinition:testPoiseuille() + local r = 2 * _mm + local l = 10 * _cm + local p = 400 * _Pa + local eta = 0.0027 * _Pl + + local Pi = 3.1415926535897932384626433832795028841971693993751 + + local Q = Pi*p*r^4/(8*eta*l) + lu.assertTrue( Q:isclose(9.3084226773031 * _mL/_s,1e-4) ) +end + + + + + +-- IMPERIAL UNITS + +-- Length +function TestDefinition:testInch() + lu.assertTrue( (2.2*_m):isclose(86.6 * _in,1e-3) ) +end + +function TestDefinition:testThou() + lu.assertTrue( (4.3*_th):isclose(0.0043 * _in,1e-3) ) +end + +function TestDefinition:testPica() + lu.assertTrue( (5*_pica):isclose(0.8333 * _in,1e-3) ) +end + +function TestDefinition:testPoint() + lu.assertTrue( (72*_pt):isclose(25.4 * _mm,1e-3) ) +end + +function TestDefinition:testHand() + lu.assertTrue( (3*_hh):isclose(12 * _in,1e-3) ) +end + +function TestDefinition:testFoot() + lu.assertTrue( (2*_ft):isclose(60.96 * _cm,1e-3) ) +end + +function TestDefinition:testYard() + lu.assertTrue( (1.5*_yd):isclose(1.3716 * _m,1e-3) ) +end + +function TestDefinition:testRod() + lu.assertTrue( (22*_rd):isclose(1.106 * _hm,1e-3) ) +end + +function TestDefinition:testChain() + lu.assertTrue( (0.5*_ch):isclose(0.0100584 * _km,1e-3) ) +end + +function TestDefinition:testFurlong() + lu.assertTrue( (69*_fur):isclose(13.88 * _km,1e-3) ) +end + +function TestDefinition:testMile() + lu.assertTrue( (2*_mi):isclose(3.219 * _km,1e-3) ) +end + +function TestDefinition:testLeague() + lu.assertTrue( (2.2*_lea):isclose(6.6 * _mi,1e-3) ) +end + + +-- International Nautical Units +function TestDefinition:testNauticalMile() + lu.assertTrue( (200*_nmi):isclose(370.4 * _km,1e-4) ) +end + +function TestDefinition:testNauticalLeague() + lu.assertTrue( (200*_nlea):isclose(1111 * _km,1e-3) ) +end + +function TestDefinition:testCables() + lu.assertTrue( (23*_cbl):isclose(4262 * _m,1e-3) ) +end + +function TestDefinition:testFathom() + lu.assertTrue( (12*_ftm):isclose(21.95 * _m,1e-3) ) +end + +function TestDefinition:testKnot() + lu.assertTrue( (24*_kn):isclose(44.45 * _km/_h,1e-3) ) +end + + +-- Area + +function TestDefinition:testAcre() + lu.assertTrue( (300*_ac):isclose(1.214e6 * _m^2,1e-3) ) +end + + + + +-- Volume + +function TestDefinition:testGallon() + lu.assertTrue( (23*_L):isclose(5.059 * _gal,1e-3) ) +end + +function TestDefinition:testQuart() + lu.assertTrue( (3*_hL):isclose(264 * _qt,1e-3) ) +end + +function TestDefinition:testPint() + lu.assertTrue( (2*_daL):isclose(35.2 * _pint,1e-3) ) +end + +function TestDefinition:testCup() + lu.assertTrue( (5.5*_cL):isclose(0.194 * _cup,1e-2) ) +end + +function TestDefinition:testGill() + lu.assertTrue( (3.4*_cL):isclose(0.239 * _gi,1e-2) ) +end + +function TestDefinition:testFluidOunce() + lu.assertTrue( (23*_mL):isclose(0.8095 * _fl_oz,1e-2) ) +end + +function TestDefinition:testFluidDram() + lu.assertTrue( (800*_uL):isclose(0.2252 * _fl_dr,1e-2) ) +end + + + + +-- Mass (Avoirdupois) + +function TestDefinition:testGrain() + lu.assertTrue( (34*_g):isclose(524.7 * _gr,1e-3) ) +end + +function TestDefinition:testPound() + lu.assertTrue( (0.5*_kg):isclose(1.102311310925 * _lb,1e-6) ) +end + +function TestDefinition:testOunce() + lu.assertTrue( (0.3*_kg):isclose(10.582188584879999 * _oz,1e-6) ) +end + +function TestDefinition:testDram() + lu.assertTrue( (45*_g):isclose(25.397252603684997 * _dr,1e-6) ) +end + +function TestDefinition:testStone() + lu.assertTrue( (34*_kg):isclose(5.354083510212 * _st,1e-6) ) +end + +function TestDefinition:testQuarter() + lu.assertTrue( (300*_kg):isclose(23.62095666267 * _qtr,1e-6) ) +end + +function TestDefinition:testHundredWeight() + lu.assertTrue( (0.5*_t):isclose(9.8420652761 * _cwt,1e-6) ) +end + +function TestDefinition:testLongTon() + lu.assertTrue( (45*_t):isclose(44.289293742495* _ton,1e-6) ) +end + + +-- Mass (Troy) + +function TestDefinition:testTroyPound() + lu.assertTrue( (0.6*_kg):isclose(1.607537328432 * _lb_t,1e-6) ) +end + +function TestDefinition:testTroyOunce() + lu.assertTrue( (0.2*_kg):isclose(6.43014931372 * _oz_t,1e-6) ) +end + +function TestDefinition:testPennyWeight() + lu.assertTrue( (78*_g):isclose(50.155164647094004 * _dwt,1e-6) ) +end + + +-- Mass (Others) + +function TestDefinition:testFirkin() + lu.assertTrue( (3*_kg):isclose(0.11810478331319998 * _fir,1e-6) ) +end + + +-- Time +function TestDefinition:testSennight() + lu.assertTrue( (3*_sen):isclose(21 * _d,1e-6) ) +end + +function TestDefinition:testFortnight() + lu.assertTrue( (2*_ftn):isclose(28 * _d,1e-6) ) +end + +-- Temperature +function TestDefinition:testFahrenheit() + local theta = -457.87*_degF + lu.assertTrue( (theta + _degF_0):to(_K):isclose(1*_K, 0.001) ) + + -- the isclose function treats temperature units as differences + local theta_1 = 32 * _degF + local theta_2 = 0 * _degC + lu.assertTrue( ((theta_1 + _degF_0):to(_K)):isclose((theta_2 + _degC_0):to(_K,true), 0.001) ) + + local theta_1 = 69.8*_degF + local theta_2 = 21*_degC + lu.assertTrue( ((theta_1 + _degF_0):to(_K)):isclose((theta_2 + _degC_0):to(_K,true), 0.001) ) + + local theta_1 = 98.6*_degF + local theta_2 = 37*_degC + lu.assertTrue( ((theta_1 + _degF_0):to(_K)):isclose((theta_2 + _degC_0):to(_K,true), 0.001) ) + + + local theta_1 = 212.0*_degF + local theta_2 = 100*_degC + lu.assertTrue( ((theta_1 + _degF_0):to(_K)):isclose((theta_2 + _degC_0):to(_K,true), 0.001) ) +end + + +-- Others + +function TestDefinition:testPoundForce() + lu.assertTrue( (12*_lbf):isclose(53.3787 * _N,1e-4) ) +end + +function TestDefinition:testPoundal() + lu.assertTrue( (99*_pdl):isclose(13.6872 * _N,1e-4) ) +end + +function TestDefinition:testSlug() + lu.assertTrue( (0.5*_slug):isclose(7296.95 * _g,1e-4) ) +end + +function TestDefinition:testPsi() + lu.assertTrue( (29.0075*_psi):isclose(2 * _bar,1e-4) ) +end + +function TestDefinition:testThermochemicalBritishThermalUnit() + lu.assertTrue( (_BTU):isclose( _kcal*_lb*_degF/(_kg*_K) ,1e-8) ) +end + +function TestDefinition:testInternationalBritishThermalUnit() + lu.assertTrue( (_BTU_it):isclose( _kcal_IT*_lb*_degF/(_kg*_K) ,1e-8) ) +end + +function TestDefinition:testHorsepower() + lu.assertTrue( (700*_hp):isclose( 521990*_W ,1e-4) ) +end + + +-- US CUSTOMARY UNITS +-- ****************** + +-- Length +function TestDefinition:testUSinch() + lu.assertTrue( (12333*_in_US):isclose( 12333.024666*_in ,1e-6) ) +end + +function TestDefinition:testUShand() + lu.assertTrue( (3*_hh_US):isclose( 12.00002400005*_in ,1e-9) ) +end + +function TestDefinition:testUSFoot() + lu.assertTrue( (12*_ft_US):isclose( 144.0002880006*_in ,1e-9) ) +end + +function TestDefinition:testUSLink() + lu.assertTrue( (56*_li_US):isclose( 11.265430530872*_m ,1e-7) ) +end + +function TestDefinition:testUSYard() + lu.assertTrue( (3937*_yd_US):isclose( 3600*_m ,1e-9) ) +end + +function TestDefinition:testUSRod() + lu.assertTrue( (74*_rd_US):isclose( 372.16154432*_m ,1e-10) ) +end + +function TestDefinition:testUSChain() + lu.assertTrue( (0.5*_ch_US):isclose( 100.58420117*_dm ,1e-10) ) +end + +function TestDefinition:testUSFurlong() + lu.assertTrue( (56*_fur_US):isclose( 11.265430531*_km ,1e-10) ) +end + +function TestDefinition:testUSMile() + lu.assertTrue( (2.4*_mi_US):isclose( 3.8624333249*_km ,1e-10) ) +end + +function TestDefinition:testUSLeague() + lu.assertTrue( (5.5*_lea_US):isclose( 26.554229108*_km ,1e-10) ) +end + +function TestDefinition:testUSFathom() + lu.assertTrue( (5.5*_ftm_US):isclose( 100.58420117*_dm ,1e-10) ) +end + +function TestDefinition:testUSCable() + lu.assertTrue( (45*_cbl_US):isclose( 987.55*_dam ,1e-5) ) +end + +-- Area +function TestDefinition:testUSAcre() + lu.assertTrue( (45*_ac_US):isclose( 182109.26744*_m^2 ,1e-9) ) +end + +-- Volume +function TestDefinition:testUSGallon() + lu.assertTrue( (2*_gal_US):isclose( 1.665348369257978 * _gal ,1e-9) ) + lu.assertTrue( (2*_gal_US):isclose( 7.570823568*_L ,1e-9) ) +end + +function TestDefinition:testUSQuart() + lu.assertTrue( (78*_qt_US):isclose( 738.15529788 * _dL ,1e-9) ) +end + +function TestDefinition:testUSPint() + lu.assertTrue( (46*_pint_US):isclose( 2.1766117758 * _daL ,1e-9) ) +end + +function TestDefinition:testUSCup() + lu.assertTrue( (2*_cup_US):isclose( 31.5450982 * _Tbsp ,1e-9) ) +end + +function TestDefinition:testUSGill() + lu.assertTrue( (45*_gi_US):isclose( 5.3232353437499995 * _L ,1e-7) ) +end + +function TestDefinition:testUSFluidOunce() + lu.assertTrue( (22*_fl_oz_US):isclose( 650.617653125 * _mL ,1e-7) ) +end + +function TestDefinition:testUSTablespoon() + lu.assertTrue( (10*_Tbsp_US):isclose( 147.867648438 * _mL ,1e-7) ) +end + +function TestDefinition:testUSTeaspoon() + lu.assertTrue( (0.5*_tsp_US):isclose( 2464.46080729 * _uL ,1e-7) ) +end + +function TestDefinition:testUSFluidDram() + lu.assertTrue( (1*_fl_dr_US):isclose( 3.6966911953125 * _mL ,1e-7) ) +end + +-- Mass + +function TestDefinition:testUSQuarter() + lu.assertTrue( (23*_qtr_US):isclose( 260.81561275 * _kg ,1e-7) ) +end + +function TestDefinition:testUSHunderdWeight() + lu.assertTrue( (1.4*_cwt_US):isclose( 63.5029318 * _kg ,1e-7) ) +end + +function TestDefinition:testUSTon() + lu.assertTrue( (2*_ton_US):isclose( 1.81436948 * _t ,1e-7) ) +end + +return TestDefinition + + + |