diff --git a/packages/rx-react/test/Rx.test.ts b/packages/rx-react/test/Rx.test.ts deleted file mode 100644 index e73d863..0000000 --- a/packages/rx-react/test/Rx.test.ts +++ /dev/null @@ -1,145 +0,0 @@ -import * as Registry from "@effect-rx/rx/Registry" -import * as Result from "@effect-rx/rx/Result" -import * as Rx from "@effect-rx/rx/Rx" -import * as Context from "@effect/data/Context" -import * as Effect from "@effect/io/Effect" -import * as Layer from "@effect/io/Layer" -import * as Queue from "@effect/io/Queue" - -describe("Rx", () => { - it("get/set", () => { - const counter = Rx.state(0) - const r = Registry.make() - expect(r.get(counter)).toEqual(0) - r.set(counter, 1) - expect(r.get(counter)).toEqual(1) - }) - - it("keepAlive false", async () => { - const counter = Rx.state(0) - const r = Registry.make() - r.set(counter, 1) - expect(r.get(counter)).toEqual(1) - await new Promise((resolve) => setTimeout(resolve, 0)) - expect(r.get(counter)).toEqual(0) - }) - - it("keepAlive true", async () => { - const counter = Rx.state(0).pipe( - Rx.keepAlive - ) - const r = Registry.make() - r.set(counter, 1) - expect(r.get(counter)).toEqual(1) - await new Promise((resolve) => setTimeout(resolve, 0)) - expect(r.get(counter)).toEqual(1) - }) - - it("subscribe", async () => { - const counter = Rx.state(0) - const r = Registry.make() - let count = 0 - const cancel = r.subscribe(counter, (_) => { - count = _ - }) - r.set(counter, 1) - expect(count).toEqual(1) - await new Promise((resolve) => setTimeout(resolve, 0)) - expect(r.get(counter)).toEqual(1) - cancel() - await new Promise((resolve) => setTimeout(resolve, 0)) - expect(r.get(counter)).toEqual(0) - }) - - it("queue", async () => { - const counter = Rx.state(0) - const r = Registry.make() - - await Effect.gen(function*(_) { - const q = yield* _(r.queue(counter)) - expect(yield* _(Queue.take(q))).toEqual(0) - r.set(counter, 1) - expect(yield* _(Queue.take(q))).toEqual(1) - yield* _(Effect.yieldNow()) - expect(r.get(counter)).toEqual(1) - }).pipe( - Effect.scoped, - Effect.runPromise - ) - expect(r.get(counter)).toEqual(0) - }) - - it("runtime", async () => { - const count = Rx.effect( - Effect.flatMap(Counter, (_) => _.get), - counterRuntime - ) - const r = Registry.make() - const result = r.get(count) - assert(Result.isSuccess(result)) - expect(result.value).toEqual(1) - }) - - it("runtime multiple", async () => { - const count = Rx.effect( - Effect.flatMap(Counter, (_) => _.get), - counterRuntime - ) - const timesTwo = Rx.effect( - Effect.gen(function*(_) { - const counter = yield* _(Counter) - const multiplier = yield* _(Multiplier) - yield* _(counter.inc) - expect(yield* _(Rx.accessResult(count))).toEqual(2) - return yield* _(multiplier.times(2)) - }), - multiplierRuntime - ) - const r = Registry.make() - let result = r.get(timesTwo) - assert(Result.isSuccess(result)) - expect(result.value).toEqual(4) - - result = r.get(count) - assert(Result.isSuccess(result)) - expect(result.value).toEqual(2) - - await new Promise((resolve) => setTimeout(resolve, 0)) - - result = r.get(count) - assert(Result.isSuccess(result)) - expect(result.value).toEqual(1) - }) -}) - -interface Counter { - readonly get: Effect.Effect - readonly inc: Effect.Effect -} -const Counter = Context.Tag("Counter") -const CounterLive = Layer.sync(Counter, () => { - let count = 1 - return Counter.of({ - get: Effect.sync(() => count), - inc: Effect.sync(() => { - count++ - }) - }) -}) - -interface Multiplier { - readonly times: (n: number) => Effect.Effect -} -const Multiplier = Context.Tag("Multiplier") -const MultiplierLive = Layer.effect( - Multiplier, - Effect.gen(function*(_) { - const counter = yield* _(Counter) - return Multiplier.of({ - times: (n) => Effect.map(counter.get, (_) => _ * n) - }) - }) -) - -const counterRuntime: Rx.RxRuntime = Rx.runtime(CounterLive) -const multiplierRuntime: Rx.RxRuntime = Rx.runtime(MultiplierLive, counterRuntime)