All Downloads are FREE. Search and download functionalities are using the official Maven repository.

crystal.arb.arbitraries.scala Maven / Gradle / Ivy

// 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 crystal.arb

import cats.Id
import crystal.Pot
import crystal.PotOption
import crystal.ViewF
import org.scalacheck.*

import Arbitrary.*
import Gen.*

given [A: Arbitrary]: Arbitrary[Pot[A]] = Arbitrary:
  oneOf(
    Gen.const(Pot.Pending),
    arbitrary[Throwable].map(Pot.Error.apply),
    arbitrary[A].map(Pot.Ready.apply)
  )

given [A: Cogen]: Cogen[Pot[A]] =
  Cogen[Option[Option[A]]].contramap(_.toOptionTry.map(_.toOption))

given [A: Arbitrary]: Arbitrary[PotOption[A]] = Arbitrary:
  oneOf(
    Gen.const(PotOption.Pending),
    arbitrary[Throwable].map(PotOption.Error.apply),
    Gen.const(PotOption.ReadyNone),
    arbitrary[A].map(PotOption.ReadySome.apply)
  )

given [A: Cogen]: Cogen[PotOption[A]] =
  Cogen[Option[Option[Option[A]]]].contramap(_.toOptionTry.map(_.toOption))

given viewFArb[A: Arbitrary]: Arbitrary[ViewF[Id, A]] = Arbitrary:
  arbitrary[A].map(a => ViewF.apply[Id, A](a, (f, cb) => cb(a, f(a))))

given [A: Cogen]: Cogen[ViewF[Id, A]] =
  Cogen[A].contramap(_.get)




© 2015 - 2024 Weber Informatics LLC | Privacy Policy