File: QuantitiesSpec.hs

package info (click to toggle)
haskell-dimensional 1.5-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 348 kB
  • sloc: haskell: 2,370; makefile: 2
file content (137 lines) | stat: -rw-r--r-- 3,953 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
module Numeric.Units.Dimensional.QuantitiesSpec where

import Numeric.Units.Dimensional.Prelude
import Test.Hspec

spec :: Spec
spec = do
         describe "Quantity synonyms" $ do
           it "compile with correct dimensions" $ do
             success -- If I compiled I'm OK!

success :: IO ()
success = return ()

-- These definitions simply verify that the type synonyms are
-- consistent with the appropriate units from table 2. If the
-- definitions compile the type synonyms are good.

x1 :: Area Double
x1 = 1 *~ meter ^ pos2
x2 :: Volume Double
x2 = 1 *~ meter ^ pos3
x3 :: Velocity Double
x3 = 1 *~ (meter / second)
x4 :: Acceleration Double
x4 = 1 *~ (meter / second ^ pos2)
x5 :: WaveNumber Double
x5 = 1 *~ meter ^ neg1
x6 :: Density Double
x6 = 1 *~ (kilo gram / meter ^ pos3)
x7 :: SpecificVolume Double
x7 = 1 *~ (meter ^ pos3 / kilo gram)
x8 :: CurrentDensity Double
x8 = 1 *~ (ampere / meter ^ pos2)
x9 :: MagneticFieldStrength Double
x9 = 1 *~ (ampere / meter)
x10 :: Concentration Double
x10 = 1 *~ (mole / meter ^ pos3)
x11 :: Luminance Double
x11 = 1 *~ (candela / meter ^ pos2)

-- These definitions simply verify that the type synonyms are
-- consistent with the appropriate units from table 3. If the
-- definitions compile the type synonyms are good.

y1 :: PlaneAngle Double
y1 = 1 *~ (meter / meter)
y2 :: SolidAngle Double
y2 = 1 *~ (meter ^ pos2 / meter ^ pos2)
y3 :: Frequency Double
y3 = 1 *~ (one / second)
y4 :: Force Double
y4 = 1 *~ (meter * kilo gram / second ^ pos2)
y5 :: Pressure Double
y5 = 1 *~ (newton / meter ^ pos2)
y6 :: Energy Double
y6 = 1 *~ (newton * meter)
y7 :: Power Double
y7 = 1 *~ (joule / second)
y8 :: ElectricCharge Double
y8 = 1 *~ (second * ampere)
y9 :: ElectricPotential Double
y9 = 1 *~ (watt / ampere)
y10 :: Capacitance Double
y10 = 1 *~ (coulomb / volt)
y11 :: ElectricResistance Double
y11 = 1 *~ (volt / ampere)
y12 :: ElectricConductance Double
y12 = 1 *~ (ampere / volt)
y13 :: MagneticFlux Double
y13 = 1 *~ (volt * second)
y14 :: MagneticFluxDensity Double
y14 = 1 *~ (weber / meter ^ pos2)
y15 :: Inductance Double
y15 = 1 *~ (weber / ampere)
y16 :: LuminousFlux Double
y16 = 1 *~ (candela * steradian)
y17 :: Illuminance Double
y17 = 1 *~ (lumen / meter ^ pos2)
y18 :: Activity Double
y18 = 1 *~ (one / second)
y19 :: AbsorbedDose Double
y19 = 1 *~ (joule / kilo gram)
y20 :: DoseEquivalent Double
y20 = 1 *~ (joule / kilo gram)
y21 :: CatalyticActivity Double
y21 = 1 *~ (mole / second)

-- Verification of table 4. If the definitions compile the type
-- synonyms are good.

z1 :: AngularVelocity Double
z1 = 1 *~ (radian / second)
z2 :: AngularAcceleration Double
z2 = 1 *~ (radian / second ^ pos2)
z3 :: DynamicViscosity Double
z3 = 1 *~ (pascal * second)
z4 :: MomentOfForce Double
z4 = 1 *~ (newton * meter)
z5 :: SurfaceTension Double
z5 = 1 *~ (newton / meter)
z6 :: HeatFluxDensity Double
z6 = 1 *~ (watt / meter ^ pos2)
z7 :: RadiantIntensity Double
z7 = 1 *~ (watt / steradian)
z8 :: Radiance Double
z8 = 1 *~ (watt / (meter ^ pos2 * steradian))
z9 :: HeatCapacity Double
z9 = 1 *~ (joule / kelvin)
z10 :: SpecificHeatCapacity Double
z10 = 1 *~ (joule / (kilo gram * kelvin))
z11 :: ThermalConductivity Double
z11 = 1 *~ (watt / (meter * kelvin))
z12 :: EnergyDensity Double
z12 = 1 *~ (joule / meter ^ pos3)
z13 :: ElectricFieldStrength Double
z13 = 1 *~ (volt / meter)
z14 :: ElectricChargeDensity Double
z14 = 1 *~ (coulomb / meter ^ pos3)
z15 :: ElectricFluxDensity Double
z15 = 1 *~ (coulomb / meter ^ pos2)
z16 :: Permittivity Double
z16 = 1 *~ (farad / meter)
z17 :: Permeability Double
z17 = 1 *~ (henry / meter)
z18 :: MolarEnergy Double
z18 = 1 *~ (joule / mole)
z19 :: MolarEntropy Double
z19 = 1 *~ (joule / (mole * kelvin))
z20 :: Exposure Double
z20 = 1 *~ (coulomb / kilo gram)
z21 :: AbsorbedDoseRate Double
z21 = 1 *~ (gray / second)

-- Other quantitites.
mu :: GravitationalParameter Double
mu = 398600.4418 *~ (kilo meter ^ pos3 / second ^ pos2)