MCPcopy Index your code
hub / github.com/Effect-TS/effect / interleave

Function interleave

packages/effect/test/Stream/interleaving.test.ts:24–60  ·  view source on GitHub ↗
(
        bools: Chunk.Chunk<boolean>,
        numbers1: Chunk.Chunk<number>,
        numbers2: Chunk.Chunk<number>
      )

Source from the content-addressed store, hash-verified

22 it.effect("interleaveWith", () =>
23 Effect.gen(function*() {
24 const interleave = (
25 bools: Chunk.Chunk<boolean>,
26 numbers1: Chunk.Chunk<number>,
27 numbers2: Chunk.Chunk<number>
28 ): Chunk.Chunk<number> =>
29 pipe(
30 Chunk.head(bools),
31 Option.map((head) => {
32 if (head) {
33 if (Chunk.isNonEmpty(numbers1)) {
34 const head = pipe(numbers1, Chunk.unsafeGet(0))
35 const tail = pipe(numbers1, Chunk.drop(1))
36 return pipe(
37 interleave(pipe(bools, Chunk.drop(1)), tail, numbers2),
38 Chunk.prepend(head)
39 )
40 }
41 if (Chunk.isNonEmpty(numbers2)) {
42 return interleave(pipe(bools, Chunk.drop(1)), Chunk.empty<number>(), numbers2)
43 }
44 return Chunk.empty<number>()
45 }
46 if (Chunk.isNonEmpty(numbers2)) {
47 const head = pipe(numbers2, Chunk.unsafeGet(0))
48 const tail = pipe(numbers2, Chunk.drop(1))
49 return pipe(
50 interleave(pipe(bools, Chunk.drop(1)), numbers1, tail),
51 Chunk.prepend(head)
52 )
53 }
54 if (Chunk.isNonEmpty(numbers1)) {
55 return interleave(pipe(bools, Chunk.drop(1)), numbers1, Chunk.empty<number>())
56 }
57 return Chunk.empty<number>()
58 }),
59 Option.getOrElse(() => Chunk.empty<number>())
60 )
61 const boolStream = Stream.make(true, true, false, true, false)
62 const stream1 = Stream.make(1, 2, 3, 4, 5)
63 const stream2 = Stream.make(4, 5, 6, 7, 8)

Callers 1

Calls 4

headMethod · 0.80
unsafeGetMethod · 0.80
mapMethod · 0.65
pipeFunction · 0.50

Tested by

no test coverage detected