Skip to content

Commit

Permalink
Add scala angle multiplication
Browse files Browse the repository at this point in the history
  • Loading branch information
cquiroz committed Oct 2, 2023
1 parent d108bec commit fee13bf
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 0 deletions.
14 changes: 14 additions & 0 deletions modules/core/shared/src/main/scala/lucuma/core/math/Angle.scala
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,20 @@ object Angle extends AngleOptics {
def -(a: Angle): Angle =
Angle.fromMicroarcseconds(toMicroarcseconds - a.toMicroarcseconds)

/**
* Scalar multiplication of this angle and `a`. Exact
* @group Operations
*/
def *(a: Long): Angle =
Angle.fromMicroarcseconds(toMicroarcseconds * a)

/**
* Scalar multiplication of this angle and `a`. approximate
* @group Operations
*/
def *?(a: Double): Angle =
Angle.fromMicroarcseconds((toMicroarcseconds * a).toLong)

/**
* This angle as an Offset.P. Exact, invertible.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -182,4 +182,22 @@ final class AngleSuite extends munit.DisciplineSuite {
assertEquals(a.tan, scala.math.tan(a.toDoubleRadians))
}
}

test("Scalar int multiplication") {
assertEquals(Angle.Angle0 * 2, Angle.Angle0)
assertEquals(Angle.Angle90 * 2, Angle.Angle180)
assertEquals(Angle.Angle90 * 4, Angle.Angle0)
assertEquals(Angle.Angle90 * -2, Angle.Angle180)
assertEquals(Angle.Angle90 * 10, Angle.Angle180)
}

test("Scalar double multiplication") {
assertEquals(Angle.Angle0 *? 2, Angle.Angle0)
assertEquals(Angle.Angle90 *? 2, Angle.Angle180)
assertEquals(Angle.Angle90 *? 4, Angle.Angle0)
assertEquals(Angle.Angle90 *? -2, Angle.Angle180)
assertEquals(Angle.Angle90 *? 10, Angle.Angle180)
assertEquals(Angle.Angle180 *? 0.5, Angle.Angle90)
assert(((Angle.Angle180 *? 0.001) - Angle.fromDoubleDegrees(0.18)).toMicroarcseconds < 1000)
}
}

0 comments on commit fee13bf

Please sign in to comment.