From c8cbf1f08723c24443962bcb2d0419bd73230044 Mon Sep 17 00:00:00 2001 From: akarnokd Date: Sat, 18 Sep 2021 23:50:13 +0200 Subject: [PATCH] Fix style and deprecations --- .../atomics/QueueDrainAsync3Perf.java | 6 +- .../akarnokd/atomics/QueueDrainAsyncPerf.java | 6 +- .../hu/akarnokd/atomics/QueueDrainPerf.java | 6 +- .../hu/akarnokd/atomics/TerminalAtomics.java | 8 +- .../comparison/AkkaStreamsCrossMapPerf.java | 8 +- .../comparison/AkkaStreamsFlatMapPerf.java | 6 +- .../AkkaStreamsReactorCrossMapPerf.java | 8 +- .../MaterializationBenchmarkFanInOutPerf.java | 4 +- .../comparison/ReactiveStreamsImpls.java | 6 +- src/jmh/java/hu/akarnokd/comparison/Util.java | 2 +- ...spearePlaysScrabbleWithAkkaStreamBeta.java | 10 +- ...espearePlaysScrabbleWithAkkaStreamOpt.java | 8 +- .../ShakespearePlaysScrabbleWithDirect.java | 12 +- .../ShakespearePlaysScrabbleWithIxOpt.java | 2 +- ...ePlaysScrabbleWithReactor3ParallelOpt.java | 2 +- .../consumers/PerfAsyncConsumer.java | 8 +- .../comparison/consumers/PerfConsumer.java | 8 +- .../comparison/reactor/MemoryPerf.java | 12 +- .../comparison/reactor/SubjectPerf.java | 17 +- .../rxjava2/DisposableContainerPerf.java | 2 +- src/main/java/hu/akarnokd/akka/AkkaHello.java | 16 +- src/main/java/hu/akarnokd/akka/AkkaRange.java | 12 +- .../java/hu/akarnokd/asm/ModuleWriting.java | 44 ++++ .../hu/akarnokd/fallout76/Ba2FileCreator.java | 12 +- .../hu/akarnokd/fallout76/EditorIDFinder.java | 20 +- .../akarnokd/fallout76/EditorIDScanner.java | 4 +- .../fallout76/EnemyCurveTableListing.java | 38 ++-- .../java/hu/akarnokd/fallout76/EsmExport.java | 12 +- .../fallout76/Fallout76EnemyInfo.java | 56 ++--- .../fallout76/WeaponCurveTableListing.java | 18 +- .../linearprogramming/TaskTimeDetect.java | 87 ++++++++ .../math/NumberFrom1to10NoConcat.java | 30 +-- .../java/hu/akarnokd/math/NumberFrom1to9.java | 28 +-- src/main/java/hu/akarnokd/misc/Bug20216.java | 4 +- .../java/hu/akarnokd/misc/DigitSwapper.java | 4 +- .../java/hu/akarnokd/misc/InferenceError.java | 3 + src/main/java/hu/akarnokd/misc/Recolor.java | 4 +- src/main/java/hu/akarnokd/misc/Rotator.java | 16 +- .../reactive/observables/IObservable.java | 165 +++++++------- .../reactive/observables/IObserver.java | 6 +- .../hu/akarnokd/rxjava/ActionInBetween.java | 8 +- .../java/hu/akarnokd/rxjava/MethodDiff.java | 6 +- .../java/hu/akarnokd/rxjava/SingleAsync.java | 2 +- .../akarnokd/rxjava/javadoc/AddCanonical.java | 205 +++++++++--------- .../hu/akarnokd/rxjava2/BufferSkipAsync.java | 6 +- .../java/hu/akarnokd/rxjava2/Cartesian.java | 12 +- .../java/hu/akarnokd/rxjava2/Coincidence.java | 10 +- .../hu/akarnokd/rxjava2/DoOnErrorFusion.java | 2 +- src/main/java/hu/akarnokd/rxjava2/FindGT.java | 10 +- .../hu/akarnokd/rxjava2/FirstAndSample.java | 2 +- .../java/hu/akarnokd/rxjava2/FlowVsRS.java | 16 +- .../rxjava2/FlowableSignalMapper.java | 2 +- .../rxjava2/FlowableStringInputStream.java | 2 +- .../akarnokd/rxjava2/FlowableSumIntArray.java | 16 +- .../hu/akarnokd/rxjava2/FluxCharSequence.java | 2 +- .../hu/akarnokd/rxjava2/JavadocScrape.java | 21 +- .../akarnokd/rxjava2/MyRxJava2DirWatcher.java | 4 +- .../java/hu/akarnokd/rxjava2/PersonSeq.java | 2 +- .../rxjava2/RxSynchronousCoarseProfiler.java | 8 +- .../rxjava2/RxSynchronousProfiler.java | 4 +- .../hu/akarnokd/rxjava2/ShiftByCount.java | 2 +- .../akarnokd/rxjava2/SomeAsyncApiBridge.java | 76 +++---- .../rxjava2/StripedCompositeDisposable.java | 2 +- .../java/hu/akarnokd/rxjava2/WhichThread.java | 12 +- .../rxjava3/MarblesAddBackground.java | 20 +- .../hu/akarnokd/rxjava3/ShareExample.java | 2 +- .../java/hu/akarnokd/rxjava3/UsingWhen.java | 20 +- src/test/java/GroupByConcatMapTest.java | 8 +- .../helidon/CrossFlatMapIterableTest.java | 4 +- .../java/hu/akarnokd/queue/MpmcPollTest.java | 12 +- .../tck/EmptyPublisherTckTest.java | 2 +- .../akarnokd/reactor/BackpressureProblem.java | 2 +- .../hu/akarnokd/reactor/BufferWhenTest.java | 9 +- .../hu/akarnokd/reactor/FluxMergeTest.java | 8 +- .../hu/akarnokd/reactor/MonoTimeoutTest.java | 2 +- .../hu/akarnokd/reactor/PickNextIndexed.java | 8 +- src/test/java/hu/akarnokd/rxjava/ATest.java | 2 +- .../rxjava/AutoRemoveSubscription.java | 12 +- .../akarnokd/rxjava/BufferStartEndTest.java | 8 +- .../java/hu/akarnokd/rxjava/CompleteDos.java | 4 +- .../hu/akarnokd/rxjava/ConcatReplayTest.java | 2 +- .../hu/akarnokd/rxjava/DelayingScheduler.java | 8 +- .../akarnokd/rxjava/ListFlatMappingTest.java | 6 +- .../rxjava/PublishSubjectRaceTest.java | 34 +-- .../hu/akarnokd/rxjava/ReduceAnonymous.java | 2 +- .../hu/akarnokd/rxjava/TimeoutCancelTest.java | 2 +- .../hu/akarnokd/rxjava/ZipRandomTest.java | 2 +- .../java/hu/akarnokd/rxjava/ZipRxJava.java | 4 +- .../java/hu/akarnokd/rxjava2/AndThenTest.java | 10 +- .../rxjava2/BehaviorSubjectCombineLatest.java | 18 +- .../BehaviorSubjectCombineLatestTest.java | 4 +- .../rxjava2/BehaviorSubjectSignals.java | 12 +- .../rxjava2/BehaviorWithLatestTest.java | 2 +- .../rxjava2/BlockingSubscribeOrdering.java | 2 +- .../hu/akarnokd/rxjava2/BufferDebounce.java | 14 +- .../rxjava2/BufferDelayErrorTest.java | 4 +- .../akarnokd/rxjava2/BufferUntilChanged.java | 1 - .../rxjava2/BufferWithConditionAndTime.java | 22 +- .../akarnokd/rxjava2/CombineLatestError.java | 2 +- .../java/hu/akarnokd/rxjava2/ConcatRange.java | 4 +- .../rxjava2/ConcurrentSingleCache.java | 6 +- .../hu/akarnokd/rxjava2/ConnectConnect.java | 4 +- .../java/hu/akarnokd/rxjava2/Covariance.java | 10 +- .../hu/akarnokd/rxjava2/CreateFlatFlat.java | 2 +- .../akarnokd/rxjava2/CustomFlowableTest.java | 2 +- .../hu/akarnokd/rxjava2/DebounceRailTest.java | 14 +- .../hu/akarnokd/rxjava2/DebounceTimeDrop.java | 30 +-- .../hu/akarnokd/rxjava2/DelayBetween.java | 2 +- .../hu/akarnokd/rxjava2/DoOnErrorInside.java | 2 +- .../hu/akarnokd/rxjava2/FileReaderTest.java | 10 +- .../rxjava2/FlatMapCompletableThread.java | 2 +- .../akarnokd/rxjava2/FlatMapDisposeTest.java | 10 +- .../hu/akarnokd/rxjava2/FlatMapFatal.java | 4 +- .../rxjava2/FlatMapWithTwoErrors.java | 18 +- .../FlowableIfNonEmptyComposeTest.java | 84 +++---- .../akarnokd/rxjava2/FlowableMergeTest.java | 8 +- .../FlowableStringInputStreamTest.java | 12 +- .../akarnokd/rxjava2/FromIterableFlatMap.java | 4 +- .../hu/akarnokd/rxjava2/GroupByTake5.java | 2 +- .../hu/akarnokd/rxjava2/GroupByTaken.java | 2 +- .../hu/akarnokd/rxjava2/GroupByTimeout.java | 6 +- .../hu/akarnokd/rxjava2/HookThrowing.java | 6 +- .../hu/akarnokd/rxjava2/IsDisposedTest.java | 4 +- .../hu/akarnokd/rxjava2/JoinPairwise.java | 12 +- .../akarnokd/rxjava2/JustFromEagerCancel.java | 6 +- .../akarnokd/rxjava2/LatestObserveOnTest.java | 2 +- .../akarnokd/rxjava2/LatestSuccessTest.java | 2 +- .../akarnokd/rxjava2/LazyUndeliverable.java | 4 +- .../hu/akarnokd/rxjava2/ListFlattening.java | 2 +- .../hu/akarnokd/rxjava2/ListGrouping.java | 18 +- .../rxjava2/LockstepObserveOnTest.java | 82 +++---- .../java/hu/akarnokd/rxjava2/MatchIndex.java | 2 +- .../java/hu/akarnokd/rxjava2/MaxByTest.java | 4 +- .../hu/akarnokd/rxjava2/MultiplyDigits.java | 12 +- .../java/hu/akarnokd/rxjava2/NotInFirst.java | 4 +- .../rxjava2/ObservableConcatEagerTest.java | 2 +- .../rxjava2/ObservableOnSubscribeTest.java | 6 +- .../hu/akarnokd/rxjava2/OnErrorCrash.java | 2 +- .../hu/akarnokd/rxjava2/PSTestWithTS.java | 8 +- .../akarnokd/rxjava2/PagingFeedbackLoop.java | 4 +- .../rxjava2/ParallelFileProcessing.java | 2 +- .../hu/akarnokd/rxjava2/PublishExamples.java | 4 +- .../akarnokd/rxjava2/PublishFuncExample.java | 2 +- .../rxjava2/PublishRefCountPublishTest.java | 8 +- .../hu/akarnokd/rxjava2/ReentrantSubject.java | 2 +- .../rxjava2/RefCountTrackingTest.java | 12 +- .../java/hu/akarnokd/rxjava2/ReplayOOM.java | 2 +- .../rxjava2/ReplayRefCountSubjectTest.java | 8 +- .../akarnokd/rxjava2/RetryEmptyErrorTest.java | 8 +- .../rxjava2/RetryWhenManyTypeTest.java | 6 +- .../hu/akarnokd/rxjava2/RetryWhenPlain.java | 4 +- .../hu/akarnokd/rxjava2/RetryWhenTest.java | 2 +- .../hu/akarnokd/rxjava2/RxJavaFuseTest.java | 2 +- .../java/hu/akarnokd/rxjava2/RxLosers.java | 4 +- .../hu/akarnokd/rxjava2/SingleConcatTest.java | 2 +- .../rxjava2/SingleObserveOnRaceTest.java | 16 +- .../rxjava2/SomeAsyncApiBridgeTest.java | 12 +- .../hu/akarnokd/rxjava2/SomeSharedFlow.java | 6 +- .../akarnokd/rxjava2/SquareSequenceTest.java | 6 +- .../java/hu/akarnokd/rxjava2/StageDelays.java | 24 +- .../hu/akarnokd/rxjava2/SubjectRaceTest.java | 2 +- .../akarnokd/rxjava2/SwitchIfFewerTest.java | 2 +- .../hu/akarnokd/rxjava2/SwitchMapRace.java | 8 +- .../rxjava2/TestDoAfterTerminate.java | 2 +- .../hu/akarnokd/rxjava2/TestMockitoCalls.java | 12 +- .../hu/akarnokd/rxjava2/ThrottleLastLeak.java | 6 +- .../hu/akarnokd/rxjava2/ThrottleLastSO.java | 4 +- .../hu/akarnokd/rxjava2/ThrottleLastTest.java | 28 +-- .../akarnokd/rxjava2/ThrottleSampleTest.java | 66 +++--- .../hu/akarnokd/rxjava2/ThrowsSubclass.java | 4 +- .../akarnokd/rxjava2/TimeoutCancelv2Test.java | 8 +- .../java/hu/akarnokd/rxjava2/TimeoutTask.java | 6 +- .../hu/akarnokd/rxjava2/TrackedRefcount.java | 2 +- .../hu/akarnokd/rxjava2/UncaughtCrash.java | 2 +- .../akarnokd/rxjava2/UnicastSingleTest.java | 6 +- .../hu/akarnokd/rxjava2/WindowDisposed.java | 8 +- .../java/hu/akarnokd/rxjava2/ZipCrash.java | 2 +- .../java/hu/akarnokd/rxjava2/ZipInfinite.java | 2 +- .../hu/akarnokd/rxjava3/BufferStartStop.java | 22 +- .../java/hu/akarnokd/rxjava3/NestedUsing.java | 6 +- .../hu/akarnokd/rxjava3/RepeatWhenSO.java | 4 +- .../hu/akarnokd/rxjava3/SchedulerPrint.java | 32 +++ .../hu/akarnokd/utils/BallisticResist.java | 14 +- .../servicetalk/PublishOnOverrideTckTest.java | 2 +- 184 files changed, 1199 insertions(+), 1029 deletions(-) create mode 100644 src/main/java/hu/akarnokd/asm/ModuleWriting.java create mode 100644 src/main/java/hu/akarnokd/linearprogramming/TaskTimeDetect.java create mode 100644 src/test/java/hu/akarnokd/rxjava3/SchedulerPrint.java diff --git a/src/jmh/java/hu/akarnokd/atomics/QueueDrainAsync3Perf.java b/src/jmh/java/hu/akarnokd/atomics/QueueDrainAsync3Perf.java index ff3fcc0c..f9e6c905 100644 --- a/src/jmh/java/hu/akarnokd/atomics/QueueDrainAsync3Perf.java +++ b/src/jmh/java/hu/akarnokd/atomics/QueueDrainAsync3Perf.java @@ -26,7 +26,7 @@ public void queueDrainAtomic1() { for (;;) { counter++; - + missed = wip.addAndGet(-missed); if (missed == 0) { break; @@ -45,7 +45,7 @@ public void queueDrainAtomic2() { for (;;) { counter++; - + missed = w.addAndGet(-missed); if (missed == 0) { break; @@ -64,7 +64,7 @@ public void queueDrainAtomic3() { for (;;) { counter++; - + int u = w.get(); if (missed == u) { missed = w.addAndGet(-missed); diff --git a/src/jmh/java/hu/akarnokd/atomics/QueueDrainAsyncPerf.java b/src/jmh/java/hu/akarnokd/atomics/QueueDrainAsyncPerf.java index f70d4eee..d70d546f 100644 --- a/src/jmh/java/hu/akarnokd/atomics/QueueDrainAsyncPerf.java +++ b/src/jmh/java/hu/akarnokd/atomics/QueueDrainAsyncPerf.java @@ -26,7 +26,7 @@ public void queueDrainAtomic1() { for (;;) { counter++; - + missed = wip.addAndGet(-missed); if (missed == 0) { break; @@ -45,7 +45,7 @@ public void queueDrainAtomic2() { for (;;) { counter++; - + missed = w.addAndGet(-missed); if (missed == 0) { break; @@ -64,7 +64,7 @@ public void queueDrainAtomic3() { for (;;) { counter++; - + int u = w.get(); if (missed == u) { missed = w.addAndGet(-missed); diff --git a/src/jmh/java/hu/akarnokd/atomics/QueueDrainPerf.java b/src/jmh/java/hu/akarnokd/atomics/QueueDrainPerf.java index 2b4a69bf..b29ca811 100644 --- a/src/jmh/java/hu/akarnokd/atomics/QueueDrainPerf.java +++ b/src/jmh/java/hu/akarnokd/atomics/QueueDrainPerf.java @@ -24,7 +24,7 @@ public void queueDrainAtomic1() { for (;;) { counter++; - + missed = wip.addAndGet(-missed); if (missed == 0) { break; @@ -41,7 +41,7 @@ public void queueDrainAtomic2() { for (;;) { counter++; - + missed = w.addAndGet(-missed); if (missed == 0) { break; @@ -58,7 +58,7 @@ public void queueDrainAtomic3() { for (;;) { counter++; - + int u = w.get(); if (missed == u) { missed = w.addAndGet(-missed); diff --git a/src/jmh/java/hu/akarnokd/atomics/TerminalAtomics.java b/src/jmh/java/hu/akarnokd/atomics/TerminalAtomics.java index 51948131..835abd0e 100644 --- a/src/jmh/java/hu/akarnokd/atomics/TerminalAtomics.java +++ b/src/jmh/java/hu/akarnokd/atomics/TerminalAtomics.java @@ -13,11 +13,11 @@ @Fork(value = 1) @State(Scope.Thread) public class TerminalAtomics { - + final AtomicReference ref = new AtomicReference<>(); - + final Object o = new Object(); - + void getGetAndSet(Blackhole bh) { Object o = ref.get(); if (o != null) { @@ -27,7 +27,7 @@ void getGetAndSet(Blackhole bh) { } } } - + void getAndSet(Blackhole bh) { Object o = ref.getAndSet(null); if (o != null) { diff --git a/src/jmh/java/hu/akarnokd/comparison/AkkaStreamsCrossMapPerf.java b/src/jmh/java/hu/akarnokd/comparison/AkkaStreamsCrossMapPerf.java index ba36cca4..81cf6d0c 100644 --- a/src/jmh/java/hu/akarnokd/comparison/AkkaStreamsCrossMapPerf.java +++ b/src/jmh/java/hu/akarnokd/comparison/AkkaStreamsCrossMapPerf.java @@ -10,7 +10,7 @@ import com.typesafe.config.*; import akka.actor.ActorSystem; -import akka.stream.ActorMaterializer; +import akka.stream.*; import akka.stream.javadsl.*; import hu.akarnokd.reactive.comparison.consumers.PerfAsyncConsumer; import io.reactivex.Flowable; @@ -27,7 +27,7 @@ public class AkkaStreamsCrossMapPerf { ActorSystem actorSystem; - ActorMaterializer materializer; + Materializer materializer; Publisher flatMapAkkaAkka; @@ -54,7 +54,7 @@ public void setup() throws Exception { Config cfg = ConfigFactory.parseResources(getClass(), "/akka-streams.conf").resolve(); actorSystem = ActorSystem.create("sys", cfg); - materializer = ActorMaterializer.create(actorSystem); + materializer = Materializer.createMaterializer(actorSystem); Integer[] outer = new Integer[count]; Arrays.fill(outer, 777); @@ -210,7 +210,7 @@ public static void main(String[] args) { Config cfg = ConfigFactory.parseResources(AkkaStreamsCrossMapPerf.class, "/akka-streams.conf").resolve(); ActorSystem actorSystem = ActorSystem.create("sys", cfg); - ActorMaterializer materializer = ActorMaterializer.create(actorSystem); + Materializer materializer = Materializer.createMaterializer(actorSystem); Integer[] outer = new Integer[100]; diff --git a/src/jmh/java/hu/akarnokd/comparison/AkkaStreamsFlatMapPerf.java b/src/jmh/java/hu/akarnokd/comparison/AkkaStreamsFlatMapPerf.java index ba65f2f4..3b672615 100644 --- a/src/jmh/java/hu/akarnokd/comparison/AkkaStreamsFlatMapPerf.java +++ b/src/jmh/java/hu/akarnokd/comparison/AkkaStreamsFlatMapPerf.java @@ -9,7 +9,7 @@ import com.typesafe.config.*; import akka.actor.ActorSystem; -import akka.stream.ActorMaterializer; +import akka.stream.Materializer; import akka.stream.javadsl.*; @BenchmarkMode(Mode.Throughput) @@ -27,7 +27,7 @@ public class AkkaStreamsFlatMapPerf { ActorSystem actorSystem; - ActorMaterializer materializer; + Materializer materializer; Publisher akRangeFlatMapJust; @@ -38,7 +38,7 @@ public void setup() throws Exception { Config cfg = ConfigFactory.parseResources(AkkaStreamsFlatMapPerf.class, "/akka-streams.conf"); actorSystem = ActorSystem.create("sys", cfg); - materializer = ActorMaterializer.create(actorSystem); + materializer = Materializer.createMaterializer(actorSystem); akRangeFlatMapJust = s -> Source.range(1, times) diff --git a/src/jmh/java/hu/akarnokd/comparison/AkkaStreamsReactorCrossMapPerf.java b/src/jmh/java/hu/akarnokd/comparison/AkkaStreamsReactorCrossMapPerf.java index 1375fa5b..35502a52 100644 --- a/src/jmh/java/hu/akarnokd/comparison/AkkaStreamsReactorCrossMapPerf.java +++ b/src/jmh/java/hu/akarnokd/comparison/AkkaStreamsReactorCrossMapPerf.java @@ -10,7 +10,7 @@ import com.typesafe.config.*; import akka.actor.ActorSystem; -import akka.stream.ActorMaterializer; +import akka.stream.*; import akka.stream.javadsl.*; import hu.akarnokd.reactive.comparison.consumers.PerfAsyncConsumer; import reactor.core.publisher.Flux; @@ -27,7 +27,7 @@ public class AkkaStreamsReactorCrossMapPerf { ActorSystem actorSystem; - ActorMaterializer materializer; + Materializer materializer; Publisher flatMapAkkaAkka; @@ -54,7 +54,7 @@ public void setup() throws Exception { Config cfg = ConfigFactory.parseResources(AkkaStreamsReactorCrossMapPerf.class, "/akka-streams.conf").resolve(); actorSystem = ActorSystem.create("sys", cfg); - materializer = ActorMaterializer.create(actorSystem); + materializer = Materializer.createMaterializer(actorSystem); Integer[] outer = new Integer[count]; Arrays.fill(outer, 777); @@ -210,7 +210,7 @@ public static void main(String[] args) { Config cfg = ConfigFactory.parseResources(AkkaStreamsReactorCrossMapPerf.class, "/akka-streams.conf").resolve(); ActorSystem actorSystem = ActorSystem.create("sys", cfg); - ActorMaterializer materializer = ActorMaterializer.create(actorSystem); + Materializer materializer = Materializer.createMaterializer(actorSystem); Integer[] outer = new Integer[100]; diff --git a/src/jmh/java/hu/akarnokd/comparison/MaterializationBenchmarkFanInOutPerf.java b/src/jmh/java/hu/akarnokd/comparison/MaterializationBenchmarkFanInOutPerf.java index f578836d..ec75c7cf 100644 --- a/src/jmh/java/hu/akarnokd/comparison/MaterializationBenchmarkFanInOutPerf.java +++ b/src/jmh/java/hu/akarnokd/comparison/MaterializationBenchmarkFanInOutPerf.java @@ -43,14 +43,14 @@ public class MaterializationBenchmarkFanInOutPerf { ActorSystem actorSystem; - ActorMaterializer materializer; + Materializer materializer; @Setup public void setup() { Config cfg = ConfigFactory.parseResources(getClass(), "/akka-streams.conf").resolve(); actorSystem = ActorSystem.create("sys", cfg); - materializer = ActorMaterializer.create(actorSystem); + materializer = Materializer.createMaterializer(actorSystem); akka = RunnableGraph.fromGraph(GraphDSL.create(b -> { Shape broadcast = b.add(new Broadcast(complexity, false)); diff --git a/src/jmh/java/hu/akarnokd/comparison/ReactiveStreamsImpls.java b/src/jmh/java/hu/akarnokd/comparison/ReactiveStreamsImpls.java index 3fbb2e98..a36d6227 100644 --- a/src/jmh/java/hu/akarnokd/comparison/ReactiveStreamsImpls.java +++ b/src/jmh/java/hu/akarnokd/comparison/ReactiveStreamsImpls.java @@ -24,7 +24,7 @@ import akka.NotUsed; import akka.actor.ActorSystem; -import akka.stream.ActorMaterializer; +import akka.stream.*; import akka.stream.javadsl.*; import io.reactivex.*; import io.reactivex.Observable; @@ -87,7 +87,7 @@ public class ReactiveStreamsImpls { ActorSystem actorSystem; - private ActorMaterializer materializer; + private Materializer materializer; private List values; @@ -137,7 +137,7 @@ public void setup() throws Exception { Config cfg = ConfigFactory.parseResources(ReactiveStreamsImpls.class, "/akka-streams.conf").resolve(); actorSystem = ActorSystem.create("sys", cfg); - materializer = ActorMaterializer.create(actorSystem); + materializer = Materializer.createMaterializer(actorSystem); akRange = s -> { Source.range(1, times) diff --git a/src/jmh/java/hu/akarnokd/comparison/Util.java b/src/jmh/java/hu/akarnokd/comparison/Util.java index 290c53ce..d8e8d3a5 100644 --- a/src/jmh/java/hu/akarnokd/comparison/Util.java +++ b/src/jmh/java/hu/akarnokd/comparison/Util.java @@ -37,7 +37,7 @@ static Path findPath(String resourceName) { return Paths.get("files", resourceName); } } - + public static Set readScrabbleWords() { Set scrabbleWords = new HashSet<>() ; try (Stream scrabbleWordsStream = Files.lines(findPath("ospd.txt"))) { diff --git a/src/jmh/java/hu/akarnokd/comparison/scrabble/ShakespearePlaysScrabbleWithAkkaStreamBeta.java b/src/jmh/java/hu/akarnokd/comparison/scrabble/ShakespearePlaysScrabbleWithAkkaStreamBeta.java index 4f1a8974..d38dfe63 100644 --- a/src/jmh/java/hu/akarnokd/comparison/scrabble/ShakespearePlaysScrabbleWithAkkaStreamBeta.java +++ b/src/jmh/java/hu/akarnokd/comparison/scrabble/ShakespearePlaysScrabbleWithAkkaStreamBeta.java @@ -21,20 +21,18 @@ import java.util.concurrent.*; import org.openjdk.jmh.annotations.*; -import org.openjdk.jmh.runner.Runner; -import org.openjdk.jmh.runner.options.*; import com.typesafe.config.*; import akka.NotUsed; import akka.actor.ActorSystem; import akka.japi.function.Function; -import akka.stream.ActorMaterializer; +import akka.stream.Materializer; import akka.stream.javadsl.*; /** * Shakespeare with Akka-Stream Optimized. - * + * * @author José * @author akarnokd */ @@ -42,14 +40,14 @@ public class ShakespearePlaysScrabbleWithAkkaStreamBeta extends ShakespearePlays ActorSystem actorSystem; - ActorMaterializer materializer; + Materializer materializer; @Setup public void setup() { Config cfg = ConfigFactory.parseResources(ShakespearePlaysScrabbleWithAkkaStreamOpt.class, "/akka-streams.conf").resolve(); actorSystem = ActorSystem.create("sys", cfg); - materializer = ActorMaterializer.create(actorSystem); + materializer = Materializer.createMaterializer(actorSystem); } diff --git a/src/jmh/java/hu/akarnokd/comparison/scrabble/ShakespearePlaysScrabbleWithAkkaStreamOpt.java b/src/jmh/java/hu/akarnokd/comparison/scrabble/ShakespearePlaysScrabbleWithAkkaStreamOpt.java index 06d0c4a5..16427c06 100644 --- a/src/jmh/java/hu/akarnokd/comparison/scrabble/ShakespearePlaysScrabbleWithAkkaStreamOpt.java +++ b/src/jmh/java/hu/akarnokd/comparison/scrabble/ShakespearePlaysScrabbleWithAkkaStreamOpt.java @@ -28,12 +28,12 @@ import akka.NotUsed; import akka.actor.ActorSystem; import akka.japi.function.Function; -import akka.stream.ActorMaterializer; +import akka.stream.Materializer; import akka.stream.javadsl.*; /** * Shakespeare with Akka-Stream Optimized. - * + * * @author José * @author akarnokd */ @@ -41,14 +41,14 @@ public class ShakespearePlaysScrabbleWithAkkaStreamOpt extends ShakespearePlaysS ActorSystem actorSystem; - ActorMaterializer materializer; + Materializer materializer; @Setup public void setup() { Config cfg = ConfigFactory.parseResources(ShakespearePlaysScrabbleWithAkkaStreamOpt.class, "/akka-streams.conf").resolve(); actorSystem = ActorSystem.create("sys", cfg); - materializer = ActorMaterializer.create(actorSystem); + materializer = Materializer.createMaterializer(actorSystem); } diff --git a/src/jmh/java/hu/akarnokd/comparison/scrabble/ShakespearePlaysScrabbleWithDirect.java b/src/jmh/java/hu/akarnokd/comparison/scrabble/ShakespearePlaysScrabbleWithDirect.java index 29b557ed..31bd78bd 100644 --- a/src/jmh/java/hu/akarnokd/comparison/scrabble/ShakespearePlaysScrabbleWithDirect.java +++ b/src/jmh/java/hu/akarnokd/comparison/scrabble/ShakespearePlaysScrabbleWithDirect.java @@ -44,7 +44,7 @@ public class ShakespearePlaysScrabbleWithDirect extends ShakespearePlaysScrabble public List>> measureThroughput() throws InterruptedException { TreeMap> treemap = new TreeMap>(Comparator.reverseOrder()); - + for (String word : shakespeareWords) { if (scrabbleWords.contains(word)) { HashMap wordHistogram = new LinkedHashMap<>(); @@ -91,12 +91,12 @@ public List>> measureThroughput() throws Interrupted for (int i = 3; i < word.length(); i++) { max2 = Math.max(max2, letterScores[word.charAt(i) - 'a']); } - + sum2 += max2; sum2 = 2 * sum2 + (word.length() == 7 ? 50 : 0); - + Integer key = sum2; - + List list = treemap.get(key) ; if (list == null) { list = new ArrayList<>() ; @@ -106,9 +106,9 @@ public List>> measureThroughput() throws Interrupted } } } - + List>> list = new ArrayList>>(); - + int i = 4; for (Entry> e : treemap.entrySet()) { if (--i == 0) { diff --git a/src/jmh/java/hu/akarnokd/comparison/scrabble/ShakespearePlaysScrabbleWithIxOpt.java b/src/jmh/java/hu/akarnokd/comparison/scrabble/ShakespearePlaysScrabbleWithIxOpt.java index d77d082e..762ca5ca 100644 --- a/src/jmh/java/hu/akarnokd/comparison/scrabble/ShakespearePlaysScrabbleWithIxOpt.java +++ b/src/jmh/java/hu/akarnokd/comparison/scrabble/ShakespearePlaysScrabbleWithIxOpt.java @@ -42,7 +42,7 @@ static Ix chars(String word) { @BenchmarkMode(Mode.SampleTime) @OutputTimeUnit(TimeUnit.MILLISECONDS) @Warmup( - iterations = 5, time = 1 + iterations = 5, time = 1 ) @Measurement( iterations = 5, time = 1 diff --git a/src/jmh/java/hu/akarnokd/comparison/scrabble/ShakespearePlaysScrabbleWithReactor3ParallelOpt.java b/src/jmh/java/hu/akarnokd/comparison/scrabble/ShakespearePlaysScrabbleWithReactor3ParallelOpt.java index 145eebe5..7a8cebd6 100644 --- a/src/jmh/java/hu/akarnokd/comparison/scrabble/ShakespearePlaysScrabbleWithReactor3ParallelOpt.java +++ b/src/jmh/java/hu/akarnokd/comparison/scrabble/ShakespearePlaysScrabbleWithReactor3ParallelOpt.java @@ -45,7 +45,7 @@ static Flux chars(String word) { @Setup public void localSetup() { - scheduler = Schedulers.newElastic("RcParallel"); + scheduler = Schedulers.newBoundedElastic(10, 60, "RcParallel"); } @TearDown diff --git a/src/jmh/java/hu/akarnokd/reactive/comparison/consumers/PerfAsyncConsumer.java b/src/jmh/java/hu/akarnokd/reactive/comparison/consumers/PerfAsyncConsumer.java index 12c7cc4b..c45cdcd1 100644 --- a/src/jmh/java/hu/akarnokd/reactive/comparison/consumers/PerfAsyncConsumer.java +++ b/src/jmh/java/hu/akarnokd/reactive/comparison/consumers/PerfAsyncConsumer.java @@ -11,13 +11,13 @@ public final class PerfAsyncConsumer extends CountDownLatch -implements +implements FlowableSubscriber, CoreSubscriber, -Observer, +Observer, SingleObserver, -CompletableObserver, -MaybeObserver, +CompletableObserver, +MaybeObserver, rx.CompletableSubscriber { final Blackhole bh; diff --git a/src/jmh/java/hu/akarnokd/reactive/comparison/consumers/PerfConsumer.java b/src/jmh/java/hu/akarnokd/reactive/comparison/consumers/PerfConsumer.java index d008d825..d192dbea 100644 --- a/src/jmh/java/hu/akarnokd/reactive/comparison/consumers/PerfConsumer.java +++ b/src/jmh/java/hu/akarnokd/reactive/comparison/consumers/PerfConsumer.java @@ -9,11 +9,11 @@ public final class PerfConsumer implements FlowableSubscriber, CoreSubscriber, Observer, SingleObserver, -CompletableObserver, MaybeObserver, rx.CompletableSubscriber, -io.reactivex.rxjava3.core.FlowableSubscriber, -io.reactivex.rxjava3.core.Observer, +CompletableObserver, MaybeObserver, rx.CompletableSubscriber, +io.reactivex.rxjava3.core.FlowableSubscriber, +io.reactivex.rxjava3.core.Observer, io.reactivex.rxjava3.core.SingleObserver, -io.reactivex.rxjava3.core.CompletableObserver, +io.reactivex.rxjava3.core.CompletableObserver, io.reactivex.rxjava3.core.MaybeObserver, java.util.concurrent.Flow.Subscriber { diff --git a/src/jmh/java/hu/akarnokd/reactive/comparison/reactor/MemoryPerf.java b/src/jmh/java/hu/akarnokd/reactive/comparison/reactor/MemoryPerf.java index 12eba9f6..ec4ea8a5 100644 --- a/src/jmh/java/hu/akarnokd/reactive/comparison/reactor/MemoryPerf.java +++ b/src/jmh/java/hu/akarnokd/reactive/comparison/reactor/MemoryPerf.java @@ -113,19 +113,19 @@ public static void main(String[] args) throws Exception { checkMemory(() -> Flux.range(1, 10).subscribeOn(reactor.core.scheduler.Schedulers.parallel()).publishOn(reactor.core.scheduler.Schedulers.parallel()).subscribeWith(new MyReactorSubscriber()), "range+subscribeOn+observeOn+consumer", "ReactorFlux"); - checkMemory(() -> reactor.core.publisher.DirectProcessor.create(), "Publish", "ReactorFlux"); + checkMemory(() -> Sinks.many().multicast().directBestEffort(), "Publish", "ReactorFlux"); - checkMemory(() -> reactor.core.publisher.ReplayProcessor.create(), "Replay", "ReactorFlux"); + checkMemory(() -> Sinks.many().replay(), "Replay", "ReactorFlux"); - checkMemory(() -> reactor.core.publisher.UnicastProcessor.create(), "Unicast", "ReactorFlux"); + checkMemory(() -> Sinks.many().unicast(), "Unicast", "ReactorFlux"); - checkMemory(() -> reactor.core.publisher.DirectProcessor.create().subscribeWith(new MyReactorSubscriber()), + checkMemory(() -> Sinks.many().multicast().directBestEffort().asFlux().subscribeWith(new MyReactorSubscriber()), "Publish+consumer", "ReactorFlux"); - checkMemory(() -> reactor.core.publisher.ReplayProcessor.create().subscribeWith(new MyReactorSubscriber()), + checkMemory(() -> Sinks.many().replay().all().asFlux().subscribeWith(new MyReactorSubscriber()), "Replay+consumer", "ReactorFlux"); - checkMemory(() -> reactor.core.publisher.UnicastProcessor.create().subscribeWith(new MyReactorSubscriber()), + checkMemory(() -> Sinks.many().unicast().onBackpressureBuffer().asFlux().subscribeWith(new MyReactorSubscriber()), "Unicast+consumer", "ReactorFlux"); // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/jmh/java/hu/akarnokd/reactive/comparison/reactor/SubjectPerf.java b/src/jmh/java/hu/akarnokd/reactive/comparison/reactor/SubjectPerf.java index 4b4ec414..fb545e26 100644 --- a/src/jmh/java/hu/akarnokd/reactive/comparison/reactor/SubjectPerf.java +++ b/src/jmh/java/hu/akarnokd/reactive/comparison/reactor/SubjectPerf.java @@ -4,10 +4,9 @@ import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.infra.Blackhole; -import org.reactivestreams.Processor; import hu.akarnokd.reactive.comparison.consumers.PerfConsumer; -import reactor.core.publisher.DirectProcessor; +import reactor.core.publisher.Sinks; import reactor.util.concurrent.Queues; @BenchmarkMode(Mode.Throughput) @@ -23,28 +22,28 @@ public class SubjectPerf { // ************************************************************************ - final void run(Processor subject, Blackhole bh) { - subject.subscribe(new PerfConsumer(bh)); + final void run(Sinks.Many subject, Blackhole bh) { + subject.asFlux().subscribe(new PerfConsumer(bh)); int e = count; for (int i = 0; i < e; i++) { - subject.onNext(1); + subject.tryEmitNext(1); } - subject.onComplete(); + subject.tryEmitComplete(); bh.consume(subject); } @Benchmark public void rangeReactorDirectProcessor(Blackhole bh) { - run(DirectProcessor.create(), bh); + run(Sinks.many().multicast().directBestEffort(), bh); } @Benchmark public void rangeReactorReplayProcessor(Blackhole bh) { - run(reactor.core.publisher.ReplayProcessor.create(128, false), bh); + run(Sinks.many().replay().all(128), bh); } @Benchmark public void rangeReactorUnicastProcessor(Blackhole bh) { - run(reactor.core.publisher.UnicastProcessor.create(Queues.unbounded(128).get()), bh); + run(Sinks.many().unicast().onBackpressureBuffer(Queues.unbounded(128).get()), bh); } } diff --git a/src/jmh/java/hu/akarnokd/rxjava2/DisposableContainerPerf.java b/src/jmh/java/hu/akarnokd/rxjava2/DisposableContainerPerf.java index 71ca5c51..a1ae91b2 100644 --- a/src/jmh/java/hu/akarnokd/rxjava2/DisposableContainerPerf.java +++ b/src/jmh/java/hu/akarnokd/rxjava2/DisposableContainerPerf.java @@ -32,7 +32,7 @@ public class DisposableContainerPerf { @Param({/*"1", */"2", "3", "4"}) public int concurrency; - + @Param({"1", "10", "100", "1000"}) public int work; diff --git a/src/main/java/hu/akarnokd/akka/AkkaHello.java b/src/main/java/hu/akarnokd/akka/AkkaHello.java index a4f4478d..ed080621 100644 --- a/src/main/java/hu/akarnokd/akka/AkkaHello.java +++ b/src/main/java/hu/akarnokd/akka/AkkaHello.java @@ -6,7 +6,7 @@ import akka.NotUsed; import akka.actor.ActorSystem; -import akka.stream.ActorMaterializer; +import akka.stream.Materializer; import akka.stream.javadsl.*; import akka.stream.scaladsl.Source; import io.reactivex.Flowable; @@ -37,24 +37,24 @@ public void onComplete() { } }; } - + public static void main(String[] args) throws Exception { Config cfg = ConfigFactory.parseResources(AkkaHello.class, "/akka-streams.conf").resolve(); ActorSystem actorSystem = ActorSystem.create("sys", cfg); - ActorMaterializer materializer = ActorMaterializer.create(actorSystem); + Materializer materializer = Materializer.createMaterializer(actorSystem); Integer[] c = { 0 }; - + Source source = Source.fromPublisher(Flowable.fromCallable(() -> c[0]++)); - + Publisher p = source.runWith(Sink.asPublisher(AsPublisher.WITH_FANOUT), materializer); p.subscribe(println()); Thread.sleep(1000); - - + + try { p.subscribe(println()); @@ -62,7 +62,7 @@ public static void main(String[] args) throws Exception { } catch (Throwable ex) { ex.printStackTrace(); } - + p = source.runWith(Sink.asPublisher(AsPublisher.WITH_FANOUT), materializer); try { diff --git a/src/main/java/hu/akarnokd/akka/AkkaRange.java b/src/main/java/hu/akarnokd/akka/AkkaRange.java index ca668280..ebdb3445 100644 --- a/src/main/java/hu/akarnokd/akka/AkkaRange.java +++ b/src/main/java/hu/akarnokd/akka/AkkaRange.java @@ -6,7 +6,7 @@ import akka.NotUsed; import akka.actor.ActorSystem; -import akka.stream.ActorMaterializer; +import akka.stream.*; import akka.stream.javadsl.*; public class AkkaRange { @@ -15,9 +15,9 @@ static Subscriber println() { return new Subscriber() { Subscription s; - + int n; - + @Override public void onSubscribe(Subscription s) { this.s = s; @@ -44,16 +44,16 @@ public void onComplete() { } }; } - + public static void main(String[] args) throws Exception { Config cfg = ConfigFactory.parseResources(AkkaRange.class, "/akka-streams.conf").resolve(); ActorSystem actorSystem = ActorSystem.create("sys", cfg); - ActorMaterializer materializer = ActorMaterializer.create(actorSystem); + Materializer materializer = Materializer.createMaterializer(actorSystem); Source source = Source.repeat(1) .map(v -> v + 1); - + Publisher p = source.runWith(Sink.asPublisher(AsPublisher.WITH_FANOUT), materializer); p.subscribe(println()); diff --git a/src/main/java/hu/akarnokd/asm/ModuleWriting.java b/src/main/java/hu/akarnokd/asm/ModuleWriting.java new file mode 100644 index 00000000..fd09bbf7 --- /dev/null +++ b/src/main/java/hu/akarnokd/asm/ModuleWriting.java @@ -0,0 +1,44 @@ +package hu.akarnokd.asm; + +import static org.objectweb.asm.Opcodes.*; + +import java.io.File; + +import org.objectweb.asm.*; + +import com.google.common.io.Files; + +public class ModuleWriting { + public static void main(String[] args) throws Exception { + ClassWriter cw = new ClassWriter(0); + + cw.visit(V9, ACC_MODULE, "module-info", null, null, null); + + ModuleVisitor mw = cw.visitModule("io.reactivex.rxjava3", 0, null); + mw.visitRequire("java.base", ACC_MANDATED, null); + mw.visitRequire("org.reactivestreams", ACC_TRANSITIVE, null); + + mw.visitExport("io.reactivex.rxjava3", 0, new String[] { + "io/reactivex/rxjava3/annotations", + "io/reactivex/rxjava3/core", + "io/reactivex/rxjava3/disposables", + "io/reactivex/rxjava3/exceptions", + "io/reactivex/rxjava3/flowables", + "io/reactivex/rxjava3/functions", + "io/reactivex/rxjava3/observables", + "io/reactivex/rxjava3/observers", + "io/reactivex/rxjava3/operators", + "io/reactivex/rxjava3/parallel", + "io/reactivex/rxjava3/plugins", + "io/reactivex/rxjava3/processors", + "io/reactivex/rxjava3/schedulers", + "io/reactivex/rxjava3/subjects", + "io/reactivex/rxjava3/subscribers", + + }); + mw.visitEnd(); + cw.visitEnd(); + + Files.write(cw.toByteArray(), new File("c:/work/module-info.class")); + } +} diff --git a/src/main/java/hu/akarnokd/fallout76/Ba2FileCreator.java b/src/main/java/hu/akarnokd/fallout76/Ba2FileCreator.java index 516f7af7..6a8f7256 100644 --- a/src/main/java/hu/akarnokd/fallout76/Ba2FileCreator.java +++ b/src/main/java/hu/akarnokd/fallout76/Ba2FileCreator.java @@ -6,7 +6,7 @@ public class Ba2FileCreator { public static void main(String[] args) throws Exception { - + File f = new File("c:\\Users\\akarnokd\\Downloads\\fo76interface\\meatbagreplace.ba2"); File includeFile = new File("c:\\Users\\akarnokd\\Downloads\\fo76interface\\streetlamp01.nif"); @@ -19,10 +19,10 @@ public static void main(String[] args) throws Exception { out.writeInt(Integer.reverseBytes(1)); // version out.writeBytes("GNRL"); out.writeInt(Integer.reverseBytes(1)); // number of files - + long includeLen = includeFile.length(); out.writeLong(Long.reverseBytes(24 + 36 + includeLen)); - + out.writeInt(Integer.reverseBytes(hash(fileName))); // Namehash ??? out.writeBytes("nif"); out.writeByte(0); // Extension zero @@ -32,14 +32,14 @@ public static void main(String[] args) throws Exception { out.writeInt(Integer.reverseBytes(0)); // size if compressed out.writeInt(Integer.reverseBytes((int)includeLen)); // realsize out.writeInt(Integer.reverseBytes(0xBAADF00D)); // align/magic - + Files.copy(includeFile, out); - + out.writeShort(Short.reverseBytes((short)includeName.length())); out.writeBytes(includeName); } } - + static int hash(String str) { return 0; } diff --git a/src/main/java/hu/akarnokd/fallout76/EditorIDFinder.java b/src/main/java/hu/akarnokd/fallout76/EditorIDFinder.java index 841cea57..39b5da16 100644 --- a/src/main/java/hu/akarnokd/fallout76/EditorIDFinder.java +++ b/src/main/java/hu/akarnokd/fallout76/EditorIDFinder.java @@ -26,7 +26,7 @@ public static void main(String[] args) throws Exception { try (RandomAccessFile raf = new RandomAccessFile(file, "r")) { MappedByteBuffer mbb = raf.getChannel().map(MapMode.READ_ONLY, 0, raf.length()); - + while (mbb.remaining() > 0) { if (mbb.get() == 'E') { if (mbb.get() == 'D') { @@ -52,34 +52,34 @@ public static void main(String[] args) throws Exception { } } } - + SwingUtilities.invokeLater(() -> { JFrame frame = new JFrame(); frame.setTitle("Find Editor IDs"); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.setSize(1000, 800); - + frame.setLocationRelativeTo(null); - + JTextField search = new JTextField(); frame.add(search, BorderLayout.PAGE_START); Font f = new Font(Font.SANS_SERIF, Font.PLAIN, 22); search.setFont(f); - + JTextPane text = new JTextPane(); JScrollPane scroll = new JScrollPane(text); frame.add(scroll, BorderLayout.CENTER); f = new Font(Font.MONOSPACED, Font.PLAIN, 22); text.setFont(f); - + frame.setVisible(true); - + search.addActionListener(e -> { text.setText(""); - + String find = search.getText().trim().toLowerCase(); String[] ands = find.split("\\s+"); - + List found = new ArrayList<>(); if (find.length() > 0) { for (String s : editorIds) { @@ -94,7 +94,7 @@ public static void main(String[] args) throws Exception { found.add(s); } } - + if (found.size() == 0) { text.setText(""); } else { diff --git a/src/main/java/hu/akarnokd/fallout76/EditorIDScanner.java b/src/main/java/hu/akarnokd/fallout76/EditorIDScanner.java index 3a60312e..0371eb12 100644 --- a/src/main/java/hu/akarnokd/fallout76/EditorIDScanner.java +++ b/src/main/java/hu/akarnokd/fallout76/EditorIDScanner.java @@ -21,8 +21,8 @@ public static void main(String[] args) throws Exception { try (RandomAccessFile raf = new RandomAccessFile(file, "r")) { MappedByteBuffer mbb = raf.getChannel().map(MapMode.READ_ONLY, 0, raf.length()); - - + + while (mbb.remaining() > 0) { if (mbb.get() == 'E') { if (mbb.get() == 'D') { diff --git a/src/main/java/hu/akarnokd/fallout76/EnemyCurveTableListing.java b/src/main/java/hu/akarnokd/fallout76/EnemyCurveTableListing.java index 9424aeca..b88560a0 100644 --- a/src/main/java/hu/akarnokd/fallout76/EnemyCurveTableListing.java +++ b/src/main/java/hu/akarnokd/fallout76/EnemyCurveTableListing.java @@ -10,23 +10,23 @@ public class EnemyCurveTableListing { public static void main(String[] args) throws Exception { String basePath = null; - + for (String s : EsmExport.basePaths) { File f = new File(s + "SeventySix.esm"); if (f.canRead()) { basePath = s; } } - + if (basePath == null) { System.err.println("Game not found"); return; } - + Map curveMap = new HashMap<>(); Map curveMap2 = new HashMap<>(); EsmExport.loadJsonBa2(curveMap, basePath + "SeventySix - Startup.ba2"); - + List selection = new ArrayList<>(); Set variants = new HashSet<>(); for (Ba2FileEntry e : curveMap.values()) { @@ -34,21 +34,21 @@ public static void main(String[] args) throws Exception { selection.add(e); int idx = e.name.toLowerCase().indexOf("armor_"); int jdx = e.name.toLowerCase().lastIndexOf("_"); - + variants.add(e.name.substring(idx + 6, jdx)); curveMap2.put(e.name.substring(idx), e); } } - + selection.sort((a, b) -> a.name.compareTo(b.name)); - + for (Ba2FileEntry e : selection) { int idx = e.name.toLowerCase().indexOf("armor_"); System.out.printf("%s: %n", e.name.substring(idx)); - + JsonElement obj = new JsonParser().parse(new String(e.data, StandardCharsets.ISO_8859_1)); JsonArray arr = obj.getAsJsonObject().get("curve").getAsJsonArray(); - + int[] count = { 0 }; arr.forEach(c -> { double v = c.getAsJsonObject().get("y").getAsDouble(); @@ -60,14 +60,14 @@ public static void main(String[] args) throws Exception { System.out.printf(Locale.US, " %s ~ %s, ", c.getAsJsonObject().get("x").getAsInt(), v); } }); - + System.out.printf("%n"); } - + List variantList = new ArrayList<>(variants); variantList.sort(Comparator.naturalOrder()); System.out.printf("%n%n"); - + String[] postfixes = { "dr", "er", "rad", "fire", "cold", "poison" }; String[] postfixesRename = { "dr", "er", "rr", "fr", "cr", "pr" }; System.out.println("var enemyResistancesMap = {"); @@ -85,28 +85,28 @@ public static void main(String[] args) throws Exception { arrays.put(p, new JsonArray()); } } - + JsonArray def = arrays.get("dr"); - + for (JsonElement o : def) { int x = o.getAsJsonObject().get("x").getAsInt(); - + System.out.printf(" { level: %d", x); - + int k = 0; for (String p : postfixes) { String q = postfixesRename[k]; System.out.printf(", %s: %d", q, find(arrays.get(p), x, 0)); k++; } - + System.out.printf(" }, %n"); } System.out.println(" ],"); } System.out.println("};"); } - + static int find(JsonArray array, int x, int defaultX) { for (JsonElement o : array) { int x0 = o.getAsJsonObject().get("x").getAsInt(); @@ -114,7 +114,7 @@ static int find(JsonArray array, int x, int defaultX) { return o.getAsJsonObject().get("y").getAsInt(); } } - + return defaultX; } } diff --git a/src/main/java/hu/akarnokd/fallout76/EsmExport.java b/src/main/java/hu/akarnokd/fallout76/EsmExport.java index e0d747b9..a1180a81 100644 --- a/src/main/java/hu/akarnokd/fallout76/EsmExport.java +++ b/src/main/java/hu/akarnokd/fallout76/EsmExport.java @@ -35,7 +35,7 @@ private EsmExport() { "c:\\Program Files (x86)\\Bethesda.net Launcher\\games\\Fallout76\\Data\\", "e:\\Games\\Fallout76\\Data\\" }; - + static String basePath; public static void main(String[] args) throws Throwable { @@ -46,12 +46,12 @@ public static void main(String[] args) throws Throwable { basePath = s; } } - + if (basePath == null) { System.err.println("Game not found"); return; } - + Map localization = new HashMap<>(); loadStringsBa2(localization, basePath + "SeventySix - Localization.ba2"); @@ -158,7 +158,7 @@ public static void main(String[] args) throws Throwable { saveGlobs(""); } - + static void saveCurvs(String postfix, Map curveMap) throws IOException { try (PrintWriter pw = new PrintWriter(new FileWriter( basePath + "Dump\\SeventySix_CURVs" + postfix + ".js"))) { @@ -186,7 +186,7 @@ static void saveCurvs(String postfix, Map curveMap) throws pw.println("}"); } } - + static void saveEdids(String postfix, Map descriptionLookup) throws IOException { try (PrintWriter pw = new PrintWriter(new FileWriter( basePath + "Dump\\SeventySix_EDIDs" + postfix + ".js"))) { @@ -212,7 +212,7 @@ static void saveEdids(String postfix, Map descriptionLookup) th pw.println("}"); } } - + static void saveGlobs(String postfix) throws IOException { try (PrintWriter pw = new PrintWriter(new FileWriter( basePath + "Dump\\SeventySix_GLOBs" + postfix + ".js"))) { diff --git a/src/main/java/hu/akarnokd/fallout76/Fallout76EnemyInfo.java b/src/main/java/hu/akarnokd/fallout76/Fallout76EnemyInfo.java index 2a68ff9f..78092c7e 100644 --- a/src/main/java/hu/akarnokd/fallout76/Fallout76EnemyInfo.java +++ b/src/main/java/hu/akarnokd/fallout76/Fallout76EnemyInfo.java @@ -17,43 +17,43 @@ public static void main(String[] args) throws Exception { Ba2File ba2 = new Ba2File(); try (RandomAccessFile raf = new RandomAccessFile(file, "r")) { ba2.read(raf, n -> false); - + Map armorJson = new HashMap<>(); Map healthJson = new HashMap<>(); Map weaponJson = new TreeMap<>(); - + for (Ba2FileEntry entry : ba2.entries) { if (entry.name.endsWith(".json")) { int idx = entry.name.indexOf("health_"); if (idx > 0) { String creature = entry.name.substring(idx + 7); - + creature = creature.substring(0, creature.length() - 5); - + // System.out.println("Health: " + creature); raf.seek(entry.offset); byte[] data = new byte[entry.size]; raf.read(data); - + JsonElement obj = new JsonParser().parse(new String(data, StandardCharsets.ISO_8859_1)); - + healthJson.put(creature, obj); } idx = entry.name.indexOf("armor_"); if (idx > 0) { String creature = entry.name.substring(idx + 6); - + creature = creature.substring(0, creature.length() - 5); - + // System.out.println("Armor: " + creature); - + raf.seek(entry.offset); byte[] data = new byte[entry.size]; raf.read(data); - + JsonElement obj = new JsonParser().parse(new String(data, StandardCharsets.ISO_8859_1)); - + armorJson.put(creature, obj); } idx = entry.name.indexOf("weap_"); @@ -64,13 +64,13 @@ public static void main(String[] args) throws Exception { raf.seek(entry.offset); byte[] data = new byte[entry.size]; raf.read(data); - + JsonElement obj = new JsonParser().parse(new String(data, StandardCharsets.ISO_8859_1)); weaponJson.put(weap, obj); } } } - + Map> creatures = new HashMap<>(); for (Map.Entry entry : healthJson.entrySet()) { @@ -85,56 +85,56 @@ public static void main(String[] args) throws Exception { } Map creature = creatures.computeIfAbsent(entry.getKey(), s -> new TreeMap<>()); - - + + processCurveTable(entry.getValue(), (x, y) -> { HealthArmor level = creature.computeIfAbsent(x, v -> new HealthArmor()); - + level.health = y; }); processCurveTable(drJson, (x, y) -> { HealthArmor level = creature.computeIfAbsent(x, v -> new HealthArmor()); - + level.dr = y; }); processCurveTable(erJson, (x, y) -> { HealthArmor level = creature.computeIfAbsent(x, v -> new HealthArmor()); - + level.er = y; }); processCurveTable(rrJson, (x, y) -> { HealthArmor level = creature.computeIfAbsent(x, v -> new HealthArmor()); - + level.rr = y; }); - + /* System.out.println(name); - + for (Map.Entry e : creature.entrySet()) { HealthArmor ha = e.getValue(); System.out.printf(" %3d: %5d %4d %4d %4d%n", e.getKey(), ha.health, ha.dr, ha.er, ha.rr); } */ - + for (Map.Entry e : creature.entrySet()) { HealthArmor ha = e.getValue(); System.out.printf("%s\t%d\t%d\t%d\t%d\t%d%n", name, e.getKey(), ha.health, ha.dr, ha.er, ha.rr); } } - + Map> weapons = new HashMap<>(); for (Map.Entry entry : weaponJson.entrySet()) { String name = entry.getKey(); - + if (name.startsWith("mod_all_") || name.startsWith("template_")) { continue; } - + Map weapon = weapons.computeIfAbsent(name, s -> new TreeMap<>()); processCurveTable(entry.getValue(), (x, y) -> { @@ -149,15 +149,15 @@ public static void main(String[] args) throws Exception { } } } - + static void processCurveTable(JsonElement file, BiConsumer onEntry) throws Exception { JsonElement curve = file.getAsJsonObject().get("curve"); for (JsonElement he : curve.getAsJsonArray()) { JsonObject obj = he.getAsJsonObject(); onEntry.accept(obj.get("x").getAsInt(), obj.get("y").getAsInt()); - } + } } - + static final class HealthArmor { int health; int dr; diff --git a/src/main/java/hu/akarnokd/fallout76/WeaponCurveTableListing.java b/src/main/java/hu/akarnokd/fallout76/WeaponCurveTableListing.java index 1e73c56f..ccf3c1ee 100644 --- a/src/main/java/hu/akarnokd/fallout76/WeaponCurveTableListing.java +++ b/src/main/java/hu/akarnokd/fallout76/WeaponCurveTableListing.java @@ -10,38 +10,38 @@ public class WeaponCurveTableListing { public static void main(String[] args) throws Exception { String basePath = null; - + for (String s : EsmExport.basePaths) { File f = new File(s + "SeventySix.esm"); if (f.canRead()) { basePath = s; } } - + if (basePath == null) { System.err.println("Game not found"); return; } - + Map curveMap = new HashMap<>(); EsmExport.loadJsonBa2(curveMap, basePath + "SeventySix - Startup.ba2"); - + List selection = new ArrayList<>(); for (Ba2FileEntry e : curveMap.values()) { if (e.name.contains("weap_") && !e.name.contains("_mod_")) { selection.add(e); } } - + selection.sort((a, b) -> a.name.compareTo(b.name)); - + for (Ba2FileEntry e : selection) { JsonElement obj = new JsonParser().parse(new String(e.data, StandardCharsets.ISO_8859_1)); int idx = e.name.indexOf("weap_"); System.out.printf("%s: %n", e.name.substring(idx)); - + JsonArray arr = obj.getAsJsonObject().get("curve").getAsJsonArray(); - + int[] count = { 0 }; arr.forEach(c -> { double v = c.getAsJsonObject().get("y").getAsDouble(); @@ -53,7 +53,7 @@ public static void main(String[] args) throws Exception { System.out.printf(Locale.US, " %s ~ %s, ", c.getAsJsonObject().get("x").getAsInt(), v); } }); - + System.out.printf("%n"); } } diff --git a/src/main/java/hu/akarnokd/linearprogramming/TaskTimeDetect.java b/src/main/java/hu/akarnokd/linearprogramming/TaskTimeDetect.java new file mode 100644 index 00000000..cc30d802 --- /dev/null +++ b/src/main/java/hu/akarnokd/linearprogramming/TaskTimeDetect.java @@ -0,0 +1,87 @@ +package hu.akarnokd.linearprogramming; + +import java.util.*; + +import org.apache.commons.math3.optim.PointValuePair; +import org.apache.commons.math3.optim.linear.*; +import org.apache.commons.math3.optim.nonlinear.scalar.GoalType; + +public final class TaskTimeDetect { + + private TaskTimeDetect() {} + + public static void main(String[] args) { + double[] generatorTimes = { 5, 6, 7, 8 }; + Random rng = new Random(0L); + + double[] times = new double[40]; + int[] types = new int[40]; + double tsum = 0; + int dataLen = times.length; + for (int i = 0; i < dataLen; i++) { + int y = rng.nextInt(generatorTimes.length); + double t = generatorTimes[y]; + tsum += t; + times[i] = tsum; + types[i] = y; + if (i * 2 == dataLen) { + tsum += 0; + } + } + System.out.println("Total time: " + tsum); + + for (int i = 1; i < dataLen; i++) { + double x = rng.nextDouble(); + if (x < 0.2) { + times[i - 1] = times[i] - 1; + if (x < 0.1) { + int t0 = types[i - 1]; + types[i - 1] = types[i]; + types[i] = t0; + } + } + } + + List constraints = new ArrayList<>(); + for (int i = 1; i < dataLen; i++) { + double[] coeffs = new double[generatorTimes.length + 2 * (dataLen - 1)]; + + for (int j = 1; j <= i; j++) { + coeffs[types[j]]++; + } + coeffs[generatorTimes.length + 2 * (i - 1)] = 1; + coeffs[generatorTimes.length + 2 * (i - 1) + 1] = -1; + + double diff = times[i] - times[0]; + + constraints.add(new LinearConstraint(coeffs, Relationship.EQ, diff)); + } + + double[] objCoeffs = new double[generatorTimes.length + 2 * (dataLen - 1)]; + for (int i = generatorTimes.length; i < objCoeffs.length; i++) { + objCoeffs[i] = 1; + } + + LinearObjectiveFunction f = new LinearObjectiveFunction(objCoeffs, 0); + + SimplexSolver solver = new SimplexSolver(); + + PointValuePair result = solver.optimize(f, new LinearConstraintSet(constraints), GoalType.MINIMIZE, new NonNegativeConstraint(true)); + + System.out.printf("%.3f%n", result.getValue()); + double[] res = result.getFirst(); + for (int i = 0; i < res.length; i++) { + if (i < generatorTimes.length) { + System.out.printf("[Task %s] %.3f%n", i, res[i]); + } else { + System.out.printf("[%s] %.3f%n", i, res[i]); + } + } + + tsum = 0; + for (int i = 0; i < dataLen; i++) { + tsum += res[types[i]]; + } + System.out.println("Restored total length: " + tsum); + } +} diff --git a/src/main/java/hu/akarnokd/math/NumberFrom1to10NoConcat.java b/src/main/java/hu/akarnokd/math/NumberFrom1to10NoConcat.java index 65efb0f7..ce404fb2 100644 --- a/src/main/java/hu/akarnokd/math/NumberFrom1to10NoConcat.java +++ b/src/main/java/hu/akarnokd/math/NumberFrom1to10NoConcat.java @@ -21,7 +21,7 @@ static boolean validParent(StringBuilder s) { } } for (int i = 0; i < s.length() - 2; i++) { - if (s.charAt(i) == '(' + if (s.charAt(i) == '(' && Character.isDigit(s.charAt(i + 1)) && s.charAt(i + 2) == ')') { return false; @@ -33,7 +33,7 @@ static boolean validParent(StringBuilder s) { } return true; } - + static long ipow(int base, int exp) { long result = 1; for (int i = 0; i < exp; i++) { @@ -41,15 +41,15 @@ static long ipow(int base, int exp) { } return result; } - + static final class MultiIndex { - + final int[] indices; - + final int[] limits; long counter; - + MultiIndex(int numIndices) { this.indices = new int[numIndices]; this.limits = new int[numIndices]; @@ -74,7 +74,7 @@ boolean next() { } static final int report = 10_000_000; - + static String findExpression(Map map, boolean noDivide, int maxParen, boolean noConcat) throws Exception { List first = new ArrayList<>(Arrays.asList( "" @@ -142,7 +142,7 @@ static String findExpression(Map map, boolean noDivide, int max between.removeIf(v -> v.contains("/")); beforeLast.removeIf(v -> v.contains("/")); } - + String maxParenStart = Ix.repeatValue("(").take(maxParen + 1).join("").first(); String maxParenEnd = Ix.repeatValue(")").take(maxParen + 1).join("").first(); @@ -156,7 +156,7 @@ static String findExpression(Map map, boolean noDivide, int max between.removeIf(String::isEmpty); beforeLast.removeIf(String::isEmpty); } - + long all = first.size() * ipow(between.size(), 7) * second.size() * beforeLast.size(); System.out.printf("%,d%n", all); @@ -182,18 +182,18 @@ static String findExpression(Map map, boolean noDivide, int max b.append(between.get(indices[i])); b.append((char)('0' + (i + 1))); } - + b.append(beforeLast.get(indices[9])); b.append('9'); - + if (validParent(b)) { String expr = b.toString(); double result; - + try { result = new ExpressionBuilder(expr) .build().evaluate(); - + valid++; } catch (ArithmeticException ignored) { invalid++; @@ -212,7 +212,7 @@ static String findExpression(Map map, boolean noDivide, int max invalid++; } if (mi.counter % report == 0) { - System.out.printf("Total: %,d (%.6f%%), Valid: %,d (%.6f%%), Invalid: %,d, Found: %,d%n", + System.out.printf("Total: %,d (%.6f%%), Valid: %,d (%.6f%%), Invalid: %,d, Found: %,d%n", mi.counter + 1, ((mi.counter + 1) * 100d) / all, valid, (valid * 100d / (mi.counter + 1)), @@ -228,7 +228,7 @@ public static void main(String[] args) throws Exception { Map map = new HashMap<>(); findExpression(map, true, 1, true); - + System.out.print("Numbers found: " + map.size()); for (int i = 1; i < 11112; i++) { if (!map.containsKey(i)) { diff --git a/src/main/java/hu/akarnokd/math/NumberFrom1to9.java b/src/main/java/hu/akarnokd/math/NumberFrom1to9.java index ac43763e..539e7537 100644 --- a/src/main/java/hu/akarnokd/math/NumberFrom1to9.java +++ b/src/main/java/hu/akarnokd/math/NumberFrom1to9.java @@ -21,7 +21,7 @@ static boolean validParent(StringBuilder s) { } } for (int i = 0; i < s.length() - 2; i++) { - if (s.charAt(i) == '(' + if (s.charAt(i) == '(' && Character.isDigit(s.charAt(i + 1)) && s.charAt(i + 2) == ')') { return false; @@ -33,7 +33,7 @@ static boolean validParent(StringBuilder s) { } return true; } - + static long ipow(int base, int exp) { long result = 1; for (int i = 0; i < exp; i++) { @@ -41,15 +41,15 @@ static long ipow(int base, int exp) { } return result; } - + static final class MultiIndex { - + final int[] indices; - + final int[] limits; long counter; - + MultiIndex(int numIndices) { this.indices = new int[numIndices]; this.limits = new int[numIndices]; @@ -74,7 +74,7 @@ boolean next() { } static final int report = 10_000_000; - + static String findExpression(int expected, boolean noDivide, int maxParen) throws Exception { List first = new ArrayList<>(Arrays.asList( "" @@ -142,7 +142,7 @@ static String findExpression(int expected, boolean noDivide, int maxParen) throw between.removeIf(v -> v.contains("/")); beforeLast.removeIf(v -> v.contains("/")); } - + String maxParenStart = Ix.repeatValue("(").take(maxParen + 1).join("").first(); String maxParenEnd = Ix.repeatValue(")").take(maxParen + 1).join("").first(); @@ -176,18 +176,18 @@ static String findExpression(int expected, boolean noDivide, int maxParen) throw b.append((char)('0' + i)); b.append(between.get(indices[i])); } - + b.append(beforeLast.get(indices[9])); b.append('9'); - + if (validParent(b)) { String expr = b.toString(); double result; - + try { result = new ExpressionBuilder(expr) .build().evaluate(); - + valid++; } catch (ArithmeticException ignored) { invalid++; @@ -198,7 +198,7 @@ static String findExpression(int expected, boolean noDivide, int maxParen) throw System.out.println("Found: " + expr); System.out.printf("Tried: %,d%n", (mi.counter + 1)); System.out.printf("Invalid: %,d%n", invalid); - System.out.printf("Total: %,d (%.6f%%), Valid: %,d (%.6f%%), Invalid: %,d%n", + System.out.printf("Total: %,d (%.6f%%), Valid: %,d (%.6f%%), Invalid: %,d%n", mi.counter + 1, ((mi.counter + 1) * 100d) / all, valid, (valid * 100d / (mi.counter + 1)), @@ -211,7 +211,7 @@ static String findExpression(int expected, boolean noDivide, int maxParen) throw invalid++; } if (mi.counter % report == 0) { - System.out.printf("Total: %,d (%.6f%%), Valid: %,d (%.6f%%), Invalid: %,d%n", + System.out.printf("Total: %,d (%.6f%%), Valid: %,d (%.6f%%), Invalid: %,d%n", mi.counter + 1, ((mi.counter + 1) * 100d) / all, valid, (valid * 100d / (mi.counter + 1)), diff --git a/src/main/java/hu/akarnokd/misc/Bug20216.java b/src/main/java/hu/akarnokd/misc/Bug20216.java index ca7a4017..079e31f8 100644 --- a/src/main/java/hu/akarnokd/misc/Bug20216.java +++ b/src/main/java/hu/akarnokd/misc/Bug20216.java @@ -5,12 +5,14 @@ public class Bug20216 { static Consumer compileError() { return v -> { + /* class Z implements Consumer { @Override public void accept(T t) { - + } } + */ }; } } diff --git a/src/main/java/hu/akarnokd/misc/DigitSwapper.java b/src/main/java/hu/akarnokd/misc/DigitSwapper.java index e6108e00..0e183e75 100644 --- a/src/main/java/hu/akarnokd/misc/DigitSwapper.java +++ b/src/main/java/hu/akarnokd/misc/DigitSwapper.java @@ -6,7 +6,7 @@ public class DigitSwapper { public static void main(String[] args) { List results = new ArrayList<>(); - + for (long j = 11; j < 16_000_000_000L; j++) { long lastDigit = j % 10; long shiftedValue = j / 10; @@ -18,7 +18,7 @@ public static void main(String[] args) { lastDigit *= 10; long newValue = lastDigit + shiftedValue; - + if (j * 2 == newValue) { System.out.println(j); results.add(j); diff --git a/src/main/java/hu/akarnokd/misc/InferenceError.java b/src/main/java/hu/akarnokd/misc/InferenceError.java index d152eb92..32eab946 100644 --- a/src/main/java/hu/akarnokd/misc/InferenceError.java +++ b/src/main/java/hu/akarnokd/misc/InferenceError.java @@ -13,9 +13,12 @@ public > E method(E e) { } static void n() { + /* InferenceError p = new InferenceError<>(); java.util.List list = new java.util.ArrayList<>(); //p.method(new Klass<>(list::add)); + * + */ } } diff --git a/src/main/java/hu/akarnokd/misc/Recolor.java b/src/main/java/hu/akarnokd/misc/Recolor.java index e41ccb38..c5fbe331 100644 --- a/src/main/java/hu/akarnokd/misc/Recolor.java +++ b/src/main/java/hu/akarnokd/misc/Recolor.java @@ -10,7 +10,7 @@ public class Recolor { public static void main(String[] args) throws IOException { File f = new File("c:\\Users\\akarnokd\\git\\digiprime-pcp-webservice\\src\\main\\webapp\\bar-chart-h.png "); BufferedImage img = ImageIO.read(f); - + for (int y = 0; y < img.getHeight(); y++) { for (int x = 0; x < img.getWidth(); x++) { int color = img.getRGB(x, y); @@ -18,7 +18,7 @@ public static void main(String[] args) throws IOException { img.setRGB(x, y, newColor); } } - + ImageIO.write(img, "png", f); } } diff --git a/src/main/java/hu/akarnokd/misc/Rotator.java b/src/main/java/hu/akarnokd/misc/Rotator.java index e1937548..4bfdf4a0 100644 --- a/src/main/java/hu/akarnokd/misc/Rotator.java +++ b/src/main/java/hu/akarnokd/misc/Rotator.java @@ -6,20 +6,20 @@ public class Rotator { static final int RIGHT = 1; static final int DOWN = 2; static final int LEFT = 3; - + static int state(int q1, int q2, int q3, int q4) { - return (q1 << 6) | (q2 << 4) | (q3 << 2) | q4; + return (q1 << 6) | (q2 << 4) | (q3 << 2) | q4; } static boolean isDone(int state) { return state == 0; } - + static int apply(int state, int rotator) { int q1 = state >> 6; int q2 = (state >> 4) & 3; int q3 = (state >> 2) & 3; int q4 = (state) & 3; - + switch (rotator) { case 0: q1 = (q1 + 1) & 3; @@ -39,7 +39,7 @@ static int apply(int state, int rotator) { } return state(q1, q2, q3, q4); } - + public static void main(String[] args) { int initial = state(UP, DOWN, UP, UP); for (int i = 0; i <= Integer.MAX_VALUE; i++) { @@ -49,16 +49,16 @@ public static void main(String[] args) { int s = initial; for (int j = 0; j < 32; j += 2) { int m = (i >> j) & 3; - + s = apply(s, m); - + if (isDone(s)) { for (int k = 0; k <= j; k++) { System.out.println((i >> k) & 3); } return; } - + } } System.out.println("Not found!"); diff --git a/src/main/java/hu/akarnokd/reactive/observables/IObservable.java b/src/main/java/hu/akarnokd/reactive/observables/IObservable.java index 84c94e6c..175b508c 100644 --- a/src/main/java/hu/akarnokd/reactive/observables/IObservable.java +++ b/src/main/java/hu/akarnokd/reactive/observables/IObservable.java @@ -13,7 +13,7 @@ public interface IObservable { void subscribe(IObserver observer); - + static IObservable just(T element) { return o -> { BooleanDisposable d = new BooleanDisposable(); @@ -45,64 +45,71 @@ static IObservable characters(CharSequence cs) { @SafeVarargs static IObservable concatArray(IObservable... sources) { - return o -> { - class ConcatObserver implements IObserver, IDisposable { + class ConcatObserver implements IObserver, IDisposable { - IDisposable d; - - boolean disposed; - - int wip; - - int index; - - @Override - public void dispose() { - disposed = true; + final IObserver o; + + ConcatObserver(IObserver o) { + this.o = o; + } + + IDisposable d; + + boolean disposed; + + int wip; + + int index; + + @Override + public void dispose() { + disposed = true; + d.dispose(); + } + + @Override + public void onSubscribe(IDisposable d) { + if (disposed) { d.dispose(); + } else { + this.d = d; } + } - @Override - public void onSubscribe(IDisposable d) { - if (disposed) { - d.dispose(); - } else { - this.d = d; - } - } + @Override + public void onNext(T element) { + o.onNext(element); + } - @Override - public void onNext(T element) { - o.onNext(element); - } + @Override + public void onError(Throwable cause) { + o.onError(cause); + } - @Override - public void onError(Throwable cause) { - o.onError(cause); - } + @Override + public void onComplete() { + if (wip++ == 0) { + do { + if (disposed) { + return; + } - @Override - public void onComplete() { - if (wip++ == 0) { - do { - if (disposed) { - return; - } - - if (index == sources.length) { - o.onComplete(); - return; - } - - sources[index++].subscribe(this); - } while (--wip != 0); - } + if (index == sources.length) { + o.onComplete(); + return; + } + + sources[index++].subscribe(this); + } while (--wip != 0); } - } - - ConcatObserver obs = new ConcatObserver(); - + + } + + return o -> { + + ConcatObserver obs = new ConcatObserver(o); + o.onSubscribe(obs); obs.onComplete(); }; @@ -123,11 +130,11 @@ static IObservable fromIterable(Iterable source) { } }; } - + default IObservable collect(Callable collectionSupplier, BiConsumer collector) { return o -> { C collection; - + try { collection = collectionSupplier.call(); } catch (Throwable ex) { @@ -136,7 +143,7 @@ default IObservable collect(Callable collectionSupplier, BiConsumer, IDisposable { IDisposable d; @@ -177,18 +184,18 @@ public void onComplete() { o.onComplete(); } } - + } - + subscribe(new Collector()); }; } - + default IObservable flatMapIterable(Function> mapper) { return o -> { class FlatMapper implements IObserver, IDisposable { IDisposable d; - + boolean disposed; @Override @@ -206,7 +213,7 @@ public void onSubscribe(IDisposable d) { @Override public void onNext(T element) { Iterator it; - + try { it = mapper.apply(element).iterator(); } catch (Throwable ex) { @@ -214,7 +221,7 @@ public void onNext(T element) { o.onError(ex); return; } - + while (it.hasNext()) { if (disposed) { break; @@ -241,7 +248,7 @@ default IObservable map(Function mapper) { return o -> { class Mapper implements IObserver, IDisposable { IDisposable d; - + @Override public void dispose() { d.dispose(); @@ -256,7 +263,7 @@ public void onSubscribe(IDisposable d) { @Override public void onNext(T element) { R v; - + try { v = mapper.apply(element); } catch (Throwable ex) { @@ -264,7 +271,7 @@ public void onNext(T element) { o.onError(ex); return; } - + o.onNext(v); } @@ -286,7 +293,7 @@ default IObservable filter(Predicate predicate) { return o -> { class Filterer implements IObserver, IDisposable { IDisposable d; - + @Override public void dispose() { d.dispose(); @@ -301,7 +308,7 @@ public void onSubscribe(IDisposable d) { @Override public void onNext(T element) { boolean v; - + try { v = predicate.test(element); } catch (Throwable ex) { @@ -309,7 +316,7 @@ public void onNext(T element) { o.onError(ex); return; } - + if (v) { o.onNext(element); } @@ -334,10 +341,10 @@ default IObservable sumInt() { return o -> { class SumInt implements IObserver, IDisposable { IDisposable d; - + int sum; boolean hasValue; - + @Override public void dispose() { d.dispose(); @@ -379,10 +386,10 @@ default IObservable sumLong() { return o -> { class SumLong implements IObserver, IDisposable { IDisposable d; - + long sum; boolean hasValue; - + @Override public void dispose() { d.dispose(); @@ -424,10 +431,10 @@ default IObservable maxInt() { return o -> { class MaxInt implements IObserver, IDisposable { IDisposable d; - + int max; boolean hasValue; - + @Override public void dispose() { d.dispose(); @@ -470,13 +477,13 @@ default IObservable take(long n) { return o -> { class Take implements IObserver, IDisposable { IDisposable d; - + long remaining; - + Take(long n) { this.remaining = n; } - + @Override public void dispose() { d.dispose(); @@ -526,9 +533,9 @@ default IObservable skip(long n) { return o -> { class Skip implements IObserver, IDisposable { IDisposable d; - + long remaining; - + Skip(long n) { this.remaining = n; } @@ -575,7 +582,7 @@ class First implements IObserver { Throwable error; IDisposable d; - + @Override public void onSubscribe(IDisposable d) { this.d = d; @@ -596,7 +603,7 @@ public void onError(Throwable cause) { public void onComplete() { } } - + First f = new First(); subscribe(f); if (f.error != null) { @@ -632,7 +639,7 @@ public void onError(Throwable cause) { public void onComplete() { } } - + Last f = new Last(); subscribe(f); if (f.error != null) { diff --git a/src/main/java/hu/akarnokd/reactive/observables/IObserver.java b/src/main/java/hu/akarnokd/reactive/observables/IObserver.java index 6f25f36b..226c6fae 100644 --- a/src/main/java/hu/akarnokd/reactive/observables/IObserver.java +++ b/src/main/java/hu/akarnokd/reactive/observables/IObserver.java @@ -3,10 +3,10 @@ public interface IObserver { void onSubscribe(IDisposable d); - + void onNext(T element); - + void onError(Throwable cause); - + void onComplete(); } diff --git a/src/main/java/hu/akarnokd/rxjava/ActionInBetween.java b/src/main/java/hu/akarnokd/rxjava/ActionInBetween.java index 2f184ac4..45e3061e 100644 --- a/src/main/java/hu/akarnokd/rxjava/ActionInBetween.java +++ b/src/main/java/hu/akarnokd/rxjava/ActionInBetween.java @@ -9,17 +9,17 @@ public class ActionInBetween { public static void main(String[] args) throws Exception { PublishSubject ps = PublishSubject.create(); - - ps.publish(o -> + + ps.publish(o -> o.mergeWith( - o.switchMap(e -> + o.switchMap(e -> Observable.just(1).delay(200, TimeUnit.MILLISECONDS) .ignoreElements() .doOnCompleted(() -> System.out.println("Timeout action: " + e)) ) ) ).subscribe(System.out::println); - + ps.onNext(1); ps.onNext(2); diff --git a/src/main/java/hu/akarnokd/rxjava/MethodDiff.java b/src/main/java/hu/akarnokd/rxjava/MethodDiff.java index 83a6e870..2af4df31 100644 --- a/src/main/java/hu/akarnokd/rxjava/MethodDiff.java +++ b/src/main/java/hu/akarnokd/rxjava/MethodDiff.java @@ -74,10 +74,10 @@ public static void main(String[] args) { for (String e : methods) { - Integer old = rx1.get(e); - Integer overloads = rx2.get(e); + Integer old = rx1.getOrDefault(e, -1); + Integer overloads = rx2.getOrDefault(e, -1); - if (overloads == null) { + if (overloads == -1) { System.out.print(e); System.out.print("("); System.out.print(old); diff --git a/src/main/java/hu/akarnokd/rxjava/SingleAsync.java b/src/main/java/hu/akarnokd/rxjava/SingleAsync.java index 703ffed6..ef9a002d 100644 --- a/src/main/java/hu/akarnokd/rxjava/SingleAsync.java +++ b/src/main/java/hu/akarnokd/rxjava/SingleAsync.java @@ -20,7 +20,7 @@ public static void main(String[] args) throws Exception { System.out.println("caught error " + e.getMessage()); e.printStackTrace(); }); - + Thread.sleep(2000); } } diff --git a/src/main/java/hu/akarnokd/rxjava/javadoc/AddCanonical.java b/src/main/java/hu/akarnokd/rxjava/javadoc/AddCanonical.java index c24c2201..68461e21 100644 --- a/src/main/java/hu/akarnokd/rxjava/javadoc/AddCanonical.java +++ b/src/main/java/hu/akarnokd/rxjava/javadoc/AddCanonical.java @@ -2,12 +2,11 @@ import java.io.*; import java.net.URL; +import java.nio.charset.StandardCharsets; import java.nio.file.*; import java.nio.file.attribute.BasicFileAttributes; import java.util.*; -import com.google.api.client.util.Charsets; - /** * Add "link rel='canonical' to the javadoc htmls of RxJava 1" */ @@ -15,205 +14,205 @@ public final class AddCanonical { private AddCanonical() { } - static final Map canonicals = new HashMap<>(); + static final Map canonicals = new HashMap<>(); static void init() { // ---------------------------------------------------------------------------------- Map canonicals = new HashMap<>(); - canonicals.put("/rx/Observable.html", + canonicals.put("/rx/Observable.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/core/Flowable.html"); - canonicals.put("/rx/Observable.OnSubscribe.html", + canonicals.put("/rx/Observable.OnSubscribe.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/core/FlowableOnSubscribe.html"); - canonicals.put("/rx/Observable.Operator.html", + canonicals.put("/rx/Observable.Operator.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/core/FlowableOperator.html"); - canonicals.put("/rx/Observable.Transformer.html", + canonicals.put("/rx/Observable.Transformer.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/core/FlowableTransformer.html"); - canonicals.put("/rx/Subscriber.html", + canonicals.put("/rx/Subscriber.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/core/FlowableSubscriber.html"); - canonicals.put("/rx/Emitter.html", + canonicals.put("/rx/Emitter.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/core/FlowableEmitter.html"); // ---------------------------------------------------------------------------------- - canonicals.put("/rx/Observer.html", + canonicals.put("/rx/Observer.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/core/Observer.html"); - canonicals.put("/rx/Subscription.html", + canonicals.put("/rx/Subscription.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/disposables/Disposable.html"); - canonicals.put("/rx/Notification.html", + canonicals.put("/rx/Notification.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/core/Notification.html"); - canonicals.put("/rx/Scheduler.html", + canonicals.put("/rx/Scheduler.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/core/Scheduler.html"); - canonicals.put("/rx/Scheduler.Worker.html", + canonicals.put("/rx/Scheduler.Worker.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/core/Scheduler.Worker.html"); - canonicals.put("/rx/scheduler/Schedulers.html", + canonicals.put("/rx/scheduler/Schedulers.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/schedulers/Schedulers.html"); - canonicals.put("/rx/scheduler/TestScheduler.html", + canonicals.put("/rx/scheduler/TestScheduler.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/schedulers/TestScheduler.html"); - canonicals.put("/rx/scheduler/TimeInterval.html", + canonicals.put("/rx/scheduler/TimeInterval.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/schedulers/Timed.html"); - canonicals.put("/rx/scheduler/Timestamped.html", + canonicals.put("/rx/scheduler/Timestamped.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/schedulers/Timed.html"); - canonicals.put("/rx/scheduler/TrampolineScheduler.html", + canonicals.put("/rx/scheduler/TrampolineScheduler.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/schedulers/Schedulers.html#trampoline%28%29"); - canonicals.put("/rx/plugins/RxJavaPlugins.html", + canonicals.put("/rx/plugins/RxJavaPlugins.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/plugins/RxJavaPlugins.html"); - canonicals.put("/rx/plugins/RxJavaHooks.html", + canonicals.put("/rx/plugins/RxJavaHooks.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/plugins/RxJavaPlugins.html"); - canonicals.put("/rx/plugins/RxJavaCompletableExecutionHook.html", + canonicals.put("/rx/plugins/RxJavaCompletableExecutionHook.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/plugins/RxJavaPlugins.html"); - canonicals.put("/rx/plugins/RxJavaSingleExecutionHook.html", + canonicals.put("/rx/plugins/RxJavaSingleExecutionHook.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/plugins/RxJavaPlugins.html"); - canonicals.put("/rx/plugins/RxJavaObservableExecutionHook.html", + canonicals.put("/rx/plugins/RxJavaObservableExecutionHook.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/plugins/RxJavaPlugins.html"); - canonicals.put("/rx/plugins/RxJavaSchedulersHook.html", + canonicals.put("/rx/plugins/RxJavaSchedulersHook.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/plugins/RxJavaPlugins.html"); - canonicals.put("/rx/BackpressureOverflow.html", + canonicals.put("/rx/BackpressureOverflow.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/core/BackpressureOverflowStrategy.html"); - canonicals.put("/rx/BackpressureOverflow.Strategy.html", + canonicals.put("/rx/BackpressureOverflow.Strategy.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/core/BackpressureOverflowStrategy.html"); - canonicals.put("/rx/Emitter.BackpressureMode.html", + canonicals.put("/rx/Emitter.BackpressureMode.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/core/BackpressureStrategy.html"); - canonicals.put("/rx/Producer.html", + canonicals.put("/rx/Producer.html", "http://www.reactive-streams.org/reactive-streams-1.0.0-javadoc/org/reactivestreams/Subscription.html"); - canonicals.put("/rx/annotations/Beta.html", + canonicals.put("/rx/annotations/Beta.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/annotations/Beta.html"); - canonicals.put("/rx/annotations/Experimental.html", + canonicals.put("/rx/annotations/Experimental.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/annotations/Experimental.html"); - canonicals.put("/rx/exceptions/Exceptions.html", + canonicals.put("/rx/exceptions/Exceptions.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/exceptions/Exceptions.html"); - canonicals.put("/rx/exceptions/CompositeException.html", + canonicals.put("/rx/exceptions/CompositeException.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/exceptions/CompositeException.html"); - canonicals.put("/rx/exceptions/MissingBackpressureException.html", + canonicals.put("/rx/exceptions/MissingBackpressureException.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/exceptions/MissingBackpressureException.html"); - canonicals.put("/rx/exceptions/OnErrorNotImplementedException.html", + canonicals.put("/rx/exceptions/OnErrorNotImplementedException.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/exceptions/OnErrorNotImplementedException.html"); - canonicals.put("/rx/functions/Action0.html", + canonicals.put("/rx/functions/Action0.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/functions/Action.html"); - canonicals.put("/rx/functions/Action1.html", + canonicals.put("/rx/functions/Action1.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/functions/Consumer.html"); - canonicals.put("/rx/functions/Action2.html", + canonicals.put("/rx/functions/Action2.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/functions/BiConsumer.html"); - canonicals.put("/rx/functions/ActionN.html", + canonicals.put("/rx/functions/ActionN.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/functions/Consumer.html"); - canonicals.put("/rx/functions/Cancellable.html", + canonicals.put("/rx/functions/Cancellable.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/functions/Cancellable.html"); - canonicals.put("/rx/functions/Func0.html", + canonicals.put("/rx/functions/Func0.html", "https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html"); - canonicals.put("/rx/functions/Func1.html", + canonicals.put("/rx/functions/Func1.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/functions/Function.html"); - canonicals.put("/rx/functions/Func2.html", + canonicals.put("/rx/functions/Func2.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/functions/BiFunction.html"); - canonicals.put("/rx/functions/Func3.html", + canonicals.put("/rx/functions/Func3.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/functions/Function3.html"); - canonicals.put("/rx/functions/Func4.html", + canonicals.put("/rx/functions/Func4.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/functions/Function4.html"); - canonicals.put("/rx/functions/Func5.html", + canonicals.put("/rx/functions/Func5.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/functions/Function5.html"); - canonicals.put("/rx/functions/Func6.html", + canonicals.put("/rx/functions/Func6.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/functions/Function6.html"); - canonicals.put("/rx/functions/Func7.html", + canonicals.put("/rx/functions/Func7.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/functions/Function7.html"); - canonicals.put("/rx/functions/Func8.html", + canonicals.put("/rx/functions/Func8.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/functions/Function8.html"); - canonicals.put("/rx/functions/Func9.html", + canonicals.put("/rx/functions/Func9.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/functions/Function9.html"); - canonicals.put("/rx/functions/FuncN.html", + canonicals.put("/rx/functions/FuncN.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/functions/Function.html"); - canonicals.put("/rx/observables/ConnectableObservable.html", + canonicals.put("/rx/observables/ConnectableObservable.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/flowables/ConnectableFlowable.html"); - canonicals.put("/rx/observables/GroupedObservable.html", + canonicals.put("/rx/observables/GroupedObservable.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/flowables/GroupedFlowable.html"); - canonicals.put("/rx/observables/BlockingObservable.html", + canonicals.put("/rx/observables/BlockingObservable.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/core/Flowable.html#blockingIterable%28%29"); - canonicals.put("/rx/observables/SyncOnSubscribe.html", + canonicals.put("/rx/observables/SyncOnSubscribe.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/core/FlowableEmitter.html"); - canonicals.put("/rx/observers/TestObserver.html", + canonicals.put("/rx/observers/TestObserver.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/observers/TestObserver.html"); - canonicals.put("/rx/observers/TestSubscriber.html", + canonicals.put("/rx/observers/TestSubscriber.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/subscribers/TestSubscriber.html"); - canonicals.put("/rx/observers/AsyncCompletableSubscriber.html", + canonicals.put("/rx/observers/AsyncCompletableSubscriber.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/observers/DisposableCompletableObserver.html"); - canonicals.put("/rx/observers/SafeSubscriber.html", + canonicals.put("/rx/observers/SafeSubscriber.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/subscribers/SafeSubscriber.html"); - canonicals.put("/rx/observers/SerializedObserver.html", + canonicals.put("/rx/observers/SerializedObserver.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/observers/SerializedObserver.html"); - canonicals.put("/rx/observers/SerializedSubscriber.html", + canonicals.put("/rx/observers/SerializedSubscriber.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/subscribers/SerializedSubscriber.html"); - canonicals.put("/rx/subjects/AsyncSubject.html", + canonicals.put("/rx/subjects/AsyncSubject.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/processors/AsyncProcessor.html"); - canonicals.put("/rx/subjects/PublishSubject.html", + canonicals.put("/rx/subjects/PublishSubject.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/processors/PublishProcessor.html"); - canonicals.put("/rx/subjects/ReplaySubject.html", + canonicals.put("/rx/subjects/ReplaySubject.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/processors/ReplayProcessor.html"); - canonicals.put("/rx/subjects/BehaviorSubject.html", + canonicals.put("/rx/subjects/BehaviorSubject.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/processors/BehaviorProcessor.html"); - canonicals.put("/rx/subjects/UnicastSubject.html", + canonicals.put("/rx/subjects/UnicastSubject.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/processors/UnicastProcessor.html"); - canonicals.put("/rx/subjects/SerializedSubject.html", + canonicals.put("/rx/subjects/SerializedSubject.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/processors/FlowableProcessor.html#toSerialized%28%29"); - canonicals.put("/rx/subscriptions/BooleanSubscription.html", + canonicals.put("/rx/subscriptions/BooleanSubscription.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/disposables/Disposable.html#empty%28%29"); - canonicals.put("/rx/subscriptions/CompositeSubscription.html", + canonicals.put("/rx/subscriptions/CompositeSubscription.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/disposables/CompositeDisposable.html"); - canonicals.put("/rx/subscriptions/MultipleAssignmentSubscription.html", + canonicals.put("/rx/subscriptions/MultipleAssignmentSubscription.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/disposables/SerialDisposable.html"); - canonicals.put("/rx/subscriptions/SingleAssignmentSubscription.html", + canonicals.put("/rx/subscriptions/SingleAssignmentSubscription.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/disposables/SerialDisposable.html"); - canonicals.put("/rx/subscriptions/RefCountSubscription.html", + canonicals.put("/rx/subscriptions/RefCountSubscription.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/disposables/SerialDisposable.html"); - canonicals.put("/rx/subscriptions/Subscriptions.html", + canonicals.put("/rx/subscriptions/Subscriptions.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/disposables/Disposable.html"); // ---------------------------------------------------------------------------------- - - canonicals.put("/rx/Single.html", + + canonicals.put("/rx/Single.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/core/Single.html"); - canonicals.put("/rx/Single.OnSubscribe.html", + canonicals.put("/rx/Single.OnSubscribe.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/core/SingleOnSubscribe.html"); - canonicals.put("/rx/Single.Operator.html", + canonicals.put("/rx/Single.Operator.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/core/SingleOperator.html"); - canonicals.put("/rx/Single.Transformer.html", + canonicals.put("/rx/Single.Transformer.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/core/SingleTransformer.html"); - canonicals.put("/rx/SingleEmitter.html", + canonicals.put("/rx/SingleEmitter.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/core/SingleEmitter.html"); - canonicals.put("/rx/SingleSubscriber.html", + canonicals.put("/rx/SingleSubscriber.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/core/SingleObserver.html"); - canonicals.put("/rx/singles/BlockingSingle.html", + canonicals.put("/rx/singles/BlockingSingle.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/core/Single.html#blockingGet%28%29"); // ---------------------------------------------------------------------------------- - canonicals.put("/rx/Completable.html", + canonicals.put("/rx/Completable.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/core/Completable.html"); - canonicals.put("/rx/Completable.OnSubscribe.html", + canonicals.put("/rx/Completable.OnSubscribe.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/core/CompletableOnSubscribe.html"); - canonicals.put("/rx/Completable.Operator.html", + canonicals.put("/rx/Completable.Operator.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/core/CompletableOperator.html"); - canonicals.put("/rx/Completable.Transformer.html", + canonicals.put("/rx/Completable.Transformer.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/core/CompletableTransformer.html"); - canonicals.put("/rx/CompletableEmitter.html", + canonicals.put("/rx/CompletableEmitter.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/core/CompletableEmitter.html"); - canonicals.put("/rx/CompletableSubscriber.html", + canonicals.put("/rx/CompletableSubscriber.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/core/CompletableObserver.html"); // ---------------------------------------------------------------------------------- - + int failed = 0; for (String urls : canonicals.values()) { System.out.print("Checking: " + urls); @@ -227,7 +226,7 @@ static void init() { failed++; } } - + if (failed != 0) { throw new RuntimeException("Some url's don't connect!: " + failed); } @@ -238,12 +237,12 @@ static void init() { static void init2x() { Map canonicals = new HashMap<>(); // ---------------------------------------------------------------------------------- - - canonicals.put("/io/reactivex/disposables/Disposables.html", + + canonicals.put("/io/reactivex/disposables/Disposables.html", "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/disposables/Disposable.html"); // ---------------------------------------------------------------------------------- - + int failed = 0; for (String urls : canonicals.values()) { System.out.print("Checking: " + urls); @@ -257,7 +256,7 @@ static void init2x() { failed++; } } - + if (failed != 0) { throw new RuntimeException("Some url's don't connect!: " + failed); } @@ -266,7 +265,7 @@ static void init2x() { static Set reachable = new HashSet<>(); static Set unreachable = new HashSet<>(); - + static boolean checkAndCacheURL(String url) { if (reachable.contains(url)) { return true; @@ -297,7 +296,7 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IO if (name.endsWith(".html")) { int idx = name.indexOf(prefix); String relevantPart = name.substring(idx); - + String canonical = canonicals.get(relevantPart); if (canonical != null) { @@ -310,9 +309,9 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IO }); } - static byte[] alreadyThere = "?!%n", file); } else { System.out.printf("Adding link %s to file %s.%n", url, file); - byte[] toInsert = ("").getBytes(Charsets.ISO_8859_1); - + byte[] toInsert = ("").getBytes(StandardCharsets.ISO_8859_1); + byte[] newData = new byte[data.length + toInsert.length]; System.arraycopy(data, 0, newData, 0, endHeadIndex); System.arraycopy(toInsert, 0, newData, endHeadIndex, toInsert.length); @@ -339,7 +338,7 @@ static void appendLink(Path file, String url) throws IOException { Files.write(file, newData); } } - + static int arrayIndexOf(byte[] source, byte[] toFind, int start) { outer: for (int i = start; i < source.length - toFind.length; i++) { @@ -364,11 +363,11 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IO if (name.endsWith(".html")) { int idx = name.indexOf("/io/reactivex/"); String relevantPart = name.substring(idx); - + String canonical = canonicals.get(relevantPart); if (canonical == null) { relevantPart = name.substring(idx + 14); - + if (relevantPart.contains("/")) { canonical = "http://reactivex.io/RxJava/3.x/javadoc/io/reactivex/rxjava3/" + relevantPart; } else { diff --git a/src/main/java/hu/akarnokd/rxjava2/BufferSkipAsync.java b/src/main/java/hu/akarnokd/rxjava2/BufferSkipAsync.java index da63fb85..2739b8fc 100644 --- a/src/main/java/hu/akarnokd/rxjava2/BufferSkipAsync.java +++ b/src/main/java/hu/akarnokd/rxjava2/BufferSkipAsync.java @@ -7,18 +7,18 @@ public class BufferSkipAsync { public static void main(String[] args) { - + Subject rp = PublishSubject.create().toSerialized(); Observable share = rp.share(); int numPrevious = 2; - + share.buffer(numPrevious, 1) .filter(b -> b.size() < numPrevious || b.get(numPrevious - 1) >= 3) .map(v -> v.get(0)) .subscribe(System.out::println); - + Ix.range(1, 10).foreach(rp::onNext); rp.onComplete(); } diff --git a/src/main/java/hu/akarnokd/rxjava2/Cartesian.java b/src/main/java/hu/akarnokd/rxjava2/Cartesian.java index 60bc2626..d6b5a87a 100644 --- a/src/main/java/hu/akarnokd/rxjava2/Cartesian.java +++ b/src/main/java/hu/akarnokd/rxjava2/Cartesian.java @@ -3,19 +3,19 @@ import java.util.*; import io.reactivex.Observable; - + public class Cartesian { - + static Observable cartesian(Observable> sources) { return sources.toList().flatMapObservable(list -> cartesian(list)); } - + static Observable cartesian(List> sources) { if (sources.size() == 0) { return Observable.empty(); } Observable main = sources.get(0).map(v -> new int[] { v }); - + for (int i = 1; i < sources.size(); i++) { int j = i; Observable o = sources.get(i).cache(); @@ -27,10 +27,10 @@ static Observable cartesian(List> sources) { }); }); } - + return main; } - + public static void main(String[] args) { cartesian(Observable.just(Observable.just(0, 1), Observable.just(2, 3), Observable.just(4, 5))) .subscribe(v -> System.out.println(Arrays.toString(v))); diff --git a/src/main/java/hu/akarnokd/rxjava2/Coincidence.java b/src/main/java/hu/akarnokd/rxjava2/Coincidence.java index 7b2461e8..72da2268 100644 --- a/src/main/java/hu/akarnokd/rxjava2/Coincidence.java +++ b/src/main/java/hu/akarnokd/rxjava2/Coincidence.java @@ -4,21 +4,21 @@ import io.reactivex.*; import io.reactivex.schedulers.TestScheduler; - + public class Coincidence { - + public static void main(String[] args) { TestScheduler sch = new TestScheduler(); - + Flowable.interval(100, TimeUnit.MILLISECONDS, sch) .onBackpressureBuffer() .compose(coincide(Flowable.interval(300, TimeUnit.MILLISECONDS, sch), sch)) .take(7) .subscribe(v -> System.out.printf("%d - %d%n", sch.now(TimeUnit.MILLISECONDS), v)); - + sch.advanceTimeBy(1001, TimeUnit.MILLISECONDS); } - + static FlowableTransformer coincide(Flowable other, Scheduler scheduler) { return f -> { return other.publish(g -> { diff --git a/src/main/java/hu/akarnokd/rxjava2/DoOnErrorFusion.java b/src/main/java/hu/akarnokd/rxjava2/DoOnErrorFusion.java index db1cd437..37c20bda 100644 --- a/src/main/java/hu/akarnokd/rxjava2/DoOnErrorFusion.java +++ b/src/main/java/hu/akarnokd/rxjava2/DoOnErrorFusion.java @@ -14,7 +14,7 @@ public static void main(String[] args) { throw new IllegalStateException(e); }).publish(); f.subscribe( - i -> { throw new AssertionError(); }, + i -> { throw new AssertionError(); }, e -> e.printStackTrace()); f.connect(); } diff --git a/src/main/java/hu/akarnokd/rxjava2/FindGT.java b/src/main/java/hu/akarnokd/rxjava2/FindGT.java index 9e7575fc..0c24fc6b 100644 --- a/src/main/java/hu/akarnokd/rxjava2/FindGT.java +++ b/src/main/java/hu/akarnokd/rxjava2/FindGT.java @@ -16,7 +16,7 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { if (file.toString().endsWith(".java")) { String s = Ix.from(Files.readAllLines(file)).join("\n").first(); - + int j = 0; for (;;) { int idx = s.indexOf("", j); @@ -24,14 +24,14 @@ public FileVisitResult visitFile(Path file, break; } int jdx = s.indexOf("", idx + 6); - + int k = idx + 6; for (;;) { int kdx = s.indexOf('>', k); if (kdx < 0) { break; } - + if (kdx < jdx) { String fn = file.toString().replace(".java", ""); fn = fn.replace("\\RxJava\\src\\main\\java\\", ""); @@ -48,7 +48,7 @@ public FileVisitResult visitFile(Path file, } k = kdx + 1; } - + j = jdx + 7; } } @@ -58,7 +58,7 @@ public FileVisitResult visitFile(Path file, System.err.println("Found >"); System.err.println(b); } - + static int countLine(String s, int kdx) { int c = 1; for (int i = kdx; i >= 0; i--) { diff --git a/src/main/java/hu/akarnokd/rxjava2/FirstAndSample.java b/src/main/java/hu/akarnokd/rxjava2/FirstAndSample.java index dae7059c..6e4511ef 100644 --- a/src/main/java/hu/akarnokd/rxjava2/FirstAndSample.java +++ b/src/main/java/hu/akarnokd/rxjava2/FirstAndSample.java @@ -16,7 +16,7 @@ public static void main(String[] args) throws Exception { .blockingSubscribe(System.out::println) ; } - + public static FlowableTransformer firstAndSample(long delay, TimeUnit unit) { return f -> { Scheduler s = new SingleScheduler(); diff --git a/src/main/java/hu/akarnokd/rxjava2/FlowVsRS.java b/src/main/java/hu/akarnokd/rxjava2/FlowVsRS.java index e3c134ba..aa767a04 100644 --- a/src/main/java/hu/akarnokd/rxjava2/FlowVsRS.java +++ b/src/main/java/hu/akarnokd/rxjava2/FlowVsRS.java @@ -3,21 +3,21 @@ public class FlowVsRS { interface FlowPublisher { - + } - + interface RSPublisher extends FlowPublisher { - + } - + public static void flowAPI(FlowPublisher src) { - + } - + public static void rsAPI(RSPublisher src) { - + } - + public static void main(String[] args) { flowAPI(new FlowPublisher() { }); } diff --git a/src/main/java/hu/akarnokd/rxjava2/FlowableSignalMapper.java b/src/main/java/hu/akarnokd/rxjava2/FlowableSignalMapper.java index 645005b6..a3785ea8 100644 --- a/src/main/java/hu/akarnokd/rxjava2/FlowableSignalMapper.java +++ b/src/main/java/hu/akarnokd/rxjava2/FlowableSignalMapper.java @@ -12,7 +12,7 @@ public final class FlowableSignalMapper extends Flowable { final Flowable source; - + final Callable mapper; public FlowableSignalMapper(Flowable source, Callable mapper) { diff --git a/src/main/java/hu/akarnokd/rxjava2/FlowableStringInputStream.java b/src/main/java/hu/akarnokd/rxjava2/FlowableStringInputStream.java index fa9283ed..bb2721ab 100644 --- a/src/main/java/hu/akarnokd/rxjava2/FlowableStringInputStream.java +++ b/src/main/java/hu/akarnokd/rxjava2/FlowableStringInputStream.java @@ -122,7 +122,7 @@ byte[] awaitBufferIfNecessary() throws IOException { } break; } - } + } } } return a; diff --git a/src/main/java/hu/akarnokd/rxjava2/FlowableSumIntArray.java b/src/main/java/hu/akarnokd/rxjava2/FlowableSumIntArray.java index 459df9ea..6d0b87b5 100644 --- a/src/main/java/hu/akarnokd/rxjava2/FlowableSumIntArray.java +++ b/src/main/java/hu/akarnokd/rxjava2/FlowableSumIntArray.java @@ -16,7 +16,7 @@ public final class FlowableSumIntArray extends Flowable { final Publisher[] sources; - + @SafeVarargs public FlowableSumIntArray(Publisher... sources) { this.sources = sources; @@ -28,7 +28,7 @@ protected void subscribeActual(Subscriber s) { s.onSubscribe(parent); parent.onComplete(); } - + static final class SumIntArraySubscriber extends DeferredScalarSubscription implements Subscriber { @@ -37,7 +37,7 @@ static final class SumIntArraySubscriber extends DeferredScala final Publisher[] sources; final AtomicInteger wip; - + final AtomicReference current; int index; @@ -50,7 +50,7 @@ static final class SumIntArraySubscriber extends DeferredScala this.sources = sources; this.wip = new AtomicInteger(); this.current = new AtomicReference<>(); - + } @Override @@ -95,7 +95,7 @@ public void onComplete() { } else { downstream.onComplete(); } - + return; } index = i + 1; @@ -103,9 +103,9 @@ public void onComplete() { if (p instanceof Callable) { @SuppressWarnings("unchecked") Callable callable = (Callable) p; - + T v; - + try { v = callable.call(); } catch (Throwable ex) { @@ -113,7 +113,7 @@ public void onComplete() { downstream.onError(ex); return; } - + if (v != null) { hasValue = true; sum += v.intValue(); diff --git a/src/main/java/hu/akarnokd/rxjava2/FluxCharSequence.java b/src/main/java/hu/akarnokd/rxjava2/FluxCharSequence.java index 118f8f34..435fb6d3 100644 --- a/src/main/java/hu/akarnokd/rxjava2/FluxCharSequence.java +++ b/src/main/java/hu/akarnokd/rxjava2/FluxCharSequence.java @@ -24,7 +24,7 @@ public FluxCharSequence(CharSequence string) { public void subscribe(CoreSubscriber actual) { actual.onSubscribe(new CharSequenceSubscription(actual, string)); } - + static final class CharSequenceSubscription implements Fuseable.QueueSubscription { final CoreSubscriber actual; diff --git a/src/main/java/hu/akarnokd/rxjava2/JavadocScrape.java b/src/main/java/hu/akarnokd/rxjava2/JavadocScrape.java index ac2eb761..13d07f01 100644 --- a/src/main/java/hu/akarnokd/rxjava2/JavadocScrape.java +++ b/src/main/java/hu/akarnokd/rxjava2/JavadocScrape.java @@ -1,15 +1,14 @@ package hu.akarnokd.rxjava2; import java.io.*; +import java.nio.charset.StandardCharsets; import java.nio.file.*; -import com.google.api.client.util.Charsets; - public class JavadocScrape { public static void main(String[] args) throws Exception { - String s = new String(Files.readAllBytes(Paths.get("..\\RxJava\\src\\main\\java\\io\\reactivex\\Flowable.java")), Charsets.UTF_8); - + String s = new String(Files.readAllBytes(Paths.get("..\\RxJava\\src\\main\\java\\io\\reactivex\\Flowable.java")), StandardCharsets.UTF_8); + int fidx = 1; int j = 0; @SuppressWarnings("resource") @@ -23,13 +22,13 @@ public static void main(String[] args) throws Exception { if (idx < 0) { break; } - + int jdx = s.indexOf("*/", idx + 2); if (jdx < 0) { System.err.println("No end comment tag?!"); break; } - + String doc = s.substring(idx + 3, jdx); doc = doc.replace("

", ""); doc = doc.replace("

", ""); @@ -67,32 +66,32 @@ public static void main(String[] args) throws Exception { } int nn = doc.indexOf(" ", jj + 2); int mm = doc.indexOf("}", jj + 2); - + doc = doc.substring(0, jj) + doc.substring(nn + 1, mm) + doc.substring(mm + 1); kk = mm + 1; } - + for (String line : doc.split("\n")) { line = line.trim(); if (line.startsWith("*")) { line = line.substring(1); } - + // remove images int k = line.indexOf("= 0) { int m = line.indexOf(">", k + 4); line = line.substring(0, k) + line.substring(m + 1); } - + // remove anchors k = line.indexOf("= 0) { int m = line.indexOf(">", k + 4); line = line.substring(0, k) + line.substring(m + 1); } - + line = line.trim(); if (line.length() != 0) { out.print(line); diff --git a/src/main/java/hu/akarnokd/rxjava2/MyRxJava2DirWatcher.java b/src/main/java/hu/akarnokd/rxjava2/MyRxJava2DirWatcher.java index c6101917..6f90c6c7 100644 --- a/src/main/java/hu/akarnokd/rxjava2/MyRxJava2DirWatcher.java +++ b/src/main/java/hu/akarnokd/rxjava2/MyRxJava2DirWatcher.java @@ -15,9 +15,9 @@ public Flowable> createFlowable(FileSystem fs, Path path) { return Flowable.create(subscriber -> { WatchService watcher = fs.newWatchService(); - + subscriber.setCancellable(() -> watcher.close()); - + boolean error = false; WatchKey key; try { diff --git a/src/main/java/hu/akarnokd/rxjava2/PersonSeq.java b/src/main/java/hu/akarnokd/rxjava2/PersonSeq.java index 69cf481d..fb24cfa5 100644 --- a/src/main/java/hu/akarnokd/rxjava2/PersonSeq.java +++ b/src/main/java/hu/akarnokd/rxjava2/PersonSeq.java @@ -58,7 +58,7 @@ private static List> getPersons() { Arrays.asList(new Person("Lobna", 24, "EGY"))); } public static void main(String[] args) { - Observable> observables = + Observable> observables = Observable.fromIterable(getPersons()); observables //.subscribeOn(Schedulers.io()) diff --git a/src/main/java/hu/akarnokd/rxjava2/RxSynchronousCoarseProfiler.java b/src/main/java/hu/akarnokd/rxjava2/RxSynchronousCoarseProfiler.java index addd48a5..beb44165 100644 --- a/src/main/java/hu/akarnokd/rxjava2/RxSynchronousCoarseProfiler.java +++ b/src/main/java/hu/akarnokd/rxjava2/RxSynchronousCoarseProfiler.java @@ -106,7 +106,7 @@ static final class ProfilerSubscriber implements FlowableSubscriber, Queue Subscription s; QueueSubscription qs; - + long startTime; ProfilerSubscriber(Subscriber actual, CallStatistics calls) { @@ -294,7 +294,7 @@ public void cancel() { } } } - + static final class SingleProfiler extends Single { @@ -326,7 +326,7 @@ static final class ProfilerSingleObserver implements SingleObserver, Dispo Disposable s; QueueSubscription qs; - + long startTime; ProfilerSingleObserver(SingleObserver actual, CallStatistics calls) { @@ -370,7 +370,7 @@ public void onError(Throwable t) { public void dispose() { s.dispose(); } - + @Override public boolean isDisposed() { return s.isDisposed(); diff --git a/src/main/java/hu/akarnokd/rxjava2/RxSynchronousProfiler.java b/src/main/java/hu/akarnokd/rxjava2/RxSynchronousProfiler.java index e5f761d2..b8c55492 100644 --- a/src/main/java/hu/akarnokd/rxjava2/RxSynchronousProfiler.java +++ b/src/main/java/hu/akarnokd/rxjava2/RxSynchronousProfiler.java @@ -414,7 +414,7 @@ public void cancel() { } } } - + static final class SingleProfiler extends Single { @@ -497,7 +497,7 @@ public void onError(Throwable t) { public void dispose() { s.dispose(); } - + @Override public boolean isDisposed() { return s.isDisposed(); diff --git a/src/main/java/hu/akarnokd/rxjava2/ShiftByCount.java b/src/main/java/hu/akarnokd/rxjava2/ShiftByCount.java index 5899037f..c80b7be5 100644 --- a/src/main/java/hu/akarnokd/rxjava2/ShiftByCount.java +++ b/src/main/java/hu/akarnokd/rxjava2/ShiftByCount.java @@ -10,7 +10,7 @@ public static void main(String[] args) { Flowable.range(1, 7) .flatMap(v -> Flowable.timer(v * 200, TimeUnit.MILLISECONDS).map(w -> v)) .doOnNext(v -> System.out.println(v)) - .publish(f -> + .publish(f -> f.skip(3).zipWith(f, (a, b) -> b).mergeWith(f.takeLast(3)) ) .blockingSubscribe(v -> System.out.println("<-- " + v)) diff --git a/src/main/java/hu/akarnokd/rxjava2/SomeAsyncApiBridge.java b/src/main/java/hu/akarnokd/rxjava2/SomeAsyncApiBridge.java index efbe20a3..b10e39d3 100644 --- a/src/main/java/hu/akarnokd/rxjava2/SomeAsyncApiBridge.java +++ b/src/main/java/hu/akarnokd/rxjava2/SomeAsyncApiBridge.java @@ -9,18 +9,18 @@ import io.reactivex.Flowable; import io.reactivex.internal.subscriptions.EmptySubscription; import io.reactivex.internal.util.BackpressureHelper; - + public final class SomeAsyncApiBridge extends Flowable { - + final Function, ? extends CompletableFuture> apiInvoker; - + final AtomicBoolean once; - + public SomeAsyncApiBridge(Function, ? extends CompletableFuture> apiInvoker) { this.apiInvoker = apiInvoker; this.once = new AtomicBoolean(); } - + @Override protected void subscribeActual(Subscriber s) { if (once.compareAndSet(false, true)) { @@ -31,36 +31,36 @@ protected void subscribeActual(Subscriber s) { EmptySubscription.error(new IllegalStateException("Only one Subscriber allowed"), s); } } - + static final class SomeAsyncApiBridgeSubscription extends AtomicInteger implements Subscription, Consumer, BiConsumer { - + /** */ private static final long serialVersionUID = 1270592169808316333L; - + final Subscriber downstream; - + final Function, ? extends CompletableFuture> apiInvoker; - + final AtomicInteger wip; - + final AtomicLong requested; - + final AtomicReference> task; - + static final CompletableFuture TASK_CANCELLED = CompletableFuture.completedFuture(null); - + volatile T item; - + volatile boolean done; Throwable error; - + volatile boolean cancelled; - + long emitted; - + SomeAsyncApiBridgeSubscription( Subscriber downstream, Function, ? extends CompletableFuture> apiInvoker) { @@ -70,13 +70,13 @@ static final class SomeAsyncApiBridgeSubscription this.wip = new AtomicInteger(); this.task = new AtomicReference<>(); } - + @Override public void request(long n) { BackpressureHelper.add(requested, n); drain(); } - + @Override public void cancel() { cancelled = true; @@ -88,18 +88,18 @@ public void cancel() { item = null; } } - + void moveNext() { if (wip.getAndIncrement() == 0) { do { CompletableFuture curr = task.get(); - + if (curr == TASK_CANCELLED) { return; } - + CompletableFuture f = apiInvoker.apply(this); - + if (task.compareAndSet(curr, f)) { f.whenComplete(this); } else { @@ -112,7 +112,7 @@ void moveNext() { } while (wip.decrementAndGet() != 0); } } - + @Override public void accept(Void t, Throwable u) { if (u != null) { @@ -122,33 +122,33 @@ public void accept(Void t, Throwable u) { done = true; drain(); } - + @Override public void accept(T t) { item = t; drain(); } - + void drain() { if (getAndIncrement() != 0) { return; } - + int missed = 1; long e = emitted; - + for (;;) { - + for (;;) { if (cancelled) { item = null; return; } - + boolean d = done; T v = item; boolean empty = v == null; - + if (d && empty) { Throwable ex = error; if (ex == null) { @@ -158,20 +158,20 @@ void drain() { } return; } - + if (empty || e == requested.get()) { break; } - + item = null; - + downstream.onNext(v); - + e++; - + moveNext(); } - + emitted = e; missed = addAndGet(-missed); if (missed == 0) { diff --git a/src/main/java/hu/akarnokd/rxjava2/StripedCompositeDisposable.java b/src/main/java/hu/akarnokd/rxjava2/StripedCompositeDisposable.java index 80e6c2ec..863338e0 100644 --- a/src/main/java/hu/akarnokd/rxjava2/StripedCompositeDisposable.java +++ b/src/main/java/hu/akarnokd/rxjava2/StripedCompositeDisposable.java @@ -13,7 +13,7 @@ public final class StripedCompositeDisposable implements DisposableContainer, Disposable { final CompositeDisposable[] stripes; - + StripedCompositeDisposable(int stripeCount) { this.stripes = new CompositeDisposable[Pow2.roundToPowerOfTwo(stripeCount)]; for (int i = 0; i < stripes.length; i++) { diff --git a/src/main/java/hu/akarnokd/rxjava2/WhichThread.java b/src/main/java/hu/akarnokd/rxjava2/WhichThread.java index 19414a30..d630f062 100644 --- a/src/main/java/hu/akarnokd/rxjava2/WhichThread.java +++ b/src/main/java/hu/akarnokd/rxjava2/WhichThread.java @@ -11,23 +11,23 @@ public class WhichThread { public static void main(String[] args) throws Exception { - + List> sources = new ArrayList<>(); sources.add(Observable.just(1)); sources.add(Observable.just(1).delay(1, TimeUnit.MINUTES)); sources.add(Observable.empty()); sources.add(Observable.empty().delay(1, TimeUnit.MINUTES)); - + for (Observable source : sources) { List> names = new ArrayList<>(); names.add(new ArrayList<>()); names.add(new ArrayList<>()); names.add(new ArrayList<>()); names.add(new ArrayList<>()); - + Scheduler main = Schedulers.single(); int n = 1000; - + for (int i = 0; i < n; i++) { main.scheduleDirect(() -> { source @@ -43,9 +43,9 @@ public static void main(String[] args) throws Exception { .subscribe() .dispose(); }); - + Thread.sleep(100); - + if (i % 100 == 0) { System.out.println(i); for (int j = 0; j < 4; j++) { diff --git a/src/main/java/hu/akarnokd/rxjava3/MarblesAddBackground.java b/src/main/java/hu/akarnokd/rxjava3/MarblesAddBackground.java index c4326cd1..6024bf83 100644 --- a/src/main/java/hu/akarnokd/rxjava3/MarblesAddBackground.java +++ b/src/main/java/hu/akarnokd/rxjava3/MarblesAddBackground.java @@ -12,15 +12,15 @@ public static void main(String[] args) throws Exception { String dir = "c:\\Users\\akarnokd\\git\\RxJavaWiki\\images\\rx-operators\\"; File fdir = new File(dir); int count = 0; - + for (File f : fdir.listFiles()) { if (f.getName().endsWith(".png") && !f.getName().endsWith("v3.png")) { - + BufferedImage image = ImageIO.read(f); - + int width = image.getWidth(); int height = image.getHeight(); - + boolean hasTransparency = false; outer: for (int i = 0; i < height; i++) { @@ -31,28 +31,28 @@ public static void main(String[] args) throws Exception { } } } - + if (hasTransparency) { System.out.println("Found image with transparency: " + f.getName()); - + BufferedImage bimg = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); Graphics2D g2 = bimg.createGraphics(); g2.setColor(Color.WHITE); g2.fillRect(0, 0, width, height); - + g2.drawImage(image, 0, 0, null); - + String fullName = f.getAbsolutePath(); int idx = fullName.lastIndexOf(".png"); fullName = fullName.substring(0, idx) + ".v3.png"; System.out.println(" saving as " + fullName); - + ImageIO.write(bimg, "png", new File(fullName)); count++; } } } - + System.out.println("------------"); System.out.println("Total: " + count); } diff --git a/src/main/java/hu/akarnokd/rxjava3/ShareExample.java b/src/main/java/hu/akarnokd/rxjava3/ShareExample.java index cd04a3d9..95845f1a 100644 --- a/src/main/java/hu/akarnokd/rxjava3/ShareExample.java +++ b/src/main/java/hu/akarnokd/rxjava3/ShareExample.java @@ -17,7 +17,7 @@ public static void main(String[] args) { source.subscribe(e -> System.out.println("Observer 2: " + e)); source.connect(); - + Observable source2 = Observable.create(emitter -> { emitter.onNext("Hello"); emitter.onNext("Foo"); diff --git a/src/main/java/hu/akarnokd/rxjava3/UsingWhen.java b/src/main/java/hu/akarnokd/rxjava3/UsingWhen.java index 33f7eacc..7b06c9d8 100644 --- a/src/main/java/hu/akarnokd/rxjava3/UsingWhen.java +++ b/src/main/java/hu/akarnokd/rxjava3/UsingWhen.java @@ -9,15 +9,15 @@ public class UsingWhen { static Flowable usingWhen( - Publisher resource, - Function> use, + Publisher resource, + Function> use, Function> cleanup) { return Maybe.fromPublisher(resource) - .flatMapPublisher(res -> + .flatMapPublisher(res -> Flowable.using( - () -> res, - use, + () -> res, + use, resc -> Flowable.fromPublisher(cleanup.apply(resc)).subscribe(), false ) @@ -25,18 +25,18 @@ static Flowable usingWhen( } static Flowable usingWhen( - Publisher resource, - Function> use, + Publisher resource, + Function> use, Function> onComplete, Function> onError, Function> onCancel) { return Maybe.fromPublisher(resource) - .flatMapPublisher(res -> + .flatMapPublisher(res -> Flowable.fromPublisher(use.apply(res)) .flatMap( - v -> Flowable.just(v), - e -> Flowable.fromPublisher(onError.apply(res)).ignoreElements().toFlowable(), + v -> Flowable.just(v), + e -> Flowable.fromPublisher(onError.apply(res)).ignoreElements().toFlowable(), () -> Flowable.fromPublisher(onComplete.apply(res)).ignoreElements().toFlowable() ) .doOnCancel(() -> Flowable.fromPublisher(onCancel.apply(res)).subscribe()) diff --git a/src/test/java/GroupByConcatMapTest.java b/src/test/java/GroupByConcatMapTest.java index a4be05e0..61506d7e 100644 --- a/src/test/java/GroupByConcatMapTest.java +++ b/src/test/java/GroupByConcatMapTest.java @@ -24,7 +24,7 @@ public void test1() { .toList() .subscribe(System.out::println); } - + public static class Shop { public int id; public String name; @@ -91,13 +91,13 @@ public List longTimeFunc() { new String[] {"4", "Dev", "lat4-5", "long4-5"} ); } - + static void sout(Object o, Object o2) { System.out.print(o); System.out.print(' '); System.out.println(o2); } - + @Test public void so() throws Exception { rx.Observable @@ -116,7 +116,7 @@ public void so() throws Exception { .subscribeOn(Schedulers.io()) .observeOn(Schedulers.computation()) .subscribe(shops -> sout("RX_TAG_SUBSCRIBE", String.valueOf(shops))); - + Thread.sleep(1000); } } diff --git a/src/test/java/hu/akarnokd/helidon/CrossFlatMapIterableTest.java b/src/test/java/hu/akarnokd/helidon/CrossFlatMapIterableTest.java index 700e9a60..4df3c91e 100644 --- a/src/test/java/hu/akarnokd/helidon/CrossFlatMapIterableTest.java +++ b/src/test/java/hu/akarnokd/helidon/CrossFlatMapIterableTest.java @@ -12,12 +12,12 @@ static void cross(int times) { Integer[] outerArray = new Integer[times]; Arrays.fill(outerArray, 777); Iterable outerIterable = Arrays.asList(outerArray); - + Integer[] innerArray = new Integer[1_000_000 / times]; Arrays.fill(innerArray, 777); Iterable innerIterable = Arrays.asList(innerArray); - Multi.from(outerIterable).flatMapIterable(v -> innerIterable) + Multi.create(outerIterable).flatMapIterable(v -> innerIterable) .subscribe(v -> { }, Throwable::printStackTrace); } diff --git a/src/test/java/hu/akarnokd/queue/MpmcPollTest.java b/src/test/java/hu/akarnokd/queue/MpmcPollTest.java index be154318..a8ecb57b 100644 --- a/src/test/java/hu/akarnokd/queue/MpmcPollTest.java +++ b/src/test/java/hu/akarnokd/queue/MpmcPollTest.java @@ -21,9 +21,9 @@ public class MpmcPollTest { public void atomic() { for (int i = 0; i < 100000; i++) { MpmcAtomicArrayQueue q = new MpmcAtomicArrayQueue<>(128); - + q.offer(1); - + Integer[] result = new Integer[] { 2, 2 }; race(() -> { @@ -31,7 +31,7 @@ public void atomic() { }, () -> { result[1] = q.poll(); }, exec); - + assertTrue(Arrays.toString(result), (result[0] == null && result[1] == 1) || (result[0] == 1 && result[1] == null)); } } @@ -40,9 +40,9 @@ public void atomic() { public void unsafe() { for (int i = 0; i < 100000; i++) { MpmcArrayQueue q = new MpmcArrayQueue<>(128); - + q.offer(1); - + Integer[] result = new Integer[] { 2, 2 }; race(() -> { @@ -50,7 +50,7 @@ public void unsafe() { }, () -> { result[1] = q.poll(); }, exec); - + assertTrue(Arrays.toString(result), (result[0] == null && result[1] == 1) || (result[0] == 1 && result[1] == null)); } } diff --git a/src/test/java/hu/akarnokd/reactivestreams/tck/EmptyPublisherTckTest.java b/src/test/java/hu/akarnokd/reactivestreams/tck/EmptyPublisherTckTest.java index 273a0f39..bf5f5153 100644 --- a/src/test/java/hu/akarnokd/reactivestreams/tck/EmptyPublisherTckTest.java +++ b/src/test/java/hu/akarnokd/reactivestreams/tck/EmptyPublisherTckTest.java @@ -8,7 +8,7 @@ @Test public class EmptyPublisherTckTest extends PublisherVerification { - + public EmptyPublisherTckTest() { super(new TestEnvironment(50)); } diff --git a/src/test/java/hu/akarnokd/reactor/BackpressureProblem.java b/src/test/java/hu/akarnokd/reactor/BackpressureProblem.java index dcfdc248..4df9c3f6 100644 --- a/src/test/java/hu/akarnokd/reactor/BackpressureProblem.java +++ b/src/test/java/hu/akarnokd/reactor/BackpressureProblem.java @@ -42,7 +42,7 @@ public void fluxCreateDemoElasticScheduler() throws Exception { }). onBackpressureError(). subscribeOn(Schedulers.newSingle("production")). - publishOn(Schedulers.elastic()). + publishOn(Schedulers.boundedElastic()). subscribe(i -> { //logger.info("Consuming {}", i); if (i == 0) { diff --git a/src/test/java/hu/akarnokd/reactor/BufferWhenTest.java b/src/test/java/hu/akarnokd/reactor/BufferWhenTest.java index 861de69e..77b0b61f 100644 --- a/src/test/java/hu/akarnokd/reactor/BufferWhenTest.java +++ b/src/test/java/hu/akarnokd/reactor/BufferWhenTest.java @@ -24,15 +24,16 @@ public String toString() { @Test public void test() throws InterruptedException { final CountDownLatch latch = new CountDownLatch(1); - final UnicastProcessor processor = UnicastProcessor.create(); - processor.buffer(Duration.ofMillis(3000), Duration.ofMillis(2000)) + final Sinks.Many processor = Sinks.many().unicast().onBackpressureBuffer(); + + processor.asFlux().buffer(Duration.ofMillis(3000), Duration.ofMillis(2000)) .doOnNext(t -> System.out.println(String.format("tuple %s", t))) .subscribe(); Flux.range(1, Integer.MAX_VALUE) .delayElements(Duration.ofMillis(10)) - .doOnNext(i -> processor.onNext(new Wrapper(i))) - .doOnComplete(processor::onComplete) + .doOnNext(i -> processor.tryEmitNext(new Wrapper(i))) + .doOnComplete(processor::tryEmitComplete) .subscribe(); latch.await(10, TimeUnit.MINUTES); diff --git a/src/test/java/hu/akarnokd/reactor/FluxMergeTest.java b/src/test/java/hu/akarnokd/reactor/FluxMergeTest.java index c31dad15..da28fd0b 100644 --- a/src/test/java/hu/akarnokd/reactor/FluxMergeTest.java +++ b/src/test/java/hu/akarnokd/reactor/FluxMergeTest.java @@ -6,10 +6,10 @@ import reactor.core.scheduler.*; public class FluxMergeTest { - - static final Scheduler SCHEDULER1 = Schedulers.newSingle("A"); - static final Scheduler SCHEDULER2 = Schedulers.newSingle("B"); + static final Scheduler SCHEDULER1 = Schedulers.newSingle("A"); + + static final Scheduler SCHEDULER2 = Schedulers.newSingle("B"); @Test public void nameLoop() throws Exception { @@ -20,7 +20,7 @@ public void nameLoop() throws Exception { name(); } } - + @Test(timeout = 1000) public void name() throws Exception { Flux f1 = Flux.create(sink -> { diff --git a/src/test/java/hu/akarnokd/reactor/MonoTimeoutTest.java b/src/test/java/hu/akarnokd/reactor/MonoTimeoutTest.java index 4399c25e..60ae3b9f 100644 --- a/src/test/java/hu/akarnokd/reactor/MonoTimeoutTest.java +++ b/src/test/java/hu/akarnokd/reactor/MonoTimeoutTest.java @@ -23,7 +23,7 @@ public void test1() { }) .doOnCancel(() -> System.out.println("Cancel")) .timeout(Duration.ofSeconds(1L)) - .subscribeOn(Schedulers.elastic()) + .subscribeOn(Schedulers.boundedElastic()) .onErrorResume(t -> Mono.fromCallable(() -> { System.out.println("plan B running on thread:" + Thread.currentThread().getName()); return "result from plan B"; diff --git a/src/test/java/hu/akarnokd/reactor/PickNextIndexed.java b/src/test/java/hu/akarnokd/reactor/PickNextIndexed.java index b93c0b26..5d83dc35 100644 --- a/src/test/java/hu/akarnokd/reactor/PickNextIndexed.java +++ b/src/test/java/hu/akarnokd/reactor/PickNextIndexed.java @@ -9,19 +9,19 @@ import reactor.core.scheduler.Schedulers; public class PickNextIndexed { - + @Test public void test() { int parallelism = 8; int bufferSize = 256; AtomicInteger indexer = new AtomicInteger(); - + @SuppressWarnings("unchecked") SpscLinkedArrayQueue[] queues = new SpscLinkedArrayQueue[parallelism]; for (int i = 0; i < queues.length; i++) { queues[i] = new SpscLinkedArrayQueue(bufferSize); } - + Flux.range(0, 1000) .map(AtomicInteger::new) .parallel(parallelism) @@ -48,5 +48,5 @@ public void test() { .forEach(System.out::println); } - + } diff --git a/src/test/java/hu/akarnokd/rxjava/ATest.java b/src/test/java/hu/akarnokd/rxjava/ATest.java index cdb6a3a4..cc70fb23 100644 --- a/src/test/java/hu/akarnokd/rxjava/ATest.java +++ b/src/test/java/hu/akarnokd/rxjava/ATest.java @@ -36,7 +36,7 @@ static class Item { private TestScheduler uiScheduler; @Before public void setUp() { - MockitoAnnotations.initMocks(this); + MockitoAnnotations.openMocks(this); ioScheduler = Schedulers.test(); uiScheduler = Schedulers.test(); diff --git a/src/test/java/hu/akarnokd/rxjava/AutoRemoveSubscription.java b/src/test/java/hu/akarnokd/rxjava/AutoRemoveSubscription.java index cfa46250..5496279c 100644 --- a/src/test/java/hu/akarnokd/rxjava/AutoRemoveSubscription.java +++ b/src/test/java/hu/akarnokd/rxjava/AutoRemoveSubscription.java @@ -11,8 +11,8 @@ public class AutoRemoveSubscription { public static void subscribeAutoRelease( - Observable source, - final Action1 onNext, + Observable source, + final Action1 onNext, CompositeSubscription composite) { Subscriber subscriber = new Subscriber() { @Override @@ -41,13 +41,13 @@ public void onNext(T t) { @Test public void test() { CompositeSubscription composite = new CompositeSubscription(); - + PublishSubject ps = PublishSubject.create(); - + subscribeAutoRelease(ps, System.out::println, composite); - + Assert.assertTrue(composite.hasSubscriptions()); - + ps.onNext(1); ps.onCompleted(); diff --git a/src/test/java/hu/akarnokd/rxjava/BufferStartEndTest.java b/src/test/java/hu/akarnokd/rxjava/BufferStartEndTest.java index 01d8bb96..c0fc5758 100644 --- a/src/test/java/hu/akarnokd/rxjava/BufferStartEndTest.java +++ b/src/test/java/hu/akarnokd/rxjava/BufferStartEndTest.java @@ -17,10 +17,10 @@ public void test() { TestScheduler scheduler = new TestScheduler(); PublishProcessor pp = PublishProcessor.create(); - Function, Flowable>> f = o -> - o.buffer(o.filter(v -> v.contains("Start")), - v -> Flowable.merge(o.filter(w -> w.contains("Start")), - Flowable.timer(5, TimeUnit.MINUTES, scheduler))); + Function, Flowable>> f = o -> + o.buffer(o.filter(v -> v.contains("Start")), + v -> Flowable.merge(o.filter(w -> w.contains("Start")), + Flowable.timer(5, TimeUnit.MINUTES, scheduler))); pp.publish(f) .doOnNext(v -> { diff --git a/src/test/java/hu/akarnokd/rxjava/CompleteDos.java b/src/test/java/hu/akarnokd/rxjava/CompleteDos.java index 27babc45..4f0fab86 100644 --- a/src/test/java/hu/akarnokd/rxjava/CompleteDos.java +++ b/src/test/java/hu/akarnokd/rxjava/CompleteDos.java @@ -10,7 +10,7 @@ public class CompleteDos { @Test public void test() throws Exception { Completable.fromAction(() -> System.out.println("A1")) - .doOnSubscribe(s -> + .doOnSubscribe(s -> System.out.println("---> A1 doOnSubscribe") ) .doOnCompleted(() -> System.out.println("---> A1 doOnCompleted")) @@ -29,7 +29,7 @@ public void test() throws Exception { .subscribeOn(Schedulers.io()) .observeOn(Schedulers.computation()) .subscribe(); - + Thread.sleep(10000); } } diff --git a/src/test/java/hu/akarnokd/rxjava/ConcatReplayTest.java b/src/test/java/hu/akarnokd/rxjava/ConcatReplayTest.java index f4ef0d1b..c19df99d 100644 --- a/src/test/java/hu/akarnokd/rxjava/ConcatReplayTest.java +++ b/src/test/java/hu/akarnokd/rxjava/ConcatReplayTest.java @@ -17,7 +17,7 @@ public void test() { emitter.onNext(2); emitter.onCompleted(); }, Emitter.BackpressureMode.BUFFER); - + Observable both = Observable .concatDelayError(obs1, obs2) .replay().autoConnect(); diff --git a/src/test/java/hu/akarnokd/rxjava/DelayingScheduler.java b/src/test/java/hu/akarnokd/rxjava/DelayingScheduler.java index 8280a0de..7521670a 100644 --- a/src/test/java/hu/akarnokd/rxjava/DelayingScheduler.java +++ b/src/test/java/hu/akarnokd/rxjava/DelayingScheduler.java @@ -12,15 +12,15 @@ public static void main(String[] args) { ExecutorService exec = Executors.newSingleThreadExecutor(); final Scheduler sch = Schedulers.from(exec); final long delayMillis = 1000; - + Scheduler newScheduler = new Scheduler() { @Override public Worker createWorker() { return new NewWorker(sch.createWorker()); } - + class NewWorker extends Scheduler.Worker { final Worker actual; - + NewWorker(Worker actual) { this.actual = actual; } @@ -52,7 +52,7 @@ public Subscription schedule(Action0 action, long delayTime, .observeOn(newScheduler) .toBlocking() .subscribe(System.out::println); - + exec.shutdown(); } } diff --git a/src/test/java/hu/akarnokd/rxjava/ListFlatMappingTest.java b/src/test/java/hu/akarnokd/rxjava/ListFlatMappingTest.java index f30b48c1..b54ad7aa 100644 --- a/src/test/java/hu/akarnokd/rxjava/ListFlatMappingTest.java +++ b/src/test/java/hu/akarnokd/rxjava/ListFlatMappingTest.java @@ -12,11 +12,11 @@ public class ListFlatMappingTest { Single> getList() { return null; } - + Observable getSubdetails(Integer item) { return null; } - + @Test public void test() { getList() @@ -29,7 +29,7 @@ public void onNext(Boolean t) { } @Override public void onError(Throwable error) { - } + } @Override public void onCompleted() { } diff --git a/src/test/java/hu/akarnokd/rxjava/PublishSubjectRaceTest.java b/src/test/java/hu/akarnokd/rxjava/PublishSubjectRaceTest.java index 352f6871..8d6a539f 100644 --- a/src/test/java/hu/akarnokd/rxjava/PublishSubjectRaceTest.java +++ b/src/test/java/hu/akarnokd/rxjava/PublishSubjectRaceTest.java @@ -10,72 +10,72 @@ import rx.observers.AssertableSubscriber; import rx.schedulers.Schedulers; import rx.subjects.*; - + public class PublishSubjectRaceTest { - + @Test public void racy() throws Exception { Worker worker = Schedulers.computation().createWorker(); try { for (int i = 0; i < 1000; i++) { AtomicInteger wip = new AtomicInteger(2); - + PublishSubject ps = PublishSubject.create(); - + AssertableSubscriber as = ps.test(1); - + CountDownLatch cdl = new CountDownLatch(1); - + worker.schedule(() -> { if (wip.decrementAndGet() != 0) { while (wip.get() != 0) ; } ps.onNext(1); - + cdl.countDown(); }); if (wip.decrementAndGet() != 0) { while (wip.get() != 0) ; } ps.onNext(1); - + cdl.await(); - + as.assertFailure(MissingBackpressureException.class, 1); } } finally { worker.unsubscribe(); } } - + @Test public void nonRacy() throws Exception { Worker worker = Schedulers.computation().createWorker(); try { for (int i = 0; i < 1000; i++) { AtomicInteger wip = new AtomicInteger(2); - + Subject ps = PublishSubject.create().toSerialized(); - + AssertableSubscriber as = ps.test(1); - + CountDownLatch cdl = new CountDownLatch(1); - + worker.schedule(() -> { if (wip.decrementAndGet() != 0) { while (wip.get() != 0) ; } ps.onNext(1); - + cdl.countDown(); }); if (wip.decrementAndGet() != 0) { while (wip.get() != 0) ; } ps.onNext(1); - + cdl.await(); - + as.assertFailure(MissingBackpressureException.class, 1); } } finally { diff --git a/src/test/java/hu/akarnokd/rxjava/ReduceAnonymous.java b/src/test/java/hu/akarnokd/rxjava/ReduceAnonymous.java index 945fc256..59a20755 100644 --- a/src/test/java/hu/akarnokd/rxjava/ReduceAnonymous.java +++ b/src/test/java/hu/akarnokd/rxjava/ReduceAnonymous.java @@ -37,7 +37,7 @@ public void mutableStateWithStringConcat2() throws Exception { inOrder.verify(mock, times(1)) .onSuccess(any()); } - + @Test public void howLong() { for (int i = 1; i <= 1_000_000; i *= 10) { diff --git a/src/test/java/hu/akarnokd/rxjava/TimeoutCancelTest.java b/src/test/java/hu/akarnokd/rxjava/TimeoutCancelTest.java index c76fa694..cabc994f 100644 --- a/src/test/java/hu/akarnokd/rxjava/TimeoutCancelTest.java +++ b/src/test/java/hu/akarnokd/rxjava/TimeoutCancelTest.java @@ -25,7 +25,7 @@ public void test() { as.assertResult(1); } - + @Test public void test2() throws Exception { Subject subject = PublishSubject.create(); diff --git a/src/test/java/hu/akarnokd/rxjava/ZipRandomTest.java b/src/test/java/hu/akarnokd/rxjava/ZipRandomTest.java index 05f9254c..94296676 100644 --- a/src/test/java/hu/akarnokd/rxjava/ZipRandomTest.java +++ b/src/test/java/hu/akarnokd/rxjava/ZipRandomTest.java @@ -11,7 +11,7 @@ public class ZipRandomTest { static long randomTime() { return 2; } - + @Test public void test() throws Exception { Observable delay = Observable.just("") diff --git a/src/test/java/hu/akarnokd/rxjava/ZipRxJava.java b/src/test/java/hu/akarnokd/rxjava/ZipRxJava.java index df11156e..529ea6f0 100644 --- a/src/test/java/hu/akarnokd/rxjava/ZipRxJava.java +++ b/src/test/java/hu/akarnokd/rxjava/ZipRxJava.java @@ -26,7 +26,7 @@ public static void main(String[] args) { private static CartPlanResponse createPlanResponse(ZipRxJava z) { - System.out.println("Plan ********** " + Thread.currentThread().getName()); + System.out.println("Plan ********** " + Thread.currentThread().getName()); CartPlanResponse res = z.new CartPlanResponse(); res.setPlanId("123"); System.out.println("Before Return Plan ********** " + Thread.currentThread().getName()); @@ -72,7 +72,7 @@ public String getPlanId() { public void setPlanId(String planId) { this.planId = planId; - } + } } private class CartFeatureResponse { diff --git a/src/test/java/hu/akarnokd/rxjava2/AndThenTest.java b/src/test/java/hu/akarnokd/rxjava2/AndThenTest.java index a13601c7..bf0e8294 100644 --- a/src/test/java/hu/akarnokd/rxjava2/AndThenTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/AndThenTest.java @@ -7,9 +7,9 @@ import io.reactivex.*; public class AndThenTest { - + Integer value; - + @Test public void test() { getFromLocal() @@ -21,14 +21,14 @@ public void test() { .awaitDone(5, TimeUnit.SECONDS) .assertResult(10); } - + Maybe getFromLocal() { return Maybe.fromCallable(() -> { System.out.println("FromLocal called"); return value; }); } - + Single getFromNetwork() { return Single.fromCallable(() -> { System.out.println("FromNetwork called"); @@ -36,7 +36,7 @@ Single getFromNetwork() { }).delay(100, TimeUnit.MILLISECONDS) ; } - + Completable saveFoo(Integer v) { return Completable.fromRunnable(() -> { System.out.println("SaveFoo called"); diff --git a/src/test/java/hu/akarnokd/rxjava2/BehaviorSubjectCombineLatest.java b/src/test/java/hu/akarnokd/rxjava2/BehaviorSubjectCombineLatest.java index 568fc1cd..97e74b4c 100644 --- a/src/test/java/hu/akarnokd/rxjava2/BehaviorSubjectCombineLatest.java +++ b/src/test/java/hu/akarnokd/rxjava2/BehaviorSubjectCombineLatest.java @@ -4,33 +4,33 @@ import io.reactivex.Observable; import io.reactivex.subjects.BehaviorSubject; - + public class BehaviorSubjectCombineLatest { - + BehaviorSubject subject1; BehaviorSubject subject2; - + @Test public void test() throws Exception { subject1 = BehaviorSubject.createDefault("hello"); subject2 = BehaviorSubject.createDefault("goodbye"); - + subject1.subscribe(v -> System.out.println("Subject1 it1: " + v)); - + click(); - + Thread.sleep(1); click(); - + Thread.sleep(1); click(); } - + void click() { subject1.onNext("hello button clicked " + System.currentTimeMillis()); - + Observable.combineLatest(subject1, subject2, (a, b) -> "biFun call " + a + ", " + b) .subscribe(v -> System.out.println("Combined latest: " + v)); } diff --git a/src/test/java/hu/akarnokd/rxjava2/BehaviorSubjectCombineLatestTest.java b/src/test/java/hu/akarnokd/rxjava2/BehaviorSubjectCombineLatestTest.java index 9678e25d..ed46c6d2 100644 --- a/src/test/java/hu/akarnokd/rxjava2/BehaviorSubjectCombineLatestTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/BehaviorSubjectCombineLatestTest.java @@ -16,10 +16,10 @@ public class BehaviorSubjectCombineLatestTest { public void test() { Subject intSource = BehaviorSubject.createDefault(1); - Subject>> mainSubject = + Subject>> mainSubject = BehaviorSubject.createDefault(singletonList(intSource)); - TestObserver> testObserver = + TestObserver> testObserver = mainSubject.flatMap(observables -> Observable.combineLatest(observables, this::castObjectsToInts) ) diff --git a/src/test/java/hu/akarnokd/rxjava2/BehaviorSubjectSignals.java b/src/test/java/hu/akarnokd/rxjava2/BehaviorSubjectSignals.java index 3c0a8f5a..9ec7e9b8 100644 --- a/src/test/java/hu/akarnokd/rxjava2/BehaviorSubjectSignals.java +++ b/src/test/java/hu/akarnokd/rxjava2/BehaviorSubjectSignals.java @@ -9,22 +9,22 @@ public class BehaviorSubjectSignals { @Test public void test() throws Exception { - + CompositeDisposable cd = new CompositeDisposable(); BehaviorSubject bs = BehaviorSubject.create(); startListening(cd, bs); - + bs.onNext(1); bs.onNext(2); - + System.out.println("----"); - + startListening(cd, bs); bs.onNext(3); } - + void startListening(CompositeDisposable cd, BehaviorSubject bs) { Disposable d = bs .doOnNext(v -> System.out.println("After subject " + v)) @@ -41,7 +41,7 @@ void startListening(CompositeDisposable cd, BehaviorSubject bs) { System.out.println("Before Composite.add"); cd.add(d); } - + void stopListening(CompositeDisposable cd) { System.out.println("Stop listening"); cd.clear(); diff --git a/src/test/java/hu/akarnokd/rxjava2/BehaviorWithLatestTest.java b/src/test/java/hu/akarnokd/rxjava2/BehaviorWithLatestTest.java index bdd16ebd..87e80083 100644 --- a/src/test/java/hu/akarnokd/rxjava2/BehaviorWithLatestTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/BehaviorWithLatestTest.java @@ -11,7 +11,7 @@ public class BehaviorWithLatestTest { public void bothInit() { BehaviorSubject s1 = BehaviorSubject.createDefault(""); BehaviorSubject s2 = BehaviorSubject.createDefault(""); - + s1.withLatestFrom(s2, (a, b) -> true) .test() .assertValue(true); diff --git a/src/test/java/hu/akarnokd/rxjava2/BlockingSubscribeOrdering.java b/src/test/java/hu/akarnokd/rxjava2/BlockingSubscribeOrdering.java index 6ac1d214..260b7621 100644 --- a/src/test/java/hu/akarnokd/rxjava2/BlockingSubscribeOrdering.java +++ b/src/test/java/hu/akarnokd/rxjava2/BlockingSubscribeOrdering.java @@ -10,7 +10,7 @@ public class BlockingSubscribeOrdering { public void test() { Flowable.just(1, 2) .concatWith(Flowable.error(new Exception("whoops"))) - .blockingSubscribe(v -> System.out.println("received: " + v), + .blockingSubscribe(v -> System.out.println("received: " + v), e -> { e.printStackTrace(System.out); }, () -> System.out.println("completed")); diff --git a/src/test/java/hu/akarnokd/rxjava2/BufferDebounce.java b/src/test/java/hu/akarnokd/rxjava2/BufferDebounce.java index aa5c8a1a..f2aa292a 100644 --- a/src/test/java/hu/akarnokd/rxjava2/BufferDebounce.java +++ b/src/test/java/hu/akarnokd/rxjava2/BufferDebounce.java @@ -14,20 +14,20 @@ public class BufferDebounce { @Test public void test() { PublishSubject ps = PublishSubject.create(); - + TestScheduler sch = new TestScheduler(); - + ps.compose(bufferDebounce(200, TimeUnit.MILLISECONDS, sch)) .subscribe( v -> System.out.println(sch.now(TimeUnit.MILLISECONDS)+ ": " + v), Throwable::printStackTrace, () -> System.out.println("Done")); - + ps.onNext(1); ps.onNext(2); - + sch.advanceTimeTo(100, TimeUnit.MILLISECONDS); - + ps.onNext(3); sch.advanceTimeTo(150, TimeUnit.MILLISECONDS); @@ -49,10 +49,10 @@ public void test() { sch.advanceTimeTo(850, TimeUnit.MILLISECONDS); } - + static ObservableTransformer> bufferDebounce(long time, TimeUnit unit, Scheduler scheduler) { return o -> - o.publish(v -> + o.publish(v -> v.buffer(v.debounce(time, unit, scheduler) .takeUntil(v.ignoreElements().toObservable()) ) diff --git a/src/test/java/hu/akarnokd/rxjava2/BufferDelayErrorTest.java b/src/test/java/hu/akarnokd/rxjava2/BufferDelayErrorTest.java index 76fa84d0..41a87aec 100644 --- a/src/test/java/hu/akarnokd/rxjava2/BufferDelayErrorTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/BufferDelayErrorTest.java @@ -9,7 +9,7 @@ public class BufferDelayErrorTest { - + @Test public void test() { Flowable.range(0, 10) @@ -21,7 +21,7 @@ public void test() { .compose(bufferDelayError(5)) .subscribe(System.out::println, System.out::println); } - + static FlowableTransformer> bufferDelayError(int size) { return o -> Flowable.defer(() -> { PublishProcessor> ps = PublishProcessor.create(); diff --git a/src/test/java/hu/akarnokd/rxjava2/BufferUntilChanged.java b/src/test/java/hu/akarnokd/rxjava2/BufferUntilChanged.java index 547caa8e..2fd6e4c7 100644 --- a/src/test/java/hu/akarnokd/rxjava2/BufferUntilChanged.java +++ b/src/test/java/hu/akarnokd/rxjava2/BufferUntilChanged.java @@ -1,7 +1,6 @@ package hu.akarnokd.rxjava2; import java.util.*; -import java.util.concurrent.atomic.AtomicReference; import org.junit.Test; diff --git a/src/test/java/hu/akarnokd/rxjava2/BufferWithConditionAndTime.java b/src/test/java/hu/akarnokd/rxjava2/BufferWithConditionAndTime.java index 4cc1d1d7..77d7051c 100644 --- a/src/test/java/hu/akarnokd/rxjava2/BufferWithConditionAndTime.java +++ b/src/test/java/hu/akarnokd/rxjava2/BufferWithConditionAndTime.java @@ -16,29 +16,29 @@ public class BufferWithConditionAndTime { public void test() { TestScheduler scheduler = new TestScheduler(); PublishProcessor pp = PublishProcessor.create(); - - Function, Flowable>> f = o -> - o.buffer(o.filter(v -> v.contains("Start")), - v -> Flowable.merge(o.filter(w -> w.contains("End")), - Flowable.timer(5, TimeUnit.MINUTES, scheduler))); - + + Function, Flowable>> f = o -> + o.buffer(o.filter(v -> v.contains("Start")), + v -> Flowable.merge(o.filter(w -> w.contains("End")), + Flowable.timer(5, TimeUnit.MINUTES, scheduler))); + pp.publish(f) .subscribe(System.out::println); - + pp.onNext("Start"); pp.onNext("A"); pp.onNext("B"); pp.onNext("End"); - + pp.onNext("Start"); pp.onNext("C"); - + scheduler.advanceTimeBy(5, TimeUnit.MINUTES); - + pp.onNext("Start"); pp.onNext("D"); pp.onNext("End"); pp.onComplete(); - + } } diff --git a/src/test/java/hu/akarnokd/rxjava2/CombineLatestError.java b/src/test/java/hu/akarnokd/rxjava2/CombineLatestError.java index b2ab6f86..3bdf52cc 100644 --- a/src/test/java/hu/akarnokd/rxjava2/CombineLatestError.java +++ b/src/test/java/hu/akarnokd/rxjava2/CombineLatestError.java @@ -21,7 +21,7 @@ public void test() { return ((int) ints[0]) + ((int) ints[1]); } ).blockingFirst(); - + Assert.assertEquals(42, result); } } diff --git a/src/test/java/hu/akarnokd/rxjava2/ConcatRange.java b/src/test/java/hu/akarnokd/rxjava2/ConcatRange.java index 3d5195c2..8095cc68 100644 --- a/src/test/java/hu/akarnokd/rxjava2/ConcatRange.java +++ b/src/test/java/hu/akarnokd/rxjava2/ConcatRange.java @@ -40,7 +40,7 @@ public void accept(String s) throws Exception { System.out.println("concatMap: accept:" + s); } }); - + Thread.sleep(2000); } @@ -73,7 +73,7 @@ public void accept(String s) throws Exception { System.out.println("concatMap: accept:" + s); } }); - + Thread.sleep(2000); } } diff --git a/src/test/java/hu/akarnokd/rxjava2/ConcurrentSingleCache.java b/src/test/java/hu/akarnokd/rxjava2/ConcurrentSingleCache.java index 9ebe1773..6450cff5 100644 --- a/src/test/java/hu/akarnokd/rxjava2/ConcurrentSingleCache.java +++ b/src/test/java/hu/akarnokd/rxjava2/ConcurrentSingleCache.java @@ -16,7 +16,7 @@ Single longLoadFromDatabase(String guid) { return Single.just(new Entity()) .delay(1, TimeUnit.SECONDS); } - + public Single getEntity(String guid) { SingleSubject e = map.get(guid); if (e == null) { @@ -30,14 +30,14 @@ public Single getEntity(String guid) { } return e; } - + @Test public void test() throws Exception { String g = "Key"; getEntity(g).subscribe(System.out::println); getEntity(g).subscribe(System.out::println); getEntity(g).subscribe(System.out::println); - + Thread.sleep(2000); } } diff --git a/src/test/java/hu/akarnokd/rxjava2/ConnectConnect.java b/src/test/java/hu/akarnokd/rxjava2/ConnectConnect.java index 7837772f..49c2fa72 100644 --- a/src/test/java/hu/akarnokd/rxjava2/ConnectConnect.java +++ b/src/test/java/hu/akarnokd/rxjava2/ConnectConnect.java @@ -29,7 +29,7 @@ public void schedulerTest() throws InterruptedException { .map(v -> v * 10) .publishOn(single()) .log() - .subscribeOn(elastic()) + .subscribeOn(boundedElastic()) .subscribe(v -> {} , e -> {}, latch::countDown); Thread.sleep(100); @@ -58,7 +58,7 @@ public void schedulerTestRx() throws InterruptedException { .subscribe(v -> {} , e -> {}, latch::countDown); Thread.sleep(100); - + connectableFlux.connect(); latch.await(); } diff --git a/src/test/java/hu/akarnokd/rxjava2/Covariance.java b/src/test/java/hu/akarnokd/rxjava2/Covariance.java index 6ceabcd2..c779ba54 100644 --- a/src/test/java/hu/akarnokd/rxjava2/Covariance.java +++ b/src/test/java/hu/akarnokd/rxjava2/Covariance.java @@ -11,17 +11,17 @@ public class Covariance { @Test public void test() { Single> list = null; - + //m1(list); m2(list); } - + public void m1(Single> p) { - + } - + public void m2(Single> p) { - + } } diff --git a/src/test/java/hu/akarnokd/rxjava2/CreateFlatFlat.java b/src/test/java/hu/akarnokd/rxjava2/CreateFlatFlat.java index ceacf6ba..fb7df476 100644 --- a/src/test/java/hu/akarnokd/rxjava2/CreateFlatFlat.java +++ b/src/test/java/hu/akarnokd/rxjava2/CreateFlatFlat.java @@ -53,7 +53,7 @@ public void subscribe(ObservableEmitter emitter) throws Exception { , () -> log("complete!") ); } - + static void log(String s) { System.out.println(s); } diff --git a/src/test/java/hu/akarnokd/rxjava2/CustomFlowableTest.java b/src/test/java/hu/akarnokd/rxjava2/CustomFlowableTest.java index 8b9be68e..2332244c 100644 --- a/src/test/java/hu/akarnokd/rxjava2/CustomFlowableTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/CustomFlowableTest.java @@ -12,7 +12,7 @@ public void test() { new CustomFlowable().distinctUntilChanged((integer, integer2) -> integer.intValue() == integer2.intValue()) .subscribe(integer -> System.out.println("Consumer | Value: " + integer.intValue())); } - + public static final class CustomFlowable extends Flowable { @Override diff --git a/src/test/java/hu/akarnokd/rxjava2/DebounceRailTest.java b/src/test/java/hu/akarnokd/rxjava2/DebounceRailTest.java index a3ab8e7c..b9b199c9 100644 --- a/src/test/java/hu/akarnokd/rxjava2/DebounceRailTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/DebounceRailTest.java @@ -14,16 +14,16 @@ public class DebounceRailTest { @Test public void test() { PublishSubject subject = PublishSubject.create(); - + TestScheduler sch = new TestScheduler(); - + subject.compose(debounceOnly(v -> v.startsWith("A"), 100, TimeUnit.MILLISECONDS, sch)) .subscribe(System.out::println, Throwable::printStackTrace, () -> System.out.println("Done")); - + subject.onNext("A1"); - + sch.advanceTimeBy(100, TimeUnit.MILLISECONDS); - + subject.onNext("B1"); sch.advanceTimeBy(1, TimeUnit.MILLISECONDS); @@ -44,10 +44,10 @@ public void test() { subject.onNext("C2"); sch.advanceTimeBy(100, TimeUnit.MILLISECONDS); - + subject.onComplete(); } - + public static ObservableTransformer debounceOnly(Predicate condition, long time, TimeUnit unit, Scheduler scheduler) { return o -> o.publish(f -> f.concatMapEager(v -> { diff --git a/src/test/java/hu/akarnokd/rxjava2/DebounceTimeDrop.java b/src/test/java/hu/akarnokd/rxjava2/DebounceTimeDrop.java index 260849c8..b48b3299 100644 --- a/src/test/java/hu/akarnokd/rxjava2/DebounceTimeDrop.java +++ b/src/test/java/hu/akarnokd/rxjava2/DebounceTimeDrop.java @@ -10,30 +10,30 @@ import io.reactivex.functions.Consumer; import io.reactivex.schedulers.*; import io.reactivex.subjects.PublishSubject; - + public class DebounceTimeDrop { - + @Test public void test() { PublishSubject source = PublishSubject.create(); - + TestScheduler scheduler = new TestScheduler(); - + source.compose(debounceTime(10, TimeUnit.MILLISECONDS, scheduler, v -> { System.out.println( "Dropped: " + v + " @ T=" + scheduler.now(TimeUnit.MILLISECONDS)); })) .subscribe(v -> System.out.println( "Passed: " + v + " @ T=" + scheduler.now(TimeUnit.MILLISECONDS)), - Throwable::printStackTrace, + Throwable::printStackTrace, () -> System.out.println( "Done " + " @ T=" + scheduler.now(TimeUnit.MILLISECONDS))); - + source.onNext(1); scheduler.advanceTimeBy(10, TimeUnit.MILLISECONDS); - + scheduler.advanceTimeBy(20, TimeUnit.MILLISECONDS); - + source.onNext(2); scheduler.advanceTimeBy(1, TimeUnit.MILLISECONDS); source.onNext(3); @@ -42,24 +42,24 @@ public void test() { scheduler.advanceTimeBy(1, TimeUnit.MILLISECONDS); source.onNext(5); scheduler.advanceTimeBy(10, TimeUnit.MILLISECONDS); - + scheduler.advanceTimeBy(20, TimeUnit.MILLISECONDS); - + source.onNext(6); scheduler.advanceTimeBy(10, TimeUnit.MILLISECONDS); - + scheduler.advanceTimeBy(20, TimeUnit.MILLISECONDS); - + source.onComplete(); } - + public static ObservableTransformer debounceTime( - long time, TimeUnit unit, Scheduler scheduler, + long time, TimeUnit unit, Scheduler scheduler, Consumer dropped) { return o -> Observable.defer(() -> { AtomicLong index = new AtomicLong(); Queue> queue = new ConcurrentLinkedQueue<>(); - + return o.map(v -> { Timed t = new Timed<>(v, index.getAndIncrement(), TimeUnit.NANOSECONDS); queue.offer(t); diff --git a/src/test/java/hu/akarnokd/rxjava2/DelayBetween.java b/src/test/java/hu/akarnokd/rxjava2/DelayBetween.java index 558a1cad..6f41ddb4 100644 --- a/src/test/java/hu/akarnokd/rxjava2/DelayBetween.java +++ b/src/test/java/hu/akarnokd/rxjava2/DelayBetween.java @@ -12,7 +12,7 @@ public class DelayBetween { static Maybe getId(String id) { return Maybe.just(id); } - + @Test public void test() { String[] ids = {"1", "2", "3", "4", "5", "6", "7", "8"}; diff --git a/src/test/java/hu/akarnokd/rxjava2/DoOnErrorInside.java b/src/test/java/hu/akarnokd/rxjava2/DoOnErrorInside.java index 28a0dcd1..658d4f1f 100644 --- a/src/test/java/hu/akarnokd/rxjava2/DoOnErrorInside.java +++ b/src/test/java/hu/akarnokd/rxjava2/DoOnErrorInside.java @@ -17,7 +17,7 @@ public void test() { ) .subscribe(v -> System.out.println(v), e -> System.out.println("Error " + e)); } - + Single single(Integer v) { return Single.error(new IOException()); } diff --git a/src/test/java/hu/akarnokd/rxjava2/FileReaderTest.java b/src/test/java/hu/akarnokd/rxjava2/FileReaderTest.java index e54d1aba..24d765f8 100644 --- a/src/test/java/hu/akarnokd/rxjava2/FileReaderTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/FileReaderTest.java @@ -20,14 +20,14 @@ public void fileReader() throws Exception { .observeOn(Schedulers.io()) .doOnNext(v -> System.out.println(Thread.currentThread().getName() + " xxx")) .subscribe(System.out::println); - + Thread.sleep(10000); } - + @Test public void fileReader2() throws Exception { - Flowable.create(emitter -> { + Flowable.create(emitter -> { try (Stream s = Files.lines(Paths.get("files/ospd.txt"))) { s.limit(30).forEach(emitter::onNext); emitter.onComplete(); @@ -39,8 +39,8 @@ public void fileReader2() throws Exception { .subscribeOn(Schedulers.io(), false) .doOnNext(v -> System.out.println(Thread.currentThread().getName() + " xxx")) .subscribe(System.out::println); - + Thread.sleep(10000); } - + } diff --git a/src/test/java/hu/akarnokd/rxjava2/FlatMapCompletableThread.java b/src/test/java/hu/akarnokd/rxjava2/FlatMapCompletableThread.java index 76d495d8..4dad4b05 100644 --- a/src/test/java/hu/akarnokd/rxjava2/FlatMapCompletableThread.java +++ b/src/test/java/hu/akarnokd/rxjava2/FlatMapCompletableThread.java @@ -15,7 +15,7 @@ public class FlatMapCompletableThread { public void test() { for (int j = 0; j < 1; j++) { List writerObj = new ArrayList<>(); - + Observable.range(0, 1000) .map(i -> Observable.just("hello world")) .flatMap(obs -> obs diff --git a/src/test/java/hu/akarnokd/rxjava2/FlatMapDisposeTest.java b/src/test/java/hu/akarnokd/rxjava2/FlatMapDisposeTest.java index ae0aec32..334f0a5a 100644 --- a/src/test/java/hu/akarnokd/rxjava2/FlatMapDisposeTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/FlatMapDisposeTest.java @@ -17,21 +17,21 @@ public void test() { PublishSubject ps1 = PublishSubject.create(); PublishSubject ps2 = PublishSubject.create(); PublishSubject ps3 = PublishSubject.create(); - + TestObserver to = Observable.fromArray(ps1, ps2, ps3) .flatMap(v -> v) .test(); - + assertTrue(ps1.hasObservers()); assertTrue(ps2.hasObservers()); assertTrue(ps3.hasObservers()); - + ps2.onError(new TestException()); - + assertFalse(ps1.hasObservers()); assertFalse(ps2.hasObservers()); assertFalse(ps3.hasObservers()); - + to.assertFailure(TestException.class); } } diff --git a/src/test/java/hu/akarnokd/rxjava2/FlatMapFatal.java b/src/test/java/hu/akarnokd/rxjava2/FlatMapFatal.java index f859188c..9d22e38b 100644 --- a/src/test/java/hu/akarnokd/rxjava2/FlatMapFatal.java +++ b/src/test/java/hu/akarnokd/rxjava2/FlatMapFatal.java @@ -9,8 +9,8 @@ public class FlatMapFatal { @Test(expected = UnknownError.class) public void test() { Observable.just(1) - .flatMap(v -> { - throw new UnknownError(); + .flatMap(v -> { + throw new UnknownError(); }) .onErrorReturnItem(2) .test() diff --git a/src/test/java/hu/akarnokd/rxjava2/FlatMapWithTwoErrors.java b/src/test/java/hu/akarnokd/rxjava2/FlatMapWithTwoErrors.java index 9aed639f..e6782c90 100644 --- a/src/test/java/hu/akarnokd/rxjava2/FlatMapWithTwoErrors.java +++ b/src/test/java/hu/akarnokd/rxjava2/FlatMapWithTwoErrors.java @@ -13,7 +13,7 @@ public class FlatMapWithTwoErrors { public void innerCancelled() { PublishProcessor pp1 = PublishProcessor.create(); PublishProcessor pp2 = PublishProcessor.create(); - + pp1 .flatMap(v -> pp2) .test(); @@ -22,7 +22,7 @@ public void innerCancelled() { assertTrue("No subscribers?", pp2.hasSubscribers()); pp1.onError(new Exception()); - + assertFalse("Has subscribers?", pp2.hasSubscribers()); } @@ -30,7 +30,7 @@ public void innerCancelled() { public void innerCancelled2() { PublishProcessor pp1 = PublishProcessor.create(); PublishProcessor pp2 = PublishProcessor.create(); - + pp1 .concatMap(v -> pp2) .test(); @@ -39,16 +39,16 @@ public void innerCancelled2() { assertTrue("No subscribers?", pp2.hasSubscribers()); pp1.onError(new Exception()); - + assertFalse("Has subscribers?", pp2.hasSubscribers()); } - + @Test public void innerCancelled3() { PublishSubject pp1 = PublishSubject.create(); PublishSubject pp2 = PublishSubject.create(); - + pp1 .flatMap(v -> pp2) .test(); @@ -57,7 +57,7 @@ public void innerCancelled3() { assertTrue("No subscribers?", pp2.hasObservers()); pp1.onError(new Exception()); - + assertFalse("Has subscribers?", pp2.hasObservers()); } @@ -65,7 +65,7 @@ public void innerCancelled3() { public void innerCancelled4() { PublishSubject pp1 = PublishSubject.create(); PublishSubject pp2 = PublishSubject.create(); - + pp1 .concatMap(v -> pp2) .test(); @@ -74,7 +74,7 @@ public void innerCancelled4() { assertTrue("No subscribers?", pp2.hasObservers()); pp1.onError(new Exception()); - + assertFalse("Has subscribers?", pp2.hasObservers()); } } diff --git a/src/test/java/hu/akarnokd/rxjava2/FlowableIfNonEmptyComposeTest.java b/src/test/java/hu/akarnokd/rxjava2/FlowableIfNonEmptyComposeTest.java index b32253b7..f1611168 100644 --- a/src/test/java/hu/akarnokd/rxjava2/FlowableIfNonEmptyComposeTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/FlowableIfNonEmptyComposeTest.java @@ -32,7 +32,7 @@ public void simple2() { Function, Flux> transform = g -> g.doOnNext(System.out::println); Mono source = Flux.range(1, 5) .publish(f -> - f.limitRequest(1) + f.take(1, true) .concatMap(first -> transform.apply(f.startWith(first))) ) .ignoreElements() @@ -41,7 +41,7 @@ public void simple2() { source.subscribeWith(new TestSubscriber()) .assertResult(); } - + @Test public void error() { Flux.error(new IOException()) @@ -99,14 +99,14 @@ public void errorRx() { static Function, Mono> composeIfNonEmpty(Function, ? extends Mono> f) { return g -> - g.publish(h -> - h.limitRequest(1).concatMap(first -> f.apply(h.startWith(first))) + g.publish(h -> + h.take(1, true).concatMap(first -> f.apply(h.startWith(first))) ).ignoreElements(); } static FlowableTransformer composeIfNonEmptyRx(Function, ? extends Flowable> f) { return g -> - g.publish(h -> + g.publish(h -> h.limit(1).concatMap(first -> f.apply(h.startWith(first))) ).ignoreElements().toFlowable(); } @@ -131,19 +131,19 @@ static final class ComposeIfNotEmptySubscriber implements CoreSubscriber, Subscription { final Subscriber outputMonoSubscriber; - + final Function, ? extends Mono> transformer; - + final Queue queue; final AtomicReference> transformProducer; final TransformConsumer transformConsumer; - + static final TransformSubscription TERMINATED = new TransformSubscription<>(null, null); final int prefetch; - + final AtomicInteger wip; Subscription upstream; @@ -152,9 +152,9 @@ static final class ComposeIfNotEmptySubscriber Throwable error; volatile boolean cancelled; - + int consumed; - + long emitted; boolean nonEmpty; @@ -175,7 +175,7 @@ public void onSubscribe(Subscription s) { outputMonoSubscriber.onSubscribe(this); s.request(1); } - + @Override public void onNext(T t) { if (!nonEmpty) { @@ -183,7 +183,7 @@ public void onNext(T t) { if (prefetch != 1) { upstream.request(prefetch - 1); } - + try { transformer.apply(this).subscribe(transformConsumer); } catch (Throwable ex) { @@ -195,7 +195,7 @@ public void onNext(T t) { queue.offer(t); drain(); } - + @Override public void onError(Throwable t) { upstream = Operators.cancelledSubscription(); @@ -207,7 +207,7 @@ public void onError(Throwable t) { drain(); } } - + @Override public void onComplete() { upstream = Operators.cancelledSubscription(); @@ -233,7 +233,7 @@ public void cancel() { queue.clear(); } } - + @Override public void subscribe(CoreSubscriber actual) { TransformSubscription sub = new TransformSubscription<>(actual, this); @@ -257,13 +257,13 @@ public void subscribe(CoreSubscriber actual) { } } } - + @SuppressWarnings({"unchecked", "rawtypes"}) void drain() { if (wip.getAndIncrement() != 0) { return; } - + int missed = 1; long e = emitted; int c = consumed; @@ -273,10 +273,10 @@ void drain() { outer: for (;;) { - + if (current != null && !current.cancelled) { long r = current.get(); - + while (e != r) { if (cancelled) { queue.clear(); @@ -286,11 +286,11 @@ void drain() { if (current.cancelled) { break; } - + boolean d = done; T v = queue.poll(); boolean empty = v == null; - + if (d && empty) { Throwable ex = error; current = transformProducer.getAndSet((TransformSubscription)TERMINATED); @@ -303,7 +303,7 @@ void drain() { } return; } - + if (empty) { break; } @@ -311,28 +311,28 @@ void drain() { current.transformSubscriber.onNext(v); e++; - + if (++c == lim) { c = 0; upstream.request(lim); } - + TransformSubscription fresh = transformProducer.get(); if (current.cancelled || current != fresh) { current = fresh; continue outer; } } - + if (e == r) { if (cancelled) { queue.clear(); return; } - + boolean d = done; boolean empty = queue.isEmpty(); - + if (d && empty) { Throwable ex = error; current = transformProducer.getAndSet((TransformSubscription)TERMINATED); @@ -347,16 +347,16 @@ void drain() { } } } - + missed = wip.addAndGet(-missed); if (missed == 0) { break; } - + current = transformProducer.get(); } } - + static final class TransformSubscription extends AtomicLong implements Subscription { @@ -365,14 +365,14 @@ static final class TransformSubscription extends AtomicLong final Subscriber transformSubscriber; final ComposeIfNotEmptySubscriber parent; - + volatile boolean cancelled; TransformSubscription(Subscriber transformSubscriber, ComposeIfNotEmptySubscriber parent) { this.transformSubscriber = transformSubscriber; this.parent = parent; } - + @Override public void request(long n) { for (;;) { @@ -386,28 +386,28 @@ public void request(long n) { break; } } - + } - + @Override public void cancel() { cancelled = true; parent.transformProducer.compareAndSet(this, null); } } - - static final class TransformConsumer + + static final class TransformConsumer extends AtomicReference implements CoreSubscriber { private static final long serialVersionUID = -3146687172085237026L; final ComposeIfNotEmptySubscriber parent; - + TransformConsumer(ComposeIfNotEmptySubscriber parent) { this.parent = parent; } - + @Override public void onSubscribe(Subscription s) { if (compareAndSet(null, s)) { @@ -416,11 +416,11 @@ public void onSubscribe(Subscription s) { s.cancel(); } } - + @Override public void onNext(Void t) { } - + @Override public void onError(Throwable t) { parent.upstream.cancel(); @@ -432,7 +432,7 @@ public void onComplete() { parent.upstream.cancel(); parent.outputMonoSubscriber.onComplete(); } - + void cancel() { Subscription s = getAndSet(Operators.cancelledSubscription()); if (s != null && s != Operators.cancelledSubscription()) { diff --git a/src/test/java/hu/akarnokd/rxjava2/FlowableMergeTest.java b/src/test/java/hu/akarnokd/rxjava2/FlowableMergeTest.java index 715637e0..de124119 100644 --- a/src/test/java/hu/akarnokd/rxjava2/FlowableMergeTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/FlowableMergeTest.java @@ -6,10 +6,10 @@ import io.reactivex.internal.schedulers.SingleScheduler; public class FlowableMergeTest { - - static final Scheduler SCHEDULER1 = new SingleScheduler(); - static final Scheduler SCHEDULER2 = new SingleScheduler(); + static final Scheduler SCHEDULER1 = new SingleScheduler(); + + static final Scheduler SCHEDULER2 = new SingleScheduler(); @Test public void nameLoop() throws Exception { @@ -20,7 +20,7 @@ public void nameLoop() throws Exception { name(); } } - + @Test(timeout = 1000) public void name() throws Exception { Flowable f1 = Flowable.create(sink -> { diff --git a/src/test/java/hu/akarnokd/rxjava2/FlowableStringInputStreamTest.java b/src/test/java/hu/akarnokd/rxjava2/FlowableStringInputStreamTest.java index ff249440..6a2fb124 100644 --- a/src/test/java/hu/akarnokd/rxjava2/FlowableStringInputStreamTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/FlowableStringInputStreamTest.java @@ -58,7 +58,7 @@ public void simple() throws Exception { assertEquals(-1, is.read()); assertEquals(-1, is.read(buf)); - + assertEquals(0, is.available()); } @@ -120,12 +120,12 @@ public void async() throws Exception { .doOnCancel(() -> calls.incrementAndGet()) .subscribeOn(Schedulers.computation()) .delay(10, TimeUnit.MILLISECONDS); - + try (InputStream is = FlowableStringInputStream.createInputStream(f, utf8)) { assertEquals('1', is.read()); assertEquals('0', is.read()); assertEquals('0', is.read()); - + byte[] buf = new byte[3]; assertEquals(3, is.read(buf)); @@ -138,7 +138,7 @@ public void async() throws Exception { @Test(timeout = 10000) public void asyncCancel() throws Exception { InputStream is = FlowableStringInputStream.createInputStream(Flowable.never(), utf8); - + Schedulers.single().scheduleDirect(() -> { try { is.close(); @@ -159,7 +159,7 @@ public void interruptAsync() { Schedulers.single().scheduleDirect(() -> { t.interrupt(); }, 500, TimeUnit.MILLISECONDS); - + try { is.read(); fail("Should have thrown"); @@ -171,7 +171,7 @@ public void interruptAsync() { Thread.interrupted(); } } - + @Test public void indexVerify() throws IOException { InputStream is = FlowableStringInputStream.createInputStream(Flowable.just("abc"), utf8); diff --git a/src/test/java/hu/akarnokd/rxjava2/FromIterableFlatMap.java b/src/test/java/hu/akarnokd/rxjava2/FromIterableFlatMap.java index 5274b6fc..45e5064b 100644 --- a/src/test/java/hu/akarnokd/rxjava2/FromIterableFlatMap.java +++ b/src/test/java/hu/akarnokd/rxjava2/FromIterableFlatMap.java @@ -10,7 +10,7 @@ public class FromIterableFlatMap { static class Result { } - + public static Observable getResults(List requests) { return Observable.fromIterable(requests) .flatMap( aLong -> { @@ -18,7 +18,7 @@ public static Observable getResults(List requests) { return Observable.fromIterable(Arrays.asList(items)); }); } - + @Test public void test() { List ids = new ArrayList<>(Arrays.asList(1L, 2L, 3L)); diff --git a/src/test/java/hu/akarnokd/rxjava2/GroupByTake5.java b/src/test/java/hu/akarnokd/rxjava2/GroupByTake5.java index d503fb6d..f88a4574 100644 --- a/src/test/java/hu/akarnokd/rxjava2/GroupByTake5.java +++ b/src/test/java/hu/akarnokd/rxjava2/GroupByTake5.java @@ -10,7 +10,7 @@ public class GroupByTake5 { public void test() { Observable.range(1, 50) .groupBy(v -> v / 10) - .flatMap(group -> + .flatMap(group -> group.publish(p -> p.take(5).mergeWith(p.ignoreElements())) ) .subscribe(System.out::println); diff --git a/src/test/java/hu/akarnokd/rxjava2/GroupByTaken.java b/src/test/java/hu/akarnokd/rxjava2/GroupByTaken.java index 4e9bdd5d..3533d911 100644 --- a/src/test/java/hu/akarnokd/rxjava2/GroupByTaken.java +++ b/src/test/java/hu/akarnokd/rxjava2/GroupByTaken.java @@ -27,7 +27,7 @@ public void test2() { }) .blockingForEach(System.out::println); } - + @Test public void test3() { Observable.intervalRange(0, 20, 0, 1, TimeUnit.MILLISECONDS) diff --git a/src/test/java/hu/akarnokd/rxjava2/GroupByTimeout.java b/src/test/java/hu/akarnokd/rxjava2/GroupByTimeout.java index 1cf960d6..de4a6ac6 100644 --- a/src/test/java/hu/akarnokd/rxjava2/GroupByTimeout.java +++ b/src/test/java/hu/akarnokd/rxjava2/GroupByTimeout.java @@ -10,10 +10,10 @@ public class GroupByTimeout { @Test public void test() { PublishSubject ps = PublishSubject.create(); - + ps.groupBy(v -> v % 5).flatMap(g -> g.timeout(1, TimeUnit.HOURS)) .subscribe(System.out::println); - - + + } } diff --git a/src/test/java/hu/akarnokd/rxjava2/HookThrowing.java b/src/test/java/hu/akarnokd/rxjava2/HookThrowing.java index 80bbd340..163fa493 100644 --- a/src/test/java/hu/akarnokd/rxjava2/HookThrowing.java +++ b/src/test/java/hu/akarnokd/rxjava2/HookThrowing.java @@ -21,17 +21,17 @@ public void before() { throw new RuntimeException("Fail up"); }); } - + @SuppressWarnings("unchecked") static void sneakyThrow(Throwable ex) throws E { throw (E)ex; } - + @After public void after() { RxJavaPlugins.reset(); } - + @Test public void test() { Observable.error(new IOException()) diff --git a/src/test/java/hu/akarnokd/rxjava2/IsDisposedTest.java b/src/test/java/hu/akarnokd/rxjava2/IsDisposedTest.java index bb5bb580..14f29edf 100644 --- a/src/test/java/hu/akarnokd/rxjava2/IsDisposedTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/IsDisposedTest.java @@ -38,7 +38,7 @@ public void onComplete() { } }); } - + @Test public void test2() { Observable.create(new ObservableOnSubscribe() { @@ -74,6 +74,6 @@ public void onComplete() { System.out.println("Complete"); System.out.println(disposable.isDisposed()); } - }); + }); } } diff --git a/src/test/java/hu/akarnokd/rxjava2/JoinPairwise.java b/src/test/java/hu/akarnokd/rxjava2/JoinPairwise.java index 26cba038..61021b1e 100644 --- a/src/test/java/hu/akarnokd/rxjava2/JoinPairwise.java +++ b/src/test/java/hu/akarnokd/rxjava2/JoinPairwise.java @@ -9,7 +9,7 @@ public class JoinPairwise { - static abstract class Pair implements Comparable { + static abstract class Pair implements Comparable { int value; @Override @@ -17,7 +17,7 @@ public int compareTo(Pair o) { return Integer.compare(value, o.value); } } - + static final class Left extends Pair { Left(int value) { this.value = value; @@ -28,7 +28,7 @@ public String toString() { return "[" + value + ", _]"; } } - + static final class Right extends Pair { Right(int value) { this.value = value; @@ -39,12 +39,12 @@ public String toString() { return "[_, " + value + "]"; } } - + static final class Both extends Pair { Both(int value) { this.value = value; } - + @Override public int hashCode() { return value; @@ -63,7 +63,7 @@ public String toString() { return "[" + value + ", " + value + "]"; } } - + @SuppressWarnings("unchecked") @Test public void test() { diff --git a/src/test/java/hu/akarnokd/rxjava2/JustFromEagerCancel.java b/src/test/java/hu/akarnokd/rxjava2/JustFromEagerCancel.java index a549cf43..8727dc93 100644 --- a/src/test/java/hu/akarnokd/rxjava2/JustFromEagerCancel.java +++ b/src/test/java/hu/akarnokd/rxjava2/JustFromEagerCancel.java @@ -12,13 +12,13 @@ public class JustFromEagerCancel { @Test public void test() { AtomicInteger cnt = new AtomicInteger(); - - Callable a = () -> cnt.incrementAndGet(); + + Callable a = () -> cnt.incrementAndGet(); Observable.fromCallable(() -> a) .map(v -> v.call()) .test(true) .assertEmpty(); - + Assert.assertEquals(0, cnt.get()); } } diff --git a/src/test/java/hu/akarnokd/rxjava2/LatestObserveOnTest.java b/src/test/java/hu/akarnokd/rxjava2/LatestObserveOnTest.java index 00e61d57..42baa8bb 100644 --- a/src/test/java/hu/akarnokd/rxjava2/LatestObserveOnTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/LatestObserveOnTest.java @@ -23,7 +23,7 @@ public void test() throws Exception { Thread.sleep(100); ts.onNext(v); }, ts::onError, ts::onComplete); - + ts.awaitDone(5, TimeUnit.SECONDS) .assertResult(1, 100); } diff --git a/src/test/java/hu/akarnokd/rxjava2/LatestSuccessTest.java b/src/test/java/hu/akarnokd/rxjava2/LatestSuccessTest.java index 0d66f707..1dd3d3b3 100644 --- a/src/test/java/hu/akarnokd/rxjava2/LatestSuccessTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/LatestSuccessTest.java @@ -16,7 +16,7 @@ public void test() { .test() .assertResult(2); } - + @SafeVarargs public static Single latestSuccess(Single... sources) { return Single.defer(() -> { diff --git a/src/test/java/hu/akarnokd/rxjava2/LazyUndeliverable.java b/src/test/java/hu/akarnokd/rxjava2/LazyUndeliverable.java index d26a9f4a..0e13904c 100644 --- a/src/test/java/hu/akarnokd/rxjava2/LazyUndeliverable.java +++ b/src/test/java/hu/akarnokd/rxjava2/LazyUndeliverable.java @@ -12,7 +12,7 @@ private String simulateHeavyWork() throws InterruptedException { Thread.sleep(2000); return "Done"; } - + @Test public void deferObservable() throws Exception { Disposable disposable = Observable.defer(() -> Observable.just(simulateHeavyWork())) @@ -23,7 +23,7 @@ public void deferObservable() throws Exception { Thread.sleep(5000); } - + @Test public void deferFlowable() throws Exception { Disposable disposable = Flowable.defer(() -> Flowable.just(simulateHeavyWork())) diff --git a/src/test/java/hu/akarnokd/rxjava2/ListFlattening.java b/src/test/java/hu/akarnokd/rxjava2/ListFlattening.java index 617d56b1..6d4587f2 100644 --- a/src/test/java/hu/akarnokd/rxjava2/ListFlattening.java +++ b/src/test/java/hu/akarnokd/rxjava2/ListFlattening.java @@ -13,7 +13,7 @@ static class User { } Observable getUserDetails(User u) { return Observable.empty(); } - + @Test public void test() { Observable> users = Observable.just(new ArrayList<>()); diff --git a/src/test/java/hu/akarnokd/rxjava2/ListGrouping.java b/src/test/java/hu/akarnokd/rxjava2/ListGrouping.java index 5ba3795f..90df69cf 100644 --- a/src/test/java/hu/akarnokd/rxjava2/ListGrouping.java +++ b/src/test/java/hu/akarnokd/rxjava2/ListGrouping.java @@ -7,22 +7,22 @@ import io.reactivex.Observable; import io.reactivex.ObservableTransformer; import io.reactivex.functions.Predicate; - + public class ListGrouping { - + static class Group { List grouped; String groupKey; } - - + + static boolean groupCE(String t) { return "C".equals(t) || "E".equals(t); } - + static ObservableTransformer group( Predicate groupCheck) { - return strings -> + return strings -> Observable.defer(() -> { Group gr = new Group(); return strings @@ -68,16 +68,16 @@ static ObservableTransformer group( })); }); } - + @Test public void test() { Observable.fromArray("ABCCCDEF".split("")) .compose(group(ListGrouping::groupCE)) .subscribe(System.out::println); ; - + System.out.println("----"); - + Observable.fromArray("ABCEFEECCC".split("")) .compose(group(ListGrouping::groupCE)) .subscribe(System.out::println); diff --git a/src/test/java/hu/akarnokd/rxjava2/LockstepObserveOnTest.java b/src/test/java/hu/akarnokd/rxjava2/LockstepObserveOnTest.java index 57957725..3ee2ac91 100644 --- a/src/test/java/hu/akarnokd/rxjava2/LockstepObserveOnTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/LockstepObserveOnTest.java @@ -9,9 +9,9 @@ import io.reactivex.Scheduler.Worker; import io.reactivex.internal.util.BackpressureHelper; import io.reactivex.schedulers.Schedulers; - + public class LockstepObserveOnTest { - + @Test public void test() { Flowable.generate(() -> 0, (s, e) -> { @@ -31,55 +31,55 @@ public void test() { .take(50) .blockingSubscribe(); } - - static final class LockstepObserveOn extends Flowable + + static final class LockstepObserveOn extends Flowable implements FlowableTransformer { - + final Flowable source; - + final Scheduler scheduler; - + LockstepObserveOn(Scheduler scheduler) { this(null, scheduler); } - + LockstepObserveOn(Flowable source, Scheduler scheduler) { this.source = source; this.scheduler = scheduler; } - + @Override protected void subscribeActual(Subscriber subscriber) { source.subscribe(new LockstepObserveOnSubscriber<>(subscriber, scheduler.createWorker())); } - + @Override public Publisher apply(Flowable upstream) { return new LockstepObserveOn<>(upstream, scheduler); } - + static final class LockstepObserveOnSubscriber implements FlowableSubscriber, Subscription, Runnable { - + final Subscriber actual; - + final Worker worker; - + final AtomicReference item; - + final AtomicLong requested; - + final AtomicInteger wip; - + Subscription upstream; - + volatile boolean cancelled; - + volatile boolean done; Throwable error; - + long emitted; - + LockstepObserveOnSubscriber(Subscriber actual, Worker worker) { this.actual = actual; this.worker = worker; @@ -87,39 +87,39 @@ static final class LockstepObserveOnSubscriber this.requested = new AtomicLong(); this.wip = new AtomicInteger(); } - + @Override public void onSubscribe(Subscription s) { upstream = s; actual.onSubscribe(this); s.request(1); } - + @Override public void onNext(T t) { item.lazySet(t); schedule(); } - + @Override public void onError(Throwable t) { error = t; done = true; schedule(); } - + @Override public void onComplete() { done = true; schedule(); } - + @Override public void request(long n) { BackpressureHelper.add(requested, n); schedule(); } - + @Override public void cancel() { cancelled = true; @@ -129,32 +129,32 @@ public void cancel() { item.lazySet(null); } } - + void schedule() { if (wip.getAndIncrement() == 0) { worker.schedule(this); } } - + @Override public void run() { int missed = 1; long e = emitted; - + for (;;) { - + long r = requested.get(); - + while (e != r) { if (cancelled) { item.lazySet(null); return; } - + boolean d = done; T v = item.get(); boolean empty = v == null; - + if (d && empty) { Throwable ex = error; if (ex == null) { @@ -165,20 +165,20 @@ public void run() { worker.dispose(); return; } - + if (empty) { break; } - + item.lazySet(null); - + upstream.request(1); - + actual.onNext(v); - + e++; } - + if (e == r) { if (cancelled) { item.lazySet(null); @@ -195,7 +195,7 @@ public void run() { return; } } - + emitted = e; missed = wip.addAndGet(-missed); if (missed == 0) { diff --git a/src/test/java/hu/akarnokd/rxjava2/MatchIndex.java b/src/test/java/hu/akarnokd/rxjava2/MatchIndex.java index 7c955ee2..7295a713 100644 --- a/src/test/java/hu/akarnokd/rxjava2/MatchIndex.java +++ b/src/test/java/hu/akarnokd/rxjava2/MatchIndex.java @@ -12,7 +12,7 @@ public void test() { Observable.range(1, 10) .compose(indexOf(v -> v == 5)) .subscribe(System.out::println); - + Observable.range(1, 10) .compose(indexOf(v -> v == 12)) .subscribe(System.out::println); diff --git a/src/test/java/hu/akarnokd/rxjava2/MaxByTest.java b/src/test/java/hu/akarnokd/rxjava2/MaxByTest.java index c8c51070..2ce40699 100644 --- a/src/test/java/hu/akarnokd/rxjava2/MaxByTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/MaxByTest.java @@ -9,8 +9,8 @@ public class MaxByTest { @Test public void test() { Flowable.fromArray("a", "bb", "ccc", "d", "eee", "ffff") - .reduce((last, current) -> - Integer.compare(last.length(), current.length()) >= 0 + .reduce((last, current) -> + Integer.compare(last.length(), current.length()) >= 0 ? last : current) .subscribe(System.out::println); } diff --git a/src/test/java/hu/akarnokd/rxjava2/MultiplyDigits.java b/src/test/java/hu/akarnokd/rxjava2/MultiplyDigits.java index 464dfbb0..23ed38d7 100644 --- a/src/test/java/hu/akarnokd/rxjava2/MultiplyDigits.java +++ b/src/test/java/hu/akarnokd/rxjava2/MultiplyDigits.java @@ -12,23 +12,23 @@ public void test() { BigInteger ten = new BigInteger("10"); System.out.println(number); - + int j = 1; while (number.compareTo(ten) > 0) { - + String s = number.toString(); - + BigInteger newNum = new BigInteger(s.substring(0, 1)); - + for (int i = 1; i < s.length(); i++) { newNum = newNum.multiply(new BigInteger(s.substring(i, i + 1))); } - + System.out.print(j++); System.out.print(": "); System.out.println(newNum); - + number = newNum; } } diff --git a/src/test/java/hu/akarnokd/rxjava2/NotInFirst.java b/src/test/java/hu/akarnokd/rxjava2/NotInFirst.java index 2ad17623..780554be 100644 --- a/src/test/java/hu/akarnokd/rxjava2/NotInFirst.java +++ b/src/test/java/hu/akarnokd/rxjava2/NotInFirst.java @@ -12,9 +12,9 @@ public class NotInFirst { public void test() { Observable obs1 = Observable.range(1, 10); Observable obs2 = Observable.range(5, 10); - + obs1.collect(HashSet::new, (a, b) -> a.add(b)) - .flatMapObservable(set -> + .flatMapObservable(set -> obs2.filter(set::contains) ) .subscribe(System.out::println); diff --git a/src/test/java/hu/akarnokd/rxjava2/ObservableConcatEagerTest.java b/src/test/java/hu/akarnokd/rxjava2/ObservableConcatEagerTest.java index ff5c6bd1..dd4f02ef 100644 --- a/src/test/java/hu/akarnokd/rxjava2/ObservableConcatEagerTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/ObservableConcatEagerTest.java @@ -12,7 +12,7 @@ public class ObservableConcatEagerTest { @Test public void test() { //Set set = Ix.range(1, 1_000_000).toSet(); - + Observable.range(1, 100000) .buffer(10) .concatMapEager(value -> Observable.just(value) diff --git a/src/test/java/hu/akarnokd/rxjava2/ObservableOnSubscribeTest.java b/src/test/java/hu/akarnokd/rxjava2/ObservableOnSubscribeTest.java index 4e6296bc..5a3a3e85 100644 --- a/src/test/java/hu/akarnokd/rxjava2/ObservableOnSubscribeTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/ObservableOnSubscribeTest.java @@ -1,15 +1,15 @@ package hu.akarnokd.rxjava2; import io.reactivex.*; - + public class ObservableOnSubscribeTest { public static void main(String[] args) { - Observable observable = Observable.create( + Observable.create( new ObservableOnSubscribe(){ @Override public void subscribe(ObservableEmitter sub){ sub.onNext("New Datas"); - sub.onComplete(); + sub.onComplete(); } } ); diff --git a/src/test/java/hu/akarnokd/rxjava2/OnErrorCrash.java b/src/test/java/hu/akarnokd/rxjava2/OnErrorCrash.java index 16079bf1..4b367d4a 100644 --- a/src/test/java/hu/akarnokd/rxjava2/OnErrorCrash.java +++ b/src/test/java/hu/akarnokd/rxjava2/OnErrorCrash.java @@ -13,7 +13,7 @@ public void test() throws Exception { .subscribeOn(Schedulers.io()) .observeOn(Schedulers.computation()) .subscribe(v -> { }, e -> { throw new RuntimeException(e); }); - + Thread.sleep(50000); } } diff --git a/src/test/java/hu/akarnokd/rxjava2/PSTestWithTS.java b/src/test/java/hu/akarnokd/rxjava2/PSTestWithTS.java index d80be296..9c80c5d5 100644 --- a/src/test/java/hu/akarnokd/rxjava2/PSTestWithTS.java +++ b/src/test/java/hu/akarnokd/rxjava2/PSTestWithTS.java @@ -11,21 +11,21 @@ public class PSTestWithTS { PublishSubject source = PublishSubject.create(); - + String value = "initial"; - + void prepare(Scheduler sub, Scheduler on) { source .subscribeOn(sub) .observeOn(on) .subscribe(v -> value = v); } - + @Test public void test() { String testString = "testString"; TestScheduler sch = new TestScheduler(); - + prepare(sch, sch); sch.triggerActions(); diff --git a/src/test/java/hu/akarnokd/rxjava2/PagingFeedbackLoop.java b/src/test/java/hu/akarnokd/rxjava2/PagingFeedbackLoop.java index c5def6d0..b4214a79 100644 --- a/src/test/java/hu/akarnokd/rxjava2/PagingFeedbackLoop.java +++ b/src/test/java/hu/akarnokd/rxjava2/PagingFeedbackLoop.java @@ -18,11 +18,11 @@ List service(int index) { } return list; } - + Flowable> getPage(int index) { FlowableProcessor pager = UnicastProcessor.create().toSerialized(); pager.onNext(index); - + return pager.observeOn(Schedulers.trampoline(), true, 1) .map(v -> { List list = service(v); diff --git a/src/test/java/hu/akarnokd/rxjava2/ParallelFileProcessing.java b/src/test/java/hu/akarnokd/rxjava2/ParallelFileProcessing.java index 35b92411..f283744f 100644 --- a/src/test/java/hu/akarnokd/rxjava2/ParallelFileProcessing.java +++ b/src/test/java/hu/akarnokd/rxjava2/ParallelFileProcessing.java @@ -12,7 +12,7 @@ public class ParallelFileProcessing { @Test public void test() { - //ParallelFlowable pf = + //ParallelFlowable pf = Flowable.>using( () -> Files.list(Paths.get("/my/dir/with/files")), files -> Flowable.fromIterable((Iterable)() -> files.iterator()), diff --git a/src/test/java/hu/akarnokd/rxjava2/PublishExamples.java b/src/test/java/hu/akarnokd/rxjava2/PublishExamples.java index 5bd8cae2..43fda0e4 100644 --- a/src/test/java/hu/akarnokd/rxjava2/PublishExamples.java +++ b/src/test/java/hu/akarnokd/rxjava2/PublishExamples.java @@ -11,7 +11,7 @@ public void test1() { Observable mixedSource = Observable.just("a", 1, "b", 2, "c", 3) .doOnSubscribe(s -> System.out.println("Subscribed!")); - + mixedSource.compose(f -> Observable.merge( f.ofType(Integer.class).compose(g -> g.map(v -> v + 1)), @@ -26,7 +26,7 @@ public void test2() { Observable mixedSource = Observable.just("a", 1, "b", 2, "c", 3) .doOnSubscribe(s -> System.out.println("Subscribed!")); - + mixedSource.publish(f -> Observable.merge( f.ofType(Integer.class).compose(g -> g.map(v -> v + 1)), diff --git a/src/test/java/hu/akarnokd/rxjava2/PublishFuncExample.java b/src/test/java/hu/akarnokd/rxjava2/PublishFuncExample.java index 64dd2636..88eea93a 100644 --- a/src/test/java/hu/akarnokd/rxjava2/PublishFuncExample.java +++ b/src/test/java/hu/akarnokd/rxjava2/PublishFuncExample.java @@ -30,7 +30,7 @@ public void test() throws Exception { forkAndJoin.subscribe(System.out::println); forkAndJoin.subscribe(System.out::println); forkAndJoin.subscribe(System.out::println); - + Thread.sleep(10000); } } diff --git a/src/test/java/hu/akarnokd/rxjava2/PublishRefCountPublishTest.java b/src/test/java/hu/akarnokd/rxjava2/PublishRefCountPublishTest.java index 433c4e0b..4d3bba29 100644 --- a/src/test/java/hu/akarnokd/rxjava2/PublishRefCountPublishTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/PublishRefCountPublishTest.java @@ -11,7 +11,7 @@ public class PublishRefCountPublishTest { @Test public void test() { int[] calls = { 0 }; - + Flowable.range(1, 10) .doOnCancel(() -> calls[0]++) .publish() @@ -20,14 +20,14 @@ public void test() { .take(5) .test() .assertResult(1, 2, 3, 4, 5); - + Assert.assertEquals(1, calls[0]); } @Test public void test2() { int[] calls = { 0 }; - + Flux.range(1, 10) .doOnCancel(() -> calls[0]++) .publish() @@ -36,7 +36,7 @@ public void test2() { .take(5) .subscribeWith(new TestSubscriber()) .assertResult(1, 2, 3, 4, 5); - + Assert.assertEquals(1, calls[0]); } } diff --git a/src/test/java/hu/akarnokd/rxjava2/ReentrantSubject.java b/src/test/java/hu/akarnokd/rxjava2/ReentrantSubject.java index de3e4035..c8d9f521 100644 --- a/src/test/java/hu/akarnokd/rxjava2/ReentrantSubject.java +++ b/src/test/java/hu/akarnokd/rxjava2/ReentrantSubject.java @@ -18,7 +18,7 @@ public void testReactive() throws Exception { .subscribe(); publisher.onNext(0); - + Thread.sleep(100000); } diff --git a/src/test/java/hu/akarnokd/rxjava2/RefCountTrackingTest.java b/src/test/java/hu/akarnokd/rxjava2/RefCountTrackingTest.java index 987bfd2b..42ae7966 100644 --- a/src/test/java/hu/akarnokd/rxjava2/RefCountTrackingTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/RefCountTrackingTest.java @@ -12,19 +12,19 @@ public class RefCountTrackingTest { @Test public void test() throws Exception { RxJavaAssemblyTracking.enable(); - + PublishSubject ps = PublishSubject.create(); - + Observable source = ps.replay(1).refCount(); - + Disposable d1 = source.subscribe(v -> System.out.println("A1: " + v)); Disposable d2 = source.subscribe(v -> System.out.println("B1: " + v)); - + ps.onNext(1); - + d1.dispose(); d2.dispose(); - + System.out.println(ps.hasObservers()); source.subscribe(v -> System.out.println("A2: " + v)); diff --git a/src/test/java/hu/akarnokd/rxjava2/ReplayOOM.java b/src/test/java/hu/akarnokd/rxjava2/ReplayOOM.java index 5f9c6ed2..4ba54334 100644 --- a/src/test/java/hu/akarnokd/rxjava2/ReplayOOM.java +++ b/src/test/java/hu/akarnokd/rxjava2/ReplayOOM.java @@ -7,7 +7,7 @@ public class ReplayOOM { static int i; - + @Test public void test() { Flowable.range(1, 5000) diff --git a/src/test/java/hu/akarnokd/rxjava2/ReplayRefCountSubjectTest.java b/src/test/java/hu/akarnokd/rxjava2/ReplayRefCountSubjectTest.java index 73c8d7c7..0bc5fa0a 100644 --- a/src/test/java/hu/akarnokd/rxjava2/ReplayRefCountSubjectTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/ReplayRefCountSubjectTest.java @@ -17,8 +17,8 @@ public void test() { BehaviorSubject subject = BehaviorSubject.create(); Observable observable = subject - .doOnNext(e -> { - System.out.println("This emits for second subscriber"); + .doOnNext(e -> { + System.out.println("This emits for second subscriber"); }) .doOnSubscribe(s -> System.out.println("OnSubscribe")) .doOnDispose(() -> System.out.println("OnDispose")) @@ -43,8 +43,8 @@ public void test2() { BehaviorProcessor subject = BehaviorProcessor.create(); Flowable observable = subject - .doOnNext(e -> { - System.out.println("This emits for second subscriber"); + .doOnNext(e -> { + System.out.println("This emits for second subscriber"); }) .doOnSubscribe(s -> System.out.println("OnSubscribe")) .doOnCancel(() -> System.out.println("OnDispose")) diff --git a/src/test/java/hu/akarnokd/rxjava2/RetryEmptyErrorTest.java b/src/test/java/hu/akarnokd/rxjava2/RetryEmptyErrorTest.java index 4e1ad720..c11d76ec 100644 --- a/src/test/java/hu/akarnokd/rxjava2/RetryEmptyErrorTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/RetryEmptyErrorTest.java @@ -16,7 +16,7 @@ public void emptyError() { .test() .assertFailureAndMessage(Exception.class, "2"); } - + @Test public void nonEmptyError() { Observable.just(1).concatWith(Observable.error(new Exception())) @@ -25,15 +25,15 @@ public void nonEmptyError() { .test() .assertResult(1, 1, 1, 1); } - + static ObservableTransformer retryEmpty(int count) { return o -> Observable.defer(() -> { AtomicInteger remaining = new AtomicInteger(count); AtomicBoolean nonEmpty = new AtomicBoolean(); - + return o.doOnNext(v -> nonEmpty.lazySet(true)) - .retryWhen(err -> + .retryWhen(err -> err.flatMap(e -> { if (nonEmpty.get()) { nonEmpty.lazySet(false); diff --git a/src/test/java/hu/akarnokd/rxjava2/RetryWhenManyTypeTest.java b/src/test/java/hu/akarnokd/rxjava2/RetryWhenManyTypeTest.java index 09544031..725f6e51 100644 --- a/src/test/java/hu/akarnokd/rxjava2/RetryWhenManyTypeTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/RetryWhenManyTypeTest.java @@ -9,7 +9,7 @@ public class RetryWhenManyTypeTest { - + @Test public void test1() { Single.timer(1, TimeUnit.SECONDS) @@ -26,7 +26,7 @@ public void test1() { }) .blockingGet(); } - + @Test public void test2() { Maybe.timer(1, TimeUnit.SECONDS) @@ -43,7 +43,7 @@ public void test2() { }) .blockingGet(); } - + @Test public void test3() { Completable.timer(1, TimeUnit.SECONDS) diff --git a/src/test/java/hu/akarnokd/rxjava2/RetryWhenPlain.java b/src/test/java/hu/akarnokd/rxjava2/RetryWhenPlain.java index a3ce0a00..8d6616a4 100644 --- a/src/test/java/hu/akarnokd/rxjava2/RetryWhenPlain.java +++ b/src/test/java/hu/akarnokd/rxjava2/RetryWhenPlain.java @@ -33,7 +33,7 @@ public static Observable retryWhen(Observable source, Function d.dispose()); }); } - + @Test public void test() { int[] count = { 3 }; @@ -43,7 +43,7 @@ public void test() { } return Observable.error(new IOException()); }) - .compose(o -> retryWhen(o, + .compose(o -> retryWhen(o, f -> f.flatMap(e -> { System.out.println("Retrying..."); return Observable.timer(1, TimeUnit.SECONDS); diff --git a/src/test/java/hu/akarnokd/rxjava2/RetryWhenTest.java b/src/test/java/hu/akarnokd/rxjava2/RetryWhenTest.java index 85dbfb92..ef410fc3 100644 --- a/src/test/java/hu/akarnokd/rxjava2/RetryWhenTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/RetryWhenTest.java @@ -79,7 +79,7 @@ public void onComplete() { System.out.println( "onComplete: "); } }); - + Thread.sleep(1000); } } diff --git a/src/test/java/hu/akarnokd/rxjava2/RxJavaFuseTest.java b/src/test/java/hu/akarnokd/rxjava2/RxJavaFuseTest.java index bd41d4a8..78828cc7 100644 --- a/src/test/java/hu/akarnokd/rxjava2/RxJavaFuseTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/RxJavaFuseTest.java @@ -46,7 +46,7 @@ public void onComplete() { .doOnNext(aLong -> System.out.println(aLong + " processing on " + Thread.currentThread().getName())) .sequential() .subscribe(sequentialSubscriber); - + Thread.sleep(5000); } } \ No newline at end of file diff --git a/src/test/java/hu/akarnokd/rxjava2/RxLosers.java b/src/test/java/hu/akarnokd/rxjava2/RxLosers.java index f461305f..e00dd307 100644 --- a/src/test/java/hu/akarnokd/rxjava2/RxLosers.java +++ b/src/test/java/hu/akarnokd/rxjava2/RxLosers.java @@ -31,12 +31,12 @@ public void test() throws Exception { hot.subscribe(this::printWithTime, Throwable::printStackTrace, () -> System.out.println("Done")); Thread.sleep(3000); } - + void printWithTime(String msg) { System.out.println(LocalTime.now().toString() + ": " + msg); } - + String slowOperation() throws Exception { printWithTime("Starting long operation"); diff --git a/src/test/java/hu/akarnokd/rxjava2/SingleConcatTest.java b/src/test/java/hu/akarnokd/rxjava2/SingleConcatTest.java index 44c600f2..76aa8090 100644 --- a/src/test/java/hu/akarnokd/rxjava2/SingleConcatTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/SingleConcatTest.java @@ -33,7 +33,7 @@ public void test() { testScheduler.advanceTimeBy(3, TimeUnit.SECONDS); System.out.println(testObserver.values()); - testObserver.assertValue(list -> list.equals(Arrays.asList(1, 2, 3, 4, 5))); + testObserver.assertValue(list -> list.equals(Arrays.asList(1, 2, 3, 4, 5))); // 5 is currently missing ; fourth was never subscribed in the first place } } diff --git a/src/test/java/hu/akarnokd/rxjava2/SingleObserveOnRaceTest.java b/src/test/java/hu/akarnokd/rxjava2/SingleObserveOnRaceTest.java index c14e5b72..39b58721 100644 --- a/src/test/java/hu/akarnokd/rxjava2/SingleObserveOnRaceTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/SingleObserveOnRaceTest.java @@ -43,14 +43,14 @@ public void run() throws Exception { test.awaitDone(3, TimeUnit.SECONDS) .assertNoErrors(); } - + @Test public void race() throws Exception { Worker w = Schedulers.newThread().createWorker(); try { for (int i = 0; i < 1000; i++) { Integer[] value = { 0, 0 }; - + TestObserver to = new TestObserver() { @Override public void onSuccess(Integer v) { @@ -58,16 +58,16 @@ public void onSuccess(Integer v) { super.onSuccess(v); } }; - + SingleSubject subj = SingleSubject.create(); - + subj.observeOn(Schedulers.single()) .onTerminateDetach() .subscribe(to); - + AtomicInteger wip = new AtomicInteger(2); CountDownLatch cdl = new CountDownLatch(2); - + w.schedule(() -> { if (wip.decrementAndGet() != 0) { while (wip.get() != 0); @@ -75,7 +75,7 @@ public void onSuccess(Integer v) { subj.onSuccess(1); cdl.countDown(); }); - + Schedulers.single().scheduleDirect(() -> { if (wip.decrementAndGet() != 0) { while (wip.get() != 0); @@ -86,7 +86,7 @@ public void onSuccess(Integer v) { }); cdl.await(); - + Assert.assertNotNull(value[1]); } } finally { diff --git a/src/test/java/hu/akarnokd/rxjava2/SomeAsyncApiBridgeTest.java b/src/test/java/hu/akarnokd/rxjava2/SomeAsyncApiBridgeTest.java index bba91952..ce49362b 100644 --- a/src/test/java/hu/akarnokd/rxjava2/SomeAsyncApiBridgeTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/SomeAsyncApiBridgeTest.java @@ -4,18 +4,18 @@ import java.util.function.Consumer; import org.junit.Test; - + public class SomeAsyncApiBridgeTest { - + static final class AsyncRange { final int max; int index; - + public AsyncRange(int start, int count) { this.index = start; this.max = start + count; } - + public CompletableFuture next(Consumer consumer) { int i = index; if (i == max) { @@ -33,11 +33,11 @@ public boolean cancel(boolean mayInterruptIfRunning) { return cancel; } } - + @Test public void simple() { AsyncRange r = new AsyncRange(1, 10); - + new SomeAsyncApiBridge( consumer -> r.next(consumer) ) diff --git a/src/test/java/hu/akarnokd/rxjava2/SomeSharedFlow.java b/src/test/java/hu/akarnokd/rxjava2/SomeSharedFlow.java index 1e6c8998..795d5f0a 100644 --- a/src/test/java/hu/akarnokd/rxjava2/SomeSharedFlow.java +++ b/src/test/java/hu/akarnokd/rxjava2/SomeSharedFlow.java @@ -13,7 +13,7 @@ public class SomeSharedFlow { public void test() throws Exception { Scheduler s1 = Schedulers.from(Executors.newSingleThreadExecutor(r -> new Thread(r, "scheduler1"))); Scheduler s2 = Schedulers.from(Executors.newSingleThreadExecutor(r -> new Thread(r, "scheduler2"))); - + Flowable flowable = Flowable.interval(1, TimeUnit.MILLISECONDS) .onBackpressureLatest() .take(10_000) @@ -27,11 +27,11 @@ public void test() throws Exception { }) .hide() .share(); - + flowable.observeOn(s2) .doOnNext(v -> Thread.sleep(10)) .subscribe(v -> System.out.println(v + " " + Thread.currentThread().getName()), Throwable::printStackTrace); - + Thread.sleep(10000); } } diff --git a/src/test/java/hu/akarnokd/rxjava2/SquareSequenceTest.java b/src/test/java/hu/akarnokd/rxjava2/SquareSequenceTest.java index 25aea499..f4616807 100644 --- a/src/test/java/hu/akarnokd/rxjava2/SquareSequenceTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/SquareSequenceTest.java @@ -8,17 +8,17 @@ public class SquareSequenceTest { static final HashSet squares = new HashSet<>(); static final int[] squaresInt = new int[1024]; - + static { for (int i = 1; i < 32; i++) { squares.add(i * i); } - + for (int i = 1; i <= squaresInt.length; i++) { squaresInt[i - 1] = i * i; } } - + // @Test public void test() { for (int i = 15; i < 30; i++) { diff --git a/src/test/java/hu/akarnokd/rxjava2/StageDelays.java b/src/test/java/hu/akarnokd/rxjava2/StageDelays.java index 21c276f3..e2fefcff 100644 --- a/src/test/java/hu/akarnokd/rxjava2/StageDelays.java +++ b/src/test/java/hu/akarnokd/rxjava2/StageDelays.java @@ -14,26 +14,26 @@ public class StageDelays { @Test public void test() { TestScheduler ts = new TestScheduler(); - + Map state = new LinkedHashMap<>(); - + Flowable.interval(100, TimeUnit.MILLISECONDS, ts) .onBackpressureLatest() .doOnNext(v -> state.put(v, new Long[4])) .observeOn(ts, false, 1) - .doOnNext(v -> { + .doOnNext(v -> { System.out.println("p50: " + v + " @ " + ts.now(TimeUnit.MILLISECONDS)); state.get(v)[0] = ts.now(TimeUnit.MILLISECONDS); }) .delay(50, TimeUnit.MILLISECONDS, ts) .observeOn(ts, false, 1) - .doOnNext(v -> { + .doOnNext(v -> { System.out.println("p500: " + v + " @ " + ts.now(TimeUnit.MILLISECONDS)); state.get(v)[1] = ts.now(TimeUnit.MILLISECONDS); }) .delay(500, TimeUnit.MILLISECONDS, ts) .observeOn(ts, false, 1) - .doOnNext(v -> { + .doOnNext(v -> { System.out.println("p200: " + v + " @ " + ts.now(TimeUnit.MILLISECONDS)); state.get(v)[2] = ts.now(TimeUnit.MILLISECONDS); }) @@ -42,9 +42,9 @@ public void test() { System.out.println("END: " + v + " @ " + ts.now(TimeUnit.MILLISECONDS)); state.get(v)[3] = ts.now(TimeUnit.MILLISECONDS); }); - + ts.advanceTimeBy(2000, TimeUnit.MILLISECONDS); - + for (Map.Entry e : state.entrySet()) { System.out.println(e.getKey()); System.out.println(" p50: " + e.getValue()[0]); @@ -53,7 +53,7 @@ public void test() { System.out.println(" END: " + e.getValue()[3]); } } - + @Test public void test2() throws Exception { Scheduler ts = Schedulers.newThread(); @@ -66,19 +66,19 @@ public void test2() throws Exception { .onBackpressureLatest() .doOnNext(v -> state.put(v, new Long[] { 0L, 0L, 0L, 0L })) .delay(0, TimeUnit.MILLISECONDS, ts) -.doOnNext(v -> { +.doOnNext(v -> { System.out.println("p50: " + v + " @ " + (ts.now(TimeUnit.MILLISECONDS) - start)); state.get(v)[0] = ts.now(TimeUnit.MILLISECONDS) - start; Thread.sleep(50); }) .delay(0, TimeUnit.MILLISECONDS, ts) -.doOnNext(v -> { +.doOnNext(v -> { System.out.println("p500: " + v + " @ " + (ts.now(TimeUnit.MILLISECONDS) - start)); state.get(v)[1] = ts.now(TimeUnit.MILLISECONDS) - start; Thread.sleep(500); }) .delay(0, TimeUnit.MILLISECONDS, ts) -.doOnNext(v -> { +.doOnNext(v -> { System.out.println("p200: " + v + " @ " + (ts.now(TimeUnit.MILLISECONDS) - start)); state.get(v)[2] = ts.now(TimeUnit.MILLISECONDS) - start; Thread.sleep(200); @@ -99,7 +99,7 @@ public void test2() throws Exception { if (state.containsKey(v)) { System.out.println(v); Long[] array = state.get(v); - + System.out.println(" p50: " + array[0]); System.out.println(" p500: " + array[1]); System.out.println(" : " + (array[1] - array[0])); diff --git a/src/test/java/hu/akarnokd/rxjava2/SubjectRaceTest.java b/src/test/java/hu/akarnokd/rxjava2/SubjectRaceTest.java index 8ae87525..6c3366d9 100644 --- a/src/test/java/hu/akarnokd/rxjava2/SubjectRaceTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/SubjectRaceTest.java @@ -54,7 +54,7 @@ private void sendEvents() { String key = value.toString(); //System.out.println("Adding key "+key); singlePropertyUpdateSubject.onNext(key); -//[2] +//[2] if (value == 1998){ subscribeToSubject();; } diff --git a/src/test/java/hu/akarnokd/rxjava2/SwitchIfFewerTest.java b/src/test/java/hu/akarnokd/rxjava2/SwitchIfFewerTest.java index ce2e3851..1865df39 100644 --- a/src/test/java/hu/akarnokd/rxjava2/SwitchIfFewerTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/SwitchIfFewerTest.java @@ -14,7 +14,7 @@ public void test() { .test() .assertResult(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); } - + static ObservableTransformer switchIfFewer(Observable other, int n) { return o -> { return o.toList() diff --git a/src/test/java/hu/akarnokd/rxjava2/SwitchMapRace.java b/src/test/java/hu/akarnokd/rxjava2/SwitchMapRace.java index ce7b0f93..e7c8bd74 100644 --- a/src/test/java/hu/akarnokd/rxjava2/SwitchMapRace.java +++ b/src/test/java/hu/akarnokd/rxjava2/SwitchMapRace.java @@ -16,7 +16,7 @@ public class SwitchMapRace { AtomicInteger outer = new AtomicInteger(); AtomicInteger inner = new AtomicInteger(); - + @Test public void test() throws Throwable { int n = 10_000; @@ -32,12 +32,12 @@ public void test() throws Throwable { .take(1) .blockingSubscribe(v -> { }, Throwable::printStackTrace); } - + Thread.sleep(1000); assertEquals(inner.get(), outer.get()); assertEquals(n, inner.get()); } - + Flowable createFlowable() { return Flowable.unsafeCreate(s -> { SerializedSubscriber it = new SerializedSubscriber<>(s); @@ -56,7 +56,7 @@ Flowable createFlowable() { System.out.println("Inner finally: " + inner.incrementAndGet()); }); } - + /* Flowable createFlowable() { return Flowable diff --git a/src/test/java/hu/akarnokd/rxjava2/TestDoAfterTerminate.java b/src/test/java/hu/akarnokd/rxjava2/TestDoAfterTerminate.java index 527f99bf..b9038afd 100644 --- a/src/test/java/hu/akarnokd/rxjava2/TestDoAfterTerminate.java +++ b/src/test/java/hu/akarnokd/rxjava2/TestDoAfterTerminate.java @@ -41,4 +41,4 @@ public void test() { Assert.assertTrue(called2.get()); Assert.assertTrue(called.get()); } -} \ No newline at end of file +} \ No newline at end of file diff --git a/src/test/java/hu/akarnokd/rxjava2/TestMockitoCalls.java b/src/test/java/hu/akarnokd/rxjava2/TestMockitoCalls.java index d1787131..44ab8f0f 100644 --- a/src/test/java/hu/akarnokd/rxjava2/TestMockitoCalls.java +++ b/src/test/java/hu/akarnokd/rxjava2/TestMockitoCalls.java @@ -7,23 +7,23 @@ import org.junit.Test; import io.reactivex.subjects.CompletableSubject; - + public class TestMockitoCalls { - + @Test public void test() { @SuppressWarnings("unchecked") List list = mock(List.class); - + CompletableSubject source = CompletableSubject.create(); - + source.doOnSubscribe(v -> list.add(1)) .doOnError(e -> list.remove(1)) .doOnComplete(() -> list.remove(1)) .subscribe(); - + source.onComplete(); - + verify(list).add(1); verify(list).remove(1); verifyNoMoreInteractions(list); diff --git a/src/test/java/hu/akarnokd/rxjava2/ThrottleLastLeak.java b/src/test/java/hu/akarnokd/rxjava2/ThrottleLastLeak.java index 51b7fcfb..12093314 100644 --- a/src/test/java/hu/akarnokd/rxjava2/ThrottleLastLeak.java +++ b/src/test/java/hu/akarnokd/rxjava2/ThrottleLastLeak.java @@ -11,11 +11,11 @@ public static void main(String[] args) throws Exception { Disposable d = PublishSubject.create() .throttleLast(100, TimeUnit.MILLISECONDS) .subscribe(System.out::println); - + Thread.sleep(10000); - + d.dispose(); - + Thread.sleep(1000000); } } diff --git a/src/test/java/hu/akarnokd/rxjava2/ThrottleLastSO.java b/src/test/java/hu/akarnokd/rxjava2/ThrottleLastSO.java index 9b1dc53c..abe784b7 100644 --- a/src/test/java/hu/akarnokd/rxjava2/ThrottleLastSO.java +++ b/src/test/java/hu/akarnokd/rxjava2/ThrottleLastSO.java @@ -13,13 +13,13 @@ public class ThrottleLastSO { @Test public void test() { TestScheduler ts = new TestScheduler(); - + TestObserver to = Observable.error(new RuntimeException()) .onErrorReturnItem(0) .startWith(-1) .throttleLast(50, TimeUnit.MILLISECONDS, ts) .test(); - + ts.advanceTimeBy(1, TimeUnit.SECONDS); to.assertResult(0); diff --git a/src/test/java/hu/akarnokd/rxjava2/ThrottleLastTest.java b/src/test/java/hu/akarnokd/rxjava2/ThrottleLastTest.java index 710ad793..76da2426 100644 --- a/src/test/java/hu/akarnokd/rxjava2/ThrottleLastTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/ThrottleLastTest.java @@ -29,7 +29,7 @@ private static void test(String tag) { .throttleLast(1, TimeUnit.SECONDS, Schedulers.single()) .doOnNext(v -> System.out.println("a: " + v + " " + tag)) ; - + Flowable fb = Flowable.generate(emitter -> emitter.onNext(2)) .doOnSubscribe(v -> System.out.println("Sub B " + tag)) // .compose(pingPongOn(Schedulers.computation())) @@ -48,44 +48,44 @@ private static void test(String tag) { static FlowableTransformer requestObserveOn(Scheduler scheduler) { return f -> new RequestObserveOn<>(f, scheduler); } - + static final class RequestObserveOn extends Flowable { - + final Flowable source; - + final Scheduler scheduler; RequestObserveOn(Flowable source, Scheduler scheduler) { this.source = source; this.scheduler = scheduler; } - + @Override protected void subscribeActual(Subscriber s) { source.subscribe(new RequestObserveOnSubscriber<>(s, scheduler.createWorker())); } - - static final class RequestObserveOnSubscriber + + static final class RequestObserveOnSubscriber extends AtomicLong implements FlowableSubscriber, Subscription, Runnable { private static final long serialVersionUID = 3167152788131496136L; final Subscriber actual; - + final Worker worker; - + final Runnable requestOne; Subscription upstream; - + volatile T item; Throwable error; volatile boolean done; - + long emitted; boolean terminated; - + RequestObserveOnSubscriber(Subscriber actual, Scheduler.Worker worker) { this.actual = actual; this.worker = worker; @@ -98,7 +98,7 @@ public void onSubscribe(Subscription s) { actual.onSubscribe(this); worker.schedule(requestOne); } - + @Override public void onNext(T t) { item = t; @@ -126,7 +126,7 @@ public void run() { boolean d = done; T v = item; boolean empty = v == null; - + if (d && empty) { Throwable ex = error; if (ex != null) { diff --git a/src/test/java/hu/akarnokd/rxjava2/ThrottleSampleTest.java b/src/test/java/hu/akarnokd/rxjava2/ThrottleSampleTest.java index 2d17dff1..ba55a751 100644 --- a/src/test/java/hu/akarnokd/rxjava2/ThrottleSampleTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/ThrottleSampleTest.java @@ -19,14 +19,14 @@ public void test() { Flowable.fromArray( 100, // should emit 100 at T=100 - 110, 120, 130, 150, // should emit 150 at T=200 + 110, 120, 130, 150, // should emit 150 at T=200 250, 260, // should emit 260 at T=300 400 // should emit 400 at T=400 ) .flatMap(v -> Flowable.timer(v, TimeUnit.MILLISECONDS, tsch).map(w -> v)) .compose(throttleFirstSample(100, TimeUnit.MILLISECONDS, tsch)) .subscribe(v -> System.out.println(v + " at T=" + tsch.now(TimeUnit.MILLISECONDS))); - + tsch.advanceTimeBy(1, TimeUnit.SECONDS); } @@ -59,14 +59,14 @@ public void testObservable() { Observable.fromArray( 100, // should emit 100 at T=100 - 110, 120, 130, 150, // should emit 150 at T=200 + 110, 120, 130, 150, // should emit 150 at T=200 250, 260, // should emit 260 at T=300 400 // should emit 400 at T=400 ) .flatMap(v -> Observable.timer(v, TimeUnit.MILLISECONDS, tsch).map(w -> v)) .compose(throttleFirstSampleObservable(100, TimeUnit.MILLISECONDS, tsch)) .subscribe(v -> System.out.println(v + " at T=" + tsch.now(TimeUnit.MILLISECONDS))); - + tsch.advanceTimeBy(1, TimeUnit.SECONDS); } @@ -79,35 +79,35 @@ protected void subscribeActual(Observer observer) { }; } - static final class ThrottleFirstSampleObserver + static final class ThrottleFirstSampleObserver extends AtomicInteger implements Observer, Disposable, Runnable { private static final long serialVersionUID = 205628968660185683L; static final Object TIMEOUT = new Object(); - + final Observer actual; - + final Queue queue; - + final Worker worker; - + final long time; - + final TimeUnit unit; - + Disposable upstream; - + boolean latestMode; - + T latest; - + volatile boolean done; Throwable error; - + volatile boolean disposed; - + ThrottleFirstSampleObserver(Observer actual, long time, TimeUnit unit, Worker worker) { this.actual = actual; this.time = time; @@ -115,37 +115,37 @@ static final class ThrottleFirstSampleObserver this.worker = worker; this.queue = new ConcurrentLinkedQueue<>(); } - + @Override public void onSubscribe(Disposable d) { upstream = d; actual.onSubscribe(this); } - + @Override public void onNext(T t) { queue.offer(t); drain(); } - + @Override public void onError(Throwable e) { error = e; done = true; drain(); } - + @Override public void onComplete() { done = true; drain(); } - + @Override public boolean isDisposed() { return upstream.isDisposed(); } - + @Override public void dispose() { disposed = true; @@ -156,37 +156,37 @@ public void dispose() { latest = null; } } - + @Override public void run() { queue.offer(TIMEOUT); drain(); } - + @SuppressWarnings("unchecked") void drain() { if (getAndIncrement() != 0) { return; } - + int missed = 1; Observer a = actual; Queue q = queue; - + for (;;) { - + for (;;) { if (disposed) { q.clear(); latest = null; return; } - - + + boolean d = done; Object v = q.poll(); boolean empty = v == null; - + if (d && empty) { if (latestMode) { T u = latest; @@ -204,11 +204,11 @@ void drain() { worker.dispose(); return; } - + if (empty) { break; } - + if (latestMode) { if (v == TIMEOUT) { T u = latest; @@ -228,7 +228,7 @@ void drain() { worker.schedule(this, time, unit); } } - + missed = addAndGet(-missed); if (missed == 0) { break; diff --git a/src/test/java/hu/akarnokd/rxjava2/ThrowsSubclass.java b/src/test/java/hu/akarnokd/rxjava2/ThrowsSubclass.java index e9cb8d6b..ac8ca436 100644 --- a/src/test/java/hu/akarnokd/rxjava2/ThrowsSubclass.java +++ b/src/test/java/hu/akarnokd/rxjava2/ThrowsSubclass.java @@ -5,12 +5,12 @@ public class ThrowsSubclass { interface F { void m() throws Throwable; } - + public static void main(String[] args) { new F() { @Override public void m() throws Exception { - + } }; } diff --git a/src/test/java/hu/akarnokd/rxjava2/TimeoutCancelv2Test.java b/src/test/java/hu/akarnokd/rxjava2/TimeoutCancelv2Test.java index 2daba39d..527aa935 100644 --- a/src/test/java/hu/akarnokd/rxjava2/TimeoutCancelv2Test.java +++ b/src/test/java/hu/akarnokd/rxjava2/TimeoutCancelv2Test.java @@ -32,8 +32,8 @@ public void test4() throws Exception { TestObserver subscriber = new TestObserver<>(); initialObservable - .doOnDispose(() -> { - System.out.println("Unsubscribed"); + .doOnDispose(() -> { + System.out.println("Unsubscribed"); new Exception().printStackTrace(System.out); }) .timeout(1, TimeUnit.SECONDS, sch, timeoutObservable).subscribe(subscriber); @@ -66,8 +66,8 @@ public void test5() throws Exception { TestSubscriber subscriber = new TestSubscriber<>(); initialObservable - .doOnCancel(() -> { - System.out.println("Unsubscribed"); + .doOnCancel(() -> { + System.out.println("Unsubscribed"); new Exception().printStackTrace(System.out); }) .timeout(1, TimeUnit.SECONDS, sch, timeoutObservable).subscribe(subscriber); diff --git a/src/test/java/hu/akarnokd/rxjava2/TimeoutTask.java b/src/test/java/hu/akarnokd/rxjava2/TimeoutTask.java index b1d104be..e8dd9c27 100644 --- a/src/test/java/hu/akarnokd/rxjava2/TimeoutTask.java +++ b/src/test/java/hu/akarnokd/rxjava2/TimeoutTask.java @@ -22,13 +22,13 @@ public void test() { .concatMap(call -> Observable.fromCallable(call) .subscribeOn(Schedulers.computation()) - .timeout(1, TimeUnit.SECONDS, Observable.just("timeout")) + .timeout(1, TimeUnit.SECONDS, Observable.just("timeout")) ); - + source .blockingSubscribe(s -> System.out.println("RECEIVED: " + s)); } - + static String task(int i, String s) { return i + " " + s; } diff --git a/src/test/java/hu/akarnokd/rxjava2/TrackedRefcount.java b/src/test/java/hu/akarnokd/rxjava2/TrackedRefcount.java index 6d6e5733..f0e846ea 100644 --- a/src/test/java/hu/akarnokd/rxjava2/TrackedRefcount.java +++ b/src/test/java/hu/akarnokd/rxjava2/TrackedRefcount.java @@ -12,7 +12,7 @@ public class TrackedRefcount { @Test public void test() throws Exception { RxJavaAssemblyTracking.enable(); - + System.out.println("start"); PublishSubject stringsEmitter = PublishSubject.create(); diff --git a/src/test/java/hu/akarnokd/rxjava2/UncaughtCrash.java b/src/test/java/hu/akarnokd/rxjava2/UncaughtCrash.java index d0e9bf02..1555591a 100644 --- a/src/test/java/hu/akarnokd/rxjava2/UncaughtCrash.java +++ b/src/test/java/hu/akarnokd/rxjava2/UncaughtCrash.java @@ -7,7 +7,7 @@ import io.reactivex.plugins.RxJavaPlugins; public class UncaughtCrash { - + @Before public void before() { RxJavaPlugins.setErrorHandler(e -> { diff --git a/src/test/java/hu/akarnokd/rxjava2/UnicastSingleTest.java b/src/test/java/hu/akarnokd/rxjava2/UnicastSingleTest.java index a143d9ed..2a9472c6 100644 --- a/src/test/java/hu/akarnokd/rxjava2/UnicastSingleTest.java +++ b/src/test/java/hu/akarnokd/rxjava2/UnicastSingleTest.java @@ -17,10 +17,10 @@ public static void main(String[] args) throws Exception { ) .window(10, TimeUnit.MILLISECONDS) .subscribe(flx -> flx.subscribe(System.out::println)); - + Thread.sleep(5000); */ - + Flux.concat( Flux.just("#").delayElements(Duration.ofMillis(20)), Flux.range(1, 10), @@ -29,7 +29,7 @@ public static void main(String[] args) throws Exception { .subscribeWith(new TestSubscriber<>()) .awaitDone(5, TimeUnit.SECONDS) .assertResult("#", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); - + Flux.concat( Flux.just("#").delayElements(Duration.ofMillis(20)), Flux.range(1, 10), diff --git a/src/test/java/hu/akarnokd/rxjava2/WindowDisposed.java b/src/test/java/hu/akarnokd/rxjava2/WindowDisposed.java index d73ccac8..6859e708 100644 --- a/src/test/java/hu/akarnokd/rxjava2/WindowDisposed.java +++ b/src/test/java/hu/akarnokd/rxjava2/WindowDisposed.java @@ -13,7 +13,7 @@ static Observable observable(int n) { emitter.setCancellable(() -> System.out.println("Cancelled " + n)); }); } - + static Flowable flowable(int n) { return Flowable.create(emitter -> { System.out.println("Subscribed: " + n); @@ -23,7 +23,7 @@ static Flowable flowable(int n) { emitter.setCancellable(() -> System.out.println("Cancelled " + n)); }, BackpressureStrategy.MISSING); } - + public static void main(String[] args) { observable(1) .window(observable(2).filter(v -> v == 1) @@ -33,9 +33,9 @@ public static void main(String[] args) { .doOnNext(System.out::println) .subscribe() .dispose(); - + System.out.println("---"); - + flowable(1) .window(flowable(2).filter(v -> v == 1) .doOnCancel(() -> System.out.println("Dispose 2")) diff --git a/src/test/java/hu/akarnokd/rxjava2/ZipCrash.java b/src/test/java/hu/akarnokd/rxjava2/ZipCrash.java index 8e75aab8..b26e988c 100644 --- a/src/test/java/hu/akarnokd/rxjava2/ZipCrash.java +++ b/src/test/java/hu/akarnokd/rxjava2/ZipCrash.java @@ -36,7 +36,7 @@ public void testUncaughtException() throws InterruptedException { ); Thread.sleep(2000); } - + @Test public void testUncaughtExceptionWithFlatMap() throws InterruptedException { Observable testObservable = Observable.create(e -> e.onNext("")) diff --git a/src/test/java/hu/akarnokd/rxjava2/ZipInfinite.java b/src/test/java/hu/akarnokd/rxjava2/ZipInfinite.java index 35a2f031..648ed9d8 100644 --- a/src/test/java/hu/akarnokd/rxjava2/ZipInfinite.java +++ b/src/test/java/hu/akarnokd/rxjava2/ZipInfinite.java @@ -18,5 +18,5 @@ public void test() { flo2.onNext(2); flo2.onNext(3); } - + } diff --git a/src/test/java/hu/akarnokd/rxjava3/BufferStartStop.java b/src/test/java/hu/akarnokd/rxjava3/BufferStartStop.java index cd1e7fb1..99f2deaa 100644 --- a/src/test/java/hu/akarnokd/rxjava3/BufferStartStop.java +++ b/src/test/java/hu/akarnokd/rxjava3/BufferStartStop.java @@ -20,7 +20,7 @@ public void test() { .flatMap(v -> Observable.timer(v * 100, TimeUnit.MILLISECONDS).map(w -> v)) .compose(BufferWithTimeout.create(700, TimeUnit.MILLISECONDS, Schedulers.computation())) .blockingSubscribe(System.out::println); - + } public static final class BufferWithTimeout { @@ -28,25 +28,25 @@ public static final class BufferWithTimeout { Scheduler.Worker trampoline = Schedulers.trampoline().createWorker(); final long timeout; - + final TimeUnit unit; - + final Scheduler.Worker worker; - + final SerialDisposable timer = new SerialDisposable(); - + final PublishSubject> output = PublishSubject.create(); - + List current; - + long bufferIndex; - + BufferWithTimeout(long timeout, TimeUnit unit, Scheduler scheduler) { this.worker = scheduler.createWorker(); this.timeout = timeout; this.unit = unit; } - + void onValue(T value) { trampoline.schedule(() -> { if (timer.isDisposed()) { @@ -93,7 +93,7 @@ void onTerminate(Throwable error) { } }); } - + void dispose() { timer.dispose(); worker.dispose(); @@ -103,7 +103,7 @@ void dispose() { } public static ObservableTransformer> create(long timeout, TimeUnit unit, Scheduler scheduler) { - return o -> + return o -> Observable.defer(() -> { BufferWithTimeout state = new BufferWithTimeout<>(timeout, unit, scheduler); diff --git a/src/test/java/hu/akarnokd/rxjava3/NestedUsing.java b/src/test/java/hu/akarnokd/rxjava3/NestedUsing.java index 2c529de1..ecbaed54 100644 --- a/src/test/java/hu/akarnokd/rxjava3/NestedUsing.java +++ b/src/test/java/hu/akarnokd/rxjava3/NestedUsing.java @@ -12,12 +12,12 @@ public void test() { int i0 = i; for (int j = 0; j < 2; j++) { int j0 = j; - + System.out.println("---"); System.out.printf("Outer: %s, Inner %s%n", i == 0, j == 0); - + Single.using(() -> 1, v -> - Single.using(() -> 2, + Single.using(() -> 2, w -> Single.just(1), w -> System.out.println("Inner release, eager: " + (j0 == 0)), j0 == 0), diff --git a/src/test/java/hu/akarnokd/rxjava3/RepeatWhenSO.java b/src/test/java/hu/akarnokd/rxjava3/RepeatWhenSO.java index 405322eb..0377634a 100644 --- a/src/test/java/hu/akarnokd/rxjava3/RepeatWhenSO.java +++ b/src/test/java/hu/akarnokd/rxjava3/RepeatWhenSO.java @@ -16,7 +16,7 @@ public void test() { TestScheduler testScheduler = new TestScheduler(); AtomicInteger counter = new AtomicInteger(); - + TestObserver to = Observable.fromCallable(() -> { if (counter.getAndIncrement() == 0) { return "PENDING"; @@ -26,7 +26,7 @@ public void test() { .repeatWhen(o -> o.delay(5, TimeUnit.SECONDS, testScheduler)) .takeUntil (item -> !item.equals("PENDING") - ).doOnNext(item -> + ).doOnNext(item -> System.out.println("doOnNext called") ) .lastElement() diff --git a/src/test/java/hu/akarnokd/rxjava3/SchedulerPrint.java b/src/test/java/hu/akarnokd/rxjava3/SchedulerPrint.java new file mode 100644 index 00000000..98df7b5c --- /dev/null +++ b/src/test/java/hu/akarnokd/rxjava3/SchedulerPrint.java @@ -0,0 +1,32 @@ +package hu.akarnokd.rxjava3; + +import static org.junit.Assert.assertNotEquals; + +import java.util.concurrent.CountDownLatch; + +import org.testng.annotations.Test; + +import io.reactivex.rxjava3.disposables.Disposable; +import io.reactivex.rxjava3.schedulers.Schedulers; + +public class SchedulerPrint { + + @Test + public void disposablePrint() { + CountDownLatch cdl = new CountDownLatch(1); + try { + Disposable d = Schedulers.single().scheduleDirect(() -> { + try { + cdl.await(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + }); + + assertNotEquals("", d.toString()); + } finally { + cdl.countDown(); + } + } + +} diff --git a/src/test/java/hu/akarnokd/utils/BallisticResist.java b/src/test/java/hu/akarnokd/utils/BallisticResist.java index d4261286..27646e2b 100644 --- a/src/test/java/hu/akarnokd/utils/BallisticResist.java +++ b/src/test/java/hu/akarnokd/utils/BallisticResist.java @@ -7,7 +7,7 @@ public static void main(String[] args) { double baseDamage = 103; double armorRemaining = (1 - 0.36) * (1 - 0.5); double speedCoeff = 1.0; - + System.out.println(baseDamage + "-" + (25 * armorRemaining) + ": " + damageFormula(baseDamage, 25 * armorRemaining) * speedCoeff); System.out.println(baseDamage + "-" + (50* armorRemaining) + ": " + damageFormula(baseDamage, 50 * armorRemaining) * speedCoeff); System.out.println(baseDamage + "-" + (75 * armorRemaining) + ": " + damageFormula(baseDamage, 75 * armorRemaining) * speedCoeff); @@ -27,12 +27,12 @@ public static void main(String[] args) { System.out.println("Protectron TR: " + (damageFormula(baseDamage * 1.3, 125))); System.out.println("----------"); - + System.out.println("Damage: " + (damageFormula(125, 120 * (1 - 0.36) * (1 - 0.4)))); System.out.println("----------"); - + /* System.out.println("42-25: " + damageFormula(42, 25)); System.out.println("42-50: " + damageFormula(42, 50)); @@ -75,7 +75,7 @@ public static void main(String[] args) { System.out.println("TS Lever' * 36% : " + (damageFormula(118, 80) + damageFormula(118 * 0.25, 80))); System.out.println("---------"); - + double h = 700; System.out.println("Plain Lever: " + h / damageFormula(118, 125)); @@ -88,7 +88,7 @@ public static void main(String[] args) { System.out.println("TS Lever' * 36% : " + h / (damageFormula(118, 80) + damageFormula(118 * 0.25, 80))); System.out.println("TS Lever\" * 36% : " + h / damageFormula(140 * 1.1, 80)); - + System.out.println("---------"); double baseDr = 300; @@ -104,9 +104,9 @@ public static void main(String[] args) { } */ } - + static double damageFormula(double damage, double dr) { return Math.min(0.99, 0.5 * Math.pow((damage / dr), 0.366)) * damage; } - + } diff --git a/src/test/java/servicetalk/PublishOnOverrideTckTest.java b/src/test/java/servicetalk/PublishOnOverrideTckTest.java index 5fcc7b02..a1de7c85 100644 --- a/src/test/java/servicetalk/PublishOnOverrideTckTest.java +++ b/src/test/java/servicetalk/PublishOnOverrideTckTest.java @@ -40,7 +40,7 @@ public Publisher createPublisher(long elements) { return ReactiveStreamsAdapters.toReactiveStreamsPublisher( io.servicetalk.concurrent.api.Publisher.from(items(elements)) .publishOn(exec0) - .publishOnOverride(exec) + .publishOn(exec) ); }