From d8b40e4240fb7f8c62fcd60c567ab386024741d3 Mon Sep 17 00:00:00 2001 From: Elizabeth Hunt Date: Sat, 31 Jan 2026 13:08:16 -0800 Subject: A sokoban inspired grid push demo --- .../src/test/java/coffee/liz/ecs/DAGWorldTest.java | 45 ++++++++++++++++++++++ 1 file changed, 45 insertions(+) (limited to 'core/src/test/java/coffee') diff --git a/core/src/test/java/coffee/liz/ecs/DAGWorldTest.java b/core/src/test/java/coffee/liz/ecs/DAGWorldTest.java index 2f948d0..a656d28 100644 --- a/core/src/test/java/coffee/liz/ecs/DAGWorldTest.java +++ b/core/src/test/java/coffee/liz/ecs/DAGWorldTest.java @@ -79,6 +79,24 @@ final class DAGWorldTest { assertTrue(world.query(Set.of(PositionComponent.class)).isEmpty()); } + @Test + public void queryFindsComponentsAddedByEarlierSystemInSameTick() { + final List> queryResults = new CopyOnWriteArrayList<>(); + + final Map>, System> systems = new LinkedHashMap<>(); + systems.put(ComponentAdderSystem.class, new ComponentAdderSystem()); + systems.put(ComponentReaderSystem.class, new ComponentReaderSystem(queryResults)); + final DAGWorld world = new DAGWorld<>(systems); + + final Entity entity = world.createEntity(); + entity.add(new PositionComponent()); + + world.update("state", Duration.ZERO); + + assertEquals(1, queryResults.size()); + assertEquals(Set.of(entity), queryResults.getFirst()); + } + @Test public void circularDependencyDetectionThrowsIllegalStateException() { final Map>, System> systems = new LinkedHashMap<>(); @@ -161,4 +179,31 @@ final class DAGWorldTest { public void update(final World world, final String state, final Duration duration) { } } + + private static final class ComponentAdderSystem implements System { + @Override + public Collection>> getDependencies() { + return List.of(); + } + + @Override + public void update(final World world, final String state, final Duration duration) { + world.query(Set.of(PositionComponent.class)).forEach(e -> e.add(new VelocityComponent())); + } + } + + @RequiredArgsConstructor + private static final class ComponentReaderSystem implements System { + private final List> queryResults; + + @Override + public Collection>> getDependencies() { + return Set.of(ComponentAdderSystem.class); + } + + @Override + public void update(final World world, final String state, final Duration duration) { + queryResults.add(world.query(Set.of(VelocityComponent.class, PositionComponent.class))); + } + } } -- cgit v1.2.3-70-g09d2