Skip to content

Commit

Permalink
Add arbitraries for ConfigurationRequest and friends.
Browse files Browse the repository at this point in the history
  • Loading branch information
toddburnside committed Oct 21, 2024
1 parent 5703b12 commit ed7f617
Show file tree
Hide file tree
Showing 3 changed files with 105 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
package lucuma.core.model

import cats.Eq
import cats.derived.*
import cats.kernel.Order
import cats.syntax.all.*
import lucuma.core.enums.CloudExtinction
Expand All @@ -18,7 +19,7 @@ import lucuma.core.math.Coordinates
import lucuma.core.model.Configuration.ObservingMode.GmosNorthLongSlit
import lucuma.core.model.Configuration.ObservingMode.GmosSouthLongSlit

case class Configuration(conditions: Configuration.Conditions, refererenceCoordinates: Coordinates, observingMode: Configuration.ObservingMode):
case class Configuration(conditions: Configuration.Conditions, refererenceCoordinates: Coordinates, observingMode: Configuration.ObservingMode) derives Eq:
def subsumes(other: Configuration): Boolean =
conditions >= other.conditions &&
observingMode.fov.toDoubleDegrees / 2.0 >= refererenceCoordinates.angularDistance(other.refererenceCoordinates).toDoubleDegrees &&
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
// Copyright (c) 2016-2023 Association of Universities for Research in Astronomy, Inc. (AURA)
// For license information see LICENSE or https://opensource.org/licenses/BSD-3-Clause

package lucuma.core.model
package arb

import lucuma.core.enums.CloudExtinction
import lucuma.core.enums.GmosNorthGrating
import lucuma.core.enums.GmosSouthGrating
import lucuma.core.enums.ImageQuality
import lucuma.core.enums.SkyBackground
import lucuma.core.enums.WaterVapor
import lucuma.core.math.Coordinates
import lucuma.core.math.arb.ArbCoordinates.given
import lucuma.core.util.arb.ArbEnumerated.given
import org.scalacheck.*
import org.scalacheck.Arbitrary.arbitrary
import org.scalacheck.Cogen.*

trait ArbConfiguration:
import Configuration.Conditions
import Configuration.ObservingMode

given Arbitrary[Conditions] =
Arbitrary:
for
ce <- arbitrary[CloudExtinction]
iq <- arbitrary[ImageQuality]
sb <- arbitrary[SkyBackground]
wv <- arbitrary[WaterVapor]
yield Conditions(ce, iq, sb, wv)


given Cogen[Conditions] =
Cogen[(ImageQuality, CloudExtinction, SkyBackground, WaterVapor)]
.contramap(c => (c.imageQuality, c.cloudExtinction, c.skyBackground, c.waterVapor))

given Arbitrary[ObservingMode.GmosNorthLongSlit] =
Arbitrary:
arbitrary[GmosNorthGrating].map(ObservingMode.GmosNorthLongSlit(_))

given Cogen[ObservingMode.GmosNorthLongSlit] =
Cogen[GmosNorthGrating].contramap(_.grating)

given Arbitrary[ObservingMode.GmosSouthLongSlit] =
Arbitrary:
arbitrary[GmosSouthGrating].map(ObservingMode.GmosSouthLongSlit(_))

given Cogen[ObservingMode.GmosSouthLongSlit] =
Cogen[GmosSouthGrating].contramap(_.grating)

given Arbitrary[ObservingMode] =
Arbitrary:
Gen.oneOf(arbitrary[ObservingMode.GmosNorthLongSlit], arbitrary[Configuration.ObservingMode.GmosSouthLongSlit])

given Cogen[ObservingMode] =
Cogen[Either[ObservingMode.GmosNorthLongSlit, ObservingMode.GmosSouthLongSlit]].contramap {
case n @ ObservingMode.GmosNorthLongSlit(_) => Left(n)
case s @ ObservingMode.GmosSouthLongSlit(_) => Right(s)
}

given Arbitrary[Configuration] =
Arbitrary:
for
c <- arbitrary[Conditions]
r <- arbitrary[Coordinates]
o <- arbitrary[ObservingMode]
yield (Configuration(c, r, o))

given Cogen[Configuration] =
Cogen[(Conditions, Coordinates, ObservingMode)]
.contramap(c => (c.conditions, c.refererenceCoordinates, c.observingMode))

object ArbConfiguration extends ArbConfiguration
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
// Copyright (c) 2016-2023 Association of Universities for Research in Astronomy, Inc. (AURA)
// For license information see LICENSE or https://opensource.org/licenses/BSD-3-Clause

package lucuma.core.model
package arb

import lucuma.core.enums.ConfigurationRequestStatus
import lucuma.core.util.arb.ArbEnumerated.given
import lucuma.core.util.arb.ArbGid.given
import org.scalacheck.*
import org.scalacheck.Arbitrary.arbitrary
import org.scalacheck.Cogen.*

trait ArbConfigurationRequest:
import ArbConfiguration.given

given Arbitrary[ConfigurationRequest] =
Arbitrary:
for
id <- arbitrary[ConfigurationRequest.Id]
st <- arbitrary[ConfigurationRequestStatus]
co <- arbitrary[Configuration]
yield ConfigurationRequest(id, st, co)

given Cogen[ConfigurationRequest] =
Cogen[(ConfigurationRequest.Id, ConfigurationRequestStatus, Configuration)]
.contramap(cr => (cr.id, cr.status, cr.configuration))

object ArbConfigurationRequest extends ArbConfigurationRequest

0 comments on commit ed7f617

Please sign in to comment.