From f137b22f5eb4356c553dd1319da8a5193a0484f4 Mon Sep 17 00:00:00 2001 From: Alejandro Serrano Mena Date: Wed, 8 Nov 2023 20:22:02 +0100 Subject: [PATCH] Fix problems with tests --- .../either/ArrowEitherCallAdapterTest.kt | 10 ++++++--- .../either/ArrowResponseEAdapterTest.kt | 12 +++++----- .../java/arrow/core/NonFatalJvmTest.kt | 4 ++-- .../arrow/fx/coroutines/CyclicBarrierSpec.kt | 6 ++--- .../kotlin/arrow/fx/coroutines/FlowTest.kt | 4 ++-- .../kotlin/arrow/fx/coroutines/Generators.kt | 6 ++--- .../kotlin/arrow/optics/ReflectionTest.kt | 22 +++++++++++-------- .../kotlin/arrow/resilience/CircuitBreaker.kt | 7 ------ .../arrow/resilience/CircuitBreakerTest.kt | 21 ++++++++---------- .../kotlin/arrow/resilience/FlowTest.kt | 2 -- .../kotlin/arrow/resilience/SagaSpec.kt | 1 - .../kotlin/arrow/resilience/ScheduleTest.kt | 8 ------- .../examples/example-circuitbreaker-01.kt | 2 -- .../examples/example-circuitbreaker-02.kt | 2 -- 14 files changed, 45 insertions(+), 62 deletions(-) diff --git a/arrow-libs/core/arrow-core-retrofit/src/test/kotlin/arrow/retrofit/adapter/either/ArrowEitherCallAdapterTest.kt b/arrow-libs/core/arrow-core-retrofit/src/test/kotlin/arrow/retrofit/adapter/either/ArrowEitherCallAdapterTest.kt index 247a390a735..1c481385ab6 100644 --- a/arrow-libs/core/arrow-core-retrofit/src/test/kotlin/arrow/retrofit/adapter/either/ArrowEitherCallAdapterTest.kt +++ b/arrow-libs/core/arrow-core-retrofit/src/test/kotlin/arrow/retrofit/adapter/either/ArrowEitherCallAdapterTest.kt @@ -6,20 +6,22 @@ import arrow.retrofit.adapter.mock.ErrorMock import arrow.retrofit.adapter.mock.ResponseMock import arrow.retrofit.adapter.retrofit.SuspendApiTestClient import io.kotest.matchers.shouldBe +import kotlinx.coroutines.test.runTest import okhttp3.mockwebserver.MockResponse import okhttp3.mockwebserver.MockWebServer import okhttp3.mockwebserver.SocketPolicy import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory +import kotlin.test.AfterTest +import kotlin.test.BeforeTest import kotlin.test.Test -import kotlinx.coroutines.test.runTest class ArrowEitherCallAdapterTest { lateinit var server: MockWebServer lateinit var service: SuspendApiTestClient - @Test fun beforeAny = runTime { + @BeforeTest fun initialize() { server = MockWebServer() server.start() service = Retrofit.Builder() @@ -30,7 +32,9 @@ class ArrowEitherCallAdapterTest { .create(SuspendApiTestClient::class.java) } - @Test fun afterAny = runTime { server.shutdown() } + @AfterTest fun shutdown() { + server.shutdown() + } @Test fun shouldReturnResponseMockFor200WithValidJson() = runTest { server.enqueue(MockResponse().setBody("""{"response":"Arrow rocks"}""")) diff --git a/arrow-libs/core/arrow-core-retrofit/src/test/kotlin/arrow/retrofit/adapter/either/ArrowResponseEAdapterTest.kt b/arrow-libs/core/arrow-core-retrofit/src/test/kotlin/arrow/retrofit/adapter/either/ArrowResponseEAdapterTest.kt index 4d3d2c4ca16..43b4a184cfa 100644 --- a/arrow-libs/core/arrow-core-retrofit/src/test/kotlin/arrow/retrofit/adapter/either/ArrowResponseEAdapterTest.kt +++ b/arrow-libs/core/arrow-core-retrofit/src/test/kotlin/arrow/retrofit/adapter/either/ArrowResponseEAdapterTest.kt @@ -6,6 +6,7 @@ import arrow.retrofit.adapter.mock.ErrorMock import arrow.retrofit.adapter.mock.ResponseMock import arrow.retrofit.adapter.retrofit.SuspendApiTestClient import io.kotest.matchers.shouldBe +import kotlinx.coroutines.test.runTest import okhttp3.mockwebserver.MockResponse import okhttp3.mockwebserver.MockWebServer import okhttp3.mockwebserver.SocketPolicy @@ -14,7 +15,6 @@ import retrofit2.converter.gson.GsonConverterFactory import kotlin.test.AfterTest import kotlin.test.BeforeTest import kotlin.test.Test -import kotlinx.coroutines.test.runTest class ArrowResponseEAdapterTest { @@ -37,7 +37,7 @@ class ArrowResponseEAdapterTest { fun shutdown() { server.shutdown() } - + @Test fun shouldReturnResponseMockFor200WithValidJson() = runTest { server.enqueue(MockResponse().setBody("""{"response":"Arrow rocks"}""")) @@ -61,7 +61,7 @@ class ArrowResponseEAdapterTest { body shouldBe Unit.right() } } - + @Test fun shouldReturnUnitWhenServiceMethodReturnsUnitAndJsonBodyReceived() = runTest { server.enqueue(MockResponse().setBody("""{"response":"Arrow rocks"}""")) @@ -85,7 +85,7 @@ class ArrowResponseEAdapterTest { body shouldBe ErrorMock(42).left() } } - + @Test fun shouldThrowFor200WithInvalidJson() = runTest { server.enqueue(MockResponse().setBody("""not a valid JSON""")) @@ -94,7 +94,7 @@ class ArrowResponseEAdapterTest { responseE.isFailure shouldBe true } - + @Test fun shouldThrowFor400AndInvalidJson() = runTest { server.enqueue(MockResponse().setBody("""not a valid JSON""").setResponseCode(400)) @@ -103,7 +103,7 @@ class ArrowResponseEAdapterTest { responseE.isFailure shouldBe true } - + @Test fun shouldThrowWhenServerDisconnects() = runTest { server.enqueue(MockResponse().apply { socketPolicy = SocketPolicy.DISCONNECT_AFTER_REQUEST }) diff --git a/arrow-libs/core/arrow-core/src/jvmTest/java/arrow/core/NonFatalJvmTest.kt b/arrow-libs/core/arrow-core/src/jvmTest/java/arrow/core/NonFatalJvmTest.kt index cf6c7b9dee4..c519c15f24d 100644 --- a/arrow-libs/core/arrow-core/src/jvmTest/java/arrow/core/NonFatalJvmTest.kt +++ b/arrow-libs/core/arrow-core/src/jvmTest/java/arrow/core/NonFatalJvmTest.kt @@ -2,8 +2,8 @@ package arrow.core import io.kotest.assertions.throwables.shouldThrowAny import io.kotest.matchers.shouldBe -import kotlin.test.Test import kotlinx.coroutines.test.runTest +import kotlin.test.Test class NonFatalJvmTest { val fatals: List = @@ -21,7 +21,7 @@ class NonFatalJvmTest { NonFatal(it) shouldBe false } } - + @Test fun testFatalsUsingThrowableNonFatalOrThrow() = runTest { fatals.forEach { shouldThrowAny { diff --git a/arrow-libs/fx/arrow-fx-coroutines/src/commonTest/kotlin/arrow/fx/coroutines/CyclicBarrierSpec.kt b/arrow-libs/fx/arrow-fx-coroutines/src/commonTest/kotlin/arrow/fx/coroutines/CyclicBarrierSpec.kt index 2daf01e9b3f..42202887750 100644 --- a/arrow-libs/fx/arrow-fx-coroutines/src/commonTest/kotlin/arrow/fx/coroutines/CyclicBarrierSpec.kt +++ b/arrow-libs/fx/arrow-fx-coroutines/src/commonTest/kotlin/arrow/fx/coroutines/CyclicBarrierSpec.kt @@ -34,7 +34,7 @@ class CyclicBarrierSpec { @Test fun awaitingAllInParallelResumesAllCoroutines() = runTest { - checkAll(Arb.int(1, 100)) { i -> + checkAll(Arb.int(1, 20)) { i -> val barrier = CyclicBarrier(i) (0 until i).parMap { barrier.await() } } @@ -85,7 +85,7 @@ class CyclicBarrierSpec { @Test fun resetCancelsAllAwaiting() = runTest { - checkAll(Arb.int(2, 100)) { i -> + checkAll(Arb.int(2, 20)) { i -> val barrier = CyclicBarrier(i) val exitCase = CompletableDeferred() @@ -103,7 +103,7 @@ class CyclicBarrierSpec { @Test fun shouldCleanUpUponReset() = runTest { - checkAll(Arb.int(2, 100)) { i -> + checkAll(Arb.int(2, 20)) { i -> val barrier = CyclicBarrier(i) val exitCase = CompletableDeferred() diff --git a/arrow-libs/fx/arrow-fx-coroutines/src/commonTest/kotlin/arrow/fx/coroutines/FlowTest.kt b/arrow-libs/fx/arrow-fx-coroutines/src/commonTest/kotlin/arrow/fx/coroutines/FlowTest.kt index 0bead6212fb..e79d057391d 100644 --- a/arrow-libs/fx/arrow-fx-coroutines/src/commonTest/kotlin/arrow/fx/coroutines/FlowTest.kt +++ b/arrow-libs/fx/arrow-fx-coroutines/src/commonTest/kotlin/arrow/fx/coroutines/FlowTest.kt @@ -236,7 +236,7 @@ class FlowTest { @Test fun fixedDelay() = runTest { - checkAll(Arb.positiveInt().map(Int::toLong), Arb.int(1..100)) { waitPeriod, n -> + checkAll(Arb.positiveInt().map(Int::toLong), Arb.int(1..20)) { waitPeriod, n -> val emissionDuration = waitPeriod / 10L var state: Long? = null @@ -261,7 +261,7 @@ class FlowTest { @Test fun fixedRate() = runTest { - checkAll(Arb.positiveInt().map(Int::toLong), Arb.int(1..100)) { waitPeriod, n -> + checkAll(Arb.positiveInt().map(Int::toLong), Arb.int(1..20)) { waitPeriod, n -> val emissionDuration = waitPeriod / 10 var state: Long? = null diff --git a/arrow-libs/fx/arrow-fx-coroutines/src/commonTest/kotlin/arrow/fx/coroutines/Generators.kt b/arrow-libs/fx/arrow-fx-coroutines/src/commonTest/kotlin/arrow/fx/coroutines/Generators.kt index 3484779ea02..a164322d573 100644 --- a/arrow-libs/fx/arrow-fx-coroutines/src/commonTest/kotlin/arrow/fx/coroutines/Generators.kt +++ b/arrow-libs/fx/arrow-fx-coroutines/src/commonTest/kotlin/arrow/fx/coroutines/Generators.kt @@ -27,10 +27,10 @@ import kotlin.coroutines.intrinsics.intercepted import kotlin.coroutines.intrinsics.suspendCoroutineUninterceptedOrReturn import kotlin.coroutines.startCoroutine -fun Arb.Companion.flow(arbA: Arb): Arb> = +fun Arb.Companion.flow(arbA: Arb, range: IntRange = 1 .. 20): Arb> = Arb.choose( - 10 to Arb.list(arbA).map { it.asFlow() }, - 10 to Arb.list(arbA).map { channelFlow { it.forEach { send(it) } }.buffer(Channel.RENDEZVOUS) }, + 10 to Arb.list(arbA, range).map { it.asFlow() }, + 10 to Arb.list(arbA, range).map { channelFlow { it.forEach { send(it) } }.buffer(Channel.RENDEZVOUS) }, 1 to Arb.constant(emptyFlow()), ) diff --git a/arrow-libs/optics/arrow-optics-reflect/src/test/kotlin/arrow/optics/ReflectionTest.kt b/arrow-libs/optics/arrow-optics-reflect/src/test/kotlin/arrow/optics/ReflectionTest.kt index 2fa27e1de8a..78deb285ca4 100644 --- a/arrow-libs/optics/arrow-optics-reflect/src/test/kotlin/arrow/optics/ReflectionTest.kt +++ b/arrow-libs/optics/arrow-optics-reflect/src/test/kotlin/arrow/optics/ReflectionTest.kt @@ -2,6 +2,8 @@ package arrow.optics import io.kotest.matchers.shouldBe import io.kotest.property.Arb +import io.kotest.property.arbitrary.Codepoint +import io.kotest.property.arbitrary.ascii import io.kotest.property.arbitrary.list import io.kotest.property.arbitrary.string import io.kotest.property.checkAll @@ -11,30 +13,32 @@ import kotlin.test.Test data class Person(val name: String, val friends: List) sealed interface Cutlery -object Fork : Cutlery -object Spoon : Cutlery +data object Fork : Cutlery +data object Spoon : Cutlery class ReflectionTest { + private val asciiString: Arb = Arb.string(codepoints = Codepoint.ascii()) + @Test fun lensesForFieldGet() = runTest { - checkAll(Arb.string(), Arb.list(Arb.string())) { nm, fs -> + checkAll(asciiString, Arb.list(asciiString, 1..20)) { nm, fs -> val p = Person(nm, fs.toMutableList()) Person::name.lens.get(p) shouldBe nm } } @Test fun lensesForFieldSet() = runTest { - checkAll(Arb.string(), Arb.list(Arb.string())) { nm, fs -> + checkAll(asciiString, Arb.list(asciiString, 1..20)) { nm, fs -> val p = Person(nm, fs.toMutableList()) - val m = Person::name.lens.modify(p) { it.capitalize() } - m shouldBe Person(nm.capitalize(), fs) + val m = Person::name.lens.modify(p) { it.lowercase() } + m shouldBe Person(nm.lowercase(), fs) } } @Test fun traversalForListSet() = runTest { - checkAll(Arb.string(), Arb.list(Arb.string())) { nm, fs -> + checkAll(asciiString, Arb.list(asciiString, 1..20)) { nm, fs -> val p = Person(nm, fs) - val m = Person::friends.every.modify(p) { it.capitalize() } - m shouldBe Person(nm, fs.map { it.capitalize() }) + val m = Person::friends.every.modify(p) { it.lowercase() } + m shouldBe Person(nm, fs.map { it.lowercase() }) } } diff --git a/arrow-libs/resilience/arrow-resilience/src/commonMain/kotlin/arrow/resilience/CircuitBreaker.kt b/arrow-libs/resilience/arrow-resilience/src/commonMain/kotlin/arrow/resilience/CircuitBreaker.kt index c1950a7befd..51a89feac7e 100644 --- a/arrow-libs/resilience/arrow-resilience/src/commonMain/kotlin/arrow/resilience/CircuitBreaker.kt +++ b/arrow-libs/resilience/arrow-resilience/src/commonMain/kotlin/arrow/resilience/CircuitBreaker.kt @@ -1,5 +1,3 @@ -@file:OptIn(ExperimentalTime::class) - package arrow.resilience import arrow.atomic.Atomic @@ -14,7 +12,6 @@ import kotlinx.coroutines.NonCancellable import kotlinx.coroutines.withContext import kotlin.time.Duration import kotlin.time.Duration.Companion.nanoseconds -import kotlin.time.ExperimentalTime import kotlin.time.TimeMark import kotlin.time.TimeSource @@ -50,9 +47,7 @@ import kotlin.time.TimeSource * import arrow.resilience.CircuitBreaker * import kotlinx.coroutines.delay * import kotlin.time.Duration.Companion.seconds - * import kotlin.time.ExperimentalTime * - * @ExperimentalTime * suspend fun main(): Unit { * //sampleStart * val circuitBreaker = CircuitBreaker( @@ -92,9 +87,7 @@ import kotlin.time.TimeSource * import arrow.resilience.retry * import kotlinx.coroutines.delay * import kotlin.time.Duration.Companion.seconds - * import kotlin.time.ExperimentalTime * - * @ExperimentalTime * suspend fun main(): Unit { * suspend fun apiCall(): Unit { * println("apiCall . . .") diff --git a/arrow-libs/resilience/arrow-resilience/src/commonTest/kotlin/arrow/resilience/CircuitBreakerTest.kt b/arrow-libs/resilience/arrow-resilience/src/commonTest/kotlin/arrow/resilience/CircuitBreakerTest.kt index 4a2125b058a..bebebdd2ddd 100644 --- a/arrow-libs/resilience/arrow-resilience/src/commonTest/kotlin/arrow/resilience/CircuitBreakerTest.kt +++ b/arrow-libs/resilience/arrow-resilience/src/commonTest/kotlin/arrow/resilience/CircuitBreakerTest.kt @@ -5,7 +5,6 @@ import arrow.resilience.CircuitBreaker.OpeningStrategy import arrow.resilience.CircuitBreaker.OpeningStrategy.SlidingWindow import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.async import kotlinx.coroutines.test.TestResult import kotlinx.coroutines.test.runTest @@ -20,20 +19,18 @@ import kotlin.time.Duration import kotlin.time.Duration.Companion.milliseconds import kotlin.time.Duration.Companion.minutes import kotlin.time.Duration.Companion.seconds -import kotlin.time.ExperimentalTime import kotlin.time.TestTimeSource -@OptIn(ExperimentalTime::class, ExperimentalCoroutinesApi::class) class CircuitBreakerTest { - val dummy = RuntimeException("dummy") - val maxFailures = 5 - val exponentialBackoffFactor = 2.0 - val resetTimeout = 500.milliseconds - val maxTimeout = 1000.milliseconds + private val dummy = RuntimeException("dummy") + private val maxFailures = 5 + private val exponentialBackoffFactor = 2.0 + private val resetTimeout = 500.milliseconds + private val maxTimeout = 1000.milliseconds @Test fun shouldWorkForSuccessfulAsyncTasks(): TestResult = runTest { - val cb = CircuitBreaker(resetTimeout = resetTimeout, openingStrategy = OpeningStrategy.Count(maxFailures),) + val cb = CircuitBreaker(resetTimeout = resetTimeout, openingStrategy = OpeningStrategy.Count(maxFailures)) var effect = 0 val iterations = stackSafeIteration() Schedule.recurs(iterations.toLong()).repeat { @@ -44,7 +41,7 @@ class CircuitBreakerTest { @Test fun shouldWorkForSuccessfulImmediateTasks(): TestResult = runTest { - val cb = CircuitBreaker(resetTimeout = resetTimeout, openingStrategy = OpeningStrategy.Count(maxFailures),) + val cb = CircuitBreaker(resetTimeout = resetTimeout, openingStrategy = OpeningStrategy.Count(maxFailures)) var effect = 0 val iterations = stackSafeIteration() Schedule.recurs(iterations.toLong()).repeat { @@ -55,7 +52,7 @@ class CircuitBreakerTest { @Test fun staysClosedAfterLessThanMaxFailures(): TestResult = runTest { - val cb = CircuitBreaker(resetTimeout = resetTimeout, openingStrategy = OpeningStrategy.Count(maxFailures),) + val cb = CircuitBreaker(resetTimeout = resetTimeout, openingStrategy = OpeningStrategy.Count(maxFailures)) val result = recurAndCollect>(4).repeat { Either.catch { cb.protectOrThrow { throw dummy } } @@ -67,7 +64,7 @@ class CircuitBreakerTest { @Test fun closedCircuitBreakerResetsFailureCountAfterSuccess(): TestResult = runTest { - val cb = CircuitBreaker(resetTimeout = resetTimeout, openingStrategy = OpeningStrategy.Count(maxFailures),) + val cb = CircuitBreaker(resetTimeout = resetTimeout, openingStrategy = OpeningStrategy.Count(maxFailures)) val result = recurAndCollect>(4).repeat { Either.catch { cb.protectOrThrow { throw dummy } } diff --git a/arrow-libs/resilience/arrow-resilience/src/commonTest/kotlin/arrow/resilience/FlowTest.kt b/arrow-libs/resilience/arrow-resilience/src/commonTest/kotlin/arrow/resilience/FlowTest.kt index 17882ad0825..86e8d99ba7a 100644 --- a/arrow-libs/resilience/arrow-resilience/src/commonTest/kotlin/arrow/resilience/FlowTest.kt +++ b/arrow-libs/resilience/arrow-resilience/src/commonTest/kotlin/arrow/resilience/FlowTest.kt @@ -15,10 +15,8 @@ import kotlin.test.assertFailsWith import kotlin.test.assertTrue import kotlin.test.fail import kotlin.time.Duration.Companion.milliseconds -import kotlin.time.ExperimentalTime @OptIn(ExperimentalCoroutinesApi::class) -@ExperimentalTime class FlowTest { @Test diff --git a/arrow-libs/resilience/arrow-resilience/src/commonTest/kotlin/arrow/resilience/SagaSpec.kt b/arrow-libs/resilience/arrow-resilience/src/commonTest/kotlin/arrow/resilience/SagaSpec.kt index 63b25e7c307..b6ae2ae121d 100644 --- a/arrow-libs/resilience/arrow-resilience/src/commonTest/kotlin/arrow/resilience/SagaSpec.kt +++ b/arrow-libs/resilience/arrow-resilience/src/commonTest/kotlin/arrow/resilience/SagaSpec.kt @@ -14,7 +14,6 @@ import kotlin.test.assertEquals import kotlin.test.assertFailsWith import kotlin.test.fail -@OptIn(ExperimentalCoroutinesApi::class) @Suppress("unused") class SagaSpec { diff --git a/arrow-libs/resilience/arrow-resilience/src/commonTest/kotlin/arrow/resilience/ScheduleTest.kt b/arrow-libs/resilience/arrow-resilience/src/commonTest/kotlin/arrow/resilience/ScheduleTest.kt index 4e6f09dbc7c..540bfdaf4d9 100644 --- a/arrow-libs/resilience/arrow-resilience/src/commonTest/kotlin/arrow/resilience/ScheduleTest.kt +++ b/arrow-libs/resilience/arrow-resilience/src/commonTest/kotlin/arrow/resilience/ScheduleTest.kt @@ -5,7 +5,6 @@ import arrow.atomic.updateAndGet import arrow.core.Either import arrow.resilience.Schedule.Decision.Continue import arrow.resilience.Schedule.Decision.Done -import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.TestResult import kotlinx.coroutines.test.runTest import kotlinx.coroutines.withTimeout @@ -19,7 +18,6 @@ import kotlin.time.Duration import kotlin.time.Duration.Companion.ZERO import kotlin.time.Duration.Companion.milliseconds import kotlin.time.Duration.Companion.seconds -import kotlin.time.ExperimentalTime internal data class SideEffect(var counter: Int = 0) { fun increment() { @@ -27,9 +25,6 @@ internal data class SideEffect(var counter: Int = 0) { } } -@OptIn(ExperimentalCoroutinesApi::class) -@ExperimentalTime -@Suppress("UNREACHABLE_CODE", "UNUSED_VARIABLE") class ScheduleTest { class MyException : Exception() @@ -287,19 +282,16 @@ fun Schedule.Decision.delay(): Duration? = when (this) { is Done -> null } -@ExperimentalTime private fun fibs(one: Duration): Sequence = generateSequence(Pair(one, one)) { (a, b) -> Pair(b, (a + b)) }.map { it.first } -@ExperimentalTime private fun exp(base: Duration): Sequence = generateSequence(Pair(base, 1.0)) { (_, n) -> Pair(base * 2.0.pow(n), n + 1) }.map { it.first } -@ExperimentalTime private fun linear(base: Duration): Sequence = generateSequence(Pair(base, 1.0)) { (_, n) -> Pair((base * n), (n + 1)) diff --git a/arrow-libs/resilience/arrow-resilience/src/jvmTest/kotlin/examples/example-circuitbreaker-01.kt b/arrow-libs/resilience/arrow-resilience/src/jvmTest/kotlin/examples/example-circuitbreaker-01.kt index 0f646f65684..68469f2fdfe 100644 --- a/arrow-libs/resilience/arrow-resilience/src/jvmTest/kotlin/examples/example-circuitbreaker-01.kt +++ b/arrow-libs/resilience/arrow-resilience/src/jvmTest/kotlin/examples/example-circuitbreaker-01.kt @@ -5,9 +5,7 @@ import arrow.core.Either import arrow.resilience.CircuitBreaker import kotlinx.coroutines.delay import kotlin.time.Duration.Companion.seconds -import kotlin.time.ExperimentalTime -@ExperimentalTime suspend fun main(): Unit { val circuitBreaker = CircuitBreaker( resetTimeout = 2.seconds, diff --git a/arrow-libs/resilience/arrow-resilience/src/jvmTest/kotlin/examples/example-circuitbreaker-02.kt b/arrow-libs/resilience/arrow-resilience/src/jvmTest/kotlin/examples/example-circuitbreaker-02.kt index 9aaace53da3..5611e480b01 100644 --- a/arrow-libs/resilience/arrow-resilience/src/jvmTest/kotlin/examples/example-circuitbreaker-02.kt +++ b/arrow-libs/resilience/arrow-resilience/src/jvmTest/kotlin/examples/example-circuitbreaker-02.kt @@ -7,9 +7,7 @@ import arrow.resilience.Schedule import arrow.resilience.retry import kotlinx.coroutines.delay import kotlin.time.Duration.Companion.seconds -import kotlin.time.ExperimentalTime -@ExperimentalTime suspend fun main(): Unit { suspend fun apiCall(): Unit { println("apiCall . . .")