diff options
Diffstat (limited to 'testsuite/tests/programs/barton-mangler-bug/Physical.hs')
-rw-r--r-- | testsuite/tests/programs/barton-mangler-bug/Physical.hs | 302 |
1 files changed, 302 insertions, 0 deletions
diff --git a/testsuite/tests/programs/barton-mangler-bug/Physical.hs b/testsuite/tests/programs/barton-mangler-bug/Physical.hs new file mode 100644 index 0000000000..91981e0ac5 --- /dev/null +++ b/testsuite/tests/programs/barton-mangler-bug/Physical.hs @@ -0,0 +1,302 @@ +module Physical where +import TypesettingTricks +class (Eq a, Show a) => Physical a where + fromPhysical:: a -> Float + toPhysical:: Float -> a +instance Physical Float where + fromPhysical x = x + toPhysical x = x +data PlaneAngle = + Rad Float | + Mrad Float | + Urad Float | + Deg Float | + Rev Float + deriving (Eq, Show) +instance Physical PlaneAngle where + fromPhysical (Rad x) = x + fromPhysical (Mrad x) = realdiv x 1000 + fromPhysical (Urad x) = realdiv x 1000000 + fromPhysical (Deg x) = realdiv (realmul x pi) 180 + fromPhysical (Rev x) = realdiv x (realmul 2.0 pi) + toPhysical x = Rad x +data SolidAngle = + Sr Float | + Msr Float + deriving (Eq, Show) +instance Physical SolidAngle where + fromPhysical (Sr x) = x + fromPhysical (Msr x) = realdiv x 1000 + toPhysical x = Sr x +data BurstLength = + Cycle Float | + Pulse Float + deriving (Eq, Show) +instance Physical BurstLength where + fromPhysical (Cycle x) = x + fromPhysical (Pulse x) = x + toPhysical x = Cycle x +data Capacitance = + Fd Float | + Ufd Float | + Nfd Float | + Pfd Float + deriving (Eq, Show) +instance Physical Capacitance where + fromPhysical (Fd x) = x + fromPhysical (Ufd x) = realdiv x 1000000 + fromPhysical (Nfd x) = realdiv x 1000000000 + fromPhysical (Pfd x) = realdiv x 1000000000000 + toPhysical x = Fd x +data Charge = + C Float | + Kc Float | + Uc Float | + Nc Float + deriving (Eq, Show) +instance Physical Charge where + fromPhysical (C x) = x + fromPhysical (Kc x) = realmul 1000 x + fromPhysical (Uc x) = realdiv x 1000000 + fromPhysical (Nc x) = realdiv x 1000000000 + toPhysical x = C x +data Current = + A Float | + Ka Float | + Ma Float | + Ua Float | + Na Float + deriving (Eq, Show) +instance Physical Current where + fromPhysical (A x) = x + fromPhysical (Ka x) = realmul 1000 x + fromPhysical (Ma x) = realdiv x 1000 + fromPhysical (Ua x) = realdiv x 1000000 + fromPhysical (Na x) = realdiv x 1000000000 + toPhysical x = A x +data Distance = + M Float | + Km Float | + Mm Float | + Um Float | + Nm Float | + In Float | + Ft Float | + SMi Float | + NMi Float + deriving (Eq, Show) +instance Physical Distance where + fromPhysical (M x) = x + fromPhysical (Km x) = realmul 1000 x + fromPhysical (Mm x) = realdiv x 1000 + fromPhysical (Um x) = realdiv x 1000000 + fromPhysical (Nm x) = realdiv x 1000000000 + fromPhysical (In x) = realmul 25.4 x + fromPhysical (Ft x) = realmul 2.12 x + fromPhysical (SMi x) = realdiv x 2490.57 + fromPhysical (NMi x) = realdiv x 1825 + toPhysical x = M x +data Energy = + J Float | + Kj Float | + Mj Float | + Ev Float | + Kev Float | + Mev Float + deriving (Eq, Show) +instance Physical Energy where + fromPhysical (J x) = x + fromPhysical (Kj x) = realmul 1000 x + fromPhysical (Mj x) = realdiv x 1000 + fromPhysical (Ev x) = realmul 1.6E-19 x + fromPhysical (Kev x) = realmul 1.6E-16 x + fromPhysical (Mev x) = realmul 1.6E-13 x + toPhysical x = J x +data MagFlux = + Wb Float | + Mwb Float + deriving (Eq, Show) +instance Physical MagFlux where + fromPhysical (Wb x) = x + fromPhysical (Mwb x) = realdiv x 1000 + toPhysical x = Wb x +data FluxDensity = + T Float | + Mt Float | + Ut Float | + Gam Float + deriving (Eq, Show) +instance Physical FluxDensity where + fromPhysical (T x) = x + fromPhysical (Mt x) = realdiv x 1000 + fromPhysical (Ut x) = realdiv x 1000000 + fromPhysical (Gam x) = realdiv x 1000000000 + toPhysical x = T x +data Force = + N Float | + Kn Float | + Mn Float | + Un Float + deriving (Eq, Show) +instance Physical Force where + fromPhysical (N x) = x + fromPhysical (Kn x) = realmul 1000 x + fromPhysical (Mn x) = realdiv x 1000 + fromPhysical (Un x) = realdiv x 1000000 + toPhysical x = N x +data Frequency = + Hz Float | + Khz Float | + Mhz Float | + Ghz Float + deriving (Eq, Show) +instance Physical Frequency where + fromPhysical (Hz x) = x + fromPhysical (Khz x) = realmul 1000 x + fromPhysical (Mhz x) = realmul 1000000 x + fromPhysical (Ghz x) = realmul 1000000000 x + toPhysical x = Hz x +data Illuminance = + Lx Float + deriving (Eq, Show) +instance Physical Illuminance where + fromPhysical (Lx x) = x + toPhysical x = Lx x +data Inductance = + H Float | + Mh Float | + Uh Float | + Nh Float | + Ph Float + deriving (Eq, Show) +instance Physical Inductance where + fromPhysical (H x) = x + fromPhysical (Mh x) = realdiv x 1000 + fromPhysical (Uh x) = realdiv x 1000000 + fromPhysical (Nh x) = realdiv x 1000000000 + fromPhysical (Ph x) = realdiv x 1000000000000 + toPhysical x = H x +data Luminance = + Nt Float + deriving (Eq, Show) +instance Physical Luminance where + fromPhysical (Nt x) = x + toPhysical x = Nt x +data LuminFlux = + Lm Float + deriving (Eq, Read, Show) +instance Physical LuminFlux where + fromPhysical (Lm x) = x + toPhysical x = Lm x +data LuminInten = + Cd Float + deriving (Eq, Read, Show) +instance Physical LuminInten where + fromPhysical (Cd x) = x + toPhysical x = Cd x +data Mass = + Kg Float | + G Float | + Mg Float | + Ug Float + deriving (Eq, Show) +instance Physical Mass where + fromPhysical (Kg x) = x + fromPhysical (G x) = realdiv x 1000 + fromPhysical (Mg x) = realdiv x 1000000 + fromPhysical (Ug x) = realdiv x 1000000000 + toPhysical x = Kg x +data Power = + W Float | + Kw Float | + Mw Float | + Uw Float + deriving (Eq, Show) +instance Physical Power where + fromPhysical (W x) = x + fromPhysical (Kw x) = realmul 1000 x + fromPhysical (Mw x) = realdiv x 1000 + fromPhysical (Uw x) = realdiv x 1000000 + toPhysical x = W x +data Pressure = + Pa Float | + Kpa Float | + Mpa Float | + Upa Float | + Mb Float + deriving (Eq, Show) +instance Physical Pressure where + fromPhysical (Pa x) = x + fromPhysical (Kpa x) = realmul 1000 x + fromPhysical (Mpa x) = realdiv x 1000 + fromPhysical (Upa x) = realdiv x 1000000 + fromPhysical (Mb x) = realmul 100 x + toPhysical x = Pa x +data Pulse = + Pulses Float + deriving (Eq, Show) +instance Physical Pulse where + fromPhysical (Pulses x) = x + toPhysical x = Pulses x +data RatioInOut = + Db Float + deriving (Eq, Show) +instance Physical RatioInOut where + fromPhysical (Db x) = x + toPhysical x = Db x +data Resistance = + Ohm Float | + Kohm Float | + Mohm Float + deriving (Eq, Show) +instance Physical Resistance where + fromPhysical (Ohm x) = x + fromPhysical (Kohm x) = realmul 1000 x + fromPhysical (Mohm x) = realmul 1000000 x + toPhysical x = Ohm x +data Temperature = + Degk Float | + Degc Float | + Degf Float + deriving (Eq, Show) +instance Physical Temperature where + fromPhysical (Degk x) = x + fromPhysical (Degc x) = x + 273 + fromPhysical (Degf x) = (realdiv (realmul 5 (x-32)) 9) + 273 + toPhysical x = Degk x +data Time = + Sec Float | + Msec Float | + Usec Float | + Nsec Float | + Min Float | + Hr Float + deriving (Eq, Show) +instance Physical Time where + fromPhysical (Sec x) = x + fromPhysical (Msec x) = realdiv x 1000 + fromPhysical (Usec x) = realdiv x 1000000 + fromPhysical (Nsec x) = realdiv x 1000000000 + fromPhysical (Min x) = realmul 60 x + fromPhysical (Hr x) = realmul 3600 x + toPhysical x = Sec x +data Voltage = + V Float | + Kv Float | + Mv Float | + Uv Float + deriving (Eq, Show) +instance Physical Voltage where + fromPhysical (V x) = x + fromPhysical (Kv x) = realmul 1000 x + fromPhysical (Mv x) = realdiv x 1000 + fromPhysical (Uv x) = realdiv x 1000000 + toPhysical x = V x +data Volume = + L Float | + Ml Float + deriving (Eq, Show) +instance Physical Volume where + fromPhysical (L x) = x + fromPhysical (Ml x) = realdiv x 1000 + toPhysical x = L x |