Skip to content

Commit

Permalink
Add runner scopes test (#15)
Browse files Browse the repository at this point in the history
  • Loading branch information
rvs314 authored Jul 2, 2024
1 parent 9dc44db commit 66f4c7e
Showing 1 changed file with 50 additions and 1 deletion.
51 changes: 50 additions & 1 deletion tests/test_ops_runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from effectful.ops.core import Interpretation, Operation, define
from effectful.ops.handler import coproduct, fwd, handler
from effectful.ops.interpreter import interpreter
from effectful.ops.runner import product, reflect
from effectful.ops.runner import product, reflect, runner

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -84,3 +84,52 @@ def f():
intp2 = product(product(h0, h1), h2)

assert interpreter(intp1)(f)() == interpreter(intp2)(f)()


def test_runner_scopes():
@define(Operation)
def double(v):
raise RuntimeError("No Defaults")

@define(Operation)
def triple(v):
raise RuntimeError("No Defaults")

@define(Operation)
def sextuple(v):
raise RuntimeError("No Defaults")

def multiply_in_length():
return handler(
{
double: lambda v: [v, v],
triple: lambda v: [v, v, v],
}
)

def multiply_in_value():
return handler(
{
double: lambda v: v + v,
triple: lambda v: v + v + v,
}
)

def sextuple_as_double_triple(mode):
interp = {sextuple: lambda v: double(triple(v))}
if mode == "runner":
return runner(interp)
elif mode == "handler":
return handler(interp)

with multiply_in_length():
with sextuple_as_double_triple("runner"):
with multiply_in_value():
assert double(2) == 4
assert triple(3) == 9
assert sextuple(6) == [[6, 6, 6], [6, 6, 6]]
with sextuple_as_double_triple("handler"):
with multiply_in_value():
assert double(2) == 4
assert triple(3) == 9
assert sextuple(6) == 36

0 comments on commit 66f4c7e

Please sign in to comment.