Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
262 changes: 131 additions & 131 deletions build.sbt

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ abstract class SpecWiring[F[_], AppMain <: CheckableApp { type AppEffectType[A]
)(implicit
val planCheck: PlanCheckMaterializer[AppMain, Cfg],
defaultModule: DefaultModule[F],
) extends Spec1[F]()(using app.tagK, defaultModule)
//) extends Spec1[F]()(using app.tagK, defaultModule)
) extends Spec1[F](using app.tagK, defaultModule)
with WiringAssertions {

s"Wiring check for `${planCheck.app.getClass.getCanonicalName}`" should {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import izumi.functional.quasi.QuasiIO
import izumi.distage.modules.{DefaultModule, DefaultModule2}
import izumi.distage.testkit.model.TestConfig
import izumi.distage.testkit.scalatest.{Spec1, Spec2}
import izumi.functional.bio.catz.*
import izumi.functional.bio.catz.given
import izumi.functional.bio.{Applicative2, ApplicativeError2, F}
import izumi.fundamentals.platform.integration.ResourceCheck
import zio.{Task, UIO, ZEnvironment, ZIO}
Expand Down Expand Up @@ -46,7 +46,9 @@ class DisabledTestF[F[_]](implicit F: Applicative[F]) extends Lifecycle.Basic[F,
override def release(resource: TestEnableDisable): F[Unit] = F.unit
}

abstract class MyDisabledTestF[F0[_]: QuasiIO: DefaultModule, F[x] <: F0[x]: TagK](f0Tag: TagK[F0])(implicit F: Applicative[F]) extends Spec1[F0]()(using f0Tag, implicitly) {
//abstract class MyDisabledTestF[F0[_]: QuasiIO: DefaultModule, F[x] <: F0[x]: TagK](f0Tag: TagK[F0])(implicit F: Applicative[F]) extends Spec1[F0]()(using f0Tag, implicitly) {
abstract class MyDisabledTestF[F0[_]: QuasiIO: DefaultModule, F[x] <: F0[x]: TagK](f0Tag: TagK[F0])(implicit F: Applicative[F])
extends Spec1[F0](using f0Tag, implicitly) {
override def config: TestConfig = {
super.config.copy(
moduleOverrides = new ModuleDef {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ object BlockingIO2 {
private[bio] sealed trait BlockingIOInstances
object BlockingIOInstances {

implicit def fromSyncSafe2[F[+_, +_]: SyncSafe2]: Predefined.Of[BlockingIO2[F]] = Predefined(new BlockingIO2[F] {
given fromSyncSafe2[F[+_, +_]: SyncSafe2]: Predefined.Of[BlockingIO2[F]] = Predefined(new BlockingIO2[F] {
override def shiftBlocking[E, A](f: F[E, A]): F[E, A] = f
override def syncBlocking[A](f: => A): F[Throwable, A] = SyncSafe2[F].syncSafe(f)
override def syncInterruptibleBlocking[A](f: => A): F[Throwable, A] = SyncSafe2[F].syncSafe(f)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ trait UnsafeRun2[F[_, _]] {
}

object UnsafeRun2 {
@inline def apply[F[_, _]](implicit ev: UnsafeRun2[F]): UnsafeRun2[F] = ev
@inline def apply[F[_, _]](using ev: UnsafeRun2[F]): UnsafeRun2[F] = ev

/**
* @param customCpuPool will replace [[zio.internal.ZScheduler]] if set
Expand Down Expand Up @@ -136,11 +136,11 @@ object UnsafeRun2 {

def failureHandlerSupervisor(handler: FailureHandler.Custom): Supervisor[Unit] = new Supervisor[Unit] {
// @formatter:off
override def value(implicit trace: Trace): UIO[Unit] = ZIO.unit
override def onStart[R, E, A](environment: ZEnvironment[R], effect: ZIO[R, E, A], parent: Option[Fiber.Runtime[Any, Any]], fiber: Fiber.Runtime[E, A])(implicit unsafe: Unsafe): Unit = ()
override def value(using trace: Trace): UIO[Unit] = ZIO.unit
override def onStart[R, E, A](environment: ZEnvironment[R], effect: ZIO[R, E, A], parent: Option[Fiber.Runtime[Any, Any]], fiber: Fiber.Runtime[E, A])(using unsafe: Unsafe): Unit = ()
// @formatter:on

override def onEnd[R, E, A](exit: zio.Exit[E, A], fiber: Fiber.Runtime[E, A])(implicit unsafe: Unsafe): Unit = {
override def onEnd[R, E, A](exit: zio.Exit[E, A], fiber: Fiber.Runtime[E, A])(using unsafe: Unsafe): Unit = {
exit match {
case zio.Exit.Success(_) => ()
case zio.Exit.Failure(cause) =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,13 @@ trait QuasiIORunner[F[_]] {
}

object QuasiIORunner extends LowPriorityQuasiIORunnerInstances {
@inline def apply[F[_]](implicit ev: QuasiIORunner[F]): QuasiIORunner[F] = ev
@inline def apply[F[_]](using ev: QuasiIORunner[F]): QuasiIORunner[F] = ev

implicit object IdentityImpl extends QuasiIORunner[Identity] {
given IdentityImpl: QuasiIORunner[Identity] with {
override def runFuture[A](f: => Identity[A]): Future[A] = Future.successful(f)
}

final class BIOImpl[F[_, _]: UnsafeRun2](implicit val ec: ExecutionContext) extends QuasiIORunner[F[Throwable, _]] {
final class BIOImpl[F[_, _]: UnsafeRun2](using val ec: ExecutionContext) extends QuasiIORunner[F[Throwable, _]] {
override def runFuture[A](f: => F[Throwable, A]): Future[A] = UnsafeRun2[F].unsafeRunAsyncAsFuture(f).flatMap {
case Exit.Success(value) =>
Future.successful(value)
Expand All @@ -29,11 +29,11 @@ object QuasiIORunner extends LowPriorityQuasiIORunnerInstances {
}
}

final class CatsIOImpl(implicit ioRuntime: cats.effect.unsafe.IORuntime) extends QuasiIORunner[cats.effect.IO] {
final class CatsIOImpl(using ioRuntime: cats.effect.unsafe.IORuntime) extends QuasiIORunner[cats.effect.IO] {
override def runFuture[A](f: => IO[A]): Future[A] = f.unsafeToFuture()
}

final class CatsDispatcherImpl[F[_]](implicit dispatcher: cats.effect.std.Dispatcher[F]) extends QuasiIORunner[F] {
final class CatsDispatcherImpl[F[_]](using dispatcher: cats.effect.std.Dispatcher[F]) extends QuasiIORunner[F] {
override def runFuture[A](f: => F[A]): Future[A] = dispatcher.unsafeToFuture(f)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ package izumi.functional.bio.test
import izumi.functional.bio.{BlockingIO2, BlockingIOInstances}

trait PlatformDependentTestBase {
implicit val blockingIO3: BlockingIO2[zio.IO] = BlockingIOInstances.fromSyncSafe2
given blockingIO3: BlockingIO2[zio.IO] = BlockingIOInstances.fromSyncSafe2
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import cats.effect.unsafe.IORuntime
import org.scalatest.wordspec.AsyncWordSpec

class QuasiIOTest extends AsyncWordSpec {
implicit val rt: IORuntime = IORuntime.builder().setCompute(implicitly, () => ()).setBlocking(implicitly, () => ()).build()
given rt: IORuntime = IORuntime.builder().setCompute(implicitly, () => ()).setBlocking(implicitly, () => ()).build()

"QuasiIO" should {
"be convertable to Future" in {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ object BlockingIOInstances extends BlockingIOInstancesLowPriority {

def BlockingZIOFromExecutor[R](blockingExecutor: Executor): BlockingIO2[ZIO[R, +_, +_]] = new BlockingIO2[ZIO[R, +_, +_]] {
override def shiftBlocking[E, A](f: ZIO[R, E, A]): ZIO[R, E, A] = {
implicit val trace: zio.Trace = Tracer.newTrace
given trace: zio.Trace = Tracer.newTrace
ZIO.environmentWithZIO[R] {
r =>
ZIO.provideLayer[Any, E, Any, Any, A](zio.Runtime.setBlockingExecutor(blockingExecutor)) {
Expand All @@ -45,14 +45,14 @@ object BlockingIOInstances extends BlockingIOInstancesLowPriority {
}
override def syncBlocking[A](f: => A): ZIO[Any, Throwable, A] = {
val byName: () => A = () => f
implicit val trace: zio.Trace = InteropTracer.newTrace(byName)
given trace: zio.Trace = InteropTracer.newTrace(byName)
ZIO.provideLayer(zio.Runtime.setBlockingExecutor(blockingExecutor)) {
ZIO.attemptBlocking(f)
}
}
override def syncInterruptibleBlocking[A](f: => A): ZIO[Any, Throwable, A] = {
val byName: () => A = () => f
implicit val trace: zio.Trace = InteropTracer.newTrace(byName)
given trace: zio.Trace = InteropTracer.newTrace(byName)
ZIO.provideLayer(zio.Runtime.setBlockingExecutor(blockingExecutor)) {
ZIO.attemptBlockingInterrupt(f)
}
Expand All @@ -65,7 +65,7 @@ object BlockingIOInstances extends BlockingIOInstancesLowPriority {
*
* Optional instance via https://blog.7mind.io/no-more-orphans.html
*/
@inline implicit final def BlockingZIODefault[Zio[-_, +_, +_]: `zio.ZIO`]: Predefined.Of[BlockingIO2[Zio[Any, +_, +_]]] =
@inline given BlockingZIODefault[Zio[-_, +_, +_]: `zio.ZIO`]: Predefined.Of[BlockingIO2[Zio[Any, +_, +_]]] =
Predefined(BlockingZio.asInstanceOf[BlockingIO2[Zio[Any, +_, +_]]])

object BlockingZio extends BlockingZio[Any]
Expand All @@ -74,13 +74,13 @@ object BlockingIOInstances extends BlockingIOInstancesLowPriority {

override def syncBlocking[A](f: => A): ZIO[Any, Throwable, A] = {
val byName: () => A = () => f
implicit val trace: zio.Trace = InteropTracer.newTrace(byName)
given trace: zio.Trace = InteropTracer.newTrace(byName)
ZIO.attemptBlocking(f)
}

override def syncInterruptibleBlocking[A](f: => A): ZIO[Any, Throwable, A] = {
val byName: () => A = () => f
implicit val trace: zio.Trace = InteropTracer.newTrace(byName)
given trace: zio.Trace = InteropTracer.newTrace(byName)
ZIO.attemptBlockingInterrupt(f)
}
}
Expand All @@ -95,6 +95,6 @@ object BlockingIOInstances extends BlockingIOInstancesLowPriority {
}

sealed trait BlockingIOInstancesLowPriority {
@inline implicit final def BlockingZIODefaultR[Zio[-_, +_, +_]: `zio.ZIO`, R]: Predefined.Of[BlockingIO2[Zio[R, +_, +_]]] =
@inline given BlockingZIODefaultR[Zio[-_, +_, +_]: `zio.ZIO`, R]: Predefined.Of[BlockingIO2[Zio[R, +_, +_]]] =
Predefined(BlockingZio.asInstanceOf[BlockingIO2[Zio[R, +_, +_]]])
}
Original file line number Diff line number Diff line change
Expand Up @@ -157,11 +157,11 @@ object UnsafeRun2 {

def failureHandlerSupervisor(handler: FailureHandler.Custom): Supervisor[Unit] = new Supervisor[Unit] {
// @formatter:off
override def value(implicit trace: Trace): UIO[Unit] = ZIO.unit
override def onStart[R, E, A](environment: ZEnvironment[R], effect: ZIO[R, E, A], parent: Option[Fiber.Runtime[Any, Any]], fiber: Fiber.Runtime[E, A])(implicit unsafe: Unsafe): Unit = ()
override def value(using trace: Trace): UIO[Unit] = ZIO.unit
override def onStart[R, E, A](environment: ZEnvironment[R], effect: ZIO[R, E, A], parent: Option[Fiber.Runtime[Any, Any]], fiber: Fiber.Runtime[E, A])(using unsafe: Unsafe): Unit = ()
// @formatter:on

override def onEnd[R, E, A](exit: zio.Exit[E, A], fiber: Fiber.Runtime[E, A])(implicit unsafe: Unsafe): Unit = {
override def onEnd[R, E, A](exit: zio.Exit[E, A], fiber: Fiber.Runtime[E, A])(using unsafe: Unsafe): Unit = {
exit match {
case zio.Exit.Success(_) => ()
case zio.Exit.Failure(cause) =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import zio.stacktracer.TracingImplicits.disableAutoTrace
private[bio] object __PlatformSpecific {
@inline private[bio] final def fromFutureJava[A](javaFuture: => CompletionStage[A]): IO[Throwable, A] = {
val byName: () => CompletionStage[A] = () => javaFuture
implicit val trace: zio.Trace = InteropTracer.newTrace(byName)
given trace: zio.Trace = InteropTracer.newTrace(byName)

ZIO.fromCompletionStage(javaFuture)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,21 +19,21 @@ trait QuasiIORunner[F[_]] {
object QuasiIORunner extends LowPriorityQuasiIORunnerInstances {
def apply[F[_]: QuasiIORunner]: QuasiIORunner[F] = implicitly

implicit object IdentityImpl extends QuasiIORunner[Identity] {
given IdentityImpl: QuasiIORunner[Identity] with {
override def run[A](f: => A): A = f
}

implicit def fromBIO[F[_, _]: UnsafeRun2]: QuasiIORunner[F[Throwable, _]] = new BIOImpl[F]
given fromBIO[F[_, _]: UnsafeRun2]: QuasiIORunner[F[Throwable, _]] = new BIOImpl[F]

final class BIOImpl[F[_, _]: UnsafeRun2] extends QuasiIORunner[F[Throwable, _]] {
override def run[A](f: => F[Throwable, A]): A = UnsafeRun2[F].unsafeRun(f)
}

final class CatsIOImpl(implicit ioRuntime: cats.effect.unsafe.IORuntime) extends QuasiIORunner[cats.effect.IO] {
final class CatsIOImpl(using ioRuntime: cats.effect.unsafe.IORuntime) extends QuasiIORunner[cats.effect.IO] {
override def run[A](f: => cats.effect.IO[A]): A = f.unsafeRunSync()(ioRuntime)
}

final class CatsDispatcherImpl[F[_]](implicit dispatcher: cats.effect.std.Dispatcher[F]) extends QuasiIORunner[F] {
final class CatsDispatcherImpl[F[_]](using dispatcher: cats.effect.std.Dispatcher[F]) extends QuasiIORunner[F] {
override def run[A](f: => F[A]): A = dispatcher.unsafeRunSync(f)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@ package izumi.functional.bio
final class ErrorAccumulatingOpsTestZIO extends ErrorAccumulatingOpsTest[zio.IO] {
private val runner: UnsafeRun2[zio.IO] = UnsafeRun2.createZIO()

override implicit def F: Error2[zio.IO] = Root.BIOZIO
override given F: Error2[zio.IO] = Root.BIOZIO
override def unsafeRun[E, A](f: zio.IO[E, A]): Either[E, A] = runner.unsafeRun(f.attempt)
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
//import monix.execution.schedulers.TestScheduler
//
//class MonixBIOLawsTest extends CatsLawsTestBase with MonixTestEnv {
// implicit val testScheduler: TestScheduler = TestScheduler()
// implicit val runtime: UnsafeRun2[monix.bio.IO] = UnsafeRun2.createMonixBIO(testScheduler, opt)
// implicit val CE: ConcurrentEffect[monix.bio.Task] = ConcurrentEffect[monix.bio.Task](catz.BIOAsyncForkUnsafeRunToConcurrentEffect)
// given testScheduler: TestScheduler = TestScheduler()
// given runtime: UnsafeRun2[monix.bio.IO] = UnsafeRun2.createMonixBIO(testScheduler, opt)
// given CE: ConcurrentEffect[monix.bio.Task] = ConcurrentEffect[monix.bio.Task](catz.BIOAsyncForkUnsafeRunToConcurrentEffect)
//
// val concurrentEffectTestsMonix: ConcurrentEffectTests[monix.bio.Task] = new ConcurrentEffectTests[monix.bio.Task] {
// override val laws = new ConcurrentEffectLaws[monix.bio.Task] {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ class ZIOLawsTest extends CatsLawsTestBase with ZIOTestEnv {

checkAll(
"AsyncZIO", {
implicit val ticker: Ticker = Ticker()
implicit val CE: Async[zio.Task] = catz.BIOToAsync
given ticker: Ticker = Ticker()
given CE: Async[zio.Task] = catz.BIOToAsync
import scala.concurrent.duration.DurationInt
AsyncTests[zio.Task].async[Int, Int, Int](5.second)
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import cats.effect.testkit.TestInstances
import scala.concurrent.ExecutionException

trait EqThrowable { this: TestInstances =>
implicit override lazy val eqThrowable: Eq[Throwable] = new Eq[Throwable] {
override given eqThrowable: Eq[Throwable] = new Eq[Throwable] {
override def eqv(x: Throwable, y: Throwable): Boolean = {
val ex1 = extractEx(x)
val ex2 = extractEx(y)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,18 @@ import org.scalacheck.{Arbitrary, Prop}
import scala.util.Try

trait MiniBIOEnv extends TestInstances with EqThrowable {
implicit val execMiniBIO: MiniBIO[Throwable, Boolean] => Prop = {
given execMiniBIO: (MiniBIO[Throwable, Boolean] => Prop) = {
miniBIO => syncIoBooleanToProp(SyncIO.defer(SyncIO.fromEither(miniBIO.run().toThrowableEither)))
}

implicit def arbMiniBIO[A](implicit arb: Arbitrary[A]): Arbitrary[MiniBIO[Throwable, A]] = Arbitrary {
given arbMiniBIO[A](using arb: Arbitrary[A]): Arbitrary[MiniBIO[Throwable, A]] = Arbitrary {
Arbitrary.arbBool.arbitrary.flatMap {
if (_) arb.arbitrary.map(IO2[MiniBIO].pure(_))
else Arbitrary.arbThrowable.arbitrary.map(IO2[MiniBIO].fail(_))
}
}

implicit def eqMiniBIO[A](implicit eq: Eq[A]): Eq[MiniBIO[Throwable, A]] = Eq.instance {
given eqMiniBIO[A](using eq: Eq[A]): Eq[MiniBIO[Throwable, A]] = Eq.instance {
(l, r) =>
val tl = Try(MiniBIO.autoRun.autoRunAlways(l))
val tr = Try(MiniBIO.autoRun.autoRunAlways(r))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@
//import scala.util.{Either, Failure, Success, Try}
//
//trait MonixTestEnv extends BaseLawsSuite {
// implicit lazy val opt: IO.Options = IO.defaultOptions
// implicit lazy val cs: ContextShift[Task] = IO.contextShift
// given opt: IO.Options = IO.defaultOptions
// given cs: ContextShift[Task] = IO.contextShift
//}
//
//// Copypaste from monix-bio test suite
Expand All @@ -38,7 +38,7 @@
// * At the moment of writing, these match the defaults, but it's
// * better to specify these explicitly.
// */
// implicit val params: Parameters = Parameters.default
// given params: Parameters = Parameters.default
//
//// override lazy val checkConfig: Parameters =
//// org.scalacheck.Test.Parameters.default
Expand Down Expand Up @@ -98,7 +98,7 @@
// }
// }
//
// implicit def equalityCIO[A](implicit A: Eq[A], ec: TestScheduler): Eq[CIO[A]] =
// implicit def equalityCIO[A](using A: Eq[A], ec: TestScheduler): Eq[CIO[A]] =
// new Eq[CIO[A]] {
//
// def eqv(x: CIO[A], y: CIO[A]): Boolean =
Expand Down Expand Up @@ -227,24 +227,24 @@
// implicit def arbitraryIO[A: Arbitrary: Cogen]: Arbitrary[CIO[A]] =
// catsEffectLawsArbitraryForIO
//
// implicit def arbitraryExToA[A](implicit A: Arbitrary[A]): Arbitrary[Throwable => A] =
// implicit def arbitraryExToA[A](using A: Arbitrary[A]): Arbitrary[Throwable => A] =
// Arbitrary {
// val fun = implicitly[Arbitrary[Int => A]]
// for (f <- fun.arbitrary) yield (t: Throwable) => f(t.hashCode())
// }
//
// implicit def arbitraryPfExToA[A](implicit A: Arbitrary[A]): Arbitrary[PartialFunction[Throwable, A]] =
// implicit def arbitraryPfExToA[A](using A: Arbitrary[A]): Arbitrary[PartialFunction[Throwable, A]] =
// Arbitrary {
// val fun = implicitly[Arbitrary[Int => A]]
// for (f <- fun.arbitrary) yield { case (t: Throwable) => f(t.hashCode()) }
// }
//
// implicit def arbitraryTaskToLong[A, B](implicit B: Arbitrary[B]): Arbitrary[Task[A] => B] =
// implicit def arbitraryTaskToLong[A, B](using B: Arbitrary[B]): Arbitrary[Task[A] => B] =
// Arbitrary {
// for (b <- B.arbitrary) yield (_: Task[A]) => b
// }
//
// implicit def arbitraryIOToLong[A, B](implicit B: Arbitrary[B]): Arbitrary[CIO[A] => B] =
// implicit def arbitraryIOToLong[A, B](using B: Arbitrary[B]): Arbitrary[CIO[A] => B] =
// Arbitrary {
// for (b <- B.arbitrary) yield (_: CIO[A]) => b
// }
Expand All @@ -271,7 +271,7 @@
// inst.eqv(x, y)
// }
//
// implicit def arbitraryCancelableFuture[A](implicit A: Arbitrary[A], ec: Scheduler): Arbitrary[CancelableFuture[A]] =
// implicit def arbitraryCancelableFuture[A](using A: Arbitrary[A], ec: Scheduler): Arbitrary[CancelableFuture[A]] =
// Arbitrary {
// for {
// a <- A.arbitrary
Expand All @@ -297,7 +297,7 @@
//
//trait ArbitraryInstancesBase0 extends EqThrowable with TestUtils {
//
// implicit def equalityFutureEither[E, A](implicit A: Eq[A], E: Eq[E], ec: TestScheduler): Eq[Future[Either[E, A]]] =
// implicit def equalityFutureEither[E, A](using A: Eq[A], E: Eq[E], ec: TestScheduler): Eq[Future[Either[E, A]]] =
// new Eq[Future[Either[E, A]]] {
//
// def eqv(x: Future[Either[E, A]], y: Future[Either[E, A]]): Boolean = {
Expand Down Expand Up @@ -335,7 +335,7 @@
// }
// }
//
// def equalityFuture[A](implicit A: Eq[A], ec: TestScheduler): Eq[Future[A]] =
// def equalityFuture[A](using A: Eq[A], ec: TestScheduler): Eq[Future[A]] =
// new Eq[Future[A]] {
//
// def eqv(x: Future[A], y: Future[A]): Boolean = {
Expand Down
Loading
Loading