MCPcopy Create free account
hub / github.com/Effect-TS/effect / interleave

Function interleave

packages/effect/test/Stream.test.ts:4018–4054  ·  view source on GitHub ↗
(
          bools: ReadonlyArray<boolean>,
          numbers1: ReadonlyArray<number>,
          numbers2: ReadonlyArray<number>
        )

Source from the content-addressed store, hash-verified

4016 it.effect("interleaveWith", () =>
4017 Effect.gen(function*() {
4018 const interleave = (
4019 bools: ReadonlyArray<boolean>,
4020 numbers1: ReadonlyArray<number>,
4021 numbers2: ReadonlyArray<number>
4022 ): ReadonlyArray<number> =>
4023 pipe(
4024 Array.head(bools),
4025 Option.map((head) => {
4026 if (head) {
4027 if (Array.isReadonlyArrayNonEmpty(numbers1)) {
4028 const head = pipe(numbers1, Array.getUnsafe(0))
4029 const tail = pipe(numbers1, Array.drop(1))
4030 return pipe(
4031 interleave(pipe(bools, Array.drop(1)), tail, numbers2),
4032 Array.prepend(head)
4033 )
4034 }
4035 if (Array.isReadonlyArrayNonEmpty(numbers2)) {
4036 return interleave(pipe(bools, Array.drop(1)), Array.empty<number>(), numbers2)
4037 }
4038 return Array.empty<number>()
4039 }
4040 if (Array.isReadonlyArrayNonEmpty(numbers2)) {
4041 const head = pipe(numbers2, Array.getUnsafe(0))
4042 const tail = pipe(numbers2, Array.drop(1))
4043 return pipe(
4044 interleave(pipe(bools, Array.drop(1)), numbers1, tail),
4045 Array.prepend(head)
4046 )
4047 }
4048 if (Array.isReadonlyArrayNonEmpty(numbers1)) {
4049 return interleave(pipe(bools, Array.drop(1)), numbers1, Array.empty<number>())
4050 }
4051 return Array.empty<number>()
4052 }),
4053 Option.getOrElse(() => Array.empty<number>())
4054 )
4055 const boolStream = Stream.make(true, true, false, true, false)
4056 const stream1 = Stream.make(1, 2, 3, 4, 5)
4057 const stream2 = Stream.make(4, 5, 6, 7, 8)

Callers 1

Stream.test.tsFile · 0.85

Calls 3

getUnsafeMethod · 0.80
pipeFunction · 0.50
mapMethod · 0.45

Tested by

no test coverage detected