Skip to content

Commit a3f4f7b

Browse files
imacgsharkdp
authored andcommitted
Fix atan2 dimension bug; add atan2 tests
1 parent 1cf287d commit a3f4f7b

2 files changed

Lines changed: 10 additions & 3 deletions

File tree

src/Data/Quantity/Math.purs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ import Data.Foldable (foldM)
4242
import Data.Decimal (Decimal)
4343
import Data.Either (Either)
4444
import Data.Quantity (Quantity, ConversionError, derivedUnit, asValueIn',
45-
scalar', quantity', toScalar', (⊘), (⊕))
45+
scalar', quantity', toScalar', (⊘), (⊕), (.*))
4646

4747
type Result = Either ConversionError Quantity
4848

@@ -66,7 +66,9 @@ atan ∷ Quantity → Result
6666
atan = lift Decimal.atan
6767

6868
atan2 Quantity Quantity Result
69-
atan2 = lift2 Decimal.atan2
69+
atan2 x y = removeDims <$> lift2 Decimal.atan2 x y
70+
where
71+
removeDims q = q ⊘ 1.0 .* derivedUnit q
7072

7173
cos Quantity Result
7274
cos = lift Decimal.cos

test/Main.purs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import Data.Quantity (Quantity, (.*), prettyPrint, (⊕), (⊖), (⊗), (⊘),
3333
errorMessage, showResult, qNegate, isFinite,
3434
ConversionError(..))
3535
import Data.Quantity as Q
36-
import Data.Quantity.Math (sin, asin, pi, modulo, max, min, mean)
36+
import Data.Quantity.Math (sin, asin, pi, modulo, max, min, mean, atan2)
3737

3838
import Control.Monad.Eff (Eff)
3939
import Control.Monad.Eff.Console (CONSOLE)
@@ -486,6 +486,11 @@ main = runTest do
486486
equal (Right $ 0.04 .* meter) ((2.0 .* meter) `modulo` (7.0 .* centi meter))
487487
equal (Left (ConversionError second meter)) ((8.0 .* meter) `modulo` (5.0 .* seconds))
488488

489+
test "atan2" do
490+
almostEqual' (scalar (Math.pi / 2.0)) ((scalar 10.0) `atan2` (scalar 0.0))
491+
almostEqual' (scalar (Math.pi / 4.0)) ((100.0 .* centi meter) `atan2` (1.0 .* meter))
492+
equal (Left (ConversionError meter second)) ((1.0 .* second) `atan2` (2.0 .* meter))
493+
489494
let qs1 = NonEmptyList $ scalar (-3.0) :| scalar 4.0 : scalar 2.0 : Nil
490495
let qs2 = NonEmptyList $ (300.0 .* centi meter)
491496
:| (0.0254 .* meter)

0 commit comments

Comments
 (0)