diff options
| author | Elizabeth Hunt <me@liz.coffee> | 2026-02-21 12:29:54 -0800 |
|---|---|---|
| committer | Elizabeth Hunt <me@liz.coffee> | 2026-02-21 12:29:54 -0800 |
| commit | 170f5c496054c9c5c2df9b8a1c5c8df7643ea004 (patch) | |
| tree | 1ed217130939a04234761d54ba2ec607866f51ad /core/src/test/java/coffee/liz/abstractionengine | |
| parent | d6a294e14604aecd9046cbc19dc1837ca694fbb0 (diff) | |
| download | the-abstraction-engine-java-main.tar.gz the-abstraction-engine-java-main.zip | |
Diffstat (limited to 'core/src/test/java/coffee/liz/abstractionengine')
| -rw-r--r-- | core/src/test/java/coffee/liz/abstractionengine/grid/system/LambdaEvaluatorSystemTest.java | 43 |
1 files changed, 33 insertions, 10 deletions
diff --git a/core/src/test/java/coffee/liz/abstractionengine/grid/system/LambdaEvaluatorSystemTest.java b/core/src/test/java/coffee/liz/abstractionengine/grid/system/LambdaEvaluatorSystemTest.java index 6829417..b70f669 100644 --- a/core/src/test/java/coffee/liz/abstractionengine/grid/system/LambdaEvaluatorSystemTest.java +++ b/core/src/test/java/coffee/liz/abstractionengine/grid/system/LambdaEvaluatorSystemTest.java @@ -15,6 +15,7 @@ import coffee.liz.lambda.ast.SourceCode; import org.junit.jupiter.api.Test; import java.time.Duration; +import java.util.List; import java.util.Map; import java.util.Set; @@ -23,7 +24,7 @@ import static org.junit.jupiter.api.Assertions.assertInstanceOf; public class LambdaEvaluatorSystemTest { private static final Vec2<Integer> GRID_DIMENSIONS = Vec2i.builder().x(3).y(3).build(); - private static final SourceCode IDENTITY = SourceCode.ofArrow("(x -> x)(y)"); + private static final SourceCode IDENTITY_FUNCTION = SourceCode.ofArrow("x -> x"); private static final SourceCode FREE = SourceCode.ofArrow("z"); @Test @@ -31,8 +32,8 @@ public class LambdaEvaluatorSystemTest { final World<GridInputState> world = new DAGWorld<>(new GridIndexSystem(GRID_DIMENSIONS), new LambdaEvaluatorSystem(SourceCode.Syntax.ARROW)); - world.createEntity().add(new GridPosition(Vec2i.builder().x(1).y(1).build())).add(new LambdaTerm(IDENTITY)) - .add(new Substitution(Vec2i.EAST, Map.of("y", Vec2i.builder().x(0).y(0).build()))); + world.createEntity().add(new GridPosition(Vec2i.builder().x(1).y(1).build())).add(new LambdaTerm(IDENTITY_FUNCTION)) + .add(new Substitution(Vec2i.EAST, List.of(Vec2i.builder().x(0).y(0).build()))); world.createEntity().add(new GridPosition(Vec2i.builder().x(0).y(0).build())).add(new LambdaTerm(FREE)); world.update(GridInputState.builder().build(), Duration.ZERO); @@ -50,8 +51,8 @@ public class LambdaEvaluatorSystemTest { final World<GridInputState> world = new DAGWorld<>(new GridIndexSystem(GRID_DIMENSIONS), new LambdaEvaluatorSystem(SourceCode.Syntax.LAMBDA)); - world.createEntity().add(new GridPosition(Vec2i.builder().x(1).y(1).build())).add(new LambdaTerm(IDENTITY)) - .add(new Substitution(Vec2i.EAST, Map.of("y", Vec2i.builder().x(0).y(0).build()))); + world.createEntity().add(new GridPosition(Vec2i.builder().x(1).y(1).build())).add(new LambdaTerm(IDENTITY_FUNCTION)) + .add(new Substitution(Vec2i.EAST, List.of(Vec2i.builder().x(0).y(0).build()))); world.createEntity().add(new GridPosition(Vec2i.builder().x(0).y(0).build())).add(new LambdaTerm(FREE)); world.update(GridInputState.builder().build(), Duration.ZERO); @@ -68,8 +69,8 @@ public class LambdaEvaluatorSystemTest { final World<GridInputState> world = new DAGWorld<>(new GridIndexSystem(GRID_DIMENSIONS), new LambdaEvaluatorSystem(SourceCode.Syntax.ARROW)); - world.createEntity().add(new GridPosition(Vec2i.builder().x(1).y(1).build())).add(new LambdaTerm(IDENTITY)) - .add(new Substitution(Vec2i.EAST, Map.of("y", Vec2i.builder().x(0).y(0).build()))); + world.createEntity().add(new GridPosition(Vec2i.builder().x(1).y(1).build())).add(new LambdaTerm(IDENTITY_FUNCTION)) + .add(new Substitution(Vec2i.EAST, List.of(Vec2i.builder().x(0).y(0).build()))); world.update(GridInputState.builder().build(), Duration.ZERO); @@ -79,12 +80,12 @@ public class LambdaEvaluatorSystemTest { @Test public void testSpawnsInSubstitutionDirection() { - final Vec2<Integer> spawnMomentum = Vec2i.builder().x(0).y(-1).build(); + final Vec2<Integer> spawnMomentum = Vec2i.SOUTH; final World<GridInputState> world = new DAGWorld<>(new GridIndexSystem(GRID_DIMENSIONS), new LambdaEvaluatorSystem(SourceCode.Syntax.ARROW)); - world.createEntity().add(new GridPosition(Vec2i.builder().x(1).y(1).build())).add(new LambdaTerm(IDENTITY)) - .add(new Substitution(spawnMomentum, Map.of("y", Vec2i.builder().x(0).y(0).build()))); + world.createEntity().add(new GridPosition(Vec2i.builder().x(1).y(1).build())).add(new LambdaTerm(IDENTITY_FUNCTION)) + .add(new Substitution(spawnMomentum, List.of(Vec2i.builder().x(0).y(0).build()))); world.createEntity().add(new GridPosition(Vec2i.builder().x(0).y(0).build())).add(new LambdaTerm(FREE)); world.update(GridInputState.builder().build(), Duration.ZERO); @@ -94,4 +95,26 @@ public class LambdaEvaluatorSystemTest { final GridMomentum momentum = emittedTerms.iterator().next().get(GridMomentum.class); assertEquals(new GridMomentum(spawnMomentum), momentum); } + + @Test + public void testDependenciesAppliedInNumericOrder() { + final Vec2<Integer> firstDependencyPos = Vec2i.builder().x(0).y(0).build(); + final Vec2<Integer> secondDependencyPos = Vec2i.builder().x(2).y(0).build(); + final World<GridInputState> world = new DAGWorld<>(new GridIndexSystem(GRID_DIMENSIONS), + new LambdaEvaluatorSystem(SourceCode.Syntax.ARROW)); + + world.createEntity().add(new GridPosition(Vec2i.builder().x(1).y(1).build())) + .add(new LambdaTerm(SourceCode.ofArrow("f -> g -> f"))) + .add(new Substitution(Vec2i.EAST, List.of(firstDependencyPos, secondDependencyPos))); + world.createEntity().add(new GridPosition(firstDependencyPos)).add(new LambdaTerm(SourceCode.ofArrow("one"))); + world.createEntity().add(new GridPosition(secondDependencyPos)).add(new LambdaTerm(SourceCode.ofArrow("two"))); + + world.update(GridInputState.builder().build(), Duration.ZERO); + + final Set<Entity> emittedTerms = world.resolve(Query.allOf(GridMomentum.class, LambdaTerm.class)); + assertEquals(1, emittedTerms.size()); + final SourceCode emitted = emittedTerms.iterator().next().get(LambdaTerm.class).getTerm(); + final SourceCode.Arrow arrow = assertInstanceOf(SourceCode.Arrow.class, emitted); + assertEquals("one", arrow.source()); + } } |
